CODESYS功能原理 - 下载与启动

做 CODESYS 应用,下载、启动是少不了的。本文向内挖一层,把编译到启动这条链路讲清楚。

也可以不打开 Codesys IDE,用命令行完成下载更新

运行链路

编译

CODESYS IDE编译之后,会产出两个文件:

文件 是什么
.app 应用本体:编译出的目标代码
.crc 校验文件:体积很小,与 .app 成对,用于启动时校验匹配

CODESYS 自带脚本接口(Scripting Engine),不使用IDE,使用命令行也可完成编译

bat 复制代码
CODESYS.exe --noUI --profile="CODESYS V3.5 SP17 Patch 2" --runscript="build_boot.py"

其中的build_boot.py文件

复制代码
proj = projects.open(r"D:\xxx.project")
app = proj.active_application
app.build()                                             # 编译
app.create_boot_application(r"D:\out\Application.app")  # 生成 .app/.crc;

登录/下载

点击登录,与控制器建立在线连接,并比对工程签名与设备签名;一致进入在线监控,不一致提示下载;

再点击下载 ,经网关协议(端口 1217)把 .app .crc送进控制器, runtime停掉当前应用,加载新应用。

下载时,选择 创建启动应用,才会将.app保存到文件系统中,下次启动会生效

.app的保存位置,由各家 runtime 的部署决定,CODESYS Control for Linux 常见是 /opt/plc/PlcLogic/ ,两个文件的储存位置(以本机为准)。

复制代码
<应用目录>/Application.app     # 应用本体
<应用目录>/Application.crc     # 校验文件

启动

启动时,CODESYS runtime 先被拉起,然后加载 .app,应用进入周期任务。

以 Linux 控制器为例,控制器上电之后的事,和普通 Linux 开机没有区别:内核起来,init 依次跑启动脚本,其中一个脚本负责拉起 runtime。

如 CODESYS Control for Linux ,这个脚本是 /etc/init.d/codesyscontrol(有的厂商做成 systemd 服务),核心是启动 /opt/codesys/bin/codesyscontrol.bin 这个可执行文件。平时手动启停,用的也是它:

bash 复制代码
sudo /etc/init.d/codesyscontrol start    # 启动
sudo /etc/init.d/codesyscontrol stop     # 停止

runtime 进程起来后,读配置(/etc/CODESYSControl_User.cfg),找到启动应用目录,校验 .crc,加载 .app,进入周期任务。

手动更新

保存在控制器中的文件:.app + .crc,可以不用 IDE、直接手动用 SSH 替换它们。

再重启加载,做一次"没有 IDE 的下载"。效果等同于「创建启动应用」:重启后生效。

bash 复制代码
# 笔记本上:传文件到控制器
scp Application.app Application.crc user@<控制器IP>:/tmp/

# 控制器上:校验、覆盖、落盘、重启
ssh user@<控制器IP>
md5sum /tmp/Application.*            # 与本地比对,一致才继续
sudo cp /tmp/Application.* <应用目录>/
sync                                 # 强制落盘
sudo reboot							 # 重启

IDE 更新与手动更新

对比更新

注意事项

  1. runtime 版本必须匹配 :.app 是按编译时的目标 runtime/设备描述生成的,换到不同 runtime 版本的控制器上不兼容。发布包应记录编译所用的 runtime 版本,安装前先核对。
  2. 加载新应用 = 全量初始化语义:普通变量和 retain(掉电保持)变量都会按新应用的初值重新初始化。升级后需要重新下发参数/组态的,要在流程里安排。
  3. 先 sync 再 reboot:确保文件真正写入磁盘。校验不通过的包绝不能进入应用目录。
  4. 保留回退路径:替换前把旧的 .app/.crc 备份下来,失败时再原路刷回恢复。