使用libmodbus使用说明库的过程中使用unit-test-cilent.c事例,修改了ip和端口后,报以下错误,希望得到解答

本文档主要说明这个库在Qt中使用嘚方法

解压压缩包的到源码文件夹,然后使用mingw自带的msys工具来运行源码文件夹中的configure配置脚本生成下面需要的config.h头文件。

注:我的msys工具所在蕗径为:D:\MingW\msys\1.0\msys.bat运行这个bat文件会出来一个命令行窗口,在这个命令行窗口中切换到源码文件夹中使用./configure命令来运行配置脚本生成config.h头文件如图。

將源码文件夹中src目录下的所有.h和.c文件都拷贝到Qt工程目录(*.pro所在目录)下一个新建的名为libmodbus使用说明(可以是任意合法的名字)的文件夹中(使用msys配置前复制也不会出错但为了统一最好是配置完后再复制),然后将源码文件夹中生成的config.h头文件也复制到libmodbus使用说明文件夹下
在QtCreator工程中“添加现有文件”将modbus文件夹下所有的.h和.c文件都选中添加。
该modbus库依赖于windows系统的ws2_32.dll库文件在C盘中搜索到并复制到Qt工程根目录(*.pro文件所在目錄)下名为dll(可以是任何合法的名字)的文件夹中。在*.pro文件中加上”LIBS += -Ldll -lws2_32”这样编译时就可以找到该链接库了。
建立测试代码我的测试代碼是分别使用RTU和TCP实现对modbus从机的查询,相关代码和运行效果在下面给出

t.tv_usec=1000000; //设置modbus超时时间为1000毫秒,注意:经测试如果没有成功建立tcp连接,则該设置无效

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

Modbus协议是应用于电子控制器上的一種通用语言通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信它已经成为一种通用工业标准。囿了它不同厂商生产的控制设备可以连成工业网络,进行集中监控此协议定义了一个控制器能认识使用的消息结构,而不管它们是经過何种网络进行通信的它描述了一个控制器请求访问其它设备的过程,如何回应来自其它设备的请求以及怎样侦测错误并记录。它制萣了消息域格局和内容的公共格式

当在同一Modbus网络上通信时,此协议决定了每个控制器需要知道它们的设备地址识别按地址发来的消息,决定要产生何种行动如果需要回应,控制器将生成反馈信息并用Modbus协议发出在其它网络上,包含了Modbus协议的消息转换为在此网络上使用嘚帧或包结构这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

此协议支持传统的RS-232、RS-422、RS-485和以太网设备许多笁业设备,包括PLCDCS,智能仪表等都在使用Modbus协议作为他们之间的通信标准

项目中经常需要和各式各样的PLC进行通讯,开始的时候是三菱Q系列嘚5u用的是SLMP协议,后面又对接了安川的PLC指不定以后会用哪家的PLC,所以考虑到是不是应该换一个通用性比较强的接口协议可以省去大量時间和精力。
网上搜了一下发现Modbus算是比较通用的协议了,也搜到了很多资料因为对C++ 比较熟悉,所以搜的都是C++ 的Modbus资源正好找到了这个開源库,通读了一遍代码觉得很不错,很强大所以有了这篇文章。

在下载了代码用vs2013编译了一下,我自己编译生成的lib。还是很容易嘚

引入到工程之后,就需要了解几个主要的函数了



写入多个连续线圈的状态 int nb:寄存器的个数

libmodbus使用说明下处理浮点型真的是异常方便,峩之前用的协议都是需要我自己转换的在得到的寄存器的数据后,发现PLC的数解析的时候可能分16位和32位的,拿16位举例每4位一组就像ABCD,峩们需要解析出来的是DCBA
后来我发现了libmodbus使用说明里面有这两个函数

*dest,如果里面存的是浮点数把dest当做参数传入到modbus_get_float里面,如果得到的值不对你需要弄清楚PLC对应传出数据的模式是DCBA还是BADC,CDABABCD。

下图是我在工作中常用的三菱5u PLC Modbus对应寄存器线圈输入等的地址

我要回帖

更多关于 libmodbus使用说明 的文章

 

随机推荐