我是新的modbus,我必须编程一个lpcxpresso基板作为一个主人,收集读数从一个电能表使用RS485 Modbus协议。
通过阅读modbus.org规范,我熟悉协议(关于PDU框架、功能代码、主从程序)。但是,在用C编写代码时,我在实现上遇到了困难。
所以我的问题是:
如果问题不是很具体或太基本,我会非常感谢你的帮助和帮助:)对不起
发布于 2015-01-22 08:59:02
第一步:暂时忘掉电能表和modbus。最重要的是让硬件正常工作。RS485只是一个串行端口。阅读关于如何初始化您的硬件上的串口的手册,并发送单字节到您的PC和回来。然后将数百个字节发送到PC并返回。
Setp 2:让你的硬件定时器也工作。Modbus协议对定时有一些要求,所以您也需要它。
步骤3:获取modbus规范。它将解释协议格式和校验和。使用modbus库或编写自己的。在你继续使用电能表之前,确保你能让它和PC一起工作。
第四步:如果你有问题,问一些具体的问题。
发布于 2015-01-22 10:18:58
首先: ModBus RTu还是ASCII?

无符号短TLPsComPort::Calculate_CRC16 ( int Message_Length,char *Message )
{
char Low_CRC;
char Bit;
// Constant of ModBus protocol
unsigned short CONSTANT = 0xA001;
unsigned short CRC_REGISTER = 0xFFFF;
for (int i=0; i<Message_Length; i++)
{
Low_CRC = CRC_REGISTER;
Low_CRC = *(Message+i) ^ Low_CRC;
CRC_REGISTER = ((CRC_REGISTER & 0xFF00) | (Low_CRC & 0x00FF));
for (int j=0; j<8;j++)
{
Bit = CRC_REGISTER & 0x0001;
CRC_REGISTER = (CRC_REGISTER >> 1) & 0x7FFF;
if (Bit) CRC_REGISTER = CRC_REGISTER ^ CONSTANT;
}
}
return CRC_REGISTER;
}https://stackoverflow.com/questions/28083536
复制相似问题