当前位置: 代码迷 >> 综合 >> FreeModbus 应用笔记(1)——如何在潘多拉开发板上运行 Modbus 主机
  详细解决方案

FreeModbus 应用笔记(1)——如何在潘多拉开发板上运行 Modbus 主机

热度:91   发布时间:2023-12-21 15:18:11.0

简介

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

  相关解决方案