PLC结构化文本(ST)——临时&静态&实例-变量(TEMP&STAT&INST)
1.PLC结构化文本(ST)——类(Class)2.PLC结构化文本(ST)——方法(Method)3.PLC结构化文本(ST)——接口(Interface)4.PLC结构化文本(ST)——特殊指针(This&Super)5.PLC结构化文本(ST)——继承(inheritance)6.PLC结构化文本(ST)——属性(Property)7.PLC结构化文本(ST)——指针和引用(Pointer&Reference)8.PLC结构化文本(ST)——访问修饰符9.PLC结构化文本(ST)——构造函数(FB_init)10.PLC结构化文本(ST)——变量类型和变量属性
11.PLC结构化文本(ST)——临时&静态&实例-变量(TEMP&STAT&INST)
12.PLC结构化文本(ST)——数组越界与PLC异常(CheckBounds)13.PLC结构化文本(ST)——异常捕获(__TRY__CATCH)14.PLC结构化文本(ST)——接口指针转换(__QUERYPOINTER)15.PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)16.PLC结构化文本(ST)——区域代码折叠(Region)17.PLC结构化文本(ST)——枚举_to_string(to_string)18.PLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)19.PLC结构化文本(ST)——结构体属性外部调用(Issue)20.PLC结构化文本(ST)——AND_THEN & OR_ELSE21.PLC结构化文本(ST)——实例路径属性(attribute 'instance-path')22.PLC结构化文本(ST)——隐式枚举(implicit enum)23.PLC结构化文本(ST)——泛型常量(Generic Constatnt)PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——临时&静态&实例-变量(TEMP&STAT&INST)
临时变量(VAR_TEMP)
- 临时变量在每次调用POU时都会初始化。
- 用在程序(PRG) 和 功能块(FB) 中。
- 在方法(Method) 和 函数(Function) 中的内部变量都是临时变量。
PROGRAM MAIN
VAR
iResult : UINT; // STATIC
END_VAR
VAR_TEMP
iCounter : UINT; // TEMP
END_VAR
----------------------------
iCounter := iCounter + 1; // 无法实现累加,每次调用都会被初始化。
iResult := iResult + 1; // 可以正常累加。
静态变量(VAR_STAT)
- 静态变量只在POU的第一次调用时被初始化。
- 静态变量声明赋值后,值不会丢失。
- 可用在 方法(Method) 和 函数(Function) 中。
- 在 程序(PRG) 和 功能块(FB) 中声明的变量都是静态的。
FUNCTION F_Counter : UINT
VAR
iTemp : UINT; // TEMP
END_VAR
VAR_STAT
iCounter : UINT; // STATIC
END_VAR
----------------------------
iCounter := iCounter + 1; // 静态变量,可以实现累加。
iTemp := iTemp + 1; // 临时变量,每次调用都会被初始化,无法实现累加,因此每个周期计算后的值都是1。
F_Counter := iCounter;
Tips : 需要强调一点,若在功能块内部(非方法内部)声明静态变量,并且在程序中实例化了多次(创建多个对象),此时需要注意不同对象的静态变量地址是相同的,也就是说如果同一个类型的不同实例,改变其中一个静态变量值,其它实例的对应静态变量值也会跟着改变。这就是C#或Java中的单例。有关静态变量和单例的详细内容自行谷歌百度。
实例变量(VAR_INST)
- 实例变量(VAR_INST) 只能在方法(Method) 中使用,可以在方法的声明区在线监控实例变量值。
- 不保存实例变量(VAR_INST)在方法栈中,但在功能块的实例栈中。
- 实例变量与功能块实例的其它变量一样,每次调用方法时不会重新初始化。
METHOD M_Counter : INT
VAR_INPUT
iVar : INT;
END_VAR
VAR_INST
iCounter : INT := 0;
END_VAR
iCounter := iCounter + 1; // 可以实现自增,iCounter只有首次调用会被初始化。
M_Counter := iCounter;
总结
在使用临时变量、静态变量和实例变量时,需要清楚对应POU的内部变量原本的类型以及变量的生命周期。
__EOF__
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)