Modbus 您所在的位置:网站首页 整数反转算法怎么算的啊 Modbus

Modbus

2024-07-02 04:41| 来源: 网络整理| 查看: 265

1.modbus基础知识 1.1什么是modbus 1. Modbus是一种串行通信协议,最初由Modicon(目前属于施耐德电气公司)于1979年开发 2. Modbus协议是应用在Modicon产品上的,后来才被移植到其他产品上 3. Modbus协议的通信接口可以有多种选择,如RS232、RS485、以太网等 1.2 协议特点 支持主从方式,即主站、从站Modbus协议主要分为两种格式,即Modbus RTU和Modbus ASCII,Modbus RTU使用二进制格 式传输数据,而Modbus ASCII则将数据以ASCII码形式进行传输。此外,Modbus还可以通过TCP/IP协议进行网络通信,称为Modbus TCP/IP。 1.3 协议格式 1. 起始地址(也就是常说的站号) 2. 功能码 (01,03,06,10,16等等) 3. 数据内容 4. 校验码(CRC16校验) 2.modbus-crc16校验原理方法以及手算验证 2.1 校验方法 CRC计算方法: 1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器; 2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器; 3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位; 4.如果移出位为0:重复第3步(再次右移一位);如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或; 5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理; 7.将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换; 2.2 校验参考代码 /* * @name CRC_Check * @brief CRC校验 * @param CRC_Ptr->数组指针,LEN->长度 * @retval CRC校验值 */ uint16_t CRC_Check(uint8_t *CRC_Ptr,uint8_t LEN) { uint16_t CRC_Value = 0; uint8_t i = 0; uint8_t j = 0; CRC_Value = 0xffff; for(i=0;i 1) ^ 0xA001; else CRC_Value = (CRC_Value >> 1); } } CRC_Value = ((CRC_Value >> 8) + (CRC_Value > 1; tmp = tmp ^ 0xa001; } else{ tmp = tmp >> 1; } } printf("第%d个数据通过crc16校验后为 %x\n",n,tmp); } /*将CRC校验的高低位对换位置*/ val = tmp >> 8; val = val | (tmp


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有