跳转至

CatST MemoryMap:变量区、资源包络与剪裁规则

本文档定义 CatST 编译器、仿真器、生成 C、在线监控和通信映像共同使用的变量区与资源包络。正式产品可按实际硬件剪裁,但剪裁不得改变已保留变量的语义。


1. 设计原则

CatST 变量区采用 PLC 过程映像模型:

物理输入 / 通信输入 / 系统状态
 ↓ 扫描边界复制
CatST 读取稳定输入映像
CatST 写输出映像和内部变量
 ↓ 扫描后刷新
物理输出 / 通信输出 / 在线监控

资源包络原则:

  1. 先定义足够覆盖 F103、F407 和后续通信扩展的统一变量模型。
  2. CatST 编译器按目标 Profile 做范围检查和资源预算。
  3. 被硬件剪裁掉的资源在编译期报错,不允许运行期静默忽略。
  4. 同一变量名在不同硬件上语义一致,例如 X0 总是输入映像,不允许在某个产品上变成输出。
  5. 通信资源通过过程映像或别名暴露给 CatST,不允许 CatST 直接阻塞读写总线。

2. 基础变量区

默认最大包络:

区域 默认范围 权限 类型 说明
X X0~X15 只读 BOOL 数字输入映像
Y Y0~Y7 可写 BOOL 晶体管输出映像
R R0~R3 可写 BOOL 继电器输出映像
M M0~M127 可读写 BOOL 内部辅助位
D D0~D127 可读写 DINT 数据寄存器
T T0~T31 功能块访问 Timer 定时器实例
C C0~C31 功能块访问 Counter 计数器实例
S S0~S63 只读 BOOL/WORD 系统状态
E E0~E63 只读 BOOL/WORD 故障码

F103_LITE 可以减少 Y/R、M/D、T/C、诊断和历史记录数量。F407_STANDARD 应优先完整支持上述包络。


3. 权限规则

区域 CatST 读 CatST 写 上位机 RUN 写 STOP/FACTORY 写 说明
X 固件采样更新
Y 默认否 受控测试 安全层可覆盖
R 默认否 受控测试 安全层可覆盖
M 可配置 可配置 调试和状态保持
D 可配置 可配置 参数、阈值、计数值
T 字段只读 仅功能块 复位接口 Tn.QTn.ET 只读
C 字段只读 仅功能块 复位接口 Cn.QCn.CV 只读
S Runtime 设置
E 受控清除 诊断模块设置

禁止示例:

X0 := TRUE;
S0 := TRUE;
T0.Q := FALSE;
C0.CV := 0;

4. 变量区语义

4.1 X 输入区

X0~X15 表示输入映像。默认对应 16 路 24V 数字输入,具体硬件通道由目标 Profile 映射。

规则:

  1. 输入先经过固件采样和滤波,再进入 X 区。
  2. CatST 在一个扫描周期内看到的 X 值必须稳定。
  3. 低配硬件没有的 X 点位必须在编译期报错。

4.2 Y/R 输出区

Y0~Y7 为晶体管输出映像,R0~R3 为继电器输出映像。

规则:

  1. CatST 写的是输出映像,不是直接写物理 IO。
  2. STOP、ERROR、DOWNLOAD、急停、CRC 错误等安全状态下,物理输出必须由安全层关闭。
  3. RUN 模式下外部协议默认禁止直接写 Y/R,避免和 CatST 逻辑竞争。

4.3 M 内部辅助位

M0~M127 用于中间状态、联锁、步进状态、调试标志和简单保持。

规则:

  1. 默认由 CatST 读写。
  2. 上位机是否允许在线写入由权限配置决定。
  3. 下载新程序、RUN/STOP 切换、复位后是否清零由 Runtime 策略决定,编译器不得假设 M 区永久保持。

4.4 D 数据寄存器

D0~D127 默认按 DINT 处理。

用途:

  1. 工艺参数。
  2. 计数和阈值。
  3. 状态机步骤号。
  4. 调试和通信数据缓存。

通过 Modbus 16 位寄存器访问时,一个 D 占两个连续 Holding Register。

4.5 T/C 资源

定时器:

