迪文科技论坛

 找回密码
 立即注册
搜索
查看: 1750|回复: 36

【2021.5.8获奖项目】基于T5L智能屏的Modbus RTU主机

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11956
发表于 2024-1-9 10:28:09 | 显示全部楼层 |阅读模式
【开源】用T5L C51开源一个优雅而易用的modbus RTU主机

一、前言

1.本实验平台为迪文的EK043开发板,当然了,只需要稍微修改一下GUI工程中的背景图片尺寸,也可以用于其他的T5L迪文屏。
2.本项目是基于T5L迪文屏,采用C51开发方式,来实现一个优雅而易用的modbus RTU主机。
3.本项目中使用了T5L芯片的串口2来作为modbus的底层通信接口,代码上还支持了RS485总线,另外架构上支持更换到其他的串口号,只需要修改相应的宏定义即可。
4.modbus相关的所有源代码全部放在了HARDWARE/modbus文件夹下面,如果你没有定制的需求,请不要改动任何代码。modbus代码已经高度封装目的是为了尽量简化使用难度所有能配置的功能以宏定义的方式进行申明。

二、如何快速上手使用

1.先要初始化modbus,然后调用modbus事务处理器,如下图所示:




2.在1ms定时器中调用modbus_check_recv_timeout函数,如下图所示:




3.到这一步才需要你动手写代码,需要你自己实现modbus_msg_handler函数,这是一个modbus消息处理函数,当你收到从机发送过来的数据包时,系统会自动回调modbus_msg_handler这一个函数来处理消息,下面给出一个示例,如下图所示:





4.现在我们已经知道如何去处理从机发送过来的消息了,那我们主机该如何去主动给从机发送消息呢?这就要利用到modbus_send_packet函数,比如我现在要给从机发送一个功能码为0x03的数据包,目的是为了从0x0005起始地址处读取3个寄存器的值,那么示例代码如下图所示:




上面的代码是当点击屏幕上的0x01按键返回控件时才会被触发执行。

补充:
如果你是想发送0x10功能码的数据包,那么你可以使用专用的MODBUS_10_PACKET结构体,之前的MODBUS_PACKET结构体将不再适用,因为0x10功能码的数据包格式稍微特殊一点,使用示例如下:
下面的示例代码是往0x01从机的0x0004寄存器地址处连续写入2个字的数据。

MODBUS_10_PACKET packet_10;

packet_10.slave_addr = 0x01;//从机地址
packet_10.func_code = MODBUS_FUNC_CODE_10;//功能码
packet_10.start_addr = 0x0004;//起始地址
packet_10.word_num = 2;//是要连续写入2个字
packet_10.val[0] = 0x1234;//第一个字的值
packet_10.val[1] = 0x5678;//第二个字的值
modbus_send_packet((u8*)&packet_10);

三、如何测试

如果你手头上有真实的从机设备,那么你可以直接用真实设备进行测试modbus通信效果,如果没有的话,那么我们可以借助Modbus Slave这个PC工具来模拟出一个从机设备,此工具已经放在了资料文件夹中,如下图所示:


安装好此工具后,打开并点击“Connection->Connect...”子菜单项,输入9876543210ABCDEFGHIJ5295 注册码进行注册,注册完之后才可正常使用。

1.按下图配置串行接口




2.然后再按下图配置好从机的信息




3. 然后双击输入想要的寄存器值




四、GUI工程

gui工程中就只有一个“0启动界面.jpg”,如下图所示:




可以点击“发送一个数据包”按钮,那么迪文屏就会给从机发送一个功能码为0x03的数据包,主要是去读取从机0x0005起始地址处的3个寄存器的值,当迪文屏接受到从机返回的数据时,会将整个数据包以十六进制的方式显示在屏幕上。















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

回帖

79

积分

注册会员

Rank: 2

积分
79
发表于 2024-3-19 13:58:31 | 显示全部楼层
学习学习 okwangxc@126.com
回复

使用道具 举报

0

主题

2

回帖

49

积分

新手上路

Rank: 1

积分
49
发表于 2024-3-22 16:34:26 | 显示全部楼层
大佬您好!我需要此文源码进行学习zym7643@163.com,感谢
回复

使用道具 举报

0

主题

3

回帖

251

积分

中级会员

Rank: 3Rank: 3

积分
251
发表于 2024-3-25 08:46:00 | 显示全部楼层
您好,我想对本文源码进行参考学习d18437926539@163.com,万分感谢
回复

使用道具 举报

0

主题

3

回帖

115

积分

注册会员

Rank: 2

积分
115
发表于 2024-3-27 11:59:19 | 显示全部楼层
您好,我想对本文源码进行参考学习,lxguang231@163.com,谢谢
回复

使用道具 举报

0

主题

1

回帖

67

积分

注册会员

Rank: 2

积分
67
发表于 2024-3-27 15:04:00 | 显示全部楼层
回复

使用道具 举报

0

主题

1

回帖

23

积分

新手上路

Rank: 1

积分
23
发表于 2024-3-29 10:25:33 | 显示全部楼层
回复

使用道具 举报

0

主题

1

回帖

21

积分

新手上路

Rank: 1

积分
21
发表于 2024-3-29 15:16:42 | 显示全部楼层
回复

使用道具 举报

0

主题

1

回帖

21

积分

新手上路

Rank: 1

积分
21
发表于 2024-4-1 20:58:27 | 显示全部楼层
感谢分享,谢谢!coolcjw@yeah.net
回复

使用道具 举报

2

主题

3

回帖

307

积分

中级会员

Rank: 3Rank: 3

积分
307
发表于 2024-4-2 23:26:09 | 显示全部楼层

感谢分享,谢谢!  303278472@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-22 03:14 , Processed in 0.108198 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表