查看: 279|回复: 7
收起左侧

[资料分享] 基于OMAC的设备标准化(PLC)应用(4)

dianqizai 2022-8-23 17:02:28 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
以下文章来源于壶琰棠 ,作者壶琰棠主。

接触过很多程序,也曾经调试过一些别人的程序,特别是对于调试别人程序的时候,很多工程师都会说“哎,还不如自己重新写一遍来的快”;这可能是由于别人程序写的不好,思路和逻辑混乱,但我想更多的第一不好的感觉应该是在编程的规范上,因为你会发现程序里面好多的TagXX(XX是不断累加的数字),而以前Step7编程的程序都是M绝对地址符号,导致可读性和可理解性非常差;
除了变量符号不规范外,由于没有严谨良好的程序结构和编程习惯,程序中对同一个设备的处理程序经常会混乱交叉,数据交换混乱不堪;
还有就是一些变量和符号没有告知具体来源(比如SCADA/HMI),而这些变量有的时候只是参与了一些状态控制,但变量名称可能只是一些没有意义的符号,这个时候你阅读程序就会感觉这个变量真是天外来客一样,不知道怎么来的;
也有一些公司随着时间的累积会将一些固化下来,但很多时候做的不彻底,不同的设备或项目可能大部分相似,但总是有一些地方做的不是特别彻底;
。。。。。。
可能还有很多,但无法一一列举,特别是国内整个工控行业的文档做的非常差,很多都是要靠工程师自己一个个去猜测,所以很多工控人士很害怕调试别人程序,即使这个别人是自己公司的同;
本章节的编程规范的标准化以西门子的PLC为例子,不同的PLC的编程规范可能不一样,但这都和整个的标准化的思路不冲突,这只是程序书写的规范而已;
本章节描述的编程规范也不是西门子的官方定义,只是多年以来的个人感觉调理清晰且易识别的规范,而且这个规范更多的体现在书写规范上,和设备的工艺过程没有关系;很多时候,标准规范的书写非常有助于程序的思路整理和理解,所以这个章节更多的是参考意义,可以参考这个思路整理自己的书写规范,若不弃也可以按照本章节描述的思路作为书写规范;
首先,编程软件中变量命名应该遵循以下原则,这个原则适用于所有模块的编程:
l  变量名由字母、数字、下划线组成;
l  必须以字母开头,英文单词的首字母大写;
l  变量名必须是有意义的词语或词语组合,之间用下划线隔开:Act_Temperature;
l  不能超过32个字符,如过长可简化单词,能看懂即可,例如:英文单词Machine可缩写为Mach;
l  不能使用一些关键字(if,for…);
l  使用英文(变量尽量多做注释);
高级语言行业内程序员目前常用的命名方式主要有4种,它们分别是:
l  匈牙利命名法,它的表现手法主要是变量前有类型前缀,比如intMyName;
l  骆驼(驼峰)命名法,主要表现为变量首字母小写,例如myName;
l  帕斯卡(pascal)命名法,例如MyName;
下划线命名法,变量名用下划线隔开并全部小写,比如my_name;
在面向对象的标准程序中推荐使用前缀+下划线+帕斯卡命名的方法,其中前缀用于表示变量类型,下划线用于隔开前缀和后面部分,帕斯卡主要用于描述该变量的功能。若名称比较长,帕斯卡部分可能也会存在简写的可能,依据实际情况确定;
4.1.   M变量命名规范
外部变量(实际硬件的IO信号)的命名规则在2.3中已经描述,那些变量符号主要是前缀+元器件的ID+功能描述组成;本节主要描述西门子PLC的M寄存区的变量的命名的规范;
       比如一个表示当前日期的变量名为:MW_CurrDate,其中MW表示变量类型为Word或者Int,Curr是英文Current的缩写,Date为英文字母日期;
       常用的前缀主要有如下几个:
l  布尔型                         M
l  字符型/字节型             MB
l  整型/单字                    MW
l  双整型/双字/浮点型      MD
l  字符串                         MS

