我是老温,一名热爱学习的嵌入式工程师。关注我,一起变得更加优秀!
前一段时间,我们分享了嵌入式工业网关的设计思路,很多工控行业的工程师对其兴趣比较大,具体可以点击以下链接进行回顾:
朋友想自研一款嵌入式工业网关,分享一下我的设计思路!
工业网关主要用于采集工业现场设备的数据,并且把这些设备数据传输到指定的云端网络服务器,网关也可以自动运行预设的设备控制逻辑。
对于设备端数据采集,比较常用的传输协议是Modbus,嵌入式Linux设备一般采用libmodbus通信库提供的API接口,来实现Modbus-RTU或Modbus-TCP通信
以下是基于RK3506J开发平台,移植 libmodbus 通信库的具体过程。
虚拟机系统:Ubuntu22.04 LTS嵌入式开发平台:OK3506J-SLinux内核:Linux Kernel 6.1.99交叉编译工具链:arm-linux-gcc
1、先根据开发平台配套的资料文档,搭建好交叉编译环境,我使用VSCode+CMake进行工程框架构建,基本的工程框架搭建后,如下图所示。
2、访问libmodbus的官网,链接如下:https://libmodbus.org/
3、点击右上角的github链接,下载3.1.10版本的libmodbus库,然后上传到Ubuntu22.04指定目录下进行解压,解压出来的文件如下图所示。
4、在libmodbus源码目录下,创建一个install目录用来存放编译后的库文件,最后执行./configure脚本对源码进行配置。
mkdir install
./configure --host=arm-linux-gnueabihf
--enable-static
--prefix=/opt/work/ok3506j/third_party_libs/libmodbus-3.1.10/install/
CC=arm-linux-gcc
源码配置成功后,如下图所示。
5、在libmodbus源码目录下,执行 make && make install 命令,对源码进行编译和安装,编译安装成功后,在install目录下会生成Modbus相关的头文件和库文件,如下图所示。
6、把include目录和lib目录都添加到CMake工程里面,然后在main.c函数里面编写一个测试例程,具体代码如下图所示。
7、编译上述示例代码,编译成功后把可执行文件OpenGateway拷贝到开发板,同时把lib目录下的libmodbus.so.5.1.0文件,也拷贝到开发板的/usr/lib目录下,并创建对应的软链接,如下图所示。
8、使用 Modbus-Slave 软件工具,模拟一个Modbus-RTU从机,OK3506J-S开发平台每隔1秒轮询读取Modbus从机的数据,并在终端打印出来,如下图所示。
通过USB转RS485工具,OK3506J-S开发板与电脑进行通信。
8、下一节,我们将继续移植另一个重要的通信模块,MQTT通信库,欢迎继续关注!
工程源码链接,或点击【阅读原文】https://gitee.com/embediot/open-gateway.git