我是modbus的新手,我必须将lpcxpresso基板编程为主机,以便使用RS485 Modbus协议从功率计收集读数。
通过阅读modbus.org的规范,我熟悉协议(关于PDU ADU帧,功能代码,主从)。 但是,在使用C语言编写代码时,我在实现方面遇到了困难。
所以我的问题是:
我将非常感谢所有的帮助和帮助:)对不起,如果问题不是非常具体或太基本
答案 0 :(得分:2)
步骤1:暂时忘掉能量计和modbus。最重要的是让硬件正常工作。 RS485只是一个串口。阅读有关如何初始化硬件上的串行端口的手册,并将单字节发送到PC并返回。然后将数百个字节发送到PC并返回。
Setp 2:也可以在你的硬件上使用计时器。 Modbus协议对时序有一些要求,所以你也需要它。
第3步:获取modbus规范。它将解释协议格式和校验和。使用modbus库或编写自己的库。在进入电能表之前,请确保可以使用PC。
第4步:如果您遇到问题,请在SO上询问有关它的具体问题。
答案 1 :(得分:1)
首先:是ModBus RTu还是ASCII?
unsigned short 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;
}