软件包作为RT-Thread的特色之一,得到了众多开发者的青睐。近两年更是发展得如火如荼,数量已增至100有余。为了让软件包可以惠及更多开发者,我们特别开通了「软件包大赏」栏目,以后每周都会精选软件包推荐给大家。

 

软件包大赏第1期|新增软件包——LIBMODBUS_嵌入式

另外,也希望有余力者可以积极的参与到软件包的贡献中来!

 

 

 

 软件包大赏第1期|新增软件包——LIBMODBUS_上传_02

软件包贡献指南

软件包交流群:606118001

 

    好了,现在进入正文软件包大赏第1期|新增软件包——LIBMODBUS_物联网_03

RT-Thread新增の软件包 / 1 

    0130

软件包贡献者:马龙伟

南京工程学院学生

 

马龙伟,RT-Thread和嵌入式技术爱好者,目前从事物联网智能设备开发和单片机/嵌入式驱动开发工作。

 

我从大三开始接触物联网,先后接触过UCOS、FreeRTOS操作系统,当时只会代码模块化,每次新的工程只能复制黏贴,有时候因为复制黏贴出错,一调就是一天。大三暑假实习的时候接触到了MQTT协议,在对比Paho MQTT和OneNet官方的例程中的MQTT例子时,产生了一个想法:有没有什么办法能让在单片机上网络编程,也能像在电脑上一样有公用的API呢?

 

时至大四,因为毕设开题的需要,实习公司的同事便给我推荐了RT-Thread这个操作系统,就抱着试试看的态度(听说这款系统是国产的并且开源,而且框架也很好)开始学习这个系统。自从用上ENV工具并且熟悉设备框架后,我不可自拔的爱上了它。自动构建工程和统一应用API的体验,让我彻底远离了以往复制黏贴的糟心感;用过at_device软件包后,更感觉好像打开了新世界的大门,不经感叹竟然还有这种神操作。在这之后,我便按照RT-Thread的框架重新做了毕设,发现代码层次一目了然。

 

自此之后,便十分仰慕RT-Thread开发团队的大牛和开源精神,为此积极融入RT-Thread的社区。积极地把在生活、工作中用到的公用的模块制作成软件包上传,目前已上传at_device SIM800C的驱动libmodbus软件包STemWin软件包。下面就介绍一下我最新贡献的一个软件包——LIBMODBUS软件包大赏第1期|新增软件包——LIBMODBUS_物联网_03

 

LIBMODBUS

 

 

软件包大赏第1期|新增软件包——LIBMODBUS_商业_05

图片来源网络

 

◆ 软件包简介:

 

源码地址:

https://github.com/loogg/libmodbus  (请复制至外部浏览器打开)

libmodbus是一个与使用Modbus协议的设备进行数据发送/接收的库。该库包含各种后端通过不同网络进行通信(例如,RTU模式下的串口或TCP / IPv6中的以太网)。

libmodbus提供了较低通信层的抽象,并在所有支持的平台上提供相同的API。

本源码实现了在RT-Thread上的移植,支持MODBUS-RTU和MODBUS-TCP。

◆ 使用背景:

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

 

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

 

当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

 

◆ 目录结构: 

软件包大赏第1期|新增软件包——LIBMODBUS_引脚_06

◆ 许可证:

libmodbus package 遵循 LGPLv2.1 许可,详见 LICENSE 文件。

 

◆ 依赖:

 

RT-Thread 4.0+ 、Filesystem 、libc 、pin 、serial 、POSIX 、SAL

 

◆ 如何打开 libmodbus:

使用 libmodbus package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:

 

1RT-Thread online packages
2    IoT - internet of things --->
3        [*] libmodbus: A Modbus library for RT-Thread

然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

 

◆使用 libmodbus:

在打开 libmodbus package 后,当进行 bsp 编译时,它会被加入到 bsp 工程中进行编译。

1、创建modbus RTU 环境

  • 初试化RTU环境指针

 

modbus_t *modbus_new_rtu(const char *device, int baud,char parity, int data_bit, int stop_bit)
  • 设置串口模式

 

int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode)
  • 在RTU环境下设置RTS模式,为RS485模式下设置控制引脚

 

int modbus_rtu_set_rts(modbus_t *ctx, int rts_pin, int mode)

软件包大赏第1期|新增软件包——LIBMODBUS_嵌入式_07

 

2、创建modbus TCP 环境

  • 初始化TCP环境指针

 

modbus_t *modbus_new_tcp(const char *ip, int port)
  • 作为客户端连接服务器

 

int modbus_connect(modbus_t *ctx)
  • 作为服务器监听

 

int modbus_tcp_listen(modbus_t * ctx, int nb_connection)

int modbus_tcp_accept(modbus_t * ctx, int * s)

3、示例

MODBUS-RTU和MODBUS-TCP使用示例在 /examples 下,使用方法与原生libmodbus一致。

4、注意事项

在使用RTU-RS485模式时,先设置引脚模式,再设置RS485模式,再设置控制引脚

rt_pin_mode(MAX3491_RE, PIN_MODE_OUTPUT);
modbus_t *ctx = RT_NULL;
ctx = modbus_new_rtu("/dev/uart2", 115200, 'N', 8, 1);
modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
modbus_rtu_set_rts(ctx, MAX3491_RE, MODBUS_RTU_RTS_UP);

其余API和libmodbus官方一致

 

软件包大赏第1期|新增软件包——LIBMODBUS_商业_08项目地址:

https://github.com/loogg/libmodbus

 

 

 

 

 

软件包大赏第1期|新增软件包——LIBMODBUS_嵌入式_09

RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们