Ansteuerung des Umwelt-Spions mit Visual Basic

(1.11.01)

Der Spion ist ein vielseitiges Gerät, für das es noch viel zu entwickeln gilt. Deshalb ist es an der Zeit, sich mit der Kommunikation zwischen PC und Spion auseinanderzusetzen. Hier wird allen Anwendern die Möglichkeit gegeben, auch eigene Programme zu entwickeln.

Der Spion hat ein relativ einfaches Protokoll mit einer überschaubaren Anzahl von Kommandos. Alle Kommandos können sowohl im Offline-Modus wie auch im Programm-Modus verwendet werden. Im Betirebsprogramm des Geräts werden alle Kommandos entweder online über die RS232 entgegengenommen oder offline aus dem Speicher geholt. Das bedeutet, dass das gleiche Kommando einmal z.B. einen Messwert vom Temperatursensor online abfragt und im Programmbetrieb offline misst. Es gibt nur einen Unterschied: Im autonomen Betriebsmodus gelangt der Messwert nur in den Speicher A (= Akku). Im Online-Modus wird er zusätzlich an den angeschlossenen Rechner gesendet.

Akku laden über die RS232

Die serielle Schnittstelle des Spions arbeitet mit 9600 Baud, 8 Datenbits, 1 Stoppbit und ohne Parity. Über die Handshakeleitungen DTR und RTS steuert man das Aufladen des internen Akkus und den Prozessor-Reset. Der Akku hat die Daten 3,6V/60mA/h. Damit er korrekt geladen wird, sollte die serielle Schnittstelle die übliche Spannung von 10...12V abgeben. RTS liefert über einen Widerstand von 4,7 k einen Ladestrom von ca. 1 mA an den Akku. Eine positive Flanke an RTS löst einen Prozessor-Reset aus. DTR liefert über eine Widerstand von 0,5 k einen Ladestrom von ca. 10 mA an den Akku.

Bei der Akkukapazität von 60 mAh kann der Akku in etwa 12 Stunden am PC voll geladen werden, wenn das Programm Spy aktiv ist. Die Ladung reicht für ca. 60 Stunden Offline-Betrieb aus. Eigene Online-Programme können mit DTR = 0 und RTS = 1 eine Ladungserhaltung im laufenden Betrieb durchführen. Man kann die Batteriespannung grob messen und ein entsprechendes Ladeprogramm bauen, das zwischen Schnellladung und Erhaltungsladung unterscheidet. Das folgende Programm in VB verzichtet auf eine Messung und verwendet nur eine reine Steuerung der Schnittstellenleitungen DTR und RTS. Die Kommunikation über die RS232 setzt die Verwendung einer speziellen DLL voraus. Hierzu kann z.B. die bekannte RSAPI.DLL verwendet werden.

Dim D, R



Private Sub Command1_Click()

DTR 1

D = 5

Label1.Caption = Str$(D + R) + " mA"

End Sub



Private Sub Command2_Click()

DTR 0

D = 0

Label1.Caption = Str$(D + R) + " mA"

End Sub



Private Sub Command3_Click()

RTS 1

R = 1

Label1.Caption = Str$(D + R) + " mA"

End Sub



Private Sub Command4_Click()

RTS 0

R = 0

Label1.Caption = Str$(D + R) + " mA"

End Sub



Private Sub Form_Load()

 OPENCOM "COM2:9600,N,8,1"

 DTR 0

 RTS 1

End Sub

Ein Ladeprogramm für den Sion

Dieses erste Beispiel kommt noch ohne eine wirkliche Datenübertragung zum Spion aus, weil nur die Batterie geladen werden soll. Alle weiteren Funktionen des Spions erfordern aber die Übertragung einzelner Bytes über die serielle Schnittstelle.

Das Spion-Protokoll

Abfrage- und Steuerkommandos sind einzelne Bytes, also ganze Zahlen im Bereich 0 bis 255. Im Direktmodus wird jedes Kommando mit einem Echo beantwortet. Ein Beispiel: Der PC sendet den Befehl 14, der Spion erzeugt einen Signalton und sendet ein Byte 14 als Bestätigung zurück. Einige Kommandos benötigen einen Parameter als ein zweites Byte, das nach dem eigentlichen Befehl gesendet wird. In diesem Fall wird nur das zweite Byte zur Bestätigung zurückgesandt. Der Befehl 14 kann aber auch in einem Programm vorkommen. In diesem Fall wird er aus dem internen EEPROM des Prozessors gelesen und ausgeführt aber nicht mit einem Echo bestätigt.