typedef struct
{
    bool IN;
    bool Q;
    uint32_t PT_ms;
    uint32_t ET_ms;
    uint8_t State;
} Timer_t;

计数器:

typedef struct
{
    bool CU;
    bool CD;
    bool R;
    bool Q;
    int32_t PV;
    int32_t CV;
    bool LastInput;
} Counter_t;

CatST 只允许通过 TON/TOF/TP、CTU/CTD 更新实例。


5. 系统状态与故障包络

5.1 S 系统状态

状态 含义
S0 RUN
S1 STOP
S2 ERROR
S3 DOWNLOAD
S4 FACTORY
S5 急停输入有效
S6 App CRC 有效
S7 参数 CRC 有效
S8 通信在线
S9 RTC 有效
S10 看门狗曾复位
S11 输出总使能有效
S12~S31 通用系统状态预留
S32~S63 通信扩展状态预留

5.2 E 故障码

故障 含义
E0 参数 CRC 错误
E1 App CRC 错误
E2 通信超时
E3 看门狗复位
E4 RTC 异常
E5 存储器异常
E6 电源异常
E7 急停触发
E8 下载失败
E9 输出过流,可选
E10 Flash 写入失败
E11~E31 通用故障预留
E32~E63 通信扩展故障预留

6. 中断事件资源

中断事件资源由 Runtime 更新,CatST 默认只读。

区域 默认范围 权限 类型 说明
L L0~L63 只读/专用清除 BOOL 事件锁存位
HSC HSC0~HSC7 字段只读 Counter32 高速计数器
CAP CAP0~CAP7 字段只读 Capture 输入捕获或脉宽测量

HSC 可读字段:

字段 类型 说明
HSCn.CV DINT 计数值快照
HSCn.OV BOOL 溢出标志
HSCn.EN BOOL 使能状态

CAP 可读字段:

字段 类型 说明
CAPn.VALUE DINT 捕获值快照
CAPn.VALID BOOL 捕获值有效
CAPn.OV BOOL 溢出或丢样

这些资源的更新来自 Runtime ISR 或 DMA 任务。CatST 不直接访问中断标志位。


7. 在线访问地址建议

6.1 位变量

地址范围 对应区域 访问
00001~00008 Y0~Y7 读,STOP/FACTORY 可写
00021~00024 R0~R3 读,STOP/FACTORY 可写
00101~00228 M0~M127 读写
10001~10016 X0~X15 只读
10101~10164 S0~S63 只读
10201~10264 E0~E63 只读

6.2 寄存器

地址范围 对应区域 说明
40001~40256 D0~D127 每个 D 占两个 16 位寄存器
41001~41064 参数区 通信、滤波、安全策略
42001~42064 系统状态寄存器 扫描周期、模式、版本
43001~43128 T 状态 定时器只读状态
44001~44128 C 状态 计数器只读状态

UI 和编译器内部必须统一 0 基/1 基封装,现场界面不暴露二义性。


8. 通信扩展映像

EtherCAT、CANopen、以太网等扩展不直接改变基础 X/Y/R/M/D 语义。推荐通过工程配置生成通信过程映像,并用 VAR_ALIAS 暴露给 CatST。

建议逻辑对象:

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

规则:

  1. 映像对象必须由通信配置生成,现场 CatST 不允许任意拼地址。
  2. CatST 读取的是扫描边界快照。
  3. CatST 写入的是输出过程映像,发送和状态机处理由通信任务完成。
  4. 通信断线、超时、状态异常必须反映到 S/E 或扩展只读状态。

9. Profile 剪裁规则

目标 Profile 必须声明:

可用 X/Y/R 数量
M/D/T/C 数量
是否支持 S/E 全量状态
是否支持 Modbus 映射
是否支持自定义维护协议
是否支持 A/B App 分区
是否支持通信扩展映像
L/HSC/CAP 数量
最大 UserLogic 代码大小
最大扫描周期预算

剪裁要求:

  1. 剪裁只能减少范围,不能改变类型和权限。
  2. 编译器必须根据 Profile 做越界检查。
  3. 上位机补全列表必须来自 Profile,不得固定写死。
  4. 文档中的最大包络不代表所有硬件必须完整实现。