Beispiel: Programmfolge (C#)
Private int Modbus_CRC(string
{
int
poly
= 0xA001;
int
CRC
= 0xFFFF;
for (int
i = 0; i < (int)(frame.Length); i++)
{
CRC ^= Convert.ToInt16(frame[i]);
for (int
j = 0; j < 8; j++)
{
if
((CRC& 0x01) == 0x01)
{
CRC>>= 1;
CRC ^= poly;
}
else
{
CRC>>= 1;
}
}
}
Return
CRC;
}
Aufruf der Funktion für das Telegramm: „0x02 0x07"
stringtemp_s = Convert.ToString((char)(0x2))+ Convert.ToString((char)(0x7));
Console.WriteLine(Modbus_CRC(temp_s));
Ergebnis:
CRC niederwertiges Byte (low byte)
CRC höherwertiges Byte (high byte)
Die Modbus CRC Abfolge ist:
⇒
CRC
Low Byte/High Byte
7.3.10.2
ASCII Übertragung
Wenn Geräte für die Datenübertragung über ein Modbus Telegramm in der Betriebsart 7-Bit ASCII
(American Standard Code for Information Interchange) eingerichtet werden, wird jedes 8-Bit Zeichen
in einer Nachricht als zwei ASCII Zeichen gesendet. Diese Betriebsart wird verwendet, wenn der phy-
sikalische Datenübertragungskanal oder die Leistungsfähigkeit des Gerätes nicht den Anforderungen
hinsichtlich der zeitlichen Bearbeitung in der Betriebsart RTU entsprechen.
Hinweis:
Diese Betriebsart ist weniger leistungsfähig als RTU, da jedes Byte zwei Zeichen benötigt.
Beispiel: Das Byte 0x5B wird als zwei Zeichen kodiert:
0x35 und 0x42 (0x35 = „5", und 0x42 = „B" in ASCII).
Agile
Modbus
40
frame)
4673
0x41
02/2011
Modbus Agile
// polynom
// start CRC
// für jedes Zeichen
//
ExOR
//
acht mal
//
lsb == 1 ?
//
schieben links
//
ExOR
//
schieben links
= 0x1241
= 0x41
= 0x12
0x12
40
Protokoll
02/2011