你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
rtthread 发布时间:2019-7-30 15:57
简介
FreeModbus 是一款开源的 Modbus 协议栈,但是只有从机开源,主机源码是需要收费的。同时网上也没有比较好的开源的 Modbus 主机协议栈,在这样的背景下,armink 大神开发了这款支持主机模式的 FreeModbus 协议栈。
本文的分为2篇推送,分别介绍如何在潘多拉开发板上运行 Modbus 主机与从机。首先介绍串口方式通信的 Modbus 主机和从机。然后介绍如何使用网络进行 Modbus 通信。
准备工作
1、首先演示使用串口作为 Modbus 通信通道的方式,将潘多拉开发板的 uart2 通过 usb 转串口线连接到电脑上
2、使用 usb 线连接开发板的 st-link 接口到电脑上,打开电源开发,开发板上电。
3、查看设备管理器,可以看到两个串口设备,一个用来 shell 通信,一个用来 Modbus 通信。
1.png

运行 Modbus 主机配置工程
在 RT-Thread 源码目录下找到潘多拉的bsp rt-thread\bsp\stm32\stm32l475-atk-pandora ,在此目录下打开 ENV 工具。
配置 FreeModbus 软件包
1、输入 menuconfig 命令打开配置工具
2.png
2.按照下面的路径进入 FreeModbus 软件包的配置菜单,并开启主机模式
  1. RT-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 配置菜单,然后开启主机示例程序,如下图所示:
3.png
  • 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 。
  1. Hardware Drivers Config  --->
  2.   On-chip Peripheral Drivers  --->
  3.     -*- Enable UART  --->
  4.       [*]   Enable UART2
复制代码
4.png

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

5.png


运行示例程序
打开工程,在 FreeModbus 分组里可以看到主机的示例代码 sample_mb_master.c 关键代码如下所示:

  1. #define MB_POLL_CYCLE_MS   500

  2. static void send_thread_entry(void *parameter)
  3. {
  4.    eMBMasterReqErrCode error_code = MB_MRE_NO_ERR;
  5.     rt_uint16_t error_count = 0;
  6.     USHORT data[2] = {0};

  7.    while (1)
  8.     {
  9.         /* 准备要写入的数据 */
  10.         data[0] = (USHORT)(rt_tick_get() / 10);
  11.         data[1] = (USHORT)(rt_tick_get() % 10);
  12.         /* 向从机写多个保持寄存器 */
  13.         error_code = eMBMasterReqWriteMultipleHoldingRegister(SLAVE_ADDR,          /* salve address */
  14.                                                               MB_SEND_REG_START,   /* register start address */
  15.                                                               MB_SEND_REG_NUM,     /* register total number */
  16.                                                               data,                /* data to be written */
  17.                                                               RT_WAITING_FOREVER); /* timeout */

  18.         /* Record the number of errors */
  19.         if (error_code != MB_MRE_NO_ERR)
  20.         {
  21.             error_count++;
  22.         }
  23.     }
  24. }

  25. static void mb_master_poll(void *parameter)
  26. {
  27.     /* Modbus 主机协议栈初始化,初始化为 RTU 模式 */
  28.     eMBMasterInit(MB_RTU, PORT_NUM, PORT_BAUDRATE, PORT_PARITY);
  29.     eMBMasterEnable();

  30.     while (1)
  31.     {
  32.         /* 定时轮询 */
  33.         eMBMasterPoll();
  34.         rt_thread_mdelay(MB_POLL_CYCLE_MS);
  35.     }
  36. }
复制代码
编译下载,程序开始运行。
6.png
输入 mb_master_samlpe 运行主机示例程序。


收藏 评论0 发布时间:2019-7-30 15:57

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版