IEC 61131-3功能块类型变量赋值运算符语义及执行机制问询
IEC 61131-3中功能块赋值的行为解析
先看示例代码:
VAR fbA, fbB : TON; END_VAR // Function Block assignment fbB := fbA;
赋值操作的本质
在CoDeSys、TwinCAT、Unity这类IEC 61131-3实现中,功能块实例的内存是静态分配的,fbB := fbA这类赋值操作仅会完成内存区域的完整复制:
- 包含
fbA的VAR_INPUT(输入变量)、VAR(内部状态变量)、VAR_OUTPUT(输出变量)的所有成员数据 - 没有额外的逻辑操作,本质就是把
fbA占用的内存字节逐字节(或按结构化成员)拷贝到fbB的内存区域中。
对FB_init()/FB_reinit()/FB_exit()方法的影响
赋值操作不会调用任何FB_init()、FB_reinit()或FB_exit()方法:
- FB_init()仅在功能块实例首次初始化(比如程序启动时、实例被创建时)触发
- FB_reinit()用于重初始化实例状态,通常需要显式调用或通过特定系统逻辑触发
- FB_exit()在实例被销毁时执行(不过多数IEC 61131-3运行时是静态内存模型,很少触发这个方法)
- 赋值只是单纯的内存拷贝,不属于初始化、重初始化或销毁流程,因此不会触发这些方法。
内容的提问来源于stack exchange,提问作者Hydrargyrum
相关产品推荐
相关产品推荐

