借助Linux RT系统打造自己的工业控制器 - 1
动机
传统的工业控制器以PLC为主,PLC基于专用硬件和专用软件构成。虽然很稳定,但也存在芯片方案老旧,编程语言局限(局限于 IEC61131‑3)以及定制开发灵活性差的问题。
现在PLC发展出现了新的趋势,出现了两种新形态的“PLC”控制器:
软PLC
硬件使用通用的商用处理器,软件基于实时操作系统或者实时内核构建。常见的产品有倍福公司的TwinCAT生态以及CODESYS软件集团的CODESYS生态。
混合PLC
硬件使用通用商用处理器+专用PLC芯片的异构架构。在通用商用处理器上运行一种实时操作系统,例如Vxworks, Linux RT,在PLC芯片上运行传统PLC软件,使用传统的PLC生态进行开发。代表的产品是三菱自动化推出的MXR500L系列产品。
无论是哪种形态,新形态的“PLC”的芯片算力得到空前提高,并且拥有海量内存和磁盘资源,搭载的实时操作系统也对开发者开放。
开发者不仅可以使用厂商提供的API接口对PLC运行时或者PLC硬件进行互操作,也可以使用海量开源资源进行灵活的定制开发。一些以前难以在PLC上部署的功能也能实现:
- 复杂的自动化算法,例如最优控制,模型预测控制这种算法可以直接部署到PLC上;
- 数据采集,数据分析,数据库等应用也能部署到PLC上;
- 可以开发各种定制通讯协议以及界面;
实时操作系统带来了高度的灵活性,也带来了比较高的开发门槛,大部分控制工程师和电气工程并不具备直接开发实时应用的能力,直接给一个操作系统直接开发业务逻辑往往有点困难。
所以我想开发一款中间件,工作在操作系统和控制业务逻辑中间,将操作系统和业务逻辑解耦。
目标平台
嵌入式平台
例如三菱的MXR500L,或者其他预装Linux RT和Codesys的ARM based控制器。建议搭建交叉编译环境进行开发。
PC平台
任何预装Linux RT和Codesys的工控PC。建议直接使用本地资源进行编译和开发。
搭建开发平台
搭建交叉编译环境
以下假设本地平台:x86_64-linux-gnu,目标平台是aarch64-linux-gnu。
安装Linux系统
在PC上安装Linux系统或者使用虚拟机安装Linux,Linux版本务必与目标机的Linux版本一致。
将用户添加到sudoers组
使用终端执行以下命令:
su - root
usermod -aG sudo r2h
安装交叉编译工具链
联机后,使用终端执行以下命令:
sudo apt-get update
sudo apt-get install crossbuild-essential-arm64
安装 GDB
联机后,使用终端执行以下命令:
sudo apt-get update
sudo apt-get install gdb-multiarch
安装 GDB Server
下载源文件并解压
GMP & MPFR
https://gcc.gnu.org/pub/gcc/infrastructure/
GDB
编译 GMP
进入 GMP 源文件目录后运行以下代码来生成 makefile:
./configure --prefix=/home/r2h/tools/build/gmp --host=aarch64-linux-gnu
使用以下命令进行编译:
make
make install
编译 MPFR
进入 MPFR 源文件目录后运行以下代码来生成 makefile:
./configure \
--prefix=/home/r2h/tools/build/mpfr\
--host=aarch64-linux-gnu \
--with-gmp=/home/r2h/tools/build/gmp
--with-gmp:指定已安装的 GMP 库路径
使用以下命令进行编译:
make
make install
编译 GDB Server
进入 GDB 源文件目录后运行以下代码来生成 makefile:
./configure \
--prefix=/home/r2h/tools/build/gdb\
--host=aarch64-linux-gnu\
--with-gmp=/home/r2h/tools/build/gmp\
--with-mpfr=/home/r2h/tools/build/mpfr
--with-gmp:指定已安装的 GMP 库路径
--with-mpfr:指定已安装的 MPFR 库路径
使用以下命令进行编译:
make all-gdbserver
make install-gdbserver
复制到目标机
在 GDB 目录后使用 scp 命令将 gdbserver 传送至目标机(以三菱MXR500L为例):
scp gdbserver mxr@192.168.3.3:/home/mxr
验证
使用 SSH 远程登录到目标机,查看 gdbserve r的版本可以验证 gdbserver 是否可以正常工作:
ssh mxr@192.168.3.3
./gdbserver --version

安装 Eclipse IDE for C/C++ Developers
Eclipse IDE for C/C++ Developers
https://www.eclipse.org/downloads/packages/release/2026-09/r/eclipse-ide-cc-developers使用 Eclipse IDE 新建 Cross-Compile Project 即可进行开发和调试程序了。需要注意几点:
- 根据目标机平台设置相应的 prefix,例如ARM64平台,通常可以设置为 aarch64-linux-gnu- ;
- 正确设置 Connection,通常使用 SSH;
- 正确设置 GDB Debugger 路径,通常是 /usr/bin/gdb-multiarch;
- 正确设置 GDB Server 路径,该路径指示调试器如何在目标机中找到 GDB Server,用户应使用 SCP 将 GDB Server 复制到这个路径所指示的目录中;
允许root用户通过SSH登录目标机
为了方便调试,避免权限问题导致的一些问题,应该让目标机允许 root 用户通过 SSH 登录,我们可以通过修改目标机上的 sshd_config 文件实现:
sudo vim /etc/ssh/sshd_config
PermitRootLogin yes
service ssh restart
搭建本地编译环境
安装 Eclipse IDE for C/C++ Developers
Eclipse IDE for C/C++ Developers
https://www.eclipse.org/downloads/packages/release/2026-09/r/eclipse-ide-cc-developers使用 Eclipse IDE 新建 Empty Project 即可进行开发和调试程序了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)