Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
Modbus
RT-Thread
AB32VG1 RT-Thread freemodbus 串口RTU主机
发布于 2021-12-12 21:49:27 浏览:1337
订阅该版
[tocm] [RT-Thread 入门学习笔记 - 目录](https://club.rt-thread.org/ask/article/3420.html) [AB32VG1 RT-Thread 开发环境搭建](https://club.rt-thread.org/ask/article/3140.html) [AB32VG1 RT-Thread freemodbus 串口RTU从机](https://club.rt-thread.org/ask/article/3215.html) [AB32VG1 RT-Thread freemodbus 串口RTU主机](https://club.rt-thread.org/ask/article/3218.html) ## 前言 - 继续熟悉RT-Thread freemodbus 主机的应用并熟悉modbus协议。 - 平台:中科蓝讯AB32VG1开发板,IDE:RT-Thread Studio,RT-Thread 4.0.4(当前master最新) ## 目的 - 研究modbus协议的实现,熟悉现有modbus协议的使用,如freemodbus、libmodbus等。 - 终极目标:自己也能实现一套标准modbus协议。 ## 配置串口 - 查看AB32VG1 的原理图,找到能使用的uart串口或RS485, - 注意Modbus本身属于协议,底层可以使用三线串口、RS485、TCP等 - 这里直接使用三线串口(TXD、 RXD、 GND),如果使用RS485,注意配置RS485的方向控制引脚。 ![2021-12-12_115235.png](https://oss-club.rt-thread.org/uploads/20211212/4f43a360e619a8d47f7dddedf1f0eff6.png.webp) ![2021-12-12_115522.png](https://oss-club.rt-thread.org/uploads/20211212/aab26cb0305e7e98411bbf15b397d26c.png.webp) - 这里使用:uart1,引脚:`PA4/UART-TX1`、`PA3/UART-RX1`、GND,通过USB转串口,连接到电脑 - 新建AB32VG1最小工程,这个在前面的文章已经实现了,这里开启`uart1` - 首先配置使能`uart1`,我使用RT-Thread ENV 工具:menuconfig,不会使用这种方法的【抓紧去磨刀】 ```c .config - RT-Thread Project Configuration Hardware Drivers Config On-chip Peripheral Drivers Enable UART [*] Enable UART1 ``` ![2021-12-12_120021.png](https://oss-club.rt-thread.org/uploads/20211212/3efe00c9c9afe80f7d530868f3da8ea8.png) - AB32VG1的BSP默认已经配置好了`uart1`的相关的引脚与驱动,这里只需要配置使能【BSP_USING_UART1】即可。 ## freemodbus 软件包 - freemodbus 有 RT-Thread 适配好的软件包,需要配置并更新到本地工程 ```c .config - RT-Thread Project Configuration → RT-Thread online packages → IoT - internet of things [*] FreeModbus: Modbus master and slave stack ---> ``` ![2021-12-12_120708.png](https://oss-club.rt-thread.org/uploads/20211212/467939fd923f9dd1ef5a5afdbbb6fe21.png) ![2021-12-12_204916.png](https://oss-club.rt-thread.org/uploads/20211212/bbeb34fca9ab4b4b9524834d994addd5.png) - menuconfig 配置完成后,需要【save】保存,这样会更新rtconfig.h文件 - 注意使能了 freemodbus软件包(远程),需要在RT-Thread ENV中执行:`pkgs --update`,把软件包更新下载到本地工程 ![2021-12-12_121136.png](https://oss-club.rt-thread.org/uploads/20211212/394804800edbd288faa9cf55558b26e7.png.webp) - 此时只是开启了软件包,没有开启【FreeModbus应用例程】,这里为了简单,把freemodbus软件包里的例程,复制到本地的applications目录,并改名:`mb_master.c` ![2021-12-12_205356.png](https://oss-club.rt-thread.org/uploads/20211212/4aeb5ff3445416f1302d6f6dde54c93b.png.webp) - 可以在RT-Thread ENV工具里执行:`scons --target=eclipse`,更新RT-Thread Studio工程 - 使用RT-Thread Studio 打开工程 - 修改例程:主要是:UART的串口号,这里使用`uart1`,串口号改为1, - 然后是串口是否需要【奇偶校验】,需要与通信的从机一致,如改为【无校验】, - 再就是每个modbus从机,都有一个【从机地址】,这里我改为:5。 ![2021-12-12_210821.png](https://oss-club.rt-thread.org/uploads/20211212/576f056727e68ff6fe4ceaf8bda28861.png.webp) ![2021-12-12_210142.png](https://oss-club.rt-thread.org/uploads/20211212/548c95bee7c10efcf9c519618f8d6066.png.webp) - 增加data ram 大小,保证编译通过,freemodbus主机,使用较多的全局变量用于存储寄存器、线圈等modbus的数据。 ![2021-12-12_210428.png](https://oss-club.rt-thread.org/uploads/20211212/93519c06affa81b76bccb4ced253c78c.png) ![2021-12-12_210603.png](https://oss-club.rt-thread.org/uploads/20211212/d13f759308d65ede6b7c55377f95af57.png.webp) - freemodbus主机基本这样了,使用RT-Thread Studio 编译通过。 ## 下载后程序无法运行的修复 - 修改AB32VG1 初始化栈造成编译下载后程序无法启动 - 恢复 link.lds 的修改 - 修改freemodbus 主机的读写寄存器数量,改小 - 保证编译通过,下载后,程序运行正常 - 【备忘】后续跟进:AB32VG1的初始栈、.bss、data的如何设置。 ![2021-12-12_213335.png](https://oss-club.rt-thread.org/uploads/20211212/6e5a628776ff443b0df2bae6dbb61dcf.png.webp) ## 协议的验证 - 代码写好,下载到板子上,运行msh 串口命令,查看协议是否开启: ```c msh >mb_master_samlpe sample is running msh > list_device msh >list_device device type ref count -------- -------------------- ---------- uart1 Character Device 1 /* ##### 使用的uart1 设备 ##### */ uart0 Character Device 2 pin Miscellaneous Device 0 msh > list_thread msh >list_thread /* ##### freemodbus master 开启的线程 ##### */ thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- md_m_sen 31 suspend 0x00000124 0x00000200 57% 0x00000009 000 master t 10 suspend 0x000000ec 0x00000200 46% 0x00000002 000 md_m_pol 10 suspend 0x000000cc 0x00000200 66% 0x00000009 000 tshell 20 running 0x00000128 0x00000800 32% 0x00000007 000 drv 18 suspend 0x00000100 0x00000200 50% 0x00000002 000 tidle0 31 ready 0x000000a0 0x00000200 31% 0x0000001d 000 timer 4 suspend 0x000000b8 0x00000100 71% 0x00000009 000 main 10 suspend 0x000000d4 0x00000800 11% 0x00000013 000 msh > ``` - 主机例程运行起来,怎么验证呢?这里使用【电脑】上的Modbus Slave软件(Modbus从机)验证 ![2021-12-12_213943.png](https://oss-club.rt-thread.org/uploads/20211212/53facd095ef84338ae04a7950369bfdb.png.webp) ![2021-12-12_214046.png](https://oss-club.rt-thread.org/uploads/20211212/2b1b318e1b97674e3ca1721713708cbb.png.webp) ![2021-12-12_214349.png](https://oss-club.rt-thread.org/uploads/20211212/1312a78653784a62627c825ee5618a6f.png.webp) ![2021-12-12_214431.png](https://oss-club.rt-thread.org/uploads/20211212/ba0aef1b6ee3fd23f11bf2c2fd7948fa.png) - 自此,基于AB32VG1 开发板,freemodbus 串口主机验证搭建完成了。 ## 小结 - 需要根据实际的需要修改主机的应用,自定义通信协议,拿modbus协议只当成【数据收发】 - freemodbus默认例程只配置了一个从机,用户可以根据需要,与多个从机进行数据通信、控制 - 只有多实践,才能掌握基础的串口通信知识 - 若无法通信,需要验证串口通信是否正常、串口的配置是否正确,串口的引脚是否初始化正常,保证底层通信正常,上层协议才能正确的运行。 - 后期研究一下:AB32VG1的初始化栈、.bss、.data的设置 ## 测试demo ```c https://gitee.com/zhangsz0516/ab32_freemodbus_master ```
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
809
被采纳
175
关注TA
发私信
相关文章
1
ModbusRTU协议栈漏发送最后一个字节
2
3.0 增加freemodbus,编译不过
3
RT_THREAD上面的串口MODBUSRTU为啥没功能码?
4
关于 freemodbus 里存在的一点问题分享
5
请教如何使用组件里的FreeMODBUS
6
求一个FreeModbus的从机测试程序
7
FreeModbus的从机调试说明(含测试程序)
8
rtt_freemodbus
9
freemodbus怎么配置到uart
10
FreeModeBus从机调试问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部