KAPITEL 18. LUA ANALYSER ERWEITERUNGEN
Dev
Fnc
Dieses Modbus Telegramm instruiert einen Busteilnehmer eine 16-Bit Zahl in
das angegebene Register zu schreiben. Das Register ist adressiert mit einer
16-Bit Nummer. Die Registeradresse ist in dem 3ten und 4ten Byte, der Regis-
terwert im 5ten und 6ten Byte. Die letzten beiden Bytes enthalten eine CRC16
Prüfsumme. Alle Bytefolgen sind im Big-Endian Format abgelegt.
Mit bunpack können Sie alle nötigen Informationen (u.a. Registeradresse, -
Wert und Prüfsumme) in einem einzigen Schritt extrahieren.
1
function o u t ( )
2
e x t r a c t t h e b i n a r y data o f a Modbus ASCII t e l e g r a m
3
l o c a l t g = t e l e g r a m s . t h i s ( )
4
assume i t s a W r i t e S i n g l e R e g i s t e r t e l e g r a m
5
l o c a l pos , dev , fnc , reg , v a l , c r c = bunpack ( t g : s t r i n g ( ) , " bb>H>H>H" , 1 )
6
end
7
end
Die Umwandlung (oder Extraktion) startet mit dem ersten Byte der Sequenz
(Position 1) und interpretiert die folgenden Bytes gemäß der Instruktionen im
Formatstring. Am Ende liefert die Funktion die Position für nachfolgende bunpack
Aufrufe (pos) und füllt alle übrigen Varaiblen auf der linken Seite des Ausdrucks
mit den einzelnen Umwandlungsergebnissen.
Dev
Fnc
B
B
Die Anzahl der Variablen auf der linken Seite muss nicht exakt der vom For-
matstring geforderten Ergebnisse entsprechen. Lua sorgt dafür, das nur die
vorhandenen Variablen 'gefüllt' werden. Der folgende Code ist deshalb völlig
korrekt, läßt aber das Ergebnis der CRC16 Umwandlung unberücksichtigt.
l o c a l pos , dev , fnc , reg , v a l = bunpack ( t g : s t r i n g ( ) , " bb>H>H>H" , 1 )
18.2.4
Das checksum Modul
Der Protokollmonitor unterstützt z.Z. die folgenden Prüfsummen Algorithmen,
weitere werden in nächster Zukunft folgen. Wie Sie Ihren eigenen Prüfsum-
menalgorithmus erstellen beschreibt Abschnitt 13.3.2.
Alle Funktionen des checksum Moduls erwarten einen Lua String als Para-
meter und liefern die Prüfsumme über alle in diesem String enthaltenen Da-
tenbytes entsprechend dem ausgewählten Algorithmus. Das Ergebnis ist eine
Integerzahl.
Beachten Sie, das die Reihenfolge bei 16 Bit Werten von der Applikation ab-
hängig ist. So überträgt Modbus RTU (crc16) das niederwertige vor dem hö-
herwertigen Byte.
Funktion
crc8_bacnet
crc16_bacnet
226
Reg HI
Reg LO
Value HI
Reg HI
Reg LO
Value HI
>H
>H
Beschreibung
8 Bit Prüfsumme wie sie in BACNet (Header) Telegram-
men verwendet wird.
16 Bit Prüfsumme wie sie in BACNet Übertragungen ver-
wendet wird.
Value LO
CRC HI
CRC LO
Value LO
CRC HI
CRC LO
>H