IEC 61131-3 PLCopen 实战应用:慎重声明变量

好的开始是成功的一半,对于成功的程序编写来说,良好的变量声明也是如此。
刚接触IEC61131-3时,我被PLCopen能实现的强大功能块所吸引。例如多轴插补MC运动控制功能块,用CFC语言能够轻松编写出可移植的标准CNC控制程序,并且还做出了能够实时在线修改DIN66025(G代码)编程语言的应用,曾一度自以为掌握地挺深入。
其实不然,我之前忽视考虑一个最基本的问题,那就是为什么IEC61131-3规定我们这样进行变量声明?例如: A AT %QX0.0 : BOOL; B AT %IX0.0 : BOOL; C AT %MX0.0 : BOOL;
IEC61131-3平台俗称软PLC。之所以叫软PLC,我个人的理解是,因为它有一个计算机芯片内核,因此编程语言与程序执行方式和计算机软件工程非常相似;但它的外围电路又是典型的PLC布局,因此程序中的变量必须要绑定到芯片外的物理地址上,才能使机器真正运动起来,否则我们编写的程序段只能在芯片内部空运转。%Q、%I、%M都算物理地址。
因此,用惯了硬PLC的人,刚开始写软PLC程序时,会把中间变量与%M联想在一起,恨不得把所有的虚拟变量都AT到%Q%I%M上才安心。
这可能会带来很多问题,例如:
1、当XML、SYM、CSV等标识符文件在不同的IEC61131-3设备之间传递进行虚拟计算时,比如说在PLC与HMI之间交换变量,编译在文件里的物理地址%Q%I%M能得到及时响应么?
2、当RETAIN数据区里定义的变量绑定到了AT %M*.*,那么当软PLC断电重启后,这批数据很可能是保存不住的。
因此,我们在实际项目中,做变量声明时,要慎重。我的想法是,先尽量不绑定物理地址,甚至可以考虑专门编写一个数据交换程序,专门进行虚拟变量与物理变量的对接,而不是直接绑定。
此外,当局部与全局里存在一个同名变量时,编译不报错,但是在线观察,我们会发现局部的变量有效触发,而全局的那个同名变量会没反应。因此,我的想法是尽量别在局部定义过多的变量。

你可能感兴趣的:(IEC61131)