Programme werden mit einzelnen Programmierkommandos in das interne EEPROM des Prozessors geschrieben. Sie werden durch einen besonderen Startbefehl an ihrer Startadresse gestartet. Es können mehrere kurze Programme im Speicher vorhanden sein und gezielt gestartet werden.

Außer dem Direktmodus und dem Programmodus existiert noch der Messserien-Modus für den Einsatz des Spions als autonomen Datenlogger. Der Messmodus wird mit einem besonderen Kommando gestartet und erhält einige Parameter zur Zeiteinstellung und zur Wahl des aktiven Eingangs. Die Messung wird direkt gestartet. Mit ihrem Ende sendet der Spion ein Byte zur Bestätigung. Die Daten können dann durch direktes Lesen von EEPROM-Adressen in den PC übertragen werden.

Der Spion speichert den aktuellen Zustand Direktmodus, Programmmodus oder Messmodus. Man kann daher eine laufende Messung mit dem Reset-Taster unterbrechen und mit einem erneuten Reset wieder starten. Das selbe gilt für ein Programm. Dies eröffnet die Möglichkeit, Einstellungen oder Programme dauerhaft im Gerät bereitzuhalten. Ein Programm oder eine Messung kann mit Reset unterbrochen werden. Der Spion geht dann in den Direktmodus und schaltet sich nach ca. 2 Minuten selbst aus, so dass kein Strom mehr verbraucht wird. Bei Bedarf kann er jedoch auch nach Wochen und Monaten mit einem neuen Druck auf den Resetknopf wieder mit der letzen Einstellung gestartet werden. Er führt dann das zuletzt gespeicherte Programm aus oder beginnt eine neue Messserie mit den zuletzt verwendeten Einstellungen.

Im Direktmodus führt das Kommando 1 zu einer Rückmeldung des Spions mit der Antwort 32. Dies ist die Kennung des Geräts und kann von einer Software verwendet werden, um zwischen mehreren unterschiedlichen Interfaces zu unterscheiden. Gleichzeitig führt das Kommando 1 aber auch zu einer Initialisierung des Spions im Direktmodus. Ein zuvor verwendetes Programm oder eine Messserie ist also nicht mehr aktiv.

Die folgende Übersicht zeigt alle verfügbaren Kommandos.

Kennung



1       Interface-Kennung : Antwort = 32 (Nur im Direktmodus)



Zuweisungen



2,n     A=n  

3,n     B=n

4,n     C=n

5,n     D=n

6       A=B

7       B=A

8       C=A

9       D=A



Ausgaben



10      Ausgang=1

11      Ausgang=0

12      LED=1

13      LED=0

14      Beep

15      Print A (Byteausgabe an RS232)

16      Lärm-Power-Off

17      LED blinkt im Sekundentakt



Eingaben, analog



20      A=Spannung

21      A=Licht

22      A=Temperatur

23      A=Widerstand

24      A=Lärm          (incl Lärm-Power-ON) 

25      A=Ubat

digital

26      A=Eingang

RS232:

27      Input A         (Byte von RS232)

        

Programmverzweigungen



30,n    goto n

31,n    C=C-1: if C>0 goto n

32,n    pause n

33      end

34,n    if A=B goto n

35,n    if A>B goto n

36,n    if A<B goto n

37,n    D=D-1: if D>0 goto n

        

Rechnen



40      A=A+B

41      A=A-B

42      A=A+1

43      A=A-1





EEPROM



50,adr  PutEE   Ein Byte ins EEPROM an adr laden

51,adr          Programm im EEPROM ab adr starten

                Speicherbelegung; 1, max 63 Basic-Tokens

52,adr GetEE    Byte von Adr. aus dem EEPROM lesen      





Messserie



53      Messserie starten

Speicherbelegung: Kanal 20..24, Time-Hi, Time-Lo, 61 

Messwerte





Abschalten



128     Power down < 1µA, Aufwecken mit Reset (RTS-Hi-Flanke)

Die Kenntnis dieser Kommandos ermöglicht das Schreiben eigener Programme für den Spion. Beim Start eines Programms sollte jeweils ein Reset ausgeführt werden. Dazu muss man RTS einmal herunter- und wieder hochschalten. Dabei kann der Spion über seine Sendeleitung einen Impuls aussenden, der vom PC als Empfangsbytes gewertet wird. Man muss also mit Readbyte dieses Byte abholen. Das Senden eines Bytes 1 veranlasst den Spion zu einem Software-Reset, der ihn aus einem eventuellen Programm-Modus holt. Er antwortet mit seinem Kennungsbyte, das ebenfalls abgeholt werden muss.

