博客专栏

EEPW首页 > 博客 > 通过 Docker 部署测试 CODESYS PLC示例

通过 Docker 部署测试 CODESYS PLC示例

发布人:toradex 时间:2025-07-22 来源:工程师 发布文章

By Toradex 秦海

简介

CODESYS 是基于 IEC 61131-3 的 PLC 开发工具,在工业控制、交通等领域中有着广泛的应用。在之前的文章中介绍了通过 Yocto Linux BSP 环境下部署 CODESYS Control Runtime 环境的示例,本文则着重测试如何通过 Docker 环境来进行部署测试。

本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台


准备

a). Verdin i.MX8MP ARM核心版配合Dahlia 载板,并连接调试串口和 HDMI 显示器用于测试


BSP 配置

a). 参考这里文章说明,下载适用于 Verdin iMX8MP 的 TorizonOS 7.x BSP Image 并通过 Toradex Easy Installer 安装到 Verdin i.MX8MP 模块,因为 CODESYS 需要 Linux 包含实时补丁,因此请使用 Torizon OS 7 PREEMPT_RT 版本

b). TorizonOS 默认使能了 Docker 环境,可以非常方便的安装和测试各种 Docker Image


CODESYS Development System 下载安装

a). 通过 CODESYS Store 下载安装 CODESYS Installer

b). 通过 CODESYS Installer 安装最新版本的 CODESYS Development System

c). 安装 Virtual Control for Linux SL Addon


d). 运行上述安装的 CODESYS IDE,然后点击菜单栏 Tools > Device Repository:

e). 在 Device Repository 窗口点击 Install... 按键并选择  virtuallinux device descriptor 文件:

C:\Program Files\CODESYS 3.5.21.10\CODESYS\CODESYS Virtual Control for Linux SL\4.16.0.0\Devices\AddOns\CODESYS Virtual Control for Linux SL\virtuallinuxarm64\4.16.0.0\codesyscontrol.devdesc.xml


CODESYS Control Runtime Docker Image 安装运行

a). 通过上述 CODESYS Development System 安装文件获取已经预编译好的 CODESYS Control Docker Image (根据具体需要部署的硬件选择正确的架构,这里 Verdin i.MX8MP 是 ARM64 架构)

C:\Program Files\CODESYS 3.5.21.10\CODESYS\CODESYS Virtual Control for Linux SL\Delivery\virtuallinuxarm64\Docker_codesyscontrol_virtuallinuxarm64_4.16.0.0_arm64.tar.gz


b). 当然安装文件中也提供了可以自行生成 Docker Image 的所需文件,也可以自行修改重新编译生成定制化的 Docker Image 压缩包

C:\Program Files\CODESYS 3.5.21.10\CODESYS\CODESYS Virtual Control for Linux SL\Delivery\virtuallinuxarm64\
./ Dockerfile - Dockerfile_codesyscontrol_virtuallinuxarm64_4.16.0.0
./ CODESYS Control DEB package - codesyscontrol_virtuallinuxarm64_4.16.0.0_arm64.deb
./ License - Docker_copyright_codesyscontrol_virtuallinuxarm64_4.16.0.0
C:\Program Files\CODESYS 3.5.21.10\CODESYS\CODESYS CodeMeter for Linux SL\Delivery\
./ Codemeter DEB package - codemeter-lite_8.20.6539.500_arm64.deb


c). 将 Docker_codesyscontrol_virtuallinuxarm64_4.16.0.0_arm64.tar.gz 复制到 Verdin i.MX8MP

d). 在 Verdin i.MX8MP 安装 CODESYS Control Docker Image

torizon@verdin-imx8mp-06849028:~$ docker load -i Docker_codesyscontrol_virtuallinuxarm64_4.16.0.
0_arm64.tar.gz
torizon@verdin-imx8mp-06849028:~$ docker images
REPOSITORY                         TAG        IMAGE ID       CREATED        SIZE
codesyscontrol_virtuallinuxarm64   4.16.0.0   a79637a6eef3   6 weeks ago    239MB


e). 在 Verdin i.MX8MP 运行 CODESYS Control Docker Image

./ 创建 Docker Image 运行需要的 mount 目录:

torizon@verdin-imx8mp-06849028:~$ cd ~
torizon@verdin-imx8mp-06849028:~$ mkdir -p dockerMount/conf/codesyscontrol/
torizon@verdin-imx8mp-06849028:~$ mkdir -p dockerMount/data/codesyscontrol/


./ 通过下面命令运行 Docker Image,请注意下面命令仅用于演示测试,如果实际应用部署则需要考虑安全权限设置,一个更完善的启动脚本可以参考这里

torizon@verdin-imx8mp-06849028:~$ docker run --rm -dt --name codesys --network host -v ~/dockerMount/conf/codesyscontrol/:/conf/codesyscontrol/ \
-v ~/dockerMount/data/codesyscontrol/:/data/codesyscontrol/ --privileged codesyscontrol_virtuallinuxarm64:4.16.0.0
torizon@verdin-imx8mp-06849028:~$ docker ps
CONTAINER ID   IMAGE                                       COMMAND                  CREATED     
   STATUS          PORTS     NAMES
