美文网首页
MODBUS RTU协议理解

MODBUS RTU协议理解

作者: 葬歌倾城 | 来源:发表于2019-10-29 12:03 被阅读0次

    一、MODBUS 工业上常用的一种串口通讯协议,协议包括RTU、TCP、ASCII;其中MODBUS RTU协议最常用;

    二、串口参数

    设备地址:1~247  (仪表的设备地址)

    波特率:50、75、100、150、300、600、1200、2400、4800、9600、115200、19200、38400;

    校验位:偶校验、奇校验、无校验;

    数据位:8、7、6

    停止位:1、1.5、2

    三、报文格式

    设备地址(两个字节)、功能码(两个字节)、寄存器地址(四个字节)、寄存器数量(四个字节)、CRC校验码(四个字节)

    发报文:01 03 00 00 00 01 84 0A

    解释:01:仪表的地址;      03:功能码;

    00:寄存器地址高位;  00:寄存器地址低位;

    00:寄存器数量高位;  01:寄存器数量低位;

    84 0A:校验位

    接收报文:01 03 00 02 00 DC 7B F1

    解释:01:仪表的地址;        03:功能码;

    00:数据字节长度高位;  00:数据字节长度低位;

    00:寄存器数据高位;    DC:寄存器数据低位;

    7B F1:校验位

    四、功能码定义

    发数据时:设备地址(两个字节)、功能码(两个字节)、寄存器地址(四个字节)、寄存器数量(四个字节)、数据的字节长度(两个字节)、数据(四个字节)、CRC校验码(四个字节)

    接收数据时:设备地址(两个字节)、功能码(两个字节)、寄存器地址(四个字节)、寄存器数量(四个字节)、CRC校验码(四个字节)

    根据功能码的不同,主机和从机都可接收数据和发送数据.

    CRC校验码

    //CRC校验码

    static string CRC16(byte[] pDataBytes)

    {

    ushort crc = 0xffff;

    ushort polynom = 0xA001;

    for (int i = 0; i < pDataBytes.Length; i++)

    {

    crc ^= pDataBytes[i];

    for (int j = 0; j < 8; j++)

    {

    if ((crc & 0x01) == 0x01)

    {

    crc >>= 1;

    crc ^= polynom;

    }

    else

    {

    crc >>= 1;

    }

    }

    }

    byte hi = (byte)((crc & 0xFF00) >> 8);  //高位置

    byte lo = (byte)(crc & 0x00FF);

    string data = lo.ToString("X2") + hi.ToString("X2");

    return data;

    }

    相关文章

      网友评论

          本文标题:MODBUS RTU协议理解

          本文链接:https://www.haomeiwen.com/subject/hdbwvctx.html