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

相关文章

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.