如何使用C / C ++映射Modbus寄存器地址

时间:2016-04-28 03:30:18

标签: c++ c embedded modbus stm32f4discovery

我正在尝试使用STM32F4-Discovery Board在UART外设上实现ModBus RTU协议。

我计划使用Modbus RTU实现主从功能。

以下是我的问题

如何使用C / C ++将我在UART中接收的数据移动到MODBUS并将数据从MODBUS层传输到UART,请提供一些代码片段,以帮助我理解您的解释。 (截至目前,我正在考虑提出一些API,请提出一些模式)

其次,我如何实现Modbus寄存器和线圈。我的意思是如何定义ModBus应用手册中指定的地址。请用代码片段向我解释一下。下面我试图实现的东西。

/*Global Array, Structure and Variable Declarations*/
/* So to access Discrete_Output_Coils[2345] 
   the valid address to include in the protocol would be
   so we have to access address 0x929 to read the 
   data.*/
const unsigned short int Discrete_Output_Coils[4999];
const unsigned short int Discrete_Input_Contacts[4999];
const unsigned short int Analog_Input_Register[4999];
const unsigned short int Anlog_output_Holding_Register[4999];

1 个答案:

答案 0 :(得分:0)

我同意user694733。你应该一步一步走。例如,您应该定义您的硬件规格(即,它们是什么信号和类型?多少?这些问题的答案将告诉您有多少寄存器以及哪种类型对您的设备有意义#"设备&# 34;之后,将每个信号映射到寄存器,然后尝试进行单个寄存器读/写操作,并对线圈或模拟进行CRC校验(编程)。调整协议直到达到预期,然后覆盖其余的单个寄存器类型(线圈,模拟)。然后,将实现扩展到多个寄存器读/写操作。 顺便说一句,放置数组声明并没有显示解决问题的努力。你要求社区做所有艰苦的工作。如果你想要更多的代码,可以从google开始。以下是图书馆的链接,您可以查看该图书馆是否符合您的要求:http://libmodbus.org/download/