9ff098e3641f   codesyscontrol_virtuallinuxarm64:4.16.0.0   "/opt/codesys/script…"   47 seconds a
go   Up 46 seconds             codesys


./ 另外,也可以通过如下命令查看 Docker Image 启动内部运行 log 信息:

torizon@verdin-imx8mp-06849028:~$ docker logs codesys


CODESYS PLC 示例应用开发和部署

a). 在 CODESYS IDE 下创建 New Project

./ 填写 Project Name 和 Location

./ 填写 Device PLC_PRG

./ New Project 创建成功,双击左侧项目窗口 “Device (CODESYS Virtual Control for Linux ARM64 SL)” 条目,打开 Devices 页面后,点击 Scan Network


./ 此时点击找到的 verdin-imx8mp 设备并点击确定,设备就已经成功连接

b). 接下来具体实现 Lamp/Dip Switch 示例应用的过程可以参考这里说明。

c). 项目设计完成后,点击 Online->Login 进行项目下载(如果之前没有创建账户这里会要先创建)

d). Login并下载 PLC 应用到设备后,即可以通过点击 Play/Stop 按键来运行或者停止示例应用了


e). 在项目运行时,在 PC 浏览器中可以通过输入如下网址可以通过 WebVisualization 功能来显示 PLC 示例应用了

http://<ip_address_verdin_imx8mp>:8080/webvisu.htm

f). 同时,也可以通过在 Verdin i.MX8MP 设备上面启动 Weston 和 Browser (chromium/Crog) Docker Image 来显示。本文以 Cog Browser 为例,更多浏览器相关说明可以参考这里

### start weston docker image ###
torizon@verdin-imx8mp-06849028:~$ docker container run -d --name=weston --net=host \
  --cap-add CAP_SYS_TTY_CONFIG \
  -v /dev:/dev -v /tmp:/tmp -v /run/udev/:/run/udev/ \
  --device-cgroup-rule="c 4:* rmw" --device-cgroup-rule="c 253:* rmw" \
  --device-cgroup-rule="c 13:* rmw" --device-cgroup-rule="c 226:* rmw" \
  --device-cgroup-rule="c 10:223 rmw" --device-cgroup-rule="c 199:0 rmw" \
  torizon/weston-imx8:4 \
  --developer
### start Cog browser docker image ###
torizon@verdin-imx8mp-06849028:~$ docker run -d --rm --name=cog \
  -v /tmp:/tmp -v /var/run/dbus:/var/run/dbus \
  -v /dev/dri:/dev/dri --device-cgroup-rule='c 226:* rmw' \
  torizon/cog:$CT_TAG_COG \
  http://<ip_address_verdin_imx8mp>:8080

g). 利用 docker-compose 来一次性启动上述的三个 Docker Image

./ docker-compose.yml:

services:
weston:
  image: torizon/weston-imx8:4
  container_name: weston
  environment:
    - ACCEPT_FSL_EULA=1
  network_mode: host
  restart: unless-stopped
  cap_add:
    - CAP_SYS_TTY_CONFIG
  volumes:
    - type: bind
      source: /tmp
      target: /tmp
    - type: bind
      source: /dev
      target: /dev
    - type: bind
      source: /run/udev
      target: /run/udev
  device_cgroup_rules:
    - 'c 4:* rmw'
    - 'c 253:* rmw'
    - 'c 13:* rmw'
    - 'c 226:* rmw'
    - 'c 10:223 rmw'
    - 'c 199:0 rmw'
  command: --developer

codesys:
  image: codesyscontrol_virtuallinuxarm64:4.16.0.0
  container_name: codesys
  network_mode: host
  privileged: true
  volumes:
    - type: bind
      source: /home/torizon/dockerMount/conf/codesyscontrol
      target: /conf/codesyscontrol
    - type: bind
      source: /home/torizon/dockerMount/data/codesyscontrol
      target: /data/codesyscontrol
  tty: true

cog:
  image: torizon/cog:4
  container_name: cog
  network_mode: host
  depends_on:
    - codesys
    - weston
  volumes:
    - type: bind
      source: /tmp
      target: /tmp
    - type: bind
      source: /var/run/dbus
      target: /var/run/dbus
    - type: bind
      source: /dev/dri
      target: /dev/dri
  device_cgroup_rules:
    - 'c 226:* rmw'
  command: http://<ip_address_verdin_imx8mp>:8080


./ 启动 docker-compose.yml:

./ torizon@verdin-imx8mp-06849028:~$ docker-compose up -d

./ 如果配置 docker-compose.yml 开机自启动,可以参考这里

总结

本文基于 NXP i.MX8MP 处理器平台演示了通过 Docker 方式来测试部署 CODESYS PLC 示例应用。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



相关推荐

技术专区

关闭