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

2023-10-18 02:18

本文主要是介绍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 主机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229528

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二