Hi!
Für ein Laborgerät soll die BCC (Block Check Character) Prüfsumme berechnet werden. Grundsätzlich ergibt sich diese durch XOR aller Zeichen zwischen <STX> und <ETX>, wobei <ETX> ebenfalls einbezogen wird. Der Hersteller gibt die Berechnung wie folgt an:
Der Hersteller hat auch noch eine Testdaten angegeben:
Allerdings erhalte ich als Prüfsumme immer "7A" (Hex). Mein Code:
Ich hab auch versucht im Netz etwas dazu zu finden, aber alle Lösungen führen zu einem XOR wie bei mir.
Beispiel 2 (ACHTUNG: <ETB> statt <ETX>)
Im Anhang ist das File "test.txt" zu finden, das sind die Daten von Beispiel 1 mit dennen ich es versucht habe.
Kann mir irgendjemand helfen die Checksumme zu berechnen?
LG
Domsi
EDIT: Die Checksumme findet man jeweils nach <ETX> bzw. <ETB>
Für ein Laborgerät soll die BCC (Block Check Character) Prüfsumme berechnet werden. Grundsätzlich ergibt sich diese durch XOR aller Zeichen zwischen <STX> und <ETX>, wobei <ETX> ebenfalls einbezogen wird. Der Hersteller gibt die Berechnung wie folgt an:
The BCC is a 2 digit checksum calculated using the Exclusive OR (Xor) of all the characters in the transmitted or
received message between (but NOT including) <STX> and <ETX>.
Der Hersteller hat auch noch eine Testdaten angegeben:
<STX>2||20021211163215|3^005^3<CR>
R|3|^^^300|0.97|INR||L||X||OP1||20021211163215|5^004^1<CR>
R|4|^^^300|112.2|||L||X||112||20070808181200|9<CR>
C|1|I|1017^probe temperature warning|I<CR>
L|1|N<ETX>EE<CR><LF>
Allerdings erhalte ich als Prüfsumme immer "7A" (Hex). Mein Code:
VB.NET-Quellcode
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
- Dim Test As String = ""
- Dim BCC As String = ""
- Test = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "/test.txt", System.Text.Encoding.Default)
- Test = Test.Substring(Test.IndexOf(ChrW(2)) + 1)
- Test = Test.Substring(0, Test.IndexOf(ChrW(3)) + 1)
- BCC = GetBCC(System.Text.Encoding.Default.GetBytes(Test))
- End Sub
- Public Shared Function GetBCC(inputStream As Byte()) As String
- Dim bcc As Byte = 0
- If inputStream IsNot Nothing AndAlso inputStream.Length > 0 Then
- For i As Integer = 0 To inputStream.Length - 1
- bcc = bcc Xor inputStream(i)
- Next
- End If
- Return Hex(bcc)
- End Function
Ich hab auch versucht im Netz etwas dazu zu finden, aber alle Lösungen führen zu einem XOR wie bei mir.
Beispiel 2 (ACHTUNG: <ETB> statt <ETX>)
<STX>1H|@^\|1025080549_50||7|||||LIS-HOST-06||P|1394-
97|20000614080624<CR>
P|1|||||||<CR>
O|1|444|108315|^^^300|R|20040420094213|||||Q||||3^56656|003|||||||||F<CR>
R|1|^^^300|106.01|%||N||F||OP1||20021211163215|0^001^5<CR>
R|2|^^^300|12.65|sec||N||P||OP1<ETB>D5<CR><LF>
Im Anhang ist das File "test.txt" zu finden, das sind die Daten von Beispiel 1 mit dennen ich es versucht habe.
Kann mir irgendjemand helfen die Checksumme zu berechnen?
LG
Domsi
EDIT: Die Checksumme findet man jeweils nach <ETX> bzw. <ETB>
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Domsi“ ()