织程序的组织首先沿着一条主线OB1进行,把它作为主程序来看,设计出它的主流程。如一个PID单回路控制,按如下顺序:现场参数采样输入数据处理PID控制输出数据处理控制输出。我们可以把所有的程序都放入OB1中,然后只运行它即可。但如果程序量较大,程序的可读性会很差,且不便于调试。为此,我们可以把程序分割为一个个承担一定功能的子程序,这就是所谓的功能函数和功能块。如上述流程可以分割为参数采样模块、输入数据处理模块、PID控制模块、输出数据处理模块、控制输出模块几个部分。每一个部分就成为一个功能函数或一个功能块,程序模块之间通过形式参数或共享数据块传递数据。把通过数据共享传递的参数归纳到一起,可建立一个共享数据块。有些模块定义的参数较多,且大多数是模块独有的参数,如PID模块,则可以把该模块定义为功能块,然后为它生成背景数据块,这样它可以使用属于自己的背景数据。调用该功能块是,需要连同背景数据块一起调用。功能块建立完成之后,程序的主干OB1中就只有对功能模块的调用和少量的数据处理工作了,主流程线路很明了,调试时也可以对各个模块逐一调试。程序主干建立后,开始添加外围程序。程序运行之前,需要对某些参数预置初始值,而不希望在OB1中反复赋值,那么我们把对这些参数预置初值的程序编写在初始化模块OB100中,这些赋值语句只在系统启动时运行一次,初始化就完成了。在程序中如果某些数据的处理对时间周期要求严格,例如PID模块,如果要求控制周期为200毫秒,而OB1的循环扫描时间又在十几或者几十秒,那么在OB1中用定时器计时,就会产生较大误差,为保证准确的控制周期,我们可以把PID控制模块放到定时中断模块OB35中。这样每隔100ms,控制就能执行一次。至此,一个程序模块的基本组织结构就完成了。3.功能函数的调用功能函数可以被其它程序块如OB、FC、FB调用,如果功能函数中不含形式参数,调用命令格式为:CALLFC
,其中
为功能函数序号。如果功能函数带有形式参数,则必须为形式参数传递数据。命令格式为:CALLFC
para1Data1para2Data2para3Data3::其中
为功能函数的序号;para1para2……为形式参数;Data1Data2……是给形式参数传递的数据或变量值。4.功能块的调用
f一个功能块有自己的形式参数以及相对应的背景数据块。调用时,可通过背景数据块进行参数传递。调用格式为:CALLFB
DB
para1para2para3::其中,为功能块的名称,FB
DB
为功能块对应的背景数据块的r