熊家余 发表于 2021-5-8 16:39:19

【开源】用T5L C51开源一个优雅而易用的MODBUS RTU主机

本帖最后由 熊家余 于 2021-5-9 09:53 编辑

一.前言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 = 0x1234;//第一个字的值packet_10.val = 0x5678;//第二个字的值modbus_send_packet((u8*)&packet_10);
三.如何测试如果你手头上有真实的从机设备,那么你可以直接用真实设备进行测试modbus通信效果,如果没有的话,那么我们可以借助Modbus Slave这个PC工具来模拟出一个从机设备,此工具已经放在了资料文件夹中,如下图所示:安装好此工具后,打开并点击”Connection”->”Connect...”子菜单项,输入9876543210ABCDEFGHIJ5295 注册码进行注册,注册完之后才可正常使用
1. 按下图配置串行接口
2. 然后再按下图配置好从机的信息
3. 然后双击输入想要的寄存器值

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



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

更多的细节,可以参考代码,下面上传所有代码和资源


223869364 发表于 2021-5-8 17:09:24

必须赞一个

yx0100 发表于 2021-5-8 18:37:19

正在上大神之前的课,这个刚好能用到,感谢^_^

DWINZB 发表于 2021-5-8 21:06:13

相信您已经对迪文屏有一定的了解,希望您在使用迪文屏的时候把更多的开源项目分享出来,让我们一起成长,享受迪文屏的双核单芯片解决方案在显控和主控带来的便利。

jszxwcq2010 发表于 2021-5-9 10:17:56

必须赞一个

1715605760 发表于 2021-5-10 15:35:37

熊哥牛皮!!!

qiao半仙 发表于 2021-9-9 20:34:41

熊哥,你好,我使用串口助手发现数据没问题,用Modbus Slave收到的数据只有功能码错了,本来应该是03,变成了20是怎么回事,串口助手显示的又是03,其他的数据对的

zach09 发表于 2021-10-20 14:36:20

鱼哥!看到你腾讯视频讲的 迪文C51开发,求资料!!!!

zzs999k 发表于 2021-10-20 15:08:35

本帖最后由 zzs999k 于 2021-10-20 15:11 编辑

zach09 发表于 2021-10-20 14:36
鱼哥!看到你腾讯视频讲的 迪文C51开发,求资料!!!!
https://www.yuanzige.com/course/detail/80041这个是余哥的资料,点击资料下载

zach09 发表于 2021-10-20 15:16:23

zzs999k 发表于 2021-10-20 15:08
https://www.yuanzige.com/course/detail/80041这个是余哥的资料,点击资料下载

非常感谢!!!
页: [1] 2 3 4
查看完整版本: 【开源】用T5L C51开源一个优雅而易用的MODBUS RTU主机