UN-EM-CM是基于OMAC的设备分层,而SU是指Soft unit软件单元,是之前某个客户中设备之间的逻辑程序,即设备程序是一个对象,设备和设备之间的逻辑全部在SU中编写!
1.程序块说明及选择
西门子S7系列PLC提供了组织块(OB:Organization block)、函数块(FB:Function Block)、函数(FC:Function)三类代码块。
OB组织块
OB: 组织块(OB)表示操作系统和用户程序之间的接口,由操作系统调用,它们控制循环和中断驱动的程序执行、PLC的启动行为和错误处理,用户可以在OB块编程来决定CPU行为,是所有程序执行的接口。
FC函数
FC:函数 (根据 IEC 1131-3 标准,函数 (FC) 是不含存储区的代码块。通过函数可在用户程序中传送参数。 因此,函数特别适合取代频繁出现的复杂结构,如计算等。 ) (FC) 是不带存储器的代码块。 由于没有可以存储块参数值的数据存储器。 因此,调用函数时,必须给所有形参分配实参。
函数可以使用全局数据块 (数据块用于存储用户数据。 数据块分为可由所有代码块访问的全局数据块,以及分配给特定功能块调用的背景数据块。) yongjiu性存储数据。
函数包含一个程序,在其它代码块调用该函数时将执行此程序。 例如,可以将函数用于下列目的:
将函数值返回给调用块,例如,数学函数
执行工艺功能,例如,通过位逻辑运算进行单个的控制
可以在程序中的不同位置多次调用同一个函数。 因此,函数块简化了对重复发生的函数的编程。
FB函数块
FB: 函数块是一种代码块,它将输入、输出和输入/输出参数yongjiu地存储在背景数据块中,从而在执行块之后,这些值依然有效, 所以函数块也称为“有存储器”的块。
函数块也可以使用临时变量。 临时变量并不存储在背景数据块中,而用于一个循环。
函数块包含总是在其它代码块调用该函数块时执行的子例程。 可以在程序中的不同位置多次调用同一个函数块。 因此,函数块简化了对重复发生的函数的编程。
函数块的调用称为实例,函数块的每个实例都需要一个背景数据块;其中包含函数块中所声明的形参的实例特定值。 函数块可以将实例特定的数据存储在自己的背景数据块中,也可以存储在调用块的背景数据块中。
以上是TIA Portal中Help的描述,基于描述发现调用FB需要对应的实例化数据块(Instantiation,旧译背景数据块不是很合理)。
库的程序块选择
实例化对应的另一个术语即对象,一般会称之为对象的实例化。库程序是标准设备中UN/EM/CM的功能在程序系统中实例化,所以一般情况下,库功能都应该是选用函数块编程。
而函数可以在实例化程序中被用于一些算法计算,包括但不限于常用的运算算法、数据类查找应用算法、重复利用的工艺算法等,并会给实例化程序提供一个返回值用于工艺过程控制需求。
2库程序块规范
2.1.FB的命名
函数块的命名建议FB_XX_功能名称
FB:是函数块的标识,用于标识程序块,也有用fB做标识。
XX:可选,当有些算法需要存储数据,则XX不需要,表示该函数块仅是一些算法逻辑。
若为设备的控制程序,基于程序块功能不同,XX可以为SU、UN、EM、CM。SU用于标识程序中的软件分组的逻辑,UN用于标识程序中整个UN分组设备的功能逻辑,EM用于标识程序中某个EM的功能逻辑,CM用于标识程序中某个CM的功能逻辑。
功能名称:基于功能的名称,一般建议用英文(英文缩写)与阿拉伯数字的组合。英文(英文缩写)标识当前主要功能描述,阿拉伯数字用于标识功能的不同版本。
若仅是算法逻辑,功能名称只是英文及英文缩写,但需要保证名称的唯一性。比如西门子的LGF库程序中的LGF_FIFO的函数块用于数据堆栈的先入先出,由于需要存储临时数据,所以也是用函数块编程。由于是西门子的LGF库,所以名称为LGF_标识,而在客户的标准化程序中应该更改为合适自身的命名方式,比如FB_FIFO,然后在函数块的说明中注明基于西门子LGF程序库中的LGF_FIFO。
比如MotorCtrl标识为电机控制,可以用01和02来区分是变频控制还是工频控制,亦可以用于区分是单向电机控制还是双向电机控制,需要在相关文档或表格中注明,要注意名称在实际程序库中的唯一性。
表 1:函数块名称示例表
2.2. FC的命名
函数的命名建议FC_功能名称
FC:是函数的标识,用于标识程序块,也有用fC做标识。
功能名称:基于功能的名称,一般建议用英文及英文缩写描述。比如FC_SearchMaxRunTime是程序中用于查找当前运行时间最多的电机编号。
命名说明:
程序块用FB及FC标识,主要用于标识程序块的类型。
UN/EM/CM用于和物理设备分层的对应,由于UN-->EM-->CM的分层,程序块中函数块(FB)的嵌套调用也和物理分层对应,及EM中可以嵌套CM程序块,而CM是最底层的程序块,不能嵌套调用EM甚至是UN程序块。
由于SU是软件逻辑单元,可以理解为设备程序之间的数据逻辑接口。SU中可以调用UN/EM,此时会处理整个SU中设备的一些控制逻辑。也可以不调用任何UN/EM,只是整个SU中设备的一些数据传递的接口。
2.3.程序块属性
选中程序块,点击鼠标右键选择属性。
图1 : 程序块属性选择示意图
在弹出框中选中“信息”并将内容补充。
图2 : 程序块属性信息示意图
标题:可以不用填充,默认为程序块名称。
注释:一般用于表明当前程序块的功能概述。
版本:当前程序的版本,不同版本的内容在程序中注明, 如下图所示,在程序开始前的程序说明中表明程序的修改历史记录。
图3 : 程序块程序说明示意图
作者:一般为编程原始作者或者团队名称,用于后续的培训或者帮助支持的联系方式。
系列和用户ID:标准程序中会有很多类型程序块,包括不同的设备控制程序、一些公共程序、数据处理程序、通信程序、架构程序等等。可以通过系列和用户ID将所有程序分类,这样可以给予每一程序块唯一的属性和ID,也是标准程序中将程序分类的方法参考。
将程序块生成源文件并打开后,也可以通过源文件的头信息查找当前程序的一些属性。
图4 : 程序块源文件示意图
源文件中的第1行标识了程序块的类型,FB为FUNCTION_BLOCK,FC为FUNCTION。
源文件中的第2行为程序块的名称
源文件中的第3行为程序块的属性,TRUE表示程序块为优化块的访问,而FALSE则表示程序块为非优化块的访问方式。
源文件中的第4行开始即上述程序块属性的信息,同前。
TIA Portal提供了从源文件生成程序块的功能,利用C#等gaoji语言,可以基于源文件的头信息,结合架构程序,生成设备的控制程序的源文件,然后通过源文件直接生成设备控制程序。
2.4.程序块引脚
程序块引脚包括输入、输出、输入输出三类引脚,除了引脚的书写规范以外(第4章)需要注意以下几点:
1. 若是设备的配置参数,比如一个机械的传动比等固定参数或者工艺参数,建议每一类设备用一个自定义数据类型定义。配置参数原则都是输入引脚,基于书写规范以外建议书写中增加_Cfg(Configration),阅读程序时能从书写直接看出来这是配置参数。
2. 设备的实际IO点,基于书写规范以外建议书写中增加_HW(Hardware),不管是输入还是输出,阅读程序时能从书写直接看出来这是用于跟实际IO交互数据。
注:在电气图纸中的IO符合也建议I(Q)_HW_XXXX,这样和程序的引脚可以对应。
3. 输入输出引脚建议增加数据来源,比如有的数据是来自HMI,建议在已有规范外增加_HMI的书写方式,读程序时从书写能直接看出来这是来自哪里的数据。
3.工艺接口标准化
图5 : 工艺生产示意图
设备程序的工艺接口标准化必须基于整个标准程序架构描述,这些内容包括但不限于模式和状态管理接口、参数配置接口、设备当前运行信息接口、设备性能接口、设备之间数据交互、人机界面数据交互等。
标准程序架构中会做相应描述,本节仅描述设备之间数据交互。
设备接口是两个传输组件之间的数据管理接口,该接口的数据影响的仅是两台在物理空间上有物理产品传输关系的设备;
设备接口主要包括四个方面的数据,分别对应产品、设备以及其他工艺要求三个方面的数据对接:
产品移交信号,控制产品在关联的两台设备上的物理移交;
数据移交信号,附加在物理移交产品上的相关信息;
请求信号,设备之间发出控制改变设备运行状态的请求信号;
其他各种工艺用途信号;
比如上图5中的搅拌和压皮的设备之间,产品在搅拌工艺完成后必须传递到压皮设备,相关产品信息(比如搅拌程度)也可能需要附带向压皮设备传递,这就是在产品移交过程中的相关数据移交。
当搅拌设备由于故障等不可抗拒因素导致的停机,基于工艺要求(产品或设备要求)也可能需要压皮设备停机,此时又存在请求信号,用于保护产品和设备的安全。
还有工艺要求,比如搅拌不使用,压皮设备的某个机构需要保持在一个固有位置,这就是基于其他工艺用途的信号。
在当前软件分层中的设备数据接口应该在SU中编辑,一个SU中会将该UN中的设备接口统一管理和传递。
同时,还需要看到不同UN之间也可能存在数据传递,比如下图所示:
图6 : 设备数据接口工艺示意图
上图所示的UN01会存在一个SU用于传递UN01中EM01和EM02及其CM的数据,但当产品到达UN01_EM02末端,此时需要向UN02的机器人传递请求搬运的信号。
此时,不同SU之间也需要传递一些数据,建议在当前程序架构中增加一个程序块及全局数据块,用于集中处理和传递不同UN之间的数据。
4.库程序说明书
下图为西门子库程序的说明书示例,包括了程序说明的大部分内容,分别说明如下:
图7 : 程序说明书示意图
功能概述
对应上图中的Short Description,西门子程序主要描述了程序的功能,但对于标准程序库中的程序,除了功能概述以外,还需要说明当前程序的系列、程序ID、程序版本历史记录、以及程序存放的位置等信息,这类信息和上图中的Background information类试。
程序方框图
程序方框图可以明显展示程序的全部形参内容。
输入/输出/输入输出引脚说明
程序所有形参引脚的名称、数据类型、说明注释的表格,三种不同形参分为三个小节描述。
输出/输入输出形参的一些状态ID、故障ID以及一些形参的注意事项,都应该在各自描述的小节中说明清楚,使整个形参的描述更加的完整。
工艺描述
对应上图中的Principle of operation。西门子程序库的内容都是一些算法,故其描述比较简单。
对于标准库程序,有部分可能会涉及到工艺内容,必须将不同版本的程序块对应的工艺描述清晰,同时合理的应该附上相关工艺流程图。
对于关键部分工艺的程序也应该在描述中说明清晰,描述过程尽量附带关键数据及说明,这样便于工程师学习及调试的参考理解。
调试描述
除了以上描述,对于标准程序库中的程序应该且必须包括调试说明,这对于一个标准程序库中的某个程序块的调试有非常强有力的帮助,有助于调试工程师尽快上手调试。
调试描述中必须描述(一)调试步骤(二)每一步调试过程相关参数设置以及需要关注的变量的状态变化,用于明确调试的目的是否达成(三)调试最终的结果,包括相应的人机界面(SCADA/HMI)上的状态变化。
其他信息
基于工艺的千变万化,总是有些内容以上小节无法覆盖,必须在其他信息中加以说明,这类信息主要便于调试和学习人员对程序以及整个程序库的理解。