Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用

Posted 木南创智

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用相关的知识,希望对你有一定的参考价值。

前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的。我们开发它的目的当然是要使用它来解决我们的实际问题。接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server应用。

开发Modbus TCP Server首先需要有TCP Server的支持以及网络的配置等,但这些与Modbus本身没有什么关系,我们再次不作讨论。我们规定网络和TCP Server已经配置妥当。接下来我们讨论Modbus TCP Server的实现过程。

根据前面对协议栈的封装,我们需要引用Modbus TCP Server的相关封装。在接收到命令后调用解析函数进行解析,解析函数的原型:

uint16_t ParsingClientAccessCommand(uint8_t *receivedMessage,uint8_t *respondBytes);

该函数作为函数指针传递给TCP Server,并回调解析接收到的信息列表。

除此之外,我们要根据具体的需要实现8个回调函数,以完成真正的对Modbus对象的操作,这8个函数的原型如下:

/*获取想要读取的Coil量的值*/

void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool *statusList);

 /*获取想要读取的InputStatus量的值*/

void GetInputStatus(uint16_t startAddress,uint16_t quantity,bool *statusValue);

 /*获取想要读取的保持寄存器的值*/

void GetHoldingRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue);

 /*获取想要读取的输入寄存器的值*/

void GetInputRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue);

 /*设置单个线圈的值*/

void SetSingleCoil(uint16_t coilAddress,bool coilValue);

 /*设置单个寄存器的值*/

void SetSingleRegister(uint16_t registerAddress,uint16_t registerValue);

 /*设置多个线圈的值*/

void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool *statusValue);

 /*设置多个寄存器的值*/

void SetMultipleRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue);

这8个函数根据应用的具体需求来实现数据对象的操作,实现几个如何实现根据各自的应用需求和数据结构来确定。

以上是关于Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用的主要内容,如果未能解决你的问题,请参考以下文章

Modbus库开发笔记之二:Modbus消息帧的生成

Modbus库开发笔记之七:Modbus其他辅助功能开发

Modbus库开发笔记之五:Modbus RTU Slave开发

Modbus库开发笔记之六:Modbus RTU Master开发

Modbus库开发笔记之四:Modbus TCP Client开发

在电脑读取modbus tcp设备的数据应该开发客户端还是服务器?