对象是算法和数据的有机结合,是对某种特定事物的算法和数据的一种封装。在PLC编程中,如果我们按照工艺要求将对某种设备或操作的控制逻辑写在一个功能块(Function Block,后面简称FB)中,而此功能块同时也保存了该设备或者操作状态的相关数据,且该FB对外部程序只暴露接口,那么该FB就是相当于一个类。类是对对象的抽象,类本身并不能运行,类需要被实例化后才能运行。同样的道理,PLC程序中的FB在被调用之前也不能运行,尽管它一直驻留在PLC的工作内存里。当此FB被拖放到程序编辑器里并分配背景数据块(其实是实例数据块)的过程就是对FB的实例化过程。从背景数据块的英文名称Instance Data Block就能看出。下图演示了这一过程。
图4 对FB的实例化在上图中,左边的HwValve和HwValve*都是封装好的阀门控制组件。从软件工程的角度来看,这里我们也可以将它们理解为类或者组件。这些类在未被调用之前是不会运行的,只有当它们被拖到OB或者FC中并分配实例数据块(Instance Data Block,类似于软件工程中类的实例化)后才能运行,这一步骤和类的实例化过程完全相同!上图中的XV-1001就是一个阀门的实例,我们完全可以通过访问实例XV-1001的属性来实现对这个阀门的操作控制以及状态采集,比如XV-1001.QOped表示阀门XV-1001是否已打开。这些属性可作为设备之间的联锁或者顺序控制的状态转移之用。