本文主要是介绍FreeModbus 应用笔记(1)——如何在潘多拉开发板上运行 Modbus 主机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
FreeModbus 是一款开源的 Modbus 协议栈,但是只有从机开源,主机源码是需要收费的。同时网上也没有比较好的开源的 Modbus 主机协议栈,在这样的背景下,armink 大神开发了这款支持主机模式的 FreeModbus 协议栈。
本文的分为2篇推送,分别介绍如何在潘多拉开发板上运行 Modbus 主机与从机。首先介绍串口方式通信的 Modbus 主机和从机。然后介绍如何使用网络进行 Modbus 通信。
准备工作
1、首先演示使用串口作为 Modbus 通信通道的方式,将潘多拉开发板的 uart2
通过 usb 转串口线连接到电脑上
2、使用 usb 线连接开发板的 st-link 接口到电脑上,打开电源开发,开发板上电。
3、查看设备管理器,可以看到两个串口设备,一个用来 shell 通信,一个用来 Modbus 通信。
运行 Modbus 主机
配置工程
在 RT-Thread 源码目录下找到潘多拉的bsp rt-thread\bsp\stm32\stm32l475-atk-pandora
,在此目录下打开 ENV 工具。
配置 FreeModbus 软件包
1、输入 menuconfig 命令打开配置工具
2.按照下面的路径进入 FreeModbus 软件包的配置菜单,并开启主机
模式
1RT-Thread online packages --->
2 IoT - internet of things --->
3 [*] FreeModbus: Modbus master and slave stack --->
4 [*] Master mode --->
5 [ ] Slave mode ----
6 Version (latest) --->
3.配置主机模式选项
进入 Mastar mode
配置菜单,然后开启主机示例程序,如下图所示:
advanced configuration:高级配置选项
Enable RTU master mode:开启 RTU 模式支持(主机暂只支持 RTU 模式)
Enable master sample:开启主机示例程序
Test slave device address:测试用的从机设备地址
uart number used by master sample, e.g. 2 means uart2:表示使用串口几进行通信,默认使用 uart2
uart baudrate used by master sample:通信用的波特率
配置硬件 uart2
然后返回到主菜单,进入硬件配置的菜单里开启 uart2 。
1Hardware Drivers Config --->
2 On-chip Peripheral Drivers --->
3 -*- Enable UART --->
4 [*] Enable UART2
退出 menuconfig
配置工具并保存。然后 pkgs --update
下载软件包,然后 scons --target=mdk5
生成工程。
运行示例程序
打开工程,在 FreeModbus 分组里可以看到主机的示例代码 sample_mb_master.c
关键代码如下所示:
向????滑动查看全部>>
1#define MB_POLL_CYCLE_MS 50023static void send_thread_entry(void *parameter)4{5 eMBMasterReqErrCode error_code = MB_MRE_NO_ERR;6 rt_uint16_t error_count = 0;7 USHORT data[2] = {0};89 while (1)
10 {
11 /* 准备要写入的数据 */
12 data[0] = (USHORT)(rt_tick_get() / 10);
13 data[1] = (USHORT)(rt_tick_get() % 10);
14 /* 向从机写多个保持寄存器 */
15 error_code = eMBMasterReqWriteMultipleHoldingRegister(SLAVE_ADDR, /* salve address */
16 MB_SEND_REG_START, /* register start address */
17 MB_SEND_REG_NUM, /* register total number */
18 data, /* data to be written */
19 RT_WAITING_FOREVER); /* timeout */
20
21 /* Record the number of errors */
22 if (error_code != MB_MRE_NO_ERR)
23 {
24 error_count++;
25 }
26 }
27}
28
29static void mb_master_poll(void *parameter)
30{
31 /* Modbus 主机协议栈初始化,初始化为 RTU 模式 */
32 eMBMasterInit(MB_RTU, PORT_NUM, PORT_BAUDRATE, PORT_PARITY);
33 eMBMasterEnable();
34
35 while (1)
36 {
37 /* 定时轮询 */
38 eMBMasterPoll();
39 rt_thread_mdelay(MB_POLL_CYCLE_MS);
40 }
41}
编译下载,程序开始运行。
输入 mb_master_samlpe
运行主机示例程序。
运行 Modbus Slave
Modbus Slave 是一个 Modbus 从设备仿真器,可以仿真 32 个从设备/地址域。每个接口都提供了对 EXCEL 报表的 OLE 自动化支持。主要用来模拟 Modbus 从站设备,接收主站的命令包,回送数据包。帮助 Modbus 通讯设备开发人员进行 Modbus 通讯协议的模拟和测试。安装运行 Modbus Slave。下载安装软件Modbus Slave https://www.modbustools.com/(请将链接复制至外部浏览器打开)
Modbus Slave 需要先配置从机参数,然后连接主机。
modbus slave 程序主窗口介绍
其中:ID = 1表示模拟的Modbus子设备的设备地址;F = 03表示所使用的Modbus功能码,图中为03功能码。红字部分,表示当前的错误状态,“No Connection”表示未连接状态。
单击菜单【Setup】中【Slave Definition.. F8】进行参数设置,会弹出参数设置对话框。
然后点击连接(Connection),连接对应开发板上 Modbus 主机控制的 uart2 的端口即可。
运行结果
可以看到 Modbus Slave 与开发板上运行的主机通信成功,并且可以看到其对应的保持寄存器的寄存器 2,3 的数据被不断改变。
我们下期再见
RT-Thread线上活动
1、【RT-Thread能力认证考试12月——RCEA】经过第一次考试的验证,RT-Thread能力认证得到了更多社区开发者和产业界的大力支持!(点此查看)如果您有晋升、求职、寻找更好机会的需要,有深入学习和掌握RT-Thread的需求,欢迎垂询/报考!
能力认证官网链接:https://www.rt-thread.org/page/rac.html(在外部浏览器打开)
立即报名
#题外话# 喜欢RT-Thread不要忘了在GitHub上留下你的STAR哦,你的star对我们来说非常重要!链接地址:https://github.com/RT-Thread/rt-thread
你可以添加微信18917005679为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群
RT-Thread
让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。
长按二维码,关注我们
看这里,求赞!求转发!
点击阅读原文进入GitHub
这篇关于FreeModbus 应用笔记(1)——如何在潘多拉开发板上运行 Modbus 主机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!