FreeModbus 应用笔记(2)——运行 Modbus 从机并使用网络通信

FreeModbus_Master 读取从机数据 一、请求读取的函数和存储返回值的变量 1. 读取输入寄存器(功能04) 1.1 请求读取输入寄存器的函数 eMBMasterReqReadInputRegister() 1.2. 存储返回值的变量 usMRegInBuf[ ][ ] 1.3. 举例 eMBMasterReqReadInputRegister(从机地址, ... 阅读详情

上期回顾:

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

1

运行 Modbus 从机

配置工程

在RT-Thread 源码目录下找到潘多拉的bsprt-thread\bsp\stm32\stm32l475-atk-pandora ,在此目录下打开 ENV 工具。

配置 FreeModebus 软件包

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、配置从机模式选项

进入 Slave mode 配置菜单,然后开启从机示例程序,如下图所示:

  • advanced configuration:高级配置选项

  • Enable RTU slave mode:开启 RTU 模式支持

  • Enable ASCII slave mode:开启 ASCII 模式支持

  • Enable TCP slave mode:开启 TCP 模式支持(需要设备可以连接网络,且可做服务器使用)

  • Enable slave 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_slave.c 关键代码如下所示:

向????滑动查看全部

 1#define MB_POLL_CYCLE_MS 200
 2extern USHORT usSRegHoldBuf[S_REG_HOLDING_NREGS]; /* 存储保持寄存器的数组 */
 3
 4static void send_thread_entry(void *parameter)
 5{
 6    USHORT         *usRegHoldingBuf;
 7    usRegHoldingBuf = usSRegHoldBuf;
 8    rt_base_t level;
 9
10    while (1)
11    {
12        level = rt_hw_interrupt_disable();
13        /* 改变保持寄存器 3 的数据 */
14        usRegHoldingBuf[3] = (USHORT)(rt_tick_get() / 100); 
15
16        rt_hw_interrupt_enable(level);
17        /* 数据产生的速率为 1个/秒 */
18        rt_thread_mdelay(1000);
19    }
20}
21
22static void mb_slave_poll(void *parameter)
23{
24    if (rt_strstr(parameter, "RTU"))
25    {
26#ifdef PKG_MODBUS_SLAVE_RTU    # 如果开启了 RTU 模式就检测 RTU 参数
27        eMBInit(MB_RTU, SLAVE_ADDR, PORT_NUM, PORT_BAUDRATE, PORT_PARITY);
28#else
29        rt_kprintf("Error: Please open RTU mode first");
30#endif
31    }
32    else if (rt_strstr(parameter, "ASCII"))
33    {
34#ifdef PKG_MODBUS_SLAVE_ASCII  # 如果开启了 ASCII 模式就检测 ASCII 参数
35        eMBInit(MB_ASCII, SLAVE_ADDR, PORT_NUM, PORT_BAUDRATE, PORT_PARITY);
36#else
37        rt_kprintf("Error: Please open ASCII mode first");
38#endif
39    }
40    else if (rt_strstr(parameter, "TCP"))
41    {
42#ifdef PKG_MODBUS_SLAVE_TCP    # 如果开启了 TCP 模式就检测 TCP 参数
43        eMBTCPInit(0);         # TCP 模式下使用默认端口 502
44#else
45        rt_kprintf("Error: Please open TCP mode first");
46#endif
47    }
48    else
49    {
50        rt_kprintf("Error: unknown parameter");
51    }
52    eMBEnable();
53    while (1)
54    {
55        eMBPoll();
56        rt_thread_mdelay(MB_POLL_CYCLE_MS);
57    }
58}

编译下载,程序开始运行。

输入 mb_slave_samlpe <RTU/ASCII/TCP>  运行示例程序。如运行 RTU 模式的从机示例程序。

1 \ | /
2- RT -     Thread Operating System
3 / | \     4.0.2 build Jul 11 2019
4 2006 - 2019 Copyright by rt-thread team
5msh />mb_slave_samlpe RTU           # 运行 RTU 模式的从机示例程序
6msh />

运行 Modbus Poll

Modbus Poll 是一个 Modbus 主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。下载安装软件 Modbus Poll: https://www.modbustools.com/

modbus poll 程序主窗口介绍

其中:Tx = 0表示向主站发送数据帧次数;Error = 0表示通讯错误次数;ID = 1表示模拟的Modbus子设备的设备地址;F = 03表示所使用的Modbus功能码,图中为03功能码;SR = 1000ms表示扫描周期。红字部分,表示当前的错误状态,“No Connection”表示未连接状态。

单击菜单【Setup】中【Read/Write Definition.. F8】进行参数设置,会弹出参数设置对话框。

然后点击 connection,连接从机。

运行结果

可以看到 Modbus Poll 与开发板上运行的从机通信成功,并且可以查看到从机 1 保持寄存器寄存器 3 的数据每秒改变一次。

2

使用网络进行 Modbus 通信

FreeModbus 的从机支持 TCP 模式,可以在已经连接网络,且可做服务端的设备上运行,并利用 TCP 协议和 远端主机进行通讯。

配置 FreeModebus 软件包

按上一节的操作,打开并配置 FreeModbus 软件包,配置支持 TCP 模式。

退出 menuconfig 配置工具并保存。然后 pkgs --update 下载软件包,然后 scons --target=mdk5 生成工程。

运行示例程序

编译下载,程序开始运行。输入 mb_slave_samlpe TCP 运行 TCP 模式下的示例程序。

 1 \ | /
 2- RT -     Thread Operating System
 3 / | \     4.0.2 build Jul 11 2019
 4 2006 - 2019 Copyright by rt-thread team
 5lwIP-2.0.2 initialized!
 6[I/sal.skt] Socket Abstraction Layer initialize success.
 7msh />ifconfig                     # 查看设备 IP 地址
 8network interface device: e0 (Default)
 9MTU: 1500
10MAC: 00 80 e1 14 2e 34
11FLAGS: UP LINK_UP INTERNET_UP DHCP_ENABLE ETHARP BROADCAST IGMP
12ip address: 192.168.12.162         # 设备的 IP 地址
13gw address: 192.168.10.1
14net mask  : 255.255.0.0
15dns server #0: 192.168.10.1
16dns server #1: 223.5.5.5
17msh />mb_slave_samlpe TCP          # 运行 TCP 模式的从机示例程序
18msh />

运行 Modbus Poll

单击菜单【Connection】中【connect.. F3】进行连接参数设置,会弹出参数设置对话框。选择 TCP/IP 连接方式,配置 从机设备的 IP 地址和端口号,点击 OK 即可。

运行结果

可以看到 Modbus Poll 与开发板上运行的从机通信成功,并且可以查看到从机 1 保持寄存器寄存器 3 的数据每秒改变一次。

3

注意事项

运行 TCP 通信示例之前,请确认当前 BSP 支持网络通信且可作为服务端运行。

引用参考:

FreeModbus 软件包主页:

https://github.com/RT-Thread-packages/freemodbus

 

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

uip+freemodbus网络通信 嵌入式网络通信 阅读详情

相关推荐

移植FreeModbus到uCOS的详细指南

FreeModbus是一个开源的Modbus协议栈实现,它包含几个核心功能模块,每个模块都有其特定的作用。这些模块确保了协议栈的灵活性和高效性。核心模块包括:Bootloader模块:负责初始化硬件并加载主程序。ASCII/RTU模块:这两个模块分别处理Modbus在ASCII和RTU模式下的通信。TCP/IP模块:处理Modbus TCP通信。Serial Driver模块:提供串行通信接口,是与硬件通信的关键层。Timestamp模块。

weixin_34618526的博客 814

移植FreeModbus+ModbusMaster(主机)+STM32至RT-Thread(3、4阶段)

1、移植了FreeModbus1.5及RT-Thread1.1.1至STM32 2、开发平台支持Eclipse、Keil、IAR 3、可在Eclipse采用EGIT插件进行版本管理 4、支持Modbus RTU(ASCII未测试) 5、目前主机方面只移植了寄存器相关功能,其余功能后期加入 详细说明可参见:http://blog.youkuaiyun.com/arminkztl/article/details/11738395 欢迎讨论 (备注:如果您需要把这个项目商用,请及时联系RT-Thread给您授权)

Armink Studio 4万+

FreeModbus源码解析与应用

在工业通信领域,Modbus协议作为一种简单实用的协议被广泛采用,而FreeModbus则是一个广受欢迎的开源实现。本章节旨在介绍FreeModbus库的基本概念、平台支持情况,以及如何在不同平台上部署和使用FreeModbus,为后续章节对源码的详细分析与应用实例打下坚实的基础。FreeModbus是一个轻量级、高效能且功能完整的Modbus协议栈实现,支持Modbus RTU和Modbus TCP两种通信模式。

weixin_42581003的博客 485

【STM32】FreeModbus 移植Modbus-RTU从机协议到STM32详细过程

是否使能Modbus-ASCII、Modbus-RTU、Modbus-TCP,这是只使能Modbus-RTU。协议栈应支持的最大 Modbus 功能码数量。/** FreeModbus库:用于Modbus ASCII/RTU的可移植实现。* 版权所有(c)2006-2018 Christian Walter <cwalter@embedded-solutions.at>* 保留所有权利。

林愿留的博客 1万+

使用STM32CubeMX移植FreeModbus到STM32G474RE方法

使用stm32cubemx进行单片机设置,并移植freemodbus,详细记录移植过程,已根据该教程实现多个型号移植,确认可行。

xcs101的博客 1438

FreeModbus v1.2多模式通信支持实战详解(RTU/ASCII/TCP)

Modbus作为一种广泛应用在工业自动化领域的通信协议,以其简洁性、开放性和高可靠性成为串行通信和网络通信的重要标准之一。本章将深入剖析Modbus协议的核心架构,重点介绍其在FreeModbus v1.2版本中所支持的三种主要传输模式:RTU(Remote Terminal Unit)、ASCII(American Standard Code for Information Interchange)以及TCP/IP。// FreeModbus初始化示例:选择不同传输模式// RTU模式初始化。

weixin_36019375的博客 1074

freemodbus modbus TCP 学习笔记

使用modbus有些时间了,期间使用过modbus RTU也使用过modbus TCP,通过博文和大家分享一些MODBUS TCP的东西。在嵌入式中实现TCP就需要借助一个以太网协议栈,在这里我选择最简单的uIP协议栈。uIP协议栈简单易用方便上手,相比于LwIP无论是移植还是使用难度都低些,这样就可以把更多的精力花在modbus tcp协议本身而不必花大量的时间研究以太网协议

物联网 IoT 经验分享 8万+

STM32自由通信系统:FreeModbus RTU与FreeRTOS结合实战

本文还有配套的精品资源,点击获取 简介:本项目旨在构建一个基于STM32微控制器的实时通信系统,通过集成FreeModbus RTU库和FreeRTOS实时操作系统,实现工业控制领域的高效多任务处理和串行通信。项目深入介绍了Modbus RTU协议、FreeRTOS的多任务管理,以及STM32硬件资源的应用。开发者将学习如何配置STM32作为Modbus主机或从机,以及如何...

weixin_30356433的博客 2648

探索Modbus通信的无限可能:Modbus从机和主机示例程序

在工业自动化领域,Modbus协议因其简单、可靠和广泛兼容性而备受青睐。然而,许多开发者在使用Modbus时,常常面临从机和主机功能分离的困扰。为了解决这一问题,我们推出了一个基于freemodbus的Modbus从机和主机示例程序。该项目不仅提供了完整的从机示例,还通过扩展实现了主机功能,使得用户可以在同一项目中无缝集成Modbus从机和主机的功能。 ## 项目技术分析 ### 技术栈 -

gitblog_09774的博客 1057

FreeRTOS实时操作系统+MODBUS主从通信(使用信号量唤醒MODBUS任务,使用互斥信号量共享数据).zip

6个任务 1、任务1控制闪烁3个指示灯,为周期性任务 2、任务2控制闪烁2个指示灯,为周期性任务 3、任务3 采集2路DI,为周期性任务,对本任务采集的2路DI互斥保护 4、任务4 采集2路DI,为周期性任务,对本任务采集的2路DI互斥保护 5、任务5 每隔1秒读取一次SD2405时钟芯片的时间(年、月、日、时、分、秒),对本任务采集的钟芯片的时间(年、月、日、时、分、秒)互斥保护 6、任务6 MODBUS任务, 串口中断服务程序中收到上位机的MODBUS主站请求命令后,通过释放信号量唤醒MODBUS任务。 该任务将任务3的2路DI,任务4的2路DI,任务5的SD2405时钟芯片时间(年、月、日、时、分、秒)发送给上位机。 要想使用互斥信号量,要在 FreeRTOSConfig.h 文件中使能宏定义: #define configUSE_MUTEXES 1

freemodbus-masterV1.6(最新版-未作任何修改)

FreeMODBUS是一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。

rt-thread学习之路第七十八章——FreeMobus应用

红字部分,表示当前的错误状态,“No Connection”表示未连接状态。FreeModbus 是一款开源的 Modbus 协议栈, Modbus 是施耐德公司设计的通信协议,一般用于工控领域, 只有从机代码开源,主机源码是需要。同时网上也没有比较好的开源的 Modbus 主机协议栈,在这样的背景下,armink 大神开发了这款支持主机模式的 FreeModbus 协议栈。可以看到 Modbus Slave 与开发板上运行的主机通信成功,并且可以看到其对应的保持寄存器的寄存器 2,3 的数据被不断改变。

weixin_43554326的博客 1771

Freemodbus-master-F401:支持 RS485 的 FreeModbus 主端口

Freemodbus-master-F401 支持 RS485 的 FreeModbus 主端口

FreeModbus

FreeModbus是一款开源、免费、轻量级的工业级 Modbus 协议栈,完全遵循Modbus 标准协议规范实现,是嵌入式领域中最主流、应用最广泛的 Modbus 协议解决方案。✅ 核心优势:无商业授权限制、代码精简(适配资源受限的嵌入式设备)、跨平台性极强、支持 Modbus 全核心功能,可快速移植到单片机 / 嵌入式系统中实现工业通信。✅核心支持的通信模式Modbus RTU:基于串口(UART)

m0_68381723的博客 1351

STM32 FreeRTOS Freemodbus RTU Master

STM32f103 freeRTOS FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要**收费**的。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。本版FreeModbus版本号更改为V1.6,特性如下: - 新增加的主机源码与原有从机的风格及接口保持一致; - 支持主机与从机在同一协议栈运行; - 支持实时操作系统及裸机移植; - 为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义超时时间等,方便应用层灵活调用; - 支持所有常用的Modbus方法。

自抗扰(ADRC)控制原理及控制器设计

自抗扰控制原理以及控制器设计

weixin_43487974的博客 3万+

Modbus 史上最全实例资料汇总

1.前言   Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一个控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错

zgkxzx的专栏 3万+

接入 deepseek 实现AI智能问诊

必须包含user角色,用于传递用户输入。system角色可选,用于设置对话背景。多轮对话需要将历史记录添加到messages中。

weixin_51326478的博客 6541

Freemodbus功能码宏定义解析

freemodbus在stm32zet6做从机源代码解析

weixin_47885857的博客 1173

S32K144 SDK实战:FTM输入捕获模块的配置与应用

本文详细介绍了S32K144 SDK中FTM输入捕获模块的配置与应用实践。从基础认知到开发环境搭建,再到引脚配置和中断处理技巧,全面解析了如何利用FTM模块实现高精度信号测量。特别适用于电机控制、工业测速等场景,帮助开发者快速掌握S32K144的FTM输入捕获功能。

weixin_42566424的博客 217

YOLO + Qwen3-VL-Seg 深度诊断:双引擎协同完成AI质检

本文提出了一种创新的工业质检双引擎架构,结合YOLO实时检测与Qwen3-VL-Seg精细化诊断,有效解决了传统检测方法中检测与诊断割裂的问题。YOLO部署在边缘端实现高效定位(3.2MB模型,<10ms延迟),Qwen3-VL-Seg在云端完成语义级缺陷分析(仅17M参数的解码器实现像素级分割)。该方案通过6步闭环流程,从实时感知到工艺反哺,显著提升了工业质检的准确性和可解释性,为智能制造提供了从"发现"到"解决"的完整技术路径。

mingo_敏 221

探索UiP FreeModbus TCP:开源、高效的MODBUS通信库

探索UiP FreeModbus TCP:开源、高效的MODBUS通信库 本文将向您介绍一个名为的开源项目,它是一个强大的MODBUS通信库,旨在简化工业自动化和物联网(IoT)中的设备间通讯。让我们一起深入了解它的功能、技术特点以及如何利用它来提升您的项目效率。 项目简介 UiP FreeModbus TCP是由开发者XuKai创建的一个开放源码项目,基于MIT许可证分发。它提供了一个完整的、跨...

gitblog_00084的博客 742

7、布尔网络的基础定义

本文介绍了布尔网络的基础定义及其在系统生物学中的应用。布尔网络是一种描述复杂系统动态行为的数学模型,由布尔变量和布尔函数组成,能够模拟生物系统中基因调控、信号传导和细胞代谢等过程。文章详细阐述了布尔网络的基本结构、动力学特征(如状态转移图和吸引子),以及其在生物建模中的重要价值,并探讨了优化和简化技术(如Backward Boolean Equivalence)如何提升其计算效率。

yhn45678901的博客 263
上一篇: 智能家居DIY连载教程(2)——在实际项目中运用消息队列与邮箱
下一篇: 使用 STM32 通用 Bootloader ,让 OTA 更加 Easy
RT-Thread物联网操作系统
博客等级 码龄6年 2万+粉丝 392原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值