PLC编码规范
PC在编码规范方面比PLC要好很多。既然它们都是编程语言,那么PC方面的规范是否可以用与PLC呢?答案是肯定的,但需要作取舍。下面规范中的大部分可以用于一般PLC,其中有些只是针对西门子博途,使用时需注意。
变量命名
目前PLC中的变量命名没有统一的规则,这方面我们可以参考PC编程,在PC的编程中有如下规则:
- camelCase,又叫骆驼命名法,变量中第一单词首字母小写,后面单词的首字母大写,就像camelCase名称一样。Java、C++等高级语言中普遍使用。
- snake_case,又叫蛇蛇命名法,单词都小写,单词与单词间用下划线隔开。是Python推荐的命名风格
- PascalCase,帕斯卡命名法,源自于Pascal语言。和camelCase相似,不过首字母也大写。几乎在所有的高级语言中,用来命名类名。
- Hungarian,有匈牙利人发明,所以也叫匈牙利命名法。微软早期推荐的风格。现在也基本没人使用。
结论:推荐普通变量,全局变量,共享DB,FC函数用camelCase。而FB用PascalCase,相应的背景数据块则在后面加DB。对于常量用全大写的SNAKE_CASE。有些名字如果传统就是大写,就不要改小写,比如HMI,FC,FB,SV,PV等。在SCL中,建议关键词用小写,系统自带的函数用大写,以区分用户的函数,这个TIA Portal会自动完成。
变量取名
写程序最头痛的事不是组织逻辑关系,而是变量的命名。一个有意义的名字会让程序清晰不少。
- 对于Q输出,都是完成某一动作,最好用动词+名词,或名词+动词。
- 对于I输入,按钮启动电机(push button),可以写成pbStartMotor, 旋转开关(switch button)切换自动手动,可以写成sbAutoMan,限位开关(limit switch)可以写成lsCylinderOut。如果反应一个位置状态,那么就写成名词+形容词或名词+方位。比如lsCylinderOut,vehicleOnLeft等等。最好固定一类词。这次小车叫vehicle,那么下次就不要叫dolly。
- 对于某些bool型变量,很难归类,比如想表达“是否完成”等判断概念,写成hasDone,isGood会比较好。
- 对于M,如果是完成动作,和Q一致,如果是表示状态,和I一致。
- 对于定时器和计数器较难命名,但可以写成以ton或ctu开头的,以区分一般变量。
- 在SCL中,对于循环变量,习惯用i,j,k来表示。
- 对于FC和FB比较麻烦,如果是完成动作,用动词+名词。如果是组织程序,用工位号来代替。
变量的取名很难,这里就不一一列举。
数组
- 西门子的数组起始索引可以是负的,建议始终从1开始,以配合SCL中的循环。SCL中循环起始和结束都是闭区间。这个概念不是很好讲清楚,自己体会吧。
变量的使用
- 对于M全局变量,仅在OB中使用,用来在FC或FB之间传输数据用,限制性的使用M。另外传输数据用共享DB也很好。TIA Portal中有组的概念,把共享DB和相关的FC,FB放在同一组中。
- 对于定时器和计数器
由于传统的定时器和计数器是全局的,我们限制性使用。对于FC,可以在同组的共享DB块中声明,对于FB可以在static中声明。如果FB中的计数器和定时器外部需要访问,可以用output传出,不要直接读背景数据块,背景数据块是供FB使用的。 - 对于HMI访问的变量,可以建一个FC和一个共享DB,作为接口使用。在命名上可以写成interfaceHMI+编号,每个HMI各搞一个接口,方便管理,写界面的和写程序的可以分开了。
程序逻辑
- 在开始写程序时,首先要建模,从大局入手,切不可一上来就写程序,通过建模,你可以更清晰了解工艺流程,修改模型也比较方便,方便工程师之间沟通。PC编程有UML建模语言,状态机就属于其中的一种。Matlab的状态机最为强大。当然PLC也有自己的工具,SFC。建模完成后,可以根据模型转换为LAD和SCL,或直接生成PLC程序。如何转换可以参考我的技术博客。
- 程序中注释,过去一直认为越详细越好,不过世道变了,现在推荐代码自我注释,也就是说,清晰的代码不要注释也很容易理解,而凌乱的代码即使有注释也不大理解。注释不要去解释某条语句或指令,要写出代码的意图。对于FC,FB,接口参数必需要注释。
- 代码重构。通用编程有专门讨论重构的书。对于一个控制要求,当你第一遍写时,由于对问题理解的不够深刻,写出的代码很凌乱,变量的命名亦很随意,当写完第一遍,程序可以正常运行,但信心不足,此时你再在以前代码的基础上又写了一遍,发现你对的控制程序更有信心了,这个过程叫重构,有时候这个过程会重复好几遍。好的程序是反复推敲出来的。如果有需求,你可以写成FC或FB,作为库反复使用。
- 尽量使用常开触点。其实我们大部分人都习惯常开。但极限限位一般都是常闭接法。另外自动手动可以分别写成两个触点,都用常开表示。
程序组织
- 组织程序,其实用FB块比较好,这样可以用它的静态变量来来作为程序间的通讯。当然用FC也可以,指定一个共享DB块作为程序间通信用。
- 手动和自动程序可以分别写一个块,然后分别输出到中间变量 ,可以是DB或M区。再新建一个块,把这些中间变量组合在一起控制Q输出,可以添加一些互锁条件,命名为outAssignment。
- 老的编程软件中,我们把相同工位号的块命名成“工位号+功能”,博途有个组的功能,可以添加一个新组,命名位相关工位号,然后把工位相关的程序放在其中。此时可以精简块的工位号,但“组织”块不宜精简掉,它需要在OB块中调用。
今天写到这里,谢谢。
非常欢迎大家反馈,后期会修改
PLC编码规范的更多相关文章
- Android的编码规范
一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...
- PHP 高级编程(1/5) - 编码规范及文档编写
PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...
- 【原】JAVA SE编码规范
/* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...
- 浅谈Android编码规范及命名规范
前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...
- PHP编码规范PSR-2
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- Objective-C开发编码规范【转载】
概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序.关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guide ...
- 前端编码规范之CSS
"字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...
- 前端编码规范之JavaScript
上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...
- Java Script 编码规范【转】
Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...
随机推荐
- matlab练习程序(随机直线采样)
我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是 ...
- bat 日期格式设置
转自:http://hi.baidu.com/awillaway/item/c61f964dc238190ce935044d 日期可以用扩展表示方法,你在cmd运行以下几个命令就明白了: echo ...
- winform DataGridView 通用初始化
void DGV_Init() { //名称 类型 设备数 累计转发次数 累计转发数据数 状态 ; i < ; i++) { DataGridViewTextBoxColumn dc = new ...
- bootstrap时时提醒填入数据是否与数据库数据重复
standardcode: { group: '.col-sm-4',//对应前台input的class占用宽度 validators: { notEmpty: { message: '请输入标准代号 ...
- (一)selenium发展史(专治selenium小白)
Jason Huggins在2004年发起了Selenium项目,当时身处ThoughtWorks的他,为了不想让自己的时间浪费在无聊的重复性工作中,幸运的是,所有被测试的浏览器都支持Javascri ...
- Oracle 查看session级别信息
1. 查看活动会话信息[sql] view plain copySELECT * FROM V$SESSION WHERE USERNAME IS NOT NULL AND STAT ...
- SONA Topology
N多年以前就有有人设计传了一种类似“房子”状结构的拓扑图,在Cisco的文档中可以查到这种叫SONA.这是个非常神奇的设计,适合用于中小型网络,之所以这么讲,是因为在这个结构下,但凡任何一台接入层或者 ...
- position中需要注意的地方
relative是相对元素本身位置进行移位,但不会改变本身位置的大小 本身的位置 移位后,可以看到,p5的位置还是在那,并不会自动往上走,也就是p2的位置原来所占据的位置不变的.不会因为偏移而改变布局 ...
- 【转】JS模块化工具requirejs教程(一):初识requirejs
随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...
- autofac 注册
1 注册的概念和方式 使用autofac 的ContainerBuilder 来注册组件(components---通常指实现类),并把它的服务(service---通常指接口,抽象类,类实例)暴露给 ...