软件包作为RT-Thread的特色之一,得到了众多开发者的青睐。近两年更是发展得如火如荼,数量已增至100有余。为了让软件包可以惠及更多开发者,我们特别开通了「软件包大赏」栏目,以后每周都会精选软件包推荐给大家。
另外,也希望有余力者可以积极的参与到软件包的贡献中来!
软件包贡献指南
软件包交流群:606118001
好了,现在进入正文
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
LIBMODBUS
图片来源网络
◆ 软件包简介:
源码地址:
https://github.com/loogg/libmodbus (请复制至外部浏览器打开)
libmodbus是一个与使用Modbus协议的设备进行数据发送/接收的库。该库包含各种后端通过不同网络进行通信(例如,RTU模式下的串口或TCP / IPv6中的以太网)。
libmodbus提供了较低通信层的抽象,并在所有支持的平台上提供相同的API。
本源码实现了在RT-Thread上的移植,支持MODBUS-RTU和MODBUS-TCP。
◆ 使用背景:
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
◆ 目录结构:
◆ 许可证:
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)
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官方一致
项目地址:
https://github.com/loogg/libmodbus
RT-Thread
让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。
长按二维码,关注我们