我正在尝试使用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];

最佳答案

我同意user694733。您应该逐步进行。例如,您应该定义自己的硬件规格(即,它们是什么信号,是哪种信号?多少?这些问题的答案将告诉您多少寄存器和哪种类型的信号对您的“设备”有意义。 ,将每个信号映射到一个寄存器,然后尝试对线圈或模拟信号进行合并(编程)的CRC检查,从而对单个信号进行读/写操作,调整协议直到达到您的期望,并且它们涵盖了单个信号的其余部分。寄存器类型(线圈,模拟),然后将实现扩展到多个寄存器读/写操作。
顺便说一句,放置数组声明并不能解决问题。您要求社区做所有的努力工作。如果您想要更多的代码以google开头的话。这是一个链接,您可以研究该图书馆是否符合您的要求:http://libmodbus.org/download/

关于c++ - 如何使用C/C++映射Modbus寄存器地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36904750/

10-10 04:28