赞
踩
增:
将libmodbus库拷贝到开发板/usr/lib下,在源文件中确定好头文件目录的情况下
编译方式为:gcc modbus_test.c -lmodbus
使用socket创建Modbus TCP应用
Modbus TCP在网络传输层次,就是一串有特定含义的数据包的交互,LwIP层次并不识别是什么数据。所以从这个角度来讲,Modbus TCP移植和其他TCP应用的移植没有任何差别。
透过表面看本质,只有拨开外层重重包装看本质,我们才能从纷杂的事件中找到问题的重点,然后剥离不相关的部分,一次解决一个问题。基于这个思想,Modbus TCP应用可以直接划分为2个层次,底层是驱动部分,负责一包数据从网络上接收上来或发送出去,上层是Modbus的协议部分,就是Modbus寄存器的操作等。从这个角度来说,只要数据传输正确了,那么怎么处理就是另一个问题了,比如可以共用Modbus RS485的代码等。
下面测试了Modbus TCP的数据传输。
Modbus TCP设计有几个重要的点:
1)Modbus是连续通信,不能和http一样完成一次连接后就断开,所以要不停的read,当读出错时在close(conn)关闭连接。
2)Modbus可能存在通信失败情况,需要关闭socket后再重新建立socket。
3)Modbus作为工业协议,应用场景下一般不会多个客户端连接一台机器,并且多个客户端连接一台机器,寄存器的读写互斥会是一个大问题,所以常见的做法是一旦连接成功,就关闭socket禁止其他连接进来。客户端主动断开后再重新建立socket然后进入listen状态。
---------------------
原文:https://blog.csdn.net/zhubenfulovepoem/article/details/78596035
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。