Ich verwende einen alten Draeger PAC III-Sensor, um Gaskonzentrationen zu messen, mit dem Ziel, die Daten über Arduino fernzuübertragen. Dementsprechend kann ich die proprietäre Software nicht verwenden, um die Systeminformationen/Daten auszugeben. Obwohl das System von der Firma „ausgemustert“ wurde und nicht mehr verkauft/verteilt wird, werden ihre Techniker das Datenblatt für die Kommunikation auf dem Gerät nicht bereitstellen.
Um dies zu umgehen, versuche ich, einen seriellen Port-Monitor zu verwenden, um die COM zwischen dem Gerät und dem PC zu lesen. Der PC kommuniziert über einen RS-232-Anschluss, verwendet jedoch nur Masse und eine kombinierte Tx/Rx-Leitung, um Daten vom Gerät zu erhalten. Um die Kommunikation zu aktivieren, beginnen alle geschriebenen Daten mit einem High (01). Alle gelesenen Daten duplizieren die geschriebenen Daten und fügen dann Gerätedaten hinzu. Der erste Befehl ist immer „Initiiere Kommunikation durch Identifizierung“, auch bekannt als die ersten 4 Datenblöcke. Ich kann nur davon ausgehen, dass die verbleibenden Daten die Zeit kommunizieren, aber ich verstehe nicht, wie ich sie entschlüsseln soll. Wenn Endian verwendet/benötigt wird, wie kann ich das tun? Vielen Dank im Voraus!
Gemäß den gemeldeten Werten des proprietären Programms:
[03/08/2019 16:44:22] Written data (COM4)
01 01 01 02 00 05 ......
[03/08/2019 16:44:22] Read data (COM4)
01 01 01 02 00 05 01 01 01 26 02 34 35 33 30 30 .........&.45300
31 31 20 20 20 45 52 58 4c 2d 30 31 36 32 20 20 11 ERXL-0162
20 20 34 35 33 30 32 37 30 76 33 2e 35 30 07 3b 4530270v3.50.;
[03/08/2019 16:44:23] Written data (COM4)
01 01 01 02 00 05 ......
[03/08/2019 16:44:23] Read data (COM4)
01 01 01 02 00 05 01 01 01 26 02 34 35 33 30 30 .........&.45300
31 31 20 20 20 45 52 58 4c 2d 30 31 36 32 20 20 11 ERXL-0162
20 20 34 35 33 30 32 37 30 76 33 2e 35 30 07 3b 4530270v3.50.;
[03/08/2019 16:44:23] Written data (COM4)
01 01 02 02 00 06 ......
[03/08/2019 16:44:23] Read data (COM4)
01 01 02 02 00 06 01 01 02 07 89 28 01 0d 38 01 ..........‰(..8.
02 .
[03/08/2019 16:44:23] - Close port COM4
Bearbeiten: Zwei weitere Zeitstempel wie gewünscht
Time: 1:02 4/9/2008
[03/08/2019 20:04:30] Read data (COM4)
01 01 02 02 00 06 01 01 02 07 89 28 01 02 28 00 ..........‰(..(.
e7 ç
Time: 1:04 4/9/2008
[03/08/2019 20:05:50] Read data (COM4)
01 01 02 02 00 06 01 01 02 07 89 28 01 04 00 00 ..........‰(....
c1 Á
Hier ist eine Hypothese des Zeitteils der Daten:
Aus der ursprünglichen Datenerfassung:01 0d 38 01 02
Wir wissen, dass die Zeit als 01:13 angezeigt wurde. Das ist das 01 0d
und ich glaube, das nächste Byte 38
ist wahrscheinlich der Sekundenwert, aber das wird nicht angezeigt.
Ich erwäge, dass die letzten 2 Bytes auf jedem "Paket", das vom Gerät gesendet wird, eine Prüfsumme sein können (dies ist ein üblicher Ansatz). Das erklärt, warum die letzten 2 Bytes der ersten beiden Pakete gleich sind ( 07 3b
) - da die Daten in beiden Paketen gleich sind. Dann hat das nächste Paket (das erste Daten- und Zeitbeispiel) unterschiedliche Werte für die letzten 2 Bytes.
Aus einer der zusätzlichen Datums-/Zeiterfassungen:01 02 28 00 e7
Nach meiner ersten Interpretation oben ist die angezeigte Zeit 01:02, das ist (nicht überraschend) die 01 02
und auch 40 Sekunden (hex 28
) mit einer 00 e7
Prüfsumme für das gesamte "Paket".
Hier ist eine übergeordnete Hypothese der Paketdecodierung:
Am Beispiel des ursprünglichen Datums-/Uhrzeitpakets:
01 01 02 02 00 06 01 01 02 07 89 28 01 0d 38 01 02
Der ursprüngliche Befehl ist der führende, 01 01 02 02 00 06
wo der eigentliche Befehl ist 01 01 02
, dann ist die Anzahl der folgenden Bytes (einschließlich Prüfsumme) 02
und dann gibt es eine Prüfsumme für diesen "Befehl" - 00 06
.
Die Antwort beginnt mit den nächsten Bytes: 01 01 02
(sagt uns vielleicht, auf welchen Befehl dies eine Antwort ist, für eine Plausibilitätsprüfung durch den Master/PC). Dann gibt es 07
folgende Bytes (einschließlich Prüfsumme) - 89 28 01 0d 38 01 02
.
Wie ich bereits angedeutet habe, vermute ich, dass die Werte in Hex 01 0d 38
sind . hh mm ss
Der Schluss 01 02
ist eine Prüfsumme.
Das bedeutet, dass das tatsächliche Datum89 28
nur in den zwei verbleibenden Bytes in diesem Datenpaket codiert werden kann .
Meine Hypothese zu diesem Zeitpunkt ist, dass diese zwei Bytes 89 28
ein Little-Endian-Tageszählerwert sein könnten, was bedeutet, dass es sich tatsächlich um 28 89
(Hex)-, dh 10377 (Dezimal-)Tage handeln könnte. Wenn das stimmt, dann scheint der 9. April 2008 - 10377 Tage der 11. November 1979 zu sein. Keine unangemessene "Epoche".
(Das ist viel vernünftiger, als wenn ich die Bytes als Big-Endian behandle, 89 28
Hex in Dezimal (35112) umwandle und so viele Tage vom 9 viel weniger sinnvoll für ein modernes Gerät.)
Wenn Sie warten können, bis sich das Datum (dh der Tag) auf der internen Uhr des Geräts ändert, können wir sehen, ob sich der Datumswert tatsächlich in diesen Antwortbytes von bis ändert, was bestätigen würde, dass es sich um einen Little-Endian- 89 28
Tageszähler 8a 28
handelt Wert, der vom Gerät gesendet und von der PC-Software als Anzeigedatum im normalen Format interpretiert wird.
Oder Sie könnten versuchen, der PC-Software einen modifizierten Datensatz zuzuführen und diese zwei Bytes zu ändern, von denen ich glaube, dass sie das Datum codieren, und sehen, was die PC-Software anzeigt. Das Problem ist die (was ich glaube) Prüfsumme auf jedem Paket. Das macht es schwierig (wahrscheinlich unmöglich), modifizierte Daten in die PC-Software einzuspeisen, bis Sie den Prüfsummenalgorithmus haben und die Prüfsummenbytes korrekt modifizieren können, wenn Sie die Datenbytes modifizieren.
Das Auffinden des Prüfsummenalgorithmus erwies sich als einfacher als erwartet.
Die letzten 2 Bytes in jedem Paket, sowohl die 6 Byte "gesendeten" Datenpakete als auch die längeren "empfangenen" Datenpakete (aber nur die wirklichen "empfangenen" Daten, die mit dem 7. Byte in dieser gemischten gesendeten + empfangenen Datenerfassung beginnen ) sind in der Tat eine Prüfsumme .
Es ist buchstäblich die Summe aller Bytes (aber natürlich ohne die Prüfsumme selbst) im Big-Endian-Format (dh MSB, dann LSB).
(Alle Beispiele unten sind in Hex.)
An den gesendeten Datenpaketen ist dies beispielsweise gut zu erkennen:
01 01 01 02 00 05
=> 01
+ 01
+ 01
+ 02
= 0005
01 01 02 02 00 06
=> 01
+ 01
+ 02
+ 02
=0006
Im ersten Datums- und Zeitpaket (ohne die 6 Bytes "gesendete Daten" am Anfang):
01 01 02 07 89 28 01 0d 38 01 02
=> 01
+ 01
+ 02
+ 07
+ 89
+ 28
+ 01
+ 0d
+ 38
=0102
Mit diesen Informationen ist es Ihnen nun möglich, ein modifiziertes Datenpaket zu erstellen und es mit einer gültigen Prüfsumme an die PC-Software zu senden, um zu sehen, wie diese Daten angezeigt werden. Wie bereits erwähnt, sind die Bytes, auf deren Änderung Sie sich konzentrieren müssen (um Ihnen zu helfen, ihre Bedeutung zu verstehen und meine Hypothese zu bestätigen oder zu verneinen, dass es sich um einen Tageszähler handelt), diejenigen, die 89 28
in den echten Datums- und Zeitpaketen enthalten sind.
Ron Beyer
Janka
Forschung8472
Chris Stratton
Forschung8472
Forschung8472
Chris Stratton
Forschung8472