ST9000er | Frequenzumrichter mit Modbus RS485 seriell fernsteuern

Die Kommunikation zwischen dem Steuergerät und dem mit RS485 ausgestatteten Frequenzumrichter muss im RTU-Modus ablaufen. Dabei erwartet der ST9000 Umrichter in Werkseinstellung eine Übertragung mit 19200 Baud, 8/N/2. Über einfache Datenübertragung der Bytes im Rohformat ohne weitere Codierung wird gesendet und empfangen. Zusätzliche Steuerzeichen sind nicht notwendig.

Hier zwei Beispiel-Datensätze gesendet an den Frequenzumrichter:
01 07 20 00 00 01 7E 0A (Start-Befehl, dargestellt als Hexadezimalzahlen)
01 07 20 00 00 06 3F C8 (Stopp-Befehl, dargestellt als Hexadezimalzahlen)

Datensätze müssen immer am Stück gesendet werden. Tritt zwischen zwei einzelnen Zeichen eine Pause von mehr als 1½ Zeichen Dauer auf, so ist der Datensatz laut Protokolldefinition ungültig und zu verwerfen.

Kurze Erklärung der Struktur:
01 = Adresse des Frequenzumrichters (wird am Frequenzumrichter über F9.02 eingestellt)
07 = flüchtige Speicherung, Wert wird nicht fest programmiert
20 00 = Steuerparameteradresse
00 01 = Vorwärtsbetrieb
7E 0A = CRC-Checksumme
Weitere Adressen und Funktionen können Sie der Anleitung entnehmen.

Die CRC-Prüfsumme können Sie wie folgt errechnen:

Funktion zur Berechnung der CRC-Prüfsumme (in C):

unsigned int cal_crc16 (unsigned char *data, unsigned int length)
{
unsigned int i,crc_value=0xffff;

while(length–)
{
crc_result ^= *data++;
for(i=0; i<8; i++)
{
if(crc_result & 0x01)
{
crc_result = (crc_value >> 1)^0xa001;
}
else
{
crc_result = crc_result >> 1;
}
}
}
crc_result = ((crc_result & 0xff) << 8) | (crc_result >> 8);

return(crc_result);
}

Beachten Sie bitte, dass die CRC-16-Prüfsumme im Modbus-Format als Little Endian übertragen werden muss, d.h. die niederwertige Hälfte des Datenwortes vor der höherwertigen (in Hexadezimaldarstellung, also die ersten beiden und die letzten beiden Zeichen des Ergebnisses vertauscht werden), damit sie zum Algorithmus des Umrichters (wie oben in der Funktion cal_crc16()) passt.

Tags: