迪文串口屏ModBus开发流程

描述

这里接前一章节,继续迪文屏的开发,前章主要讲解基础开发流程,此章节开始讲解迪文ModBus协议栈的使用方法。
 

前文指路:迪文串口屏基础GUI开发流程

 

协议栈获取,首先在迪文官方论坛上获取ModBus协议栈的OS程序,官方提供了众多不同的例程,是通过组合不同的串口及波特率等组合方式配合协议栈完成的,此处选择的是基于UART5-485/115200波特率的示例程序。

串口屏

 

将其下载下来后,解压目录包含如下文件:

串口屏

 

文件作用解析如下:

串口屏

 

我们需要用到的仅有两个bin文件,将DWINOS-xx.bin和22_xx.bin放入SD卡中的DWIN_SET目录下,屏幕断电,插入SD卡后再上电,即可看到屏幕开始更新SD卡中的内容。

 

22文件内有两条默认的指令用于测试,使用能够查看BIN文件的工具,官方有推荐其他工具,各位也可以选择自己熟悉的工具,只要能够编辑bin文件即可。这里笔者选择已经安装好的J-Flash软件打开,将22_Master_Poll.bin 拖入J-Flash软件,在顶部将其定位到0X1C000位置处可以看到如下数据:

串口屏

 

刚开始可能看不懂代表的具体意思,迪文论坛上有人自制了22文件的图形化编辑工具,有需要.net环境版本的,也有不需要环境直接运行的,区别就是用.net环境的会比不需要环境的压缩包更小,为了省掉不必要的麻烦,在这里选了不依赖.net环境的下载,下载后内容如下:

串口屏

 

双击DwinModBus.exe即可正常打开,打开后选择从22文件导入数据即可看到每条指令分别代表什么意思。

串口屏

 

这里按屏幕提示正常按需求添加ModBus指令即可,但需要注意的是,部分功能码对GUI界面的变量地址做出了要求,例如使用05码控制单个线圈,官方在手册中对位定义做出了要求,变量地址必须在0X0110到0X011F之间,每个变量分为16bit,最多256个bit位。对其他的部分功能码也有相关的限制,需要查手册或论坛以及询问技术支持。

串口屏

 

按要求,需要读取ModBus从机数据并将其显示到页面上,假设从机ModBus地址为1,数据位于输入寄存器2000号地址,浮点型,两个寄存器数据表示一个浮点数,将其读取出来后显示到GUI的1000变量地址上,则在图形化22配置工具上应输入如下指令:

串口屏

 

启用标记:在命令的开头必须是0X5A代表本条ModBus指令被启用,其余数据代表不起用

从机ID:从机ModBus地址

命令:ModBus功能码

本条指令长度:要从目标寄存器开始读取多少个寄存器数量

接收超时时间:主机发出消息后等待从机的响应时间,从解释来看,是16进制,单位是ms

执行方式:可以选择附加条件的执行,具体可以查看软件上的注释,这里选择00即是无条件执行

附加限制:指的是在开启附加条件时根据此条件进行发送

DGUS变量地址:指的是GUI上用户设置的用于显示数据的变量地址,也就是前文中设置的数据显示地址

寄存器地址:读取从机的起始寄存器地址

当配置完成后,点击生成ModBus指令按钮即可导出设置的ModBus命令集,但注意,这个软件有bug,生成的指令对齐格式不对,无法直接使用,可以看到在默认的22文件中,两条指令之间即5A开头之间是相差了16个字节的,但使用这个软件进行多指令生成时可以看到是不一致的。

串口屏

 

咨询了官方,图形配置工具已经在制作了,预计还要一段时间,建议各位使用这个工具时还是用来熟悉指令格式,自己手动修改bin文件。虽然软件生成有问题,但加载是正常的,可以用来验证手改bin的效果是否达到。

 

指令添加完成后,使用串口工具进行下载,即可在串口5上使用485转换器接收到主机发出的ModBus指令。

串口屏

 

此时使用< ModBus Slave>模拟从机设备,建立如下寄存器:

串口屏

 

点击上方的connect选择好对应的串口参数,即可查看到主机与模拟器的交互过程。

串口屏

 

此时,屏幕上的指定变量应当会显示模拟器中的数据。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分