|
我是老温,一名热爱学习的嵌入式工程师
J6 b8 }% g+ H8 l' q6 k* N6 _关注我,一起变得更加优秀!
0 ^7 v- d" ]( g6 [前一段时间,我们分享了嵌入式工业网关的设计思路,很多工控行业的工程师对其兴趣比较大,具体可以点击以下链接进行回顾:6 h! w0 T/ @8 Y
朋友想自研一款嵌入式工业网关,分享一下我的设计思路!/ m, W o% J( E& N: l3 j; x& W
工业网关主要用于采集工业现场设备的数据,并且把这些设备数据传输到指定的云端网络服务器,网关也可以自动运行预设的设备控制逻辑。; V5 G4 k' i. @( G! M+ i" n. Q4 Y
wdrr2uw3m3i640240305.jpg
, ]5 }3 t6 R$ `3 U
对于设备端数据采集,比较常用的传输协议是Modbus,嵌入式Linux设备一般采用libmodbus通信库提供的API接口,来实现Modbus-RTU或Modbus-TCP通信
" j; u$ O6 s6 H* B0 U# i) v以下是基于RK3506J开发平台,移植 libmodbus 通信库的具体过程。
9 r) A% s9 r( W" r" @$ G6 e2 d, @虚拟机系统:Ubuntu22.04 LTS嵌入式开发平台:OK3506J-SLinux内核:Linux Kernel 6.1.99交叉编译工具链:arm-linux-gcc
1 y+ S2 L; x) p' \7 w- D5 c1、先根据开发平台配套的资料文档,搭建好交叉编译环境,我使用VSCode+CMake进行工程框架构建,基本的工程框架搭建后,如下图所示。
4 N9 {1 Y, l4 e g
mqefxh4kqcl640240405.png
E! }6 ?% C! n/ e5 N
2、访问libmodbus的官网,链接如下:https://libmodbus.org/6 {( k$ _2 p7 O, x: R; g4 V% m$ ?
hyewi0dvnli640240505.png
% m; n# L' d+ w- ?
3、点击右上角的github链接,下载3.1.10版本的libmodbus库,然后上传到Ubuntu22.04指定目录下进行解压,解压出来的文件如下图所示。) m0 {& ?+ K$ M: n3 ^
zrz3i4voocw640240606.png
( S# h# H9 p' u. A% B
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源码配置成功后,如下图所示。
. y% d( c0 a: }
a5dltqhfcgi640240706.png
7 }: s4 a& S9 T0 Q+ k7 ^
5、在libmodbus源码目录下,执行 make && make install 命令,对源码进行编译和安装,编译安装成功后,在install目录下会生成Modbus相关的头文件和库文件,如下图所示。! n/ M0 V: l+ t# O* m" f
nqsq2nq5fll640240806.png
4 s5 [0 O- c: Y# Q2 M! U3 s
6、把include目录和lib目录都添加到CMake工程里面,然后在main.c函数里面编写一个测试例程,具体代码如下图所示。
J% h! g6 {) O4 G2 ^
drborap1dzl640240906.png
4 u3 [0 r1 ?9 ?1 G9 ~
7、编译上述示例代码,编译成功后把可执行文件OpenGateway拷贝到开发板,同时把lib目录下的libmodbus.so.5.1.0文件,也拷贝到开发板的/usr/lib目录下,并创建对应的软链接,如下图所示。
9 w! Q, _% ]4 S5 t8 g% C3 U
w2rmxjrxjb0640241006.png
( Y4 l7 E0 C! d7 Q% A! y$ W1 N2 s/ R
8、使用 Modbus-Slave 软件工具,模拟一个Modbus-RTU从机,OK3506J-S开发平台每隔1秒轮询读取Modbus从机的数据,并在终端打印出来,如下图所示。* Z y% F) F( y0 \) |
kkkemqitiha640241106.jpg
$ N+ h. ?% {: N+ g6 v" k; k/ k5 c
通过USB转RS485工具,OK3506J-S开发板与电脑进行通信。8 }. x1 m! y& {5 ]$ g
cylr4xznah2640241206.jpg
) j. G* N5 p" ]& g' y
8、下一节,我们将继续移植另一个重要的通信模块,MQTT通信库,欢迎继续关注!
_+ e4 Q4 ^. ?工程源码链接,或点击【阅读原文】https://gitee.com/embediot/open-gateway.git$ s: W; F! C: y2 D6 n+ @# Y+ P* k
-END-
, m3 A$ e6 q" k- D8 q% I往期推荐:点击图片即可跳转阅读
& [2 f- k* L- w' P! b
swp2d3pos4k640241306.jpg
/ W0 k1 u* S* P" l! f9 Y7 h嵌入式软硬件开发,面对学不完的新技术,咋办?6 ^, }5 Z3 [( c0 P, n5 ~8 G
wnqdcq4vyny640241406.jpg
, c7 P! v% i3 |. C$ H) ^/ J最近在画图,电源稳定性对嵌入式硬件设备来说,实在是太重要了!
8 X) H0 c8 X& c' w- I7 r
tunydo0rgia640241506.jpg
1 W! D# o/ W8 E8 v/ Z) J& V( p% H
告别深夜的方便面,嵌入式工程师如何改写生存法则?' [' r- r" x% t5 V. {
我是老温,一名热爱学习的嵌入式工程师0 B" |$ E. K. j, }4 T
关注我,一起变得更加优秀! |
|