博客專欄

        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 示例應用。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 甘孜| 融水| 南川市| 周宁县| 防城港市| 湘潭县| 郓城县| 平安县| 舞阳县| 宣威市| 望城县| 龙州县| 天峻县| 含山县| 宜城市| 漯河市| 沂水县| 闽侯县| 华亭县| 囊谦县| 南部县| 溆浦县| 东港市| 涞水县| 元朗区| 蕉岭县| 丰城市| 兴和县| 措美县| 铜梁县| 永清县| 开阳县| 库伦旗| 小金县| 丰镇市| 大庆市| 永仁县| 新宾| 鄱阳县| 双流县| 泸水县|