完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
NanoPi M2试用体验之Modbus-RTU主站开发 本菜鸟之前的几篇使用报告介绍了基于NanoPi M2无线网卡设置、NFS文件系统搭建、Mysql安装、Mysql可视化配置,以及基于QT的Mysql数据编程数据操作,以上这些报告当然不是独立的,每一篇报告都是基于本人关于板卡申请时,关于相关项目的一步一步实现过程,本篇报告介绍关于水泥搅拌站项目的一个关键核心部分:Modbus通讯。 Modubus通讯是工业应用领域使用非常广泛的一种基于串口的上层通讯协议,通过对底层串口信息的组合传输、解析、CRC校验,大大提高数据传输的准确性和数据的可靠性。 自从 1979 年出现工业串行链路的事实标准以来, MODBUS 使成千上万的自动化设备能够通信。当前主流PLC控制器、传感器仪表均提供了对Modus协议支持,Modbus通讯协议与Profibus DP、CanOpen、DeviceNet并列为事实上的工业标准通讯标准协议,而Modbus通讯协议又具有开发简单、承载要求低,从51单片机到ARM Cortex处理器,再到X86 PC,只要以上处理器支持串口通讯,就可自定义编程实现Modbus通讯协议。 尽管我们可以Modbus协议标准自定义协议的实现,但是存在稳定性和可移植性的问题。目前开源Modbus协议源码的主要有FreeModbus和libmodbus,通过应用,我个人感觉libmodbus的平台移植性可开发快速性更好,所以本篇报告主要讲解基于libmodbus的开发。 modbus通讯协议又分为:Modbus-RTU、Modbus-ASCII、Modbus-TCP,由于多数控制仪表主要支持Modbus-RTU、Modbus-TCP,本篇报告主要介绍Modbus-RTU通讯协议测试程序的开发。 关于Modbus-RTU的更加详细介绍请自己搜索了解。 1.下载、配置libmodbus libmodbus的下载地址:http://libmodbus.org/download/ 当前稳定版本的最新版为3.0.6,我们基于这个版本开发。 下载源码后,通过samba将文件拷贝到Linux虚拟机,如图所示: 将 libmodbus-3.0.6.tar.gz拷贝到samba共享文件夹 在Linux命令行终端切入共享文件夹,输入命令: tar -xzvf libmodbus-3.0.6.tar.gz,生成libmodbus源码文件夹,如图所示: 输入命令:cd libmodbus,如图示所示: 输入命令:./autogen.sh 生成configure文件,如图示: 输入命令:./configure && make install 命令完成后如图示: 生成config.h文件。 将src文件夹下的所有.h和.c文件,以及上一步生成的config.h文件拷贝通过NFS拷贝到M2的文件系统,如执行命令: sudo mount -t nfs 192.168.1.xxx:nfsshare -onolock sudo mkdir /libmodbus cp ./src/*.h /mnt/libmodbus cp ./src/.c /mnt/libmodbus/ cp config.h /mnt/libmodbus 2. 创建QT测试项目 搭建M2的硬件运行环境,开机启动系统,启动QTCreator,创建libmodbustest工程。项目创建结束后,通过命令行将libmodbus中的文件拷贝到项目目录下: cp -r /nfsshare/libmodbus 项目文件夹路径 将libmodbus文件夹中文件添加到项目中: 右击项目名称,选择“Add Existing Files...”,如图所示: 选择libmodbus文件夹: 修改libmodbus文件夹下的modbus-private.h和modbus.c代码中的”#include 设计界面如图示: 右击上图中的按钮,选择“goto slot...”,如下图所示: 弹出对话框,选择第一项,如所所示: 点击“OK”按钮,创建该按钮的命令执行函数,输入代码如下图所示: 详细代码如下: modbus_t *mb; uint16_t tab_reg[32]={0}; mb = modbus_new_rtu("/dev/ttyAMA2", 9600, 'N', 8, 1); //相同的端口只能同时打开一个 modbus_set_slave(mb, 17); //设置modbus从机地址 modbus_connect(mb); struct timeval t; t.tv_sec=0; t.tv_usec=1000000; //设置modbus超时时间为1000毫秒 modbus_set_response_timeout(mb, &t); int regs=modbus_read_registers(mb, 0, 10, tab_reg); QMessageBox::about(NULL, "报告", QString("Rtu读取寄存器的个数:%1").arg(regs)); QString qs =QString("%1n%2n%3n%4n%5n%6n%7n%8n%9n%10n").arg(tab_reg[0]).arg(tab_reg[1]).arg(tab_reg[2]).arg(tab_reg[3]).arg(tab_reg[4]).arg(tab_reg[5]).arg(tab_reg[6]).arg(tab_reg[7]).arg(tab_reg[8]).arg(tab_reg[9]); QMessageBox::information(this,"Info",qs); modbus_close(mb); modbus_free(mb); 输入以上代码后,在widget.cpp文件中输入头文件: 至此,QT项目工程创建完毕,下面开始搭建硬件环境。 3. 硬件测试环境搭建 由于Nanopi M2 40针扩展接口中支持UART3接口,我们就将UART3接口与外围电路连接。(需要注意的是,UART3接口的驱动程序文件为ttyAMA2,所以我们在上述程序中直接将打开的文件设置为“/dev/ttyAMA2”,请根据自己的实际情况适当修改)。 M2扩展的UART3接口为TTL电平,无法与PC机RS232接口电平直连,我们需要一个UART TTL电平转RS232电平的扩展板,可以使用友善官方的扩展板,也可以使用其他第三方的扩展板,本人采用的是自己手头现有的一块的TTL转RS232电平的接口板,如图示: 由于该转换板已经将RXD TXD做成交叉连接方式,所以本试验的连接如下 转换板 NanoPi M2 VCC 02(5VPower) RXD 10(RX3) TXD 08(TX3) GND 06(DGND) 连接后的电路如图所示: 4. PC端设置 由于手头没有相关的Modbus从站仪表,我们通过在PC端安装一个模拟软件,来测试我们以上的基于QT的测试程序是否可用。 下载一个Modbus Slave软件(试用版),然后启动该软件,如图所示: 在菜单“Setup”中,选择“Slave Definition...”,设置如下: 在“connection”菜单中点击“connect”,设置通讯参数如下: 然后设置从站的寄存器数据如下图示: 5. 启动测试 Modbus Slave软件根据上述设置,处于连接状态后,我们启动QT测试项目,点击“以modbus rtu方式读取地址1中前10个寄存器值”按钮,通讯结果如图所示: 评分
|
||
相关推荐
4 个讨论
|
||
谢谢楼主的帖子,学习了
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
369个成员聚集在这个小组
加入小组NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5435 浏览 1 评论
7168 浏览 1 评论
4773 浏览 1 评论
【NanoPC-T4试用体验】4、手把手教你从单片机移植驱动到ARM Linux上
7731 浏览 1 评论
【NanoPC-T4试用体验】NanoPC-T4控制步进电机
24583 浏览 1 评论
NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5435浏览 1评论
433浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:14 , Processed in 0.761013 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号