西门子PLC程序的结构和调用逻辑
S7-1200系列PLC 的程序分为操作系统程序和用户程序两部分。其中,操作系统程序又称为管理程序,主要用于协调PLC内部过程。操作系统程序由PLC生产厂商编写,并固化在可电擦除可编程只读存储器(EEPROM)中,不需要用户编写和干预;而用户程序是用户用梯形图或结构化控制语言编制的应用程序,用以实现各种控制要求。
用户程序由各种程序块,其中包含组织块(OB)、函数(FC)、函数块(FB)和数据块(DB),和一些系统功能指令组成。其中OB、FB、FC统称为代码块,都可包含程序代码,而数据块用来储存程序所需的数据。
组织块(OB)构成了操作系统与用户程序之间的接口,组织块由操作系统(OS)调用。CPU通过组织块以循环或者事件驱动的方式控制用户程序的执行。此外,CPU的启动及故障处理都要调用不同的组织块,在这些组织块中编写用户程序可以判断CPU及外部设备的状态。
PLC CPU的操作系统循环执行,操作系统在每一个循环中调用主程序,即“程序循环”OB,这样就执行了在“程序循环”OB中编写的用户程序。操作系统与主程序执行过程如图1所示。

图1 操作系统与主程序关系
一个OB的调用和执行可以中断另一个正在执行的OB。是否允许一个OB中断另一个OB取决于它们的优先级,即高优先级的OB可以中断低优先级的OB。例如,“程序循环”OB的优先级最低,为“1”,它可以被高优先级的OB中断。当中断事件出现时,调用与该事件相关的OB,则当前执行的程序在当前指令执行完成后(两个指令边界处)被中断,并立即执行相应的中断程序,中断程序执行完成后跳回到中断处继续执行其后的程序。不同的中断事件由操作系统触发不同的OB块,中断程序编写在相应的OB块中。这样一旦出现中断事件,就执行一次相应中断OB块中的程序,如图2所示。

图2 中断程序的执行
线性化编程是将所有的程序指令都写在主程序中以实现一个自动化控制任务。这样的编程方式不利于程序的查看、修改和调试,无论程序简单与否都不建议进行线性编程。
PLC 用户程序通常采取模块化编程,将复杂的自动化需求分解成可以单独实现某项功能或工艺的子任务,这些子任务的程序构成一个个的“块”,再由各个块之间的相互调用来组织总体程序。这样做可以避免线性化编程将所有程序放在一个程序块中所造成的程序查看、调试和修改较为烦琐的缺点,显著地提升了PLC 程序的可读性、组织透明性和维护性,更易于对复杂任务进行处理和管理。两种编程方式及程序结构的对比如图 3所示。

图3 程序结构
组织块(OB):组织块是CPU 操作系统与用户程序的接口,包含主程序逻辑代码。组织块将自动被操作系统调用,并可中断用户程序的执行,包括中断组织块、启动组织块等。
函数(FC):函数是用户编写的包含经常使用的功能的子程序。FC 不具有相关的背景数据块 (DB)。 对于用于计算该运算的临时数据,FC 采用了局部数据堆栈。 不保存临时数据。 要长期存储数据,可将输出值赋给全局存储器位置,如 M 存储器或全局 DB。
函数块(FB):函数块是用户编写的包含经常使用的功能的子程序,其含有专用的背景数据块。由于运行过程中需要调用各种参数,因此产生了背景数据块,需要用到的数据就存储在DB 中。即使结束调用,数据也不会丢失。
数据块(DB):用于存储用户数据,分为可被所有代码块调用的全局数据块和由FB 单独使用的背景数据块两种。
用户程序的分层调用
用户编写的函数或函数块必须在OB块中调用才能执行。在一个程序块中可以使用指令调用其他程序块,被调用的程序块执行完成后返回原程序中断处继续运行。程序块的调用过程如图4 所示。OB、FB和FC可以调用其他程序块,被调用的程序块可以是FB和FC。

图4 程序块的调用
举例来说,在自动化控制任务中,可以将工厂级控制任务划分为几个车间级控制任务,将车间级控制任务再划分为对几组生产线的控制任务,再对生产线的控制任务划分为对几个电机的控制,这样从上到下将控制任务分层划分。同样也可以将控制程序根据控制任务分层划分,每一层控制程序作为上一层控制程序的子程序,同时调用下一层的子程序,形成程序块的嵌套调用。用户程序的分层调用就是将整个程序按照控制工艺划分为小的子程序,按次序分层嵌套调用。例如将一个控制任务划分为三个独立的子任务,在每个子任务下划分小的控制任务,程序的分层调用如图5所示。

图 5 用户程序分层调用
三个独立的子程序分别为FB10、FB2和FC3,在FB2中又嵌套调用FB1,这样通过程序块或子程序的嵌套调用实现对控制任务的分层管理。用户程序执行次序为:OB1→FB10+背景DB7→→FC1→FB2+背景DB2-→FB1+背景DB1→FC3→OB1。用户程序的分层调用是结构化编程方式的延伸。
用户程序可以采用模块化编程,将程序根据任务分层划分,每一层控制程序作为上一层控制任务的子程序,同时调用下一层的子程序,形成嵌套调用。程序中允许FB/FC的嵌套深度,见表1。用户程序的执行顺序:执行完启动OB之后进人RUN模式,然后循环执行程序循环OB,按照程序顺序执行OB中的程序。
表1 FB/FC嵌套深度

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
