| 作者 | 主题 |
|---|---|
|
question 奇侠
经验值:5626 发帖数:872 精华帖:6 |
楼主
主题:PLC编码规范, 持续更新。
一直想用PC的编程规范来指导PLC编程,但毕竟不是同一类东西,还是有很大的差距。这里我试着抛砖引玉,希望大神们多多讨论,一起进步提高。谢谢。后期会持续更新。PC方便的书籍我推荐《代码大全》。
变量命名 目前PLC中的变量命名没有统一的规则,这方面我们可以参考PC编程,在PC的编程中有如下规则: l camelCase,又叫骆驼命名法,变量中第一单词首字母小写,后面单词的首字母大写,就像camelCase名称一样。Java、C++等高级语言中普遍使用。 l snake_case,又叫蛇蛇命名法,单词都小写,单词与单词间用下划线隔开。是Python推荐的命名风格 l PascalCase,帕斯卡命名法,源自于Pascal语言。和camelCase相似,不过首字母也大写。几乎在所有的高级语言中,用来命名类名。 l Hungarian,有匈牙利人发明,所以也叫匈牙利命名法。微软早期推荐的风格。现在也基本没人使用。 结论:推荐普通变量,全局变量,共享DB,FC函数用camelCase。而FB用PascalCase,相应的背景数据块则在后面加DB。对于常量用全大写的SNAKE_CASE。有些名字如果传统就是大写,就不要改小写,比如HMI,FC,FB,SV,PV等。在SCL中,建议关键词用小写,系统自带的函数用大写,以区分用户的函数,这个TIA Portal会自动完成。
变量取名 写程序最头痛的事不是组织逻辑关系,而是变量的命名。一个有意义的名字会让程序清晰不少。 l 对于Q输出,都是完成某一动作,最好用动词+名词,或名词+动词。 l 对于I输入,按钮启动电机(push button),可以写成pbStartMotor, 旋转开关(switch button)切换自动手动,可以写成sbAutoMan,限位开关(limit switch)可以写成lsCylinderOut。如果反应一个位置状态,那么就写成名词+形容词或名词+方位。比如lsCylinderOut,vehicleOnLeft等等。最好固定一类词。这次小车叫vehicle,那么下次就不要叫dolly。 l 对于某些bool型变量,很难归类,比如想表达“是否完成”等判断概念,写成hasDone,isGood会比较好。 l 对于M,如果是完成动作,和Q一致,如果是表示状态,和I一致。 l 对于定时器和计数器较难命名,但可以写成以ton或ctu开头的,以区分一般变量。 l 在SCL中,对于循环变量,习惯用i,j,k来表示。 l 对于FC和FB比较麻烦,如果是完成动作,用动词+名词。如果是组织程序,用工位号来代替。 变量的取名很难,这里就不一一列举。 数组 l 西门子的数组起始索引可以是负的,建议始终从1开始,以配合SCL中的循环。SCL中循环起始和结束都是闭区间。这个概念不是很好讲清楚,自己体会吧。 变量的使用 l 对于M全局变量,仅在OB中使用,用来在FC或FB之间传输数据用,限制性的使用M。另外传输数据用共享DB也很好。TIA Portal中有组的概念,把共享DB和相关的FC,FB放在同一组中。 l 对于定时器和计数器 l 对于HMI访问的变量,可以建一个FC和一个共享DB,作为接口使用。在命名上可以写成interfaceHMI+编号,每个HMI各搞一个接口,方便管理,写界面的和写程序的可以分开了。
程序逻辑 l 在开始写程序时,首先要建模,从大局入手,切不可一上来就写程序,通过建模,你可以更清晰了解工艺流程,修改模型也比较方便,方便工程师之间沟通。PC编程有UML建模语言,状态机就属于其中的一种。Matlab的状态机最为强大。当然PLC也有自己的工具,SFC。建模完成后,可以根据模型转换为LAD和SCL,或直接生成PLC程序。如何转换可以参考我的技术博客。 l 程序中注释,过去一直认为越详细越好,不过世道变了,现在推荐代码自我注释,也就是说,清晰的代码不要注释也很容易理解,而凌乱的代码即使有注释也不大理解。注释不要去解释某条语句或指令,要写出代码的意图。对于FC,FB,接口参数必需要注释。 l 代码重构。通用编程有专门讨论重构的书。对于一个控制要求,当你第一遍写时,由于对问题理解的不够深刻,写出的代码很凌乱,变量的命名亦很随意,当写完第一遍,程序可以正常运行,但信心不足,此时你再在以前代码的基础上又写了一遍,发现你对的控制程序更有信心了,这个过程叫重构,有时候这个过程会重复好几遍。好的程序是反复推敲出来的。 如果有需求,你可以写成FC或FB,作为库反复使用。 l 在程序逻辑中,尽量使用常开触点。其实我们大部分人更习惯常开。但极限限位一般接成常闭,所以需要在程序中转换一下。另外自动手动可以分别写成两个触点,都用常开表示。 程序组织 l 组织程序,其实用FB块比较好,这样可以用它的静态变量来来作为程序间的通讯。当然用FC也可以,指定一个共享DB块作为程序间通信用。 l 手动和自动程序可以分别写一个块,然后分别输出到中间变量 ,可以是DB或M区。再新建一个块,把这些中间变量组合在一起控制Q输出,可以添加一些互锁条件,命名为outAssignment。 l 老的编程软件中,我们把相同工位号的块命名成“工位号+功能”,博途有个组的功能,可以添加一个新组,命名位相关工位号,然后把工位相关的程序放在其中。此时可以精简块的工位号,但“组织”块不宜精简掉,它需要在OB块中调用。
今天写到这里,谢谢。 非常欢迎大家反馈,后期会修改 我的博客地址: https://www.cnblogs.com/TomDing/
drongh
|
|
Letham 至圣 经验值:14196 发帖数:2023 精华帖:43 |
6楼
主题:回复:PLC编码规范, 持续更新。我们公司在程序规范化这块做的很好。
以前在经典STEP7下,由于变量名称和跳转标号的字符限制,我一般是用英文简称,比如Cmd代表Command啊,St代表status。
人生就像一场旅行!
|
|
宁超 至圣 经验值:11565 发帖数:1009 精华帖:39 |
7楼
主题:回复:PLC编码规范, 持续更新。
我fc,fb 也会按pascal case, 全局变量使用大写,但是也会遵从行业习惯。不会强制规范 PV, SP 为ProcessValue 和SetPoint。对于state 和temp 可以采用匈牙利命名法。以前我经常见到很low 的程序,无意义命名,a1,b1,拼音,中文,空格。西门子有个符号兼容性表,只能是字母开头,字母和数字下划线组合才可以在step7,hmi的归档,opc,计算机名称 等等地方通用
|
|
柳叶飘飘 侠圣 经验值:2634 发帖数:95 精华帖:7 |
9楼
主题:回复:PLC编码规范, 持续更新。有的编码确实设计院那边已经定好了,或者公司规定情况等,只能在该标准上进行,不过写公用的块(可以在不同项目中使用的块)则可以规范化,西门子的项目尤其是大的项目最好不要用M地址进行编程,这样很容易出错,使用DB块来做程序更科学,以前不了解西门子的块的时候觉得西门子弄那么多种类的块来干嘛,现在想想德国人确实很严谨,用数据块来编程不容易出错,我现在做大项目的时候除PCS7,用STEP7编程的项目我都是将模拟量输入通道的值和模拟量输出的值按照硬件地址的顺序转换后排到相应的DB块中(备用的也预留占一个位置),我要修改的时候(DB块由STL生成,而STL是由EXCEL编辑的,而该EXCEL表又自动关联另一个和CAD关联的EXCEL表)我修改了EXCEL,就可以同步更新到我的CAD的接线图当中,其他做稍许修改即可,而该EXCEL相关联的DB块原程序我再复制粘贴到源当中重新进行编译就保证了程序也是按照该EXCEL的数据来的,这样出错也难对吧,而在EXCEL中我可以对我修改记录等做好记录.我现在编程都是围绕"数据"来进行编程的.整个项目都在围绕EXCEL表格来进行的,而使用DB块就能很好的实现,而M地址还是算了吧.
努力赚钱 养家糊口
|