Das folgende Beispiel zeigt, wie Messwerte von einem LCD Multimeter über die
serielle Schnitstelle eingelesen werden und anschließend auf die Festplatte abgespeichert werden.
Lösung:
Wir fügen in „Instances“ das I/O Modul „COM Port“ ein und verbinden dies mit dem
Splitter „Register Variable“. Die Settings für das u.g. Multimeter lauten: 9600,8,N,1
Die „Split Using Cutchars“ stellen wir auf SOT und EOT weil der Datenstrom mit ASC(02)
beginnt und mit ASC(03) endet. Weitere Informationen entnehmen Sie bitte dem anliegenden PDF-Dokument.
Das Flag: „Flag_GDM_Log“ dient der Steuerung der Log-Datei.
Dieses Beispiel soll nur als Anregung für eigene Ideen dienen.
In unserem Haus setzen wir preiswerte Multimeter mit serieller Schnitstelle ein um die Leistungsdaten
der Solaranlage zu erfassen.
IP-Symcon speichert sie ab und gibt sie auf einer LED Anzeige (10cm hohe Zeichen) aus.
Bezugsquelle:
Conrad Electronic / Artikel-Nr.: 120700 / ca. € 130,-
PS:
Die im o.g. Skript verwendete Instance–ID muß für Ihre Umgebung angepasst werden. Benutzen Sie die Tastenkombination CTRL + I um InstanceID Selector zu öffnen und wählen Sie die entsprechende Instance aus.
Ich hab das Script mal mit meinen Multimeter (Metex M-3850M) ausprobiert. Irgendwie funzt das ganze nicht. In der Beschreibung meines Multimeters steht, das ein „D“ Befehl vom PC benötigt wird, wie sende ich diesen an das Multimeter und wo muß in den Script die Instanz-ID rein? Für deine Hilfe wäre ich dankbar.
Hallo
Ich versuch jetzt schon 2 Tage das Script zum Laufen zu bringen, aber ich kriegs nicht hin. Wie schon gesagt benötigt mein Messgerät ein „D“-Befehl um Daten senden zu können.
Das habe ich so gelöst:
Comport_SendText (62305, „D“);
Welche Variable muß in die Instanz „RegisterVariable“ geschrieben werden? Ich hab da IN_GDM als Variable reingeschrieben. Wenn ich das Script ausführe, bekomme ich als Kernel-Meldung
Ich versuch jetzt schon 2 Tage das Script zum Laufen zu bringen, aber ich kriegs nicht hin. Wie schon gesagt benötigt mein Messgerät ein „D“-Befehl um Daten senden zu können.
Das habe ich so gelöst:
Comport_SendText (62305, „D“);
was soll das bringen. Damit sendet du Daten zum Messgerät und empfängst keine.
Wie schon gesagt benötigt mein Messgerät ein „D“-Befehl um Daten senden zu können.
Da ist Sache von deinem Messgerät und nicht von IPS.
Comport anlegen nach CutChars verbinden und nach Registervariable verbinden.
In CutChars die entsprechenden Befehle vom Messgerät eingeben. z.B. STX-ETX und in Registervariable auswerten. Variable mit String anlegen und sehen was ankommt.
Auswertung ist dann jenachdem(messgerät) wie im angegebenen Link anzupassen.
Damit das Messgerät Daten senden kann, braucht es diesen „D“-Befehl. Im Link ist ein Basic-Beispiel, da wird dieser Befehl an das Meßgerät gesendet und dann kann das Meßgerät erst Daten liefern.
Instanzen habe ich angelegt und miteinander verbunden, aber in der Variable „IN_GDM“ kommt nix an.
Hallo
Alles funzt soweit, ich bin begeistert. Zwei Fragen hätte ich noch,eine zu Cutcharts, was macht dieses Teil eigentlich so richtig, in der Wiki habe ich nichts gefunden und gebraucht wird es bei mir auch nicht, die Daten kommen einwandfrei rüber ? Die zweite Frage wäre, kann man das Script so triggern, dass es nur dann ausgeführt wird, wenn sich der Meßwert ändert?
Zwei Fragen hätte ich noch,eine zu Cutcharts, was macht dieses Teil eigentlich so richtig, in der Wiki habe ich nichts gefunden und gebraucht wird es bei mir auch nicht, die Daten kommen einwandfrei rüber ?
CutChars, bereitet Daten auf. Jenachdem wie Daten vom Sender empfangen werden, kann man damit z.B, Steuerzeichen trennen.
Man ist nicht unbedingt auf CutChars angewiesen.
Die zweite Frage wäre, kann man das Script so triggern, dass es nur dann ausgeführt wird, wenn sich der Meßwert ändert?
Wenn es unkritisch ist, mit OnChange, Sonst mal mit $IPS_Value probieren.
Mit $IPS_Value hab ich noch nichts gemacht, kannst du das mal etwas näher erklären, was ich da genau machen muß, ich hatte einen Beitrag hier im Forum gelesen, dass du mit Hilfe von $IPS_VALUE eine Lösung zu eines deiner Scripte gefunden hast.
die Variable $IPS_VALUE ist, wie alle $IPS_xxx Variablen, eine System-Variable. Sie wird vom System gesetzt (daher der Name) und steht für das Skript sofort zur Verfügung, muss also nicht erst eingelesen werden.
$IPS_VALUE enthält den Wert der Trigger-Variablen zum Zeitpunkt des Triggers.
Nehmen wir an, eine Registervariable namens „Data“ nimmt die Meldungen einer Seriellen Schnittstelle auf. Bei 9600 Baud benötigt ein Byte ca. 1ms. Das bedeutet, dass in 100ms etwa 100 Bytes übermittelt sein können. Wann der Trigger tatsächlich ausgelöst wird, hängt davon ab, wann das Betriebssystem (Windows) wieder einmal ein paar Bytes aus dem Puffer der Schnittstelle in die Registervariable verschiebt und ist daher ein bisschen vom Zufall abhängig.
Während der Abarbeitung des Skripts können weitere Daten eintreffen. Wenn das Skript nach einer Laufzeit von einigen Millisekunden die Registervariable mit GetValueString(…) ausliest, kann ihr Inhalt bereits wieder überschrieben sein. Man erhält also Daten, mit denen man noch gar nicht gerechnet hat, schlimmer noch: die erwarteten Daten sind verloren.
Diesem Datenverlust kann man vorbeugen, indem man die Trigger-Variable (hier „Data“) nicht selbst ausliest, sondern die System-Variable $IPS_VALUE verwendet.