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

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象