CBRA
Level-1
- Beiträge
- 22
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo zusammen,
ich möchte ein externes Telegramm auslesen und in ein separaten DB (UDF basiert) speichern.
Das empfangene Telegramm besteht aus mehreren Einzeltelegrammen. (Kopf / Füllen / Stabilisieren / Messen / Entlüften /Ende)
Jedes Telegramm hat als ersten Byte das s.g. Startbyte mit der Kennung 013 (0Dh). Das zweite Byte gibt die Länge der Datenbyte an. Im dritten Byte steht die Telegrammnummer welche die Inhalt klassifiziert. Die letzen beiden Bytes sind Prüfsummen. Zwischen der Telegrammnummer und den beiden Prüfsummen-Byte, stehen die Daten die auswertbar sind.
Meine Idee ist nun z.B., das eine Routine das Byte mit dem Inhalt 013 (0Dh), das vorgegebene zweite Byte (z.B. 004 (04h)) und das dritte Byte (z.B. 139 (8Bh)) als Kombination sucht. Wenn diese Kombination (013 (0Dh) 004 (04h) 139 (8Bh)) gegeben bzw. gefunden ist, soll das vierte bis sechste Byte (z.B. 000 (00h) 005 (05h) 000 (00h)) in einem separaten DB gespeichert werden.
Der separate DB soll das ersten Ergebnis ( z.B. 000 (00h) 005 (05h) 000 (00h)) gespeichern. Im Klartext lautet mein Beispiel „005 Pa“ als Messergebnis.
Sollte ein weiteres Ergebnis kommen ( z.B. 000 (00h) 006 (06h) 000 (00h)), dann soll dieses vor das zuletzt empfangene Ergebnis geschrieben werden.
Wenn die maximale Anzahl (z.B. 100 Ergebnisse) erreicht wurde, soll das älteste Ergebnis gelöscht werden und somit Platz für das neue Ergebnis geben. Somit kann ein definierter Platzbedarf vorgesehen werden und die Auswertung via HMI ist in Tabellenform leichter.
Die Ergänzung durch weitere Bytes ist natürlich denkbar und vorteilhaft. Hierbei denke ich an den Zeitstempel der im Ergebniskopf steht. Ein Array bestehend aus den u.a. und rot und fett markierten Bytes. Die grün und unterstrichen markierten Bytes sind Anzeigeformen, d.h. Kommastelen.
013 012 135 001 000 000 001 000 022 007 009 020 021 011 030 024 188 (Datum+Uhrzeit)
013 004 136 000 000 005 036 016 037 (Druckangabe)
013 004 137 000 000 005 036 208 024 (Druckangabe)
013 004 139 000 005 000 003 091 050 (Messergebnis plus Maßeinheit)
013 004 140 000 000 005 036 208 212 (Druckangabe)
013 000 143 167 161 (Ende)
Das letzte Telegramm „013 (0Dh) 000 (00h) 143 (8Fh) 167 (A7h) 161 (A1h)“ ist beim Empfang der Ergebnisse immer gleich, daher könnte es als Signalmerker dienen.
Leider erhalte ich einen STOP-Zustand in meiner Anlage.
Kann einer sich die Anlage mal anschauen? :sm17:
ich möchte ein externes Telegramm auslesen und in ein separaten DB (UDF basiert) speichern.
Das empfangene Telegramm besteht aus mehreren Einzeltelegrammen. (Kopf / Füllen / Stabilisieren / Messen / Entlüften /Ende)
Jedes Telegramm hat als ersten Byte das s.g. Startbyte mit der Kennung 013 (0Dh). Das zweite Byte gibt die Länge der Datenbyte an. Im dritten Byte steht die Telegrammnummer welche die Inhalt klassifiziert. Die letzen beiden Bytes sind Prüfsummen. Zwischen der Telegrammnummer und den beiden Prüfsummen-Byte, stehen die Daten die auswertbar sind.
Meine Idee ist nun z.B., das eine Routine das Byte mit dem Inhalt 013 (0Dh), das vorgegebene zweite Byte (z.B. 004 (04h)) und das dritte Byte (z.B. 139 (8Bh)) als Kombination sucht. Wenn diese Kombination (013 (0Dh) 004 (04h) 139 (8Bh)) gegeben bzw. gefunden ist, soll das vierte bis sechste Byte (z.B. 000 (00h) 005 (05h) 000 (00h)) in einem separaten DB gespeichert werden.
Der separate DB soll das ersten Ergebnis ( z.B. 000 (00h) 005 (05h) 000 (00h)) gespeichern. Im Klartext lautet mein Beispiel „005 Pa“ als Messergebnis.
Sollte ein weiteres Ergebnis kommen ( z.B. 000 (00h) 006 (06h) 000 (00h)), dann soll dieses vor das zuletzt empfangene Ergebnis geschrieben werden.
Wenn die maximale Anzahl (z.B. 100 Ergebnisse) erreicht wurde, soll das älteste Ergebnis gelöscht werden und somit Platz für das neue Ergebnis geben. Somit kann ein definierter Platzbedarf vorgesehen werden und die Auswertung via HMI ist in Tabellenform leichter.
Die Ergänzung durch weitere Bytes ist natürlich denkbar und vorteilhaft. Hierbei denke ich an den Zeitstempel der im Ergebniskopf steht. Ein Array bestehend aus den u.a. und rot und fett markierten Bytes. Die grün und unterstrichen markierten Bytes sind Anzeigeformen, d.h. Kommastelen.
013 012 135 001 000 000 001 000 022 007 009 020 021 011 030 024 188 (Datum+Uhrzeit)
013 004 136 000 000 005 036 016 037 (Druckangabe)
013 004 137 000 000 005 036 208 024 (Druckangabe)
013 004 139 000 005 000 003 091 050 (Messergebnis plus Maßeinheit)
013 004 140 000 000 005 036 208 212 (Druckangabe)
013 000 143 167 161 (Ende)
Das letzte Telegramm „013 (0Dh) 000 (00h) 143 (8Fh) 167 (A7h) 161 (A1h)“ ist beim Empfang der Ergebnisse immer gleich, daher könnte es als Signalmerker dienen.
Leider erhalte ich einen STOP-Zustand in meiner Anlage.
Kann einer sich die Anlage mal anschauen? :sm17: