简介
CODESYS 是基于 IEC 61131-3 的 PLC 开发工具,在工业控制、交通等领域中有着广泛的应用。文章将介绍如何在 Toradex 采用 TI AM62 SoC 的 Arm 计算机模块 Verdin AM62 使用评估版本的 CODESYS。
硬件介绍
Verdin AM62使用 TI AM623/AM625 处理器,具有最多 4 个主频 1.4GHz 的 Cortex-A53 内核,以及一个 400MHz 主频的 M4F 核心。内存采用 LPDDR4,从 512 MB 到 2 GB 可供选择。eMMC 从 4~16 GB。模块采用 SODIMM DDR4 标准,提供两路千兆以太网、CAN、MIPI DSI 显示、I2C、SPI、UART 等接口。
BSP 配置
CODESYS 分为在电脑端使用 IDE,在 GUI 中开发 PLC 应用,和在设备上运行时 runtime 软件,例如在 Verdin AM62 上的 CODESYS Control for Linux ARM SL。CODESYS 的运行需要使用 RT-Linux 内核。Toradex 发布的 Linux BSP 采用 Yocto Project
编译,可以在生成 BSP 时直接为 Linux 内核打上实时补丁。修改 local.conf 文件。
DISTRO="tdx-xwayland-rt"
为了尽可能保证内核时实时性,可以裁减 BSP 中的 wayland 显示、Qt demo 等组件,添加用于测试实时性能的 cyclictest。
IMAGE_INSTALL:remove = " weston wayland-qtdemo-launch-cinematicexperience" DISTRO_FEATURES:remove= "wayland" IMAGE_INSTALL:append = " rt-tests"
最后使用 bitbake 命令编译镜像,并使用 Toradex Easy Installer将其烧录到 Verdin AM62 模块。
bitbake tdx-reference-multimedia-image
CODESYS IDE 安装
从 CODESYS 网站下载 IDE 开发工具,安装成功后再下载 64bit 的 CODESYS Control for Linux ARM SL。这是后缀为 package 的文件,需要在 CODESYS IDE 中按照下图打开 CODESYS Installer 导入 package 文件进行安装。
![](/static-img/wBLSsdoi3vNHTYGhNkWnpdxwuCYhMJdSsH3WXAUCi3sapE1cw-gtlHSlC0ytsT0i.jpg)
![](/static-img/aDOGtRHFgeWUFcrOa6x1t9xwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
安装完毕后可以看到以下目录 C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL。
Verdin AM62 软件安装
在 Verdin AM62 上需要安装来自 C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL\Delivery\linuxarm64 目录下的 codesyscontrol_linuxarm64_4.13.0.0_arm64.ipk。将其复制到开发板后运行下面命令安装。
opkg install codesyscontrol_linuxarm64_4.13.0.0_arm64.ipk
在 Dependency 目录下还有一个 deb 格式的 codemeter-lite 安装文件。如有你已经有 CODESYS 的授权密钥,安装 codemeter 后,上面安装的 codesyscontrol 将不受 30 分钟的试用时间限制。由于 Verdin AM62 默认不使用 Debian 包管理系统,可以参考 CODESYS 的网页说明,手动解压 deb 安装包后复制相关文件。执行下面命令即可启动 codesysctonrol,ps auxgrep codesys查看运行情况。当 codesyscontrol 运行后,在同一个网络中的电脑上的 CODESYSY IDE 就可以发现该设备。
/etc/init.d/codesyscontrol start
ps auxgrep codesys
root 710 9.2 1.9 892328 39456 pts/0 SLl 08:04 0:00 /opt/codesys/bin/codesyscontrol.bin /etc/codesyscontrol/CODESYSControl.cfg
PLC 应用开发
![](/static-img/SuqbpaCgc8VEQH4WWluEDNxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
打开 IDE 后点击新建项目,设置项目名称和保存路径。
![](/static-img/kw59rs50ZAk9PFoniev9c9xwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
Device 选择 CODESYS Control for Linux ARM64 SL,这是上面安装的组件。
![](/static-img/MCIxxm2QmiZnMABzg8V01dxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
点击 Scan Network 扫面本地网络,发现 Verdin AM62 设备。
![](/static-img/SuqbpaCgc8VEQH4WWluEDNxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
首次发现设备时需要设置一个用户名和密码,IDE 将会使用该账户和设备通信。
![](/static-img/-EQZgTBprVi-kMR1_t6skdxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
创建完毕后使用该帐号登录。
![](/static-img/kif38uDMPu8BANOfmEtFldxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
然后就可以看到该设备,后面的 PLC 应用将这上面调试和运行。
![](/static-img/JDQ7vZVFPCgQ_X7sdMEOrdxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
具体的 PLC demo 编写可以参考我们开发者网页的说明。开启 web visu 功能后,可以连接到 Verdin AM62 的 IP,在浏览器中查看 PLC 运行情况。
![](/static-img/eFmnnPQ3awurn5KXJSxPwtxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
Verdin AM62 实时性能测试
在使用 Yocto Project 编译镜像时已经添加了 rt-tests 工具,下面使用 cyclictest 测试实时性能。测试时把 AM62 4 个核心的时钟均设置到最高的 1.4 GHz。
# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# cpufreq-info grep current
current policy: frequency should be within 200 MHz and 1.40 GHz.
current CPU frequency is 1.40 GHz (asserted by call to hardware).
current policy: frequency should be within 200 MHz and 1.40 GHz.
current CPU frequency is 1.40 GHz (asserted by call to hardware).
current policy: frequency should be within 200 MHz and 1.40 GHz.
current CPU frequency is 1.40 GHz (asserted by call to hardware).
current policy: frequency should be within 200 MHz and 1.40 GHz.
current CPU frequency is 1.40 GHz (asserted by call to hardware).
stress-ng 把所有核心的负荷加满,使用 cyclictest 持续运行 1 个小时并统计结果。
![](/static-img/7RtbtU0UYpqpcJhaqD7rVdxwuCYhMJdSsH3WXAUCi3vQEDF19UxLmX1eld-xy7zzVhjFcpX08_ICu9tRtwrL0IYybr6B21IVmyY3n3fOLZ1DKzOTcnfgnU3BhGzzqa4SLiW4mvbESwJ2zRBxsxYTidF9W1rwR5t3lv5kNm_rkjYuNZw4OhLupJniHBqMAkVp4iT-qs-_rblLvKB7WJYLOw.jpg)
总结
文章介绍了如何在 Verdin AM62 上使用 CODESYS,该方法同样也适用于其他 Toradex Arm 64bit 的模块,如 iMX8 SoC。关于 CODESYS 实时性调教,可以从 BSP、内核裁减,CPU 亲和性设置,中断优化等方面进行,具体参考下面文档。
参考:
https://www.ti.com/lit/pdf/SPRADH0