Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
freemodbus
SPI从机
AB32VG1 RT-Thread freemodbus 串口RTU从机
发布于 2021-12-12 12:54:17 浏览:932
订阅该版
[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 适配好的软件包,需要配置并更新到本地工程 ![2021-12-12_120708.png](https://oss-club.rt-thread.org/uploads/20211212/467939fd923f9dd1ef5a5afdbbb6fe21.png) ![2021-12-12_120748.png](https://oss-club.rt-thread.org/uploads/20211212/4e0d75907bfbd20ee18a82f7d06624ed.png.webp) - 注意使能了 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_slave.c` ![2021-12-12_123110.png](https://oss-club.rt-thread.org/uploads/20211212/808c67fdad6301030ed97a55958aaff6.png.webp) - 修改例程:主要是:UART的串口号,这里使用`uart1`,串口号改为1, - 然后是串口是否需要【奇偶校验】,可以改为【无校验】, - 再就是每个modbus从机,都有一个【从机地址】,这里我改为:3。 ![2021-12-12_123548.png](https://oss-club.rt-thread.org/uploads/20211212/c2eb33a122c81d1f1ed00fd27d0fabd6.png) - freemodbus从机基本这样了,刷新:RT-Thread Studio 工程,可以使用ENV工具:`scons --target=eclipse` ## 协议的验证 - 代码写好,下载到板子上,运行msh 串口命令,查看协议是否开启: ```c msh > \ | / - RT - Thread Operating System / | \ 4.0.4 build Dec 12 2021 10:49:40 2006 - 2021 Copyright by rt-thread team Hello, world msh > list_device msh >list_device device type ref count -------- -------------------- ---------- uart1 Character Device 0 /*#### 设备 uart1 开启 #####*/ uart0 Character Device 2 pin Miscellaneous Device 0 msh > list_thread msh >list_thread thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- tshell 20 running 0x00000128 0x00000800 32% 0x00000002 000 drv 18 suspend 0x00000100 0x00000200 50% 0x00000003 000 tidle0 31 ready 0x000000a0 0x00000200 31% 0x00000010 000 timer 4 suspend 0x000000b8 0x00000100 71% 0x00000009 000 main 10 suspend 0x000000d4 0x00000800 12% 0x00000013 000 msh > mb_slave_samlpe msh >mb_slave_samlpe Usage: mb_slave_samlpe RTU/ASCII/TCP msh > mb_slave_samlpe msh >mb_slave_samlpe RTU /*#### 协议运行,这里使用命令开启,当然可以直接在主程序调用开启 #####*/ msh >IRQ in Flash: 1 0 - 140a4 e8c8 msh >list_thread /*#### 协议运行会创建线程:mb_s_sen 、mb_s_pol、 slave tr等 ####*/ thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- md_s_sen 31 suspend 0x000000d8 0x00000200 42% 0x0000000a 000 slave tr 10 suspend 0x000000ec 0x00000200 46% 0x00000001 000 md_s_pol 10 suspend 0x000000d0 0x00000400 33% 0x00000008 000 tshell 20 running 0x00000128 0x00000800 32% 0x00000002 000 drv 18 suspend 0x00000100 0x00000200 53% 0x00000001 000 tidle0 31 ready 0x000000a0 0x00000200 31% 0x00000012 000 timer 4 suspend 0x000000b8 0x00000100 71% 0x00000009 000 main 10 suspend 0x000000d4 0x00000800 12% 0x00000013 000 ``` - 从机协议运行起来,怎么验证呢?这里使用【电脑】上的Modbus poll软件(Modbus主机)验证 ![2021-12-12_130211.png](https://oss-club.rt-thread.org/uploads/20211212/3dfd8dce4c815ee6addc75e17647ef04.png.webp) ![2021-12-12_124451.png](https://oss-club.rt-thread.org/uploads/20211212/2bab18f6fe216f7113d5caa8777d0db0.png) ![2021-12-12_124531.png](https://oss-club.rt-thread.org/uploads/20211212/be7240b246294ca50cdf1978a4c77ea5.png.webp) ![2021-12-12_124651.png](https://oss-club.rt-thread.org/uploads/20211212/279e28fb6f96242df19cf8c5c4dab4bb.png) ![2021-12-12_124732.png](https://oss-club.rt-thread.org/uploads/20211212/469e380c659ce0caf875418b04b5ade2.png) - 自此,基于AB32VG1 开发板,freemodbus 串口从机搭建完成了。 ## 小结 - 可能很多人会问到,搭建完成后,怎么修改寄存器的值,怎么控制个LED灯之类的操作,我想,这需要根据实际的需要,做应用。 - 至于修个哪个寄存器或【线圈】,用户可以查看modbus协议,并尝试填充数据与根据数据进行相应的操作。 - freemodbus协议比较简单实用,一些工控类设备,都会采用,注意协议数据位【用户数据】,收到数据后,用户可以自定义自己的应用操作,而不是让协议自己【空跑】,也就是freemodbus协议本身提供了数据的【通信】【传输】,并没有规定用户自己的应用。 - 多实践,才能更理解的更深入。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
805
被采纳
174
关注TA
发私信
相关文章
1
FREEMODBUS的设置问题
2
freemodbus tcp
3
freemodbus,写保持寄存器返回值一直是3,但是正确写入 ?
4
FreeModbus 从机该如何更新数据,菜鸟的不解.
5
RT thread freemobus tcp通讯问题
6
freemodbus主机读取从机保持寄存器命令后多两个0
7
freemodbus接收CRC校验疑问
8
freemodbus主机不通
9
freemodbus的主机任何指令都timeout
10
freemodbus 软件包主机有bug
推荐文章
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部