4.2.   功能块/函数编程规范
标准化程序中建议所有的功能块或函数的编程语言都使用SCL,因为SCL是文本类编辑语言(STL虽然也是文本类编辑语言,但可读性太差,且执行效率也不如S7-300/400中高),便于其他工具软件对里面内容的修改和合并,而图形类的语言就不具有此优势;
由于所有设备程序和程序框架都是标准的,所以文本类语言可以通过其他工具软件复制粘贴,利于使用其他工具软件自动生成PLC程序;
4.2.1.       命名规范
功能块(FB)主要用于控制对象在程序中的实例化,根据前文描述的,每一种工艺设备对应一个功能块(FB);
FB是标准化工艺设备(设备分层中处于UN或者EM级别)的主干程序,一般命名方式为FB_EM(UN)_XXX,其中FB表示程序的类型,EM(UN)表示主干设备的程序,XXX就是对应的具体工艺的名称,比如一个打包机设备的FB的名称为FB_BC_Pack01。由于打包机的工艺可能存在多种样式,所以Pack01中的01即表示某种工艺的打包机,这些都必须在工艺文档中给予清晰描述;
除了主工艺设备的FB的命名,功能元器件的功能块(FB)一般命名方式为FB_CM_XXX,其中FB表示程序的类型,CM表示主设备的基本组成元件控制模组CM(OMAC设备分层),XXX对应的具体元器件名称,比如一个末端光电的FB名称为FB_CM_EndPEC;
一般设备或项目到元器件的FB就不能再细分,和整个设备的层次划分是一致的;但若某些元器件的功能中还能向下细分不同功能,那功能块(FB)的命名方式为FB_BM_XXX。比如某个功能块,即需要在电机功能块中调用,也需要在光电功能块中调用,是这些CM元器件的分支功能,所以以Branch的首字母和Mode的首字母组成,称呼为BM。一般BM的形式非常非常罕见,除非工艺分解的非常之细化才有可能存在。
这样对于设备层面的功能块(FB)就按照层次分为三级,他们可以嵌套的关系为EM(UN)>CM>BM,即前面的可以调用后面的FB作为内部的静态变量;
除了设备控制的功能(FB)以外,其他功能(FB)和函数(FC)命名方式为前缀_XXX,其中前缀表示该程序的类型,比如FB或者FC,XXX代表该功能(FB)或函数(FC)的功能的英文单词或词组;比如后面要介绍的控制指令管理程序名字为FB_ModeAndStatesManager;
4.2.2.       形参和变量规范
形参实参说明:
本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。
             image.png
图 4‑1 : PLC中的形参实参示意图
上图中红色框框内的就是形式参数,若FB没有实例化或者FC没有被调用,它只是个名字而已没有任何意义;绿框内的就是实际参数,具有实际的地址;
在Portal中可以设置脚本编辑器的不同类型的文本的颜色,所以在标准化程序中,形参和实参以不同颜色标识,便于阅读时候更能快速区分。
Portal中点击选项à设置后,在弹出的界面中选择常规à脚本/文本编辑器,然后再字体颜色中可以按照需要设置不同文本的字体颜色。

图 4‑2 : Portal中脚本字体颜色设置示意图
在PLC编程中,形参和实参的名字可以相同;不同的FB的形参的名字也可以相同,特别是存在嵌套的FB块中,两个形参的名字相同更方便程序的编写和批量生成;

l  前缀
所有形参和变量的命名都要体现出其属性,即通过形参或者变量名字就能一眼看出这是属于哪一类,通常用小写字母表达,即前缀+下划线+帕斯卡命名;
1661245228063.png
表 4-1 : FB和FC的接口符号前缀表
  l  形参命名规则
