在1994年SIEMENS推出了STEP 7,当时的IDE是simatic manager。在STEP-7中就包括有FB,FC。在其后发布的IEC61131-3中也定义了FB。从中可以看出参考关系。CODESYS符合IEC61131-3标准,类的定义也是用FB。
上面讨论了类,下面讨论对象。
典型的OOP语言都允许用new动态声明一个对象,但是simatic和CODESYS都不允许这样的语法。simatic和CODESYS中都是静态的创建对象,语法是:
objName : fbName ;
所谓静态创建就是不允许用语言的语句创建一个对象,只能在变量声明区声明一个变量。也就是说在编译程序时,所有的对象都是已经定义好的,没有未知未定义的对象。
我们考虑这样一种情况:在一个FB中声明一个对象,那会怎样?这种情况就有些类似继承了。比如在FB1中声明如下:obj : FB2;
那么可以讲类FB1中隐含继承了类FB2。当然继承的另一种显式写法是:
FUNCTION_BLOCK FB1 EXTENDS FB2
显式写法只能继承一个父类,而我称为隐式继承的可以继承多个父类的特性。但是隐式继承需要注意的是不要环形继承。否则是无法编译通过的。
本文档最后要说明的是程序的调用。在CODESYS中假设有声明语句
objName : fbName ;
在语句区,可以这么写
objName();
其实这种写法在OOP中是不准确的。可以把上面的语句映射到OOP中的写法如下:
objName.fbName();
这意思是调用对象objName中的fbName方法。这就是说任何FB本身就是一个方法。这与OOP的概念稍有出入。我们要注意。
今天讲的内容也是CODESYS视频教学中没有明确提到,但是却是非常重要的内容。因为如果对这些概念不能完全理解,就无法在CODESYS中完成OOP编程。