MODBUS RTU协议理解

一、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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,106评论 6 13
  • 电力系统是一个综合化的系统,作为一个熟练的电工,对于通信有着一定的认识。否则很多问题,我们将无从下手。首先我们从广...
    洪城小电工阅读 118,351评论 8 34
  • 一、Modbus 协议简介 ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或...
    漠漠彡阅读 93,991评论 2 21
  • 概述 Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化部门的一部分,现在Mo...
    得奕阅读 1,979评论 1 0
  • 产品描述 工作频段 **CC1100: **400-464 MHz and 800-928MHzCC1101: 3...
    Alex_Lin阅读 4,722评论 1 0