FB(FC)的实参可以来自(一)实际设备的传感器或执行器(二)控制过或面板上控制指令(三)工艺设备的配置参数(四)程序中的中间变量,若所有FB(FC)的形参的名字也表达了参数的来源,那在程序的阅读和理解的时候就非常便利;
比如设备中有个仪器检查产品外观是否满足要求,若满足要求则将产品“释放”到系统中;有的时候仪表可能判断出不合理,但在人工检查站检查的结果还是在偏差范围内,那人工可能就需要按下一个按钮将其重新“释放”到系统中;
这个时候人工按钮和仪器自动检测的“释放”的指令是一样的,但来源不一样;若形参中可以表明这个区别,那在阅读理解程序的时候就能避免一些困惑,便于快速的理解;
所以,对于FB(FC)的形参命名的时候,在名字前缀后面加一个修饰符号(若有),通过这个修饰符号来判断形参的可能的来源,对应上述的四种情况的修饰符号有如下表格对应:
1661245253090.png
表 4-2 : FB和FC的形参修饰符表
1661245278649.png
图 4‑3 : PLC中的形参名字示意图
如上图中的绿色框内形参的名字为i_HW_EndPEC,名字表明了这个形参来自实际设备的硬件IO;蓝色框内形参的名字为i_CMD_Reset,名字表明了这个形参是控制指令类的命令;小红色框内形参的名字为i_CFG_Speed,名字表明了这个形参速度的设置值;大红框内就是程序中的一些中间变量,直接使用功能的名字来做形参的名字;
4.2.3.       程序属性
编程规范不涉及具体编程,只是规定了一个FB或者FC程序的信息类表达的方式,比如FB或FC的属性以及程序中的注释等;
FB或FC的属性有两种方法,第一种就是给每一个在程序中建一个头文件,说是头文件,其实就是一段描述性的文字,头文件中包括但不限于以下内容:著作所有权、功能概述、作者、程序类型、具体的功能描述以及修改历史,类似于下图所示;
1661245308341.png
图 4‑4 : 程序头文件示意图
图示为SCL编程语言的书写示意,若是LAD的编程语言,可以直接复制粘贴在块标题中,格式神的都是一样的;
第二种就是使用Portal自带的属性工具,选中某个FB或FC块,右键选择属性,在弹出框种选中信息:
image.png
图 4‑5 : 块属性示意图
块属性信息中也规定了标题、注释(可以复制上述的头文件)、版本以及作者等信息,但这个不好之处在于无法自定义,只能按照这个格式书写;而头文件的方式可以自由定义内容,同时在不同品牌转换的时候也可以做到无缝衔接;
4.3.   数据块(DB)及其他名称规范
PLC中的数据块分为全局数据块和背景数据块,若按照面向对象的思想理解的话,背景数据块其实就是设备实例后的私有数据,只不过在PLC中北京数据块也能直接访问;
所有的命名规则通用的是都用前缀表明其身份,DB块也是如此;
全局数据块名字的前缀为DB即DataBlock,完整名称为DB+下划线+名称,比如设备参数设置的数据块的名字为DB_Parameters;
背景数据块名字的前缀为DI即DataInstance,完整名称为DI+下划线+FB的名称+归属描述;
比如一个设备的ID是UN01_EM01,其控制程序块名字为FB_EM_Pack01,那相对应的实例化的数据块的名称为DI_FB_EM_Pack01_UN01EM01.;
非设备控制的DI的名字根据不同情况有不同的方式;比如一个FB_Control,在程序中只调用依次,那它的背景数据块的名字为DI_FB_Control,不需要加上归属描述;若该程序需要调用多次,那背景数据块的名字还是要加上归属描述用以区分;
所以,整体上DB块命名的规则可以理解为:前缀+实例化的FB名字+归属描述(若有);

其他自定义名称规则为前缀+下划线+功能名称,比如再CPG中定义的事件的数据,则该UDT的名字则为UDT_Event





上一篇:基于OMAC的设备标准化(PLC)应用(3)
下一篇:番外篇:深入浅出标准化内涵

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

Patrical 2022-8-24 08:43:53 | 显示全部楼层
很好的资料,感谢,,,
回复 送花

使用道具 举报

LiyuLi 2022-8-24 08:51:06 | 显示全部楼层

很好的资料,感谢,,,
回复 送花

使用道具 举报

LiyuLi 2022-9-8 12:47:12 | 显示全部楼层
很好的资料,感谢,,,
回复 送花

使用道具 举报

zwqiu 2022-9-22 11:39:25 | 显示全部楼层

很好的资料,感谢,,,
回复 送花

使用道具 举报

COLOR 2022-9-22 15:31:55 | 显示全部楼层
内容详细,感谢分享
回复 送花

使用道具 举报

qinghongjiguang 2022-10-21 08:54:09 | 显示全部楼层
很好的资料,感谢,,,
回复 送花

使用道具 举报

OnlyDean 2022-10-21 09:04:02 | 显示全部楼层


很好的资料,感谢,,,
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

汇川控制技术 公众号

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部