马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
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. 形参和变量规范形参实参说明: 本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。 图 4‑1 : PLC中的形参实参示意图 上图中红色框框内的就是形式参数,若FB没有实例化或者FC没有被调用,它只是个名字而已没有任何意义;绿框内的就是实际参数,具有实际的地址; 在Portal中可以设置脚本编辑器的不同类型的文本的颜色,所以在标准化程序中,形参和实参以不同颜色标识,便于阅读时候更能快速区分。 Portal中点击选项à设置后,在弹出的界面中选择常规à脚本/文本编辑器,然后再字体颜色中可以按照需要设置不同文本的字体颜色。
图 4‑2 : Portal中脚本字体颜色设置示意图 在PLC编程中,形参和实参的名字可以相同;不同的FB的形参的名字也可以相同,特别是存在嵌套的FB块中,两个形参的名字相同更方便程序的编写和批量生成;
l 前缀 所有形参和变量的命名都要体现出其属性,即通过形参或者变量名字就能一眼看出这是属于哪一类,通常用小写字母表达,即前缀+下划线+帕斯卡命名; 表 4-1 : FB和FC的接口符号前缀表 l 形参命名规则 FB(FC)的实参可以来自(一)实际设备的传感器或执行器(二)控制过或面板上控制指令(三)工艺设备的配置参数(四)程序中的中间变量,若所有FB(FC)的形参的名字也表达了参数的来源,那在程序的阅读和理解的时候就非常便利; 比如设备中有个仪器检查产品外观是否满足要求,若满足要求则将产品“释放”到系统中;有的时候仪表可能判断出不合理,但在人工检查站检查的结果还是在偏差范围内,那人工可能就需要按下一个按钮将其重新“释放”到系统中; 这个时候人工按钮和仪器自动检测的“释放”的指令是一样的,但来源不一样;若形参中可以表明这个区别,那在阅读理解程序的时候就能避免一些困惑,便于快速的理解; 所以,对于FB(FC)的形参命名的时候,在名字前缀后面加一个修饰符号(若有),通过这个修饰符号来判断形参的可能的来源,对应上述的四种情况的修饰符号有如下表格对应: 表 4-2 : FB和FC的形参修饰符表
图 4‑3 : PLC中的形参名字示意图 如上图中的绿色框内形参的名字为i_HW_EndPEC,名字表明了这个形参来自实际设备的硬件IO;蓝色框内形参的名字为i_CMD_Reset,名字表明了这个形参是控制指令类的命令;小红色框内形参的名字为i_CFG_Speed,名字表明了这个形参速度的设置值;大红框内就是程序中的一些中间变量,直接使用功能的名字来做形参的名字; 4.2.3. 程序属性编程规范不涉及具体编程,只是规定了一个FB或者FC程序的信息类表达的方式,比如FB或FC的属性以及程序中的注释等; FB或FC的属性有两种方法,第一种就是给每一个在程序中建一个头文件,说是头文件,其实就是一段描述性的文字,头文件中包括但不限于以下内容:著作所有权、功能概述、作者、程序类型、具体的功能描述以及修改历史,类似于下图所示; 图 4‑4 : 程序头文件示意图 图示为SCL编程语言的书写示意,若是LAD的编程语言,可以直接复制粘贴在块标题中,格式神的都是一样的; 第二种就是使用Portal自带的属性工具,选中某个FB或FC块,右键选择属性,在弹出框种选中信息: 图 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
|