西门子s7-200plc用户程序可以采用主、子程序结构或普通线性化结构。当采用普通线性化结构时,只需要编制主程序obl;当采用主、子程序式分块结构时,plc程序由主程序(obl)、子程序(sbrn)、中断程序( inrn)等组成。
s7-200 plc的主、子程序结构对程序块的内部排列有规定的要求。主程序(obl)必须进行编写,且位于程序的最前面;随后是子程序( sbrn)与中断程序(inrn)。在s7-200中,子程序(sbrn)、中断程序(inrn)可以根据需要进行选用与编写。
(1)主程序
s7-200主程序代号规定为ob1。早期的s7-200 plc用户程序不分块,需要在主程序之后接着安排子程序与中断程序,因此,主程序的结束应使用指令mend作为标记。但如果使用的是micro/win32编程软件,主程序、子程序、中断程序都可以通过独立的区域进行编程,通过编程软件的自动编译功能,可以对程序进行自动的编排与调整,主程序的结束无须再编写指令mend,如图1 (a)所示。
图1 s7-200的程序结构与执行过程
主程序081在s7-200 plc中为用户程序的组织、管理者,必须位于plc用户程序的最前面,以保证每次执行plc循环时,首先对ob1进行扫描。
同样,早期的s7-200在子程序结束处应使用指令ret作为返回标记,子程序srbn必须编在主程序ob1的结束指令mend之后。采用了micro/win32编程软件后,这些由编程软件进行自动编排与调整。
子程序srbn在s7-200 plc中为可选部分,可以编写也可以不编写。子程序的执行通过主程序ob1的对该子程序的调用实现,并非每次plc循环都需要执行全部子程序。
(3)中断程序
s7-200 plc的中断程序代号为intn(n为十进制数值,可以是0--127),用于区别不同的中断程序。早期的中断程序结束应使用指令reti作为返回标记,中断程序intn同样必须编在主程序ob1的结束指令mend之后,且习惯上是放在子程序srbn之后(也可以放在子程序之前)。
中断程序intn在s7-200中同样为可以选择的部分,它需要通过主程序ob1的调用才能执行,并非每次plc循环都需要执行全部中断程序。
s7-200的程序结构与执行过程如图1 (c)所示。
(4)局部变量堆栈
在进行plc程序设计时,程序中有很多为了简化逻辑块结构而设置的临时状态、数据存储单元,这些存储单元实际上只是为了方便编程、检查而设的临时存储单元,它与逻辑外部的程序无关,在s7中将其称为“局部变量”或“临时变量(temp)”。
根据需要,设计者可以在s7-200的ob1、sbrn、intn中使用“临时变量”。“临时变量”存储在局部变量数据堆栈(l)中,这一区域为全部程序块所公用,只可以用于ob1或sbrn、intn块内部使用的中间运算结果寄存(这些中间运算结果不可以用于块外部)。局部变量堆栈在程序块执行完成后,数据将被其他逻辑所需要的内容所替代。
如果需要保存可以用于其他逻辑块的状态,应使用plc的内部标志寄存器m或变量存储器v。