例程为基于IM1281单向互感计量模块,关于 Modbus-RTU通讯规约简要理解。
1、通讯规约应注意校检码正确配置,否则所发送数据 无法被外设接收:
(1) 预置一个 16 位寄存器为 0FFFFH(全 1),称之为 CRC 寄存器。
(2) 把数据帧中的第一个字节的 8 位与 CRC 寄存器中的低字节进行异或运算,结果存回
CRC 寄存器。
(3) 将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。
(4) 如果最低位为 0:重复第三步(下一次移位);如果最低位为 1:将 CRC 寄存器与一
个预设的固定值(0A001H)进行异或运算。
(5) 重复第三步和第四步直到 8 次移位。这样处理完了一个完整的八位。
(6) 重复第 2 步到第 5 步来处理下一个八位,直到所有的字节处理结束。
(7) 最终 CRC 寄存器的值就是 CRC16 的值。
2、在arduino串口通讯中,读取/发送数据时以字节为单位,即8位二进制数,使用Serial.read()
和uchar val[num]; Serial.write(val.num);
即可实现。
/*
* Title: <基于IM1281的简单通讯>
* description:
* @author: fateszs
* @data: 2017.11.28
*
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
unsigned char USART_RX_BUF[7]={0x00,0x00,0x00,0x00 ,0x00 ,0x00,0x00};