Herunterladen Inhalt Inhalt Diese Seite drucken

Modbus_Write; Programmierbeispiel Zum Ermitteln Der Crc-Summe Des Modbus-Rtu Telegramms - ABB TZA 401 Bedienungsanleitung

Messrechner modbus-schnittstelle
Inhaltsverzeichnis

Werbung

Modbus_write

REAL-Daten zu anderen Modbusteilnehmern senden (write Konstanten in TZA 401: Funktion 16)
void modbus_write(unsigned regnr, int data[0], int data[1])
{
unsigned
sendbuf[00] = Stat_adr
sendbuf[01] = 16
sendbuf[02] = regnr>>8
sendbuf[03] = regnr
sendbuf[04] = 00
sendbuf[05] = 02
sendbuf[06] = 04
sendbuf[07] = data[0]>>8
sendbuf[08] = data[0]
sendbuf[09] = data[1]>>8
sendbuf[10] = data[1]
crc
= CRC16(sendbuf,11);
sendbuf[11] = crc
sendbuf[12] = crc>>8
comWrite(sendbuf,13)
comRead(receivebuf)
}
Programmierbeispiel zum Ermitteln der CRC-Summe des Modbus-RTU
Telegramms
unsigned short CRC16(
void *data_p
unsigned len
)
/* 16 Bit CRC (Modbus-RTU) von data_p berechnen */
{
#
define POLYNOM
int
unsigned short
unsigned char
for (j=0; j < len; j++) {
for (crc ^=
if ((crc & 0x0001))
crc = (crc >> 1) ^ POLYNOM;
else
crc >>= 1;
}
}
return (crc);
}
crc;
;
/* Modbus Stationsadresse
;
/* Funktion write Real-Wert */
;
;
/* Lo Register Nummer */
;
/* Hi Register Anzahl (bei TZA 401 immer 0) */
;
/* Lo Register Anzahl (bei TZA 401 immer 2) */
;
/* Anzahl Byte
;
/* Hi Byte
;
/* Lo Byte Register 0 laden */
;
/* Hi
;
/* Lo Byte Register
;
/* Lo Byte CRC laden */
;
/* Hi Byte
;
/* 13 Zeichen senden */
;
/* Quittung empfangen */
/* Datenbereich */,
/* Datenlänge*/
0x0A001
i,j;
crc = 0xffff;
*p = data_p;
*p++,i=0;
i < 8; i++) {
/* Hi Register Nummer
(bei TZA 401 immer 4)
Register 0 laden */
Byte Register 1 laden */
1 laden */
/* CRC-Check für 11 Byte generieren */
CRC laden */
/* für gesamten Puffer */
/* für ein Byte */
*/
*/
*/
Programmierbeispiele in C 21

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis