总体架构与代码分析
文档维护规则
自 2026-04-13 起,本文件与 开发规范与注释约定.md、修改记录.md 必须同步维护。凡是模块职责、主入口、接口边界、状态机流程发生变化,本文件都要同步更新。
当前统一架构
顶层执行链
PRG_MainControl
- 先在顶层生成固定 10ms 工艺节拍与固定 100ms 温控节拍,供后续主控块与温控块直接消费。
- 再调用顶层数字量输入绑定实例
gvl_fbPLCDigitalInputBinder,把运行时IN[0..47]刷新到原始 PLC IO 边界gvl_PLC.X*。 - 再调用
gvl_fbPLCMachineInputMapper,把原始 PLC 输入点位翻译为机器语义传感器边界gvl_stSensor,并同步把gvl_PLC.X50..X53收口到独立公共命令源gvl_stPLCDigitalCommandSource;当前gvl_stSensor只保留有真实数字量来源的机器语义,不再承载电子尺、压力尺和轴实际位置/速度/压力数值反馈。 - 再调用
gvl_fbModbus执行输入绑定阶段,把统一 Modbus 通讯镜像中的 HMI 输入区和面板输入区翻译到 PLC 内部 HMI/面板业务边界。 - 再调用
gvl_fbHMIParaInterface,处理在线参数与 HMI 编辑缓冲区的同步。 - 再调用顶层面板调度实例
gvl_fbPanelDispatcher,把 PLC 内部面板原始字解码为按键边界,并把关键按键先回灌到独立面板命令源gvl_stPanelCommandSource。 - 再调用
gvl_fbModbus执行输出绑定阶段,把 PLC 内部 HMI 结果和面板灯字回写到统一 Modbus 通讯镜像。 - 再调用顶层命令仲裁实例
gvl_fbCommandArbiter,先保留基础命令快照,再由 PLC 数字量命令源覆盖公共启动/停止/复位/急停,并叠加面板命令源负责的模式与手动字段,统一合成为最终gvl_stCommand。 - 再调用顶层温控实例
gvl_fbEK312和机器主控实例gvl_fbMachineController,统一完成温控刷新、模式判定、自动流程调度、子模块执行和状态汇总。 - 再调用
gvl_fbPLCMachineOutputMapper,把主控和顶层命令的机器语义输出翻译回原始 PLC 输出点位gvl_PLC.Y*。 - 最后调用顶层数字量输出绑定实例
gvl_fbPLCDigitalOutputBinder,把原始 PLC IO 边界gvl_PLC.Y*统一下发到运行时OUT[0..47]。 PRG_MainControl绑定 1ms 基础任务;主控工艺逻辑由顶层 10ms 节拍驱动;温控块每 1ms 都会被顶层调用,但只有命中顶层 100ms 节拍时才执行一轮温控计算。- 当前仓库已经把 HMI 与面板两条通讯链统一收口为“
ST_Modbus+FB_Modbus+ PLC 内部业务边界”三层,后续真实 Modbus 驱动、寄存器地址表和报文拆装层都必须继续绑定在gvl_stModbus这一层,不能重新回流到业务块。
代码树状结构
text
Code
├─ HMI系统
│ └─ FB_HMIParaInterface.st
├─ Modbus通讯
│ ├─ ModbusTypes.st
│ └─ FB_Modbus.st
├─ 主程序入口
│ ├─ PRG_MainControl.st
│ ├─ PRG_MachineController.st
│ ├─ FB_CommandArbiter.st
│ ├─ FB_MachineController.st
│ ├─ FB_MachineModeResolver.st
│ ├─ FB_MachineCommandComposer.st
│ ├─ FB_MachineStatusAggregator.st
│ └─ MachineControlTypes.st
├─ 全局变量
│ └─ GlobalVars.st
├─ IO管理
│ ├─ PLCIOTypes.st
│ ├─ 数字量输入
│ │ ├─ FB_PLCDigitalInputBinder.st
│ │ └─ FB_PLCMachineInputMapper.st
│ ├─ 数字量输出
│ │ ├─ FB_PLCDigitalOutputBinder.st
│ │ └─ FB_PLCMachineOutputMapper.st
│ ├─ 模拟量输入
│ └─ 模拟量输出
├─ 实例管理
│ └─ Instances.st
├─ 面板管理
│ ├─ MK110
│ │ └─ FB_MK110.st
│ ├─ MK116
│ │ └─ FB_MK116.st
│ ├─ MK150
│ │ └─ FB_MK150.st
│ ├─ 面板公用
│ ├─ PanelTypes.st
│ ├─ F_PanelGetBit.st
│ ├─ F_PanelSetBit.st
│ ├─ F_PanelReadKeyByOrder.st
│ ├─ FB_PanelLampWriter.st
│ ├─ FB_PanelReader.st
│ ├─ FB_PanelLampEncoder.st
│ └─ 面板调度
│ └─ FB_PanelDispatcher.st
├─ 模式管理
│ ├─ 手动模式
│ │ ├─ PRG_ManualMode.st
│ │ └─ FB_ManualMode.st
│ ├─ 调模模式
│ │ ├─ PRG_MoldAdjustMode.st
│ │ └─ FB_MoldAdjustMode.st
│ └─ 自动模式
│ ├─ PRG_AutoCycle.st
│ ├─ FB_AutoCycle.st
│ └─ AutoCycleTypes.st
├─ 伺服系统
│ └─ 液压轴
│ ├─ AxisTypes.st
│ └─ FB_HydAxis.st
├─ 合模系统
│ ├─ 锁模
│ │ ├─ ClampTypes.st
│ │ └─ FB_Clamp.st
│ └─ 调模
│ ├─ MoldAdjustTypes.st
│ └─ FB_MoldAdjust.st
├─ 注射系统
│ ├─ 座台
│ │ ├─ NozzleTypes.st
│ │ └─ FB_Nozzle.st
│ ├─ 射胶
│ │ ├─ InjectTypes.st
│ │ └─ FB_Inject.st
│ └─ 储料
│ ├─ MeterTypes.st
│ └─ FB_Meter.st
├─ 顶出系统
│ ├─ 托模
│ │ ├─ EjectTypes.st
│ │ ├─ FB_Eject.st
│ │ └─ FB_EjectMode.st
│ └─ 中子
│ ├─ CoreTypes.st
│ └─ FB_Core.st
├─ 温度系统
│ └─ EK312
│ ├─ EK312Types.st
│ └─ FB_EK312.st
└─ 文档
├─ 开发规范与注释约定.md
├─ 总体架构与代码分析.md
└─ 修改记录.md主控内部分层
FB_MachineController
- 读取
ST_MachineCommand、ST_MachinePara、ST_MachineSensor。 - 内部调用:
FB_MachineModeResolver、FB_ManualMode、FB_MoldAdjustMode、FB_AutoCycle、FB_MachineCommandComposer、FB_Clamp、FB_MoldAdjust、FB_Nozzle、FB_Inject、FB_Meter、FB_Eject、FB_EjectMode、FB_Core、FB_MachineStatusAggregator。 - 工艺路由、模式切换和自动流程只消费顶层送入的 10ms 节拍;执行模块与其内部轴层仍随 1ms 基础任务运行。
- 8 个执行模块各自在模块内部持有
FB_HydAxis,主控只做工艺层命令分发和模块状态汇总。 - 温控系统由顶层独立运行并只消费顶层送入的 100ms 节拍;
FB_MachineController不再保留stSensor.bTempReady这类温控前提接口,也不处理温控块接口和温控状态。 PRG_MainControl.st与FB_MachineController.st现作为注释密度的新基线,要求变量定义和关键执行行保持详细注释。FB_MachineCommandComposer当前已改为消费stManualCommandsIn与stAutoCommandsIn两套命令源聚合结构,FB_MachineStatusAggregator已改为消费stAutoStatus、stClampStatus等运行时状态聚合结构,FB_MachineController本体内部缓存也同步收敛到同一套结构边界。
全局边界
GlobalVars.st只保留在线运行必需的共享结构。Instances.st当前保留gvl_fbPLCDigitalInputBinder、gvl_fbPLCMachineInputMapper、gvl_fbPLCDigitalOutputBinder、gvl_fbPLCMachineOutputMapper、gvl_fbModbus、gvl_fbHMIParaInterface、gvl_fbPanelDispatcher、gvl_fbCommandArbiter、gvl_fbEK312、gvl_fbMachineController十个顶层实例。- 旧版手动/自动中间缓存已经移除,避免旧架构与新架构同时生效。
- 当前工程中的全局共享对象前缀已统一收口为
gvl_。 gvl_stModbus组成顶层唯一统一 Modbus 通讯镜像边界,同时收口 HMI 参数交换区与面板按键/灯交换区。gvl_ePanelModel、gvl_stPanelIO、gvl_stPanelButtons、gvl_stPanelCommandSource共同组成顶层面板业务边界,分别负责型号选择、PLC 内部原始面板字、综合按键/按灯状态和面板命令源锁存。gvl_stPLCDigitalCommandSource作为 PLC 数字量公共命令边界,当前显式收口bStart、bStop、bReset、bEStop四个公共运行命令。gvl_PLC作为原始 PLC IO 边界,统一保存现场数字量输入X*与输出Y*的当前镜像。
模块职责分析
HMI 系统
文件:Code/HMI系统/FB_HMIParaInterface.st
职责:
- 管理在线参数与 HMI 编辑缓冲区之间的读回、下发和脏标记。
- 在机器忙碌时阻止 HMI 直接下发在线工艺参数。
- 为 HMI 提供统一状态反馈。
- 不再直接面向实际 Modbus 寄存器镜像;通讯方向绑定已统一收口到
FB_Modbus。
主程序入口
文件:Code/主程序入口/*.st
职责:
PRG_MainControl是唯一有效主入口。MachineControlTypes.st定义机器级统一接口。FB_CommandArbiter.st负责先保留基础命令快照,再把 PLC 数字量命令源负责的公共运行命令和面板命令源负责的模式/手动字段叠加为最终机器命令。FB_MachineController.st是整机唯一主控编排器,但内部已按“模式解析、命令合成、状态汇总”拆成辅助层。PRG_MainControl.st直接调用顶层gvl_fbPLCDigitalInputBinder、gvl_fbPLCMachineInputMapper、gvl_fbModbus、gvl_fbHMIParaInterface、gvl_fbPanelDispatcher、gvl_fbModbus、gvl_fbCommandArbiter、gvl_fbEK312、gvl_fbMachineController、gvl_fbPLCMachineOutputMapper、gvl_fbPLCDigitalOutputBinder并生成 10ms/100ms 节拍;FB_MachineController.st只消费顶层 10ms 节拍,不再驱动、消费或汇总温控块本体状态。
IO 管理
文件:Code/IO管理/*
职责:
PLCIOTypes.st定义原始现场数字量点位边界ST_PLCIO,直接沿用电气 IO 表中的X*/Y*点号命名。FB_PLCDigitalInputBinder.st负责把运行时IN[0..47]输入映像刷新到gvl_PLC.X*。FB_PLCMachineInputMapper.st负责把当前已经建模的X*点位翻译为gvl_stSensor,并把当前已经确认真实来源的X50..X53显式翻译为独立公共命令源gvl_stPLCDigitalCommandSource;gvl_stSensor当前只收口数字量语义,不再维护电子尺、压力尺和轴实际位置/速度/压力字段。FB_PLCMachineOutputMapper.st负责把机器总状态、模块命令和顶层公共命令翻译回gvl_PLC.Y*。FB_PLCDigitalOutputBinder.st负责把gvl_PLC.Y*统一下发到运行时OUT[0..47]。
面板管理
文件:Code/面板管理/*
职责:
PanelTypes.st定义ST_PanelButton、E_PanelButtonID、ST_PanelButtons、ST_PanelIO与E_PanelModel,其中ST_PanelButtons已改为aButton数组主模型,用按钮 ID 统一收口逻辑排序号、键值、灯值与面板型号。ST_PanelIO现在只表示 PLC 内部面板原始字边界;实际 Modbus 通讯镜像已统一收口到ModbusTypes.st中的ST_Modbus.stPanelInput/ST_Modbus.stPanelOutput。FB_MK110、FB_MK116、FB_MK150现在统一为同一写法:各型号块只维护当前型号的uiPanelOrder定义,不再直接读键或写灯。- 公共类型与公共辅助函数统一放在
Code/面板管理/面板公用/*,供各面板型号复用。 F_PanelReadKeyByOrder现已改为按uiPanelOrder直接顺排读取uiIN0..uiIN3的 64 个输入位,FB_PanelReader负责循环回写stPanelButtons.aButton[*].bValue,FB_PanelLampEncoder负责循环按uiPanelOrder汇总uiOUT0..uiOUT3。- 面板灯输出统一通过
FB_PanelLampWriter按uiPanelOrder写入uiOUT0..uiOUT3,保证同一逻辑键的键值和灯值始终绑定到同一个逻辑排序号。 FB_Modbus统一负责面板通讯镜像和 PLC 内部原始面板字之间的双向绑定。FB_PanelDispatcher统一负责硬件面板型号分发、内部原始面板字调度、关键按键回灌面板命令源和灯值回写。- 面板输入字、输出字与位操作辅助接口统一采用
UINT类型,并统一使用uiINx、uiOUTx、uiValue前缀,与整型命名规范保持一致。 - 当前三个型号块都已收口为“先把全部按钮排序号清零,再只写本型号已提供键位”;后续切换面板型号或调整键位顺序时,只需要修改对应
FB_MK110、FB_MK116、FB_MK150中的定义,未提供键位会自动保持uiPanelOrder := 0。 FB_PanelDispatcher当前采用“本拍先写型号映射并读键,再更新命令源与灯请求,最后由独立灯编码层生成原始输出字”的顺序,避免面板灯输出沿用上一拍残留值,也不再双调用同一型号块。- 当前仓库还没有落地面板侧具体 Modbus 驱动和寄存器地址表,但面板通讯边界已经统一成
gvl_stModbus.stPanelInput/gvl_stModbus.stPanelOutput,后续只需要在通讯层把真实寄存器区绑定到这里即可,不需要再改面板业务层接口。
Modbus 通讯层
Code/Modbus通讯/ModbusTypes.st中的ST_Modbus才是 HMI 与面板同 PLC 主机交换的唯一统一 Modbus 通讯镜像边界。ST_Modbus.stHMIInput/ST_Modbus.stHMIOutput收口 HMI 参数编辑、命令和状态交换区;ST_Modbus.stPanelInput/ST_Modbus.stPanelOutput收口面板按键字与灯字交换区。MachineControlTypes.st中的ST_HMIProcessPara、ST_HMIParaCommand、ST_HMIParaStatus和PanelTypes.st中的ST_PanelIO现在都只表示 PLC 内部业务边界。FB_Modbus统一负责把ST_Modbus与 PLC 内部 HMI/面板业务边界之间做双向绑定,顶层在同一扫描周期内先调用一次输入绑定,再调用一次输出绑定。ST_HMIProcessPara.stMachinePara是 HMI 侧编辑缓冲区的整机参数镜像,不等同于 PLC 当前在线运行参数;只有经过FB_HMIParaInterface执行“应用到机器”后,内容才会真正写入在线参数区。- 当前仓库还没有落地具体 Modbus 驱动和寄存器地址表,但通讯边界已经统一成
gvl_stModbus;后续只需要在通讯层把真实寄存器区绑定到这个统一结构即可,不需要再改业务层接口。
模式管理
文件:Code/模式管理/*
职责:
FB_ManualMode:把机器手动命令路由到各执行模块。FB_MoldAdjustMode:把调模模式下允许的动作收口,并强制锁模进入调试方向。FB_AutoCycle:只做自动流程步骤调度,不直接驱动轴;自动前置条件当前只检查门禁、液压和系统无报警。PRG_*文件现为兼容占位,不再承担实际执行。
伺服系统
文件:Code/伺服系统/液压轴/*
职责:
FB_HydAxis:对模块写入的ST_AxisRefHyd做最终轴实例化。- 当前统一标准接口为:模块先把现场反馈、模块报警和
stConfig写入ST_AxisRefHyd,再通过bStart、bStop、bEStop、bReset、bDir、uiMode、uiCmdPres、uiSpd、udiPos、uiForce、uiAcc、uiDec、uiJerk调用FB_HydAxis。 - 轴层统一完成轴号绑定、能力上限回写、命令限幅和轴层报警叠加,并把最终结果回写到
ST_AxisRefHyd.stStatus。 - 当前 8 个执行模块都在模块内部各自实例化一份
FB_HydAxis: 合模、调模、座台、射胶、储料、托模基础、托模模式、中子。 AxisTypes.st中的ST_AxisRefHyd已收口为液压执行链当前真实使用的最小公共边界,并在该结构内补充stConfig与stStatus两个子边界,分别负责轴固定配置和轴层最终状态。AxisTypes.st新增了ST_HydAxisConfig,用于各子模块内部统一收口轴号和保护边界。
合模系统
文件:Code/合模系统/*
职责:
FB_Clamp:处理开模、合模、低压、高压、调试等动作。FB_MoldAdjust:处理模厚调节进退动作。- 对应
*Types.st文件维护参数结构与状态枚举。
注射系统
文件:Code/注射系统/*
职责:
FB_Nozzle:座台进退控制。FB_Inject:射出、保压、射退控制。FB_Meter:储料动作控制。- 以上 3 个执行块已在
2026-04-14补齐局部变量语义和状态机段落注释,后续修改时应保持同等注释粒度。
顶出系统
文件:Code/顶出系统/*
职责:
FB_Eject:基础托模进、保压、退动作。FB_EjectMode:定次、震动、停留等组合托模模式。FB_Core:中子进退动作。FB_EjectMode通过内部FB_Eject实例直接组合更高层托模动作,不再额外重复执行一层托模轴层。- 以上 3 个执行块已在
2026-04-14补齐局部变量语义和状态机段落注释,后续修改时应保持同等注释粒度。
温度系统
文件:Code/温度系统/EK312/*
职责:
FB_EK312:12 路温控的仿真/控制接口。- 由
PRG_MainControl顶层每 1ms 直接调用,并消费顶层下发的 100ms 刷新拍执行一轮温控计算。 - 温控块实例放在顶层实例区,由主入口直接驱动,不再下沉到机器主控内部,也不再把温控块状态并入机器主控。
本次统一后的关键结论
完整性
- 类型定义、功能块定义和引用关系已做静态核对,当前
Code目录内没有发现缺失的自定义类型或功能块引用。 - 顶层架构已统一为“单入口 + 单主控”。
- 新增了独立轴功能块层,执行模块与最终轴实例化已经解耦。
- 旧版多入口残留逻辑已收敛为兼容占位,避免重复驱动。
- 全局变量、全局实例命名已统一为
gvl_前缀,顶层边界命名更明确。 - 主控辅助层接口已从超长标量参数表收敛为命令源与运行时状态聚合结构,后续新增工艺状态时的改动面将优先落在类型层而不是三处调用表同步铺开。
可执行性
- 已修复三处明确的 ST 语法问题:
FB_Clamp.st、FB_MachineController.st、FB_EK312.st中的END_FOR已补齐分号。 PRG_MainControl现在已包含 HMI 同步和机器主控调用,单独绑定即可形成完整执行链。FB_Clamp、FB_MoldAdjust、FB_Nozzle、FB_Inject、FB_Meter、FB_Eject、FB_EjectMode、FB_Core使用到的轴,已经下沉到各执行模块内部实例化,主控不再处理轴配置、轴使能和轴状态并入。FB_MachineController已改为消费PRG_MainControl顶层生成的 10ms 逻辑节拍;在 1ms 基础任务下,轴层和执行块可保持高频刷新,自动流程和模式路由按 10ms 刷新。FB_EK312已提升到PRG_MainControl顶层直接调用,并由顶层 100ms 节拍驱动刷新;FB_MachineController不再消费或汇总温控块结果。FB_AutoCycle.st已补回本地VAR状态缓存声明,自动流程块恢复完整的功能块声明结构。FB_EK312.st在停机态、空闲态和故障态都会主动清零全部温控输出地址镜像,且只消费顶层下发的 100ms 刷新节拍。- 主干
.st文件已统一整理为UTF-8 with BOM,文件头、接口注释和类型注释的显示一致性已收口。 - 由于当前工作区不包含 PLC 工程任务配置文件,也没有实际 ST 编译器,本项目尚未做编译级验证;1ms 基础任务绑定仍需在工程环境中确认。
FB_Clamp、FB_MoldAdjust、FB_Nozzle、FB_Inject、FB_Meter、FB_Eject、FB_EjectMode、FB_Core已补齐局部变量定义说明、公共分支意图和状态机分段注释,便于后续按状态排查动作异常。PRG_MainControl与FB_MachineController已开始按“全部VAR_*变量必须详细注释、顶层调用参数逐行注释”的新规则收口,后续主干文件按同一标准继续补齐。- 温控块接口已进一步简化,
FB_EK312删除bManualMode与uiActTime,主控侧同步删除温控镜像输入、局部缓存和机器级温控状态汇总。 - 面板管理层当前使用
ST_PanelButtons、ST_PanelIO、E_PanelModel、FB_MK110、FB_MK116、FB_MK150、FB_PanelReader、FB_PanelLampEncoder与FB_PanelDispatcher;三个型号块现已统一为“只维护uiPanelOrder”的结构,后续切换面板型号时只需要调整对应型号块中的定义。 Code/伺服系统/液压轴/AxisTypes.st已完成液压轴公共边界收口,后续液压模块与轴层都以精简后的ST_AxisRefHyd作为统一交互边界,并通过stConfig、stStatus两个子结构承载固定配置与最终轴层状态。PRG_MainControl已补上顶层原始数字量 IO、机器语义映射、统一 Modbus 通讯绑定、面板调度、命令仲裁与温控真实调用链:gvl_fbPLCDigitalInputBinder每拍先刷新gvl_PLC.X*,gvl_fbPLCMachineInputMapper立即把原始输入翻译到gvl_stSensor并把X50..X53显式翻译到gvl_stPLCDigitalCommandSource,gvl_fbModbus先在输入绑定阶段把gvl_stModbus翻译到 PLC 内部 HMI/面板业务边界,再在输出绑定阶段把 HMI 结果和面板灯字回写到gvl_stModbus,gvl_fbPanelDispatcher每拍解码面板并回灌面板命令源,gvl_fbCommandArbiter先保留基础命令快照再叠加 PLC 公共命令源和面板负责的模式与手动字段,gvl_fbEK312每拍都被调用但只在 100ms 节拍上执行温控计算,gvl_fbMachineController再把主控结果回写到状态与轴边界,gvl_fbPLCMachineOutputMapper负责把机器语义输出翻译回gvl_PLC.Y*,gvl_fbPLCDigitalOutputBinder最后统一下发原始输出。- 面板读键层现按
uiPanelOrder直接线性映射 PLC 内部uiIN0..uiIN3的 64 个输入位,面板灯层按同一个uiPanelOrder线性映射 PLC 内部uiOUT0..uiOUT3的 64 个输出位,键值和灯值共用同一套面板坐标。 FB_MachineController已完成首轮内部拆层:模式解析下沉到FB_MachineModeResolver,命令合成下沉到FB_MachineCommandComposer,状态汇总下沉到FB_MachineStatusAggregator,主控本体主要保留 10ms 路由调度与模块执行。FB_MachineController现已对外透传stModuleCommandsOut、uiClampActHintOut、uiSelectedEjectActHintOut三类运行时镜像,顶层原始输出映射层不再直接窥探模块内部状态机。ST_MachineManualCommand已新增bMotorStart,马达键现在与电热键一样采用顶层锁存命令链路,而不再只停留在面板灯语义层。
架构风险
- 如果 PLC 工程里仍把旧版
PRG_MachineController、PRG_ManualMode、PRG_MoldAdjustMode、PRG_AutoCycle绑定到任务,会与新架构说明冲突。 - 本次已把这些程序改为兼容占位,但工程层仍应检查任务映射,确保只运行 1ms 基础任务上的
PRG_MainControl。 Code/IO管理现在已完成“原始点位层 -> 机器语义层 -> 原始输出层”的首轮闭环:gvl_PLC.X*已翻译到gvl_stSensor,主控与模块核心输出也已翻译回gvl_PLC.Y*;HMI/面板链也已补上“统一通讯镜像 -> PLC 内部业务边界”的独立绑定层;但模拟量采集、电子尺/压力尺、吹气/拉带/夹带等未建模业务输出仍需继续补齐。- 当前
bStart、bStop、bReset、bEStop已暂定显式收口到gvl_PLC.X50..X53;若现场后续确认真实物理来源不同,应只修改FB_PLCMachineInputMapper中的公共命令映射段与相应 IO 点位注释,不要回到顶层散写。
后续维护建议
- 新增模块时,先扩展
MachineControlTypes.st和GlobalVars.st的统一边界,再扩展FB_MachineController与对应辅助层。 - 修改任何状态机时,必须同步更新本文件中的职责说明和执行链描述。
- 若后续继续扩展主控功能,优先扩展
FB_MachineModeResolver、FB_MachineCommandComposer、FB_MachineStatusAggregator三层,不要把辅助层逻辑重新回填到FB_MachineController本体。 - 若后续接入真实 PLC 工程文件,建议补一份“任务配置与下载说明”文档,并在本文件追加编译验证记录。
- 若后续新增模块命令源或模块运行态字段,先扩展
MachineControlTypes.st中的聚合结构,再扩展辅助层和主控本体,避免重新回到宽接口维护方式。