Sensoren abfragen in Visual Basic

Das folgende Visual Basic Programm soll alle Sensoren abfragen und korrekt darstellen. Man muss dabei beachten, dass für den Lärmsensor eine Betriebsspannung des Mikrofonverstärkers erst eingeschaltet wird. Sie muss auch wieder ausgeschaltet werden, um die anderen Sensoren nicht zu stören. Dies geschieht durch das Kommando 16.

Die Auswertung der Sensoren erfolgt in eigenen Funktionen. Es wird jeweils das Kommando für den jeweiligen Sensor gesendet. Das Ergebnisbyte wird dann umgerechnet. Die eigentlichen Rechenschritte wurden bereits oben in Kap. 13 erläutert. Eine Sonderstellung nimmt der Lärmsensor ein. Die Messung muss zweimal hintereinander ausgeführt werden, weil beim ersten mal zunächst die Betriebsspannung des Verstärkers eingeschaltet wird. Der Verstärker braucht dann einige Millisekunden zum Einschwingen. Für den Lärmsensor existiert keine eigentliche Umrechnung. Der Geräuschpegel wurde daher in Prozent der Vollaussteuerung angegeben.

Private Sub Form_Load()

    OPENCOM ("COM2:9600,N,8,1")

    RTS 0

    DELAY 10

    RTS 1       'Reset

    DELAY 10

    DTR 0

    d = READBYTE

    SENDBYTE 1

    d = READBYTE

End Sub



Private Sub Form_Unload(Cancel As Integer)

   CLOSECOM

End Sub

Private Function Spannung()

  SENDBYTE 20

  d = READBYTE

  d = d / 255 * 4.4

  Spannung = Int(d * 10) / 10

End Function



Private Function Licht() As Variant

  SENDBYTE 21

  d = READBYTE

  If d > 0 Then

  R = (255 * 10 - 10 * d) / d

  If R < 0.1 Then R = 0.1

  p = -1.042 / 0.015

  q = (Log(1350 / R)) / 0.015

  x = -p / 2 - Sqr(p * p / 4 - q)

  e = Exp(x)

  Licht = Int(e)

  End If



End Function



Private Function Temp() As Variant

  SENDBYTE 22

  d = READBYTE

  If d > 0 Then

  R25 = 10

  R = (255 * R25 - R25 * d) / d

  If R < 0.1 Then R = 0.1

  t = 1 / (Log(R / 10) / 4300 + 1 / 298) - 273

  Temp = Int(t * 10) / 10

  End If

End Function



Private Function Widerstand()

  SENDBYTE 23

  d = READBYTE

  If d = 255 Then d = 254

  If d > 0 Then

  R = 10 * d / (255 - d)

  Widerstand = Int(R * 100) / 100

End If

End Function



Private Function Laerm()

  SENDBYTE 24

  d = READBYTE

  DELAY 20

  SENDBYTE 24

  d = READBYTE

  d = d * 1.2

  Laerm = Int(d)

  SENDBYTE 16

  d = READBYTE

  DELAY 10

  d = READBYTE

End Function



Private Function Ubat()

  SENDBYTE 25

  d = READBYTE

  d = d / 10 + 0.4

  Ubat = Int(d * 10) / 10

End Function



Private Sub Timer1_Timer()

  Text1.Text = Str$(Temp) + "°C"

  Text2.Text = Str$(Licht) + " lux"

  Text3.Text = Str$(Spannung) + " V"

  Text4.Text = Str$(Widerstand) + " kOhm"

  Text6.Text = Str$(Ubat) + " V"

  Text5.Text = Str$(Laerm) + " %"  'zuletzt

End Sub

Abfrage und Ausgabe aller Sensordaten des Spions

Das Programm liefert einmal in der Sekunde neue Daten von allen Sensoren. Man hat hier ein universelles Messgerät für die unterschiedlichsten Aufgaben. Es muss beachtet werden, dass Spannungsmessung und Widerstandsmessung den gleichen Eingang verwenden. Beim Anschluss eines Widerstands wird die Spannung als Null angezeigt. Wenn allerdings eine externe Spannungsquelle angeschlossen wird, zeigt auch der Widerstandseingang ein Ergebnis, das natürlich nicht gewertet werden kann.

Die hier vorgestellten Programme können auch direkt geladen werden: SpionVB.Zip (32k)

Literaturhinweis: B. Kainka, Messen, Steuern, Regeln mit dem PC in Haus und Garten, Franzis-Verlag 2000
Weite Teile dieses Artikels und die Programmbeispiele wurden aus diesem Buch entnommen.

B.K.


Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus