跳转至

CatST SystemDesign:内部安全逻辑配置语言整体设计

CatST 不是 PLC 平台,也不追求完整 IEC 61131-3 生态。CatST 是公司内部设备的安全逻辑配置语言,通过上位机生成 C 代码并复用 STM32 固件 Runtime,让现场人员在不使用 J-Link、不修改底层固件的情况下,通过串口完成调试、下载、监控和快速迭代。


1. 核心定位

CatST 的最终定位:

高度定制
内部使用
固定硬件
强安全边界
生成 C 而非解释执行
固定 Bootloader
串口调试和下载
Profile 按硬件剪裁

不做:

通用 PLC 平台
完整 IEC 61131-3 Runtime
设备端解释器
现场任意 C 编程
现场任意硬件访问
通用现场总线配置平台

核心价值不是替代 CODESYS/OpenPLC,而是让公司自有 STM32 控制器具备受控、可验证、可下载、可现场维护的逻辑配置能力。


2. 端到端架构

规范硬件
 ├── STM32 主控
 ├── 固定 IO
 ├── 固定串口维护口
 ├── 固定扩展外设
 └── 出厂固化 Bootloader
        ↓ 串口
CatST Studio
 ├── 工程和 Profile
 ├── CatST 编辑
 ├── 语法/语义/安全检查
 ├── AST 仿真
 ├── 生成 UserLogic.c
 ├── ARM GCC 编译 app.bin
 ├── 串口下载
 └── 在线监控
STM32 Application
 ├── 固定 Runtime
 ├── 固定安全层
 ├── 固定通信任务
 └── UserLogic_Scan()

STM32 端永远不知道 CatST 源码。设备只运行编译后的固件。


“不需要 J-Link”指现场维护和迭代不需要 J-Link。

空白芯片首次生产仍必须有一种 Bootloader 固化方式:

阶段 推荐方式 是否需要现场人员参与
首次样机调试 SWD/J-Link、ST-Link 或 STM32 ROM Bootloader 研发
小批量/量产 工装烧录固定 Bootloader 和基础参数 生产
现场维护 串口维护协议下载 App 现场人员
故障恢复 Bootloader 串口恢复下载 现场人员

现场设备必须保留稳定维护入口:

RS485-1 或 TTL/RS232 维护口
固定波特率兜底模式
Bootloader 恢复入口
下载前强制 STOP
下载中输出关闭
下载后默认 STOP

4. 固定 Bootloader 设计边界

Bootloader 是硬件平台的一部分,现场不修改。

Bootloader 职责:

  1. 接收串口维护协议。
  2. 写入 App 分区。
  3. 校验分包 CRC 和完整 App CRC。
  4. 标记 App 有效。
  5. 提供设备和分区信息。
  6. 下载失败时保持旧 App 可运行。
  7. 下载完成后复位进入 App,App 默认 STOP。

Bootloader 不做:

解析 CatST
解释用户逻辑
执行用户输出
修改 Runtime 安全策略
现场升级自身,第一版默认禁止

5. CatST Studio 工作流

标准现场流程:

连接设备
读取硬件 Profile、Bootloader、App 信息
编辑 logic.catst
语法/语义/安全/资源预算检查
PC 仿真
生成 UserLogic.c
ARM GCC 编译 app.bin
发送 STOP 并确认输出关闭
进入 Bootloader 下载
CRC 校验并复位
设备进入 STOP
在线监控确认
人工切换 RUN

现场人员不直接接触:

STM32 HAL
GPIO 寄存器
链接脚本
Bootloader 代码
J-Link/SWD
底层通信协议实现

6. 固定硬件和 Profile

硬件设计采用“固定母版 + Profile 剪裁”:

Profile 目标
F103_LITE 低成本控制器,资源剪裁,单 App 或简化分区
F407_STANDARD 标准平台,完整 IO、在线监控、A/B App 可选
EXT_COMM 增强通信平台,增加 EtherCAT/CANopen/以太网过程映像

Profile 必须声明:

MCU 型号
Flash/RAM
Bootloader 分区
App 分区
可用 IO 点位
可用串口和维护口
M/D/T/C 数量
是否启用通信扩展
最大 UserLogic 代码大小
最大资源预算

CatST 编译器、补全、仿真、下载和监控都必须使用同一个 Profile。


7. 语言阶段路线

第一阶段 Core:

IF / ELSIF / ELSE
CASE
BOOL / INT / DINT / TIME
X/Y/R/M/D/T/C/S/E
TON / TOF / TP
CTU / CTD
R_TRIG / F_TRIG
VAR_ALIAS
生成 C
仿真
下载
在线监控

第二阶段 Safe:

VAR_TEMP
受限 FOR
索引访问 X[i] / Y[i] / M[i] / D[i]
更多纯函数
更严格资源预算报告

永远禁止或长期不做:

WHILE
REPEAT
递归
动态内存
指针
用户 C 片段
扫描内阻塞通信
直接硬件访问

受限 FOR 不是通用循环。它必须可静态计算次数、可做越界检查、可按 Profile 预算,必要时可由编译器展开。


8. 通信扩展原则

EtherCAT、CANopen、以太网属于 Runtime 和通信任务,不属于 CatST 直接执行语句。

正确模型:

通信任务解析协议
更新过程映像
CatST 在扫描边界读取/写入映像
通信任务发送输出映像

CatST 不提供:

ReadSocket(...);
CanOpenUpload(...);
WaitEtherCAT(...);

CatST 提供的是受控别名:

VAR_ALIAS
    DriveReady  AT CANOPEN.Node1.StatusWord.Bit0 : BOOL;
    TargetSpeed AT CANOPEN.Node1.TargetVelocity  : DINT;
END_VAR

9. 安全边界

安全边界固定在 Runtime 和硬件层:

  1. 上电默认 STOP。
  2. STOP、ERROR、DOWNLOAD 输出关闭。
  3. 急停输入有效时输出关闭。
  4. App CRC 错误禁止 RUN。
  5. 参数严重错误禁止 RUN。
  6. 下载成功后不自动 RUN。
  7. RUN 必须人工确认或受控命令确认。
  8. CatST 只能写输出映像,不能绕过安全层。
  9. 在线写 Y/R 默认只允许 STOP/FACTORY 测试。

10. 成功标准

第一版完成标准:

  1. 一块固定硬件可出厂固化 Bootloader。
  2. 不使用 J-Link,现场可通过串口连接设备。
  3. 上位机可读取设备 Profile 和状态。
  4. CatST 程序可检查、仿真、生成 C、编译为 app.bin。
  5. app.bin 可通过串口下载。
  6. 下载失败不会破坏旧 App。
  7. 下载后设备进入 STOP。
  8. 在线监控可查看 X/Y/R/M/D/T/C/S/E。
  9. 安全场景下物理输出关闭。
  10. 现场人员可在不接触 C/HAL/SWD 的情况下完成逻辑迭代。