PC在编码规范方面比PLC要好很多。既然它们都是编程语言,那么PC方面的规范是否可以用与PLC呢?答案是肯定的,但需要作取舍。下面规范中的大部分可以用于一般PLC,其中有些只是针对西门子博途,使用时需注意。

变量命名

目前PLC中的变量命名没有统一的规则,这方面我们可以参考PC编程,在PC的编程中有如下规则:

  1. camelCase,又叫骆驼命名法,变量中第一单词首字母小写,后面单词的首字母大写,就像camelCase名称一样。Java、C++等高级语言中普遍使用。
  2. snake_case,又叫蛇蛇命名法,单词都小写,单词与单词间用下划线隔开。是Python推荐的命名风格
  3. PascalCase,帕斯卡命名法,源自于Pascal语言。和camelCase相似,不过首字母也大写。几乎在所有的高级语言中,用来命名类名。
  4. Hungarian,有匈牙利人发明,所以也叫匈牙利命名法。微软早期推荐的风格。现在也基本没人使用。

结论:推荐普通变量,全局变量,共享DB,FC函数用camelCase。而FB用PascalCase,相应的背景数据块则在后面加DB。对于常量用全大写的SNAKE_CASE。有些名字如果传统就是大写,就不要改小写,比如HMI,FC,FB,SV,PV等。在SCL中,建议关键词用小写,系统自带的函数用大写,以区分用户的函数,这个TIA Portal会自动完成。

变量取名

写程序最头痛的事不是组织逻辑关系,而是变量的命名。一个有意义的名字会让程序清晰不少。

  1. 对于Q输出,都是完成某一动作,最好用动词+名词,或名词+动词。
  2. 对于I输入,按钮启动电机(push button),可以写成pbStartMotor, 旋转开关(switch button)切换自动手动,可以写成sbAutoMan,限位开关(limit switch)可以写成lsCylinderOut。如果反应一个位置状态,那么就写成名词+形容词或名词+方位。比如lsCylinderOut,vehicleOnLeft等等。最好固定一类词。这次小车叫vehicle,那么下次就不要叫dolly。
  3. 对于某些bool型变量,很难归类,比如想表达“是否完成”等判断概念,写成hasDone,isGood会比较好。
  4. 对于M,如果是完成动作,和Q一致,如果是表示状态,和I一致。
  5. 对于定时器和计数器较难命名,但可以写成以ton或ctu开头的,以区分一般变量。
  6. 在SCL中,对于循环变量,习惯用i,j,k来表示。
  7. 对于FC和FB比较麻烦,如果是完成动作,用动词+名词。如果是组织程序,用工位号来代替。

变量的取名很难,这里就不一一列举。

数组

  1. 西门子的数组起始索引可以是负的,建议始终从1开始,以配合SCL中的循环。SCL中循环起始和结束都是闭区间。这个概念不是很好讲清楚,自己体会吧。

变量的使用

  1. 对于M全局变量,仅在OB中使用,用来在FC或FB之间传输数据用,限制性的使用M。另外传输数据用共享DB也很好。TIA Portal中有组的概念,把共享DB和相关的FC,FB放在同一组中。
  2. 对于定时器和计数器
    由于传统的定时器和计数器是全局的,我们限制性使用。对于FC,可以在同组的共享DB块中声明,对于FB可以在static中声明。如果FB中的计数器和定时器外部需要访问,可以用output传出,不要直接读背景数据块,背景数据块是供FB使用的。
  3. 对于HMI访问的变量,可以建一个FC和一个共享DB,作为接口使用。在命名上可以写成interfaceHMI+编号,每个HMI各搞一个接口,方便管理,写界面的和写程序的可以分开了。

程序逻辑

  1. 在开始写程序时,首先要建模,从大局入手,切不可一上来就写程序,通过建模,你可以更清晰了解工艺流程,修改模型也比较方便,方便工程师之间沟通。PC编程有UML建模语言,状态机就属于其中的一种。Matlab的状态机最为强大。当然PLC也有自己的工具,SFC。建模完成后,可以根据模型转换为LAD和SCL,或直接生成PLC程序。如何转换可以参考我的技术博客。
  2. 程序中注释,过去一直认为越详细越好,不过世道变了,现在推荐代码自我注释,也就是说,清晰的代码不要注释也很容易理解,而凌乱的代码即使有注释也不大理解。注释不要去解释某条语句或指令,要写出代码的意图。对于FC,FB,接口参数必需要注释。
  3. 代码重构。通用编程有专门讨论重构的书。对于一个控制要求,当你第一遍写时,由于对问题理解的不够深刻,写出的代码很凌乱,变量的命名亦很随意,当写完第一遍,程序可以正常运行,但信心不足,此时你再在以前代码的基础上又写了一遍,发现你对的控制程序更有信心了,这个过程叫重构,有时候这个过程会重复好几遍。好的程序是反复推敲出来的。如果有需求,你可以写成FC或FB,作为库反复使用。
  4. 尽量使用常开触点。其实我们大部分人都习惯常开。但极限限位一般都是常闭接法。另外自动手动可以分别写成两个触点,都用常开表示。

程序组织

  1. 组织程序,其实用FB块比较好,这样可以用它的静态变量来来作为程序间的通讯。当然用FC也可以,指定一个共享DB块作为程序间通信用。
  2. 手动和自动程序可以分别写一个块,然后分别输出到中间变量 ,可以是DB或M区。再新建一个块,把这些中间变量组合在一起控制Q输出,可以添加一些互锁条件,命名为outAssignment。
  3. 老的编程软件中,我们把相同工位号的块命名成“工位号+功能”,博途有个组的功能,可以添加一个新组,命名位相关工位号,然后把工位相关的程序放在其中。此时可以精简块的工位号,但“组织”块不宜精简掉,它需要在OB块中调用。

今天写到这里,谢谢。

非常欢迎大家反馈,后期会修改

PLC编码规范的更多相关文章

  1. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  2. PHP 高级编程(1/5) - 编码规范及文档编写

    PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...

  3. 【原】JAVA SE编码规范

    /* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...

  4. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  5. PHP编码规范PSR-2

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  6. Objective-C开发编码规范【转载】

    概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序.关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guide ...

  7. 前端编码规范之CSS

    "字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...

  8. 前端编码规范之JavaScript

    上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...

  9. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

随机推荐

  1. MySQL Database on Azure 支持 5.7 版本啦!

    MySQL Database on Azure 目前已经全面开放对 5.7 的支持.您可以通过管理门户,在 MySQL 数据库服务器创建时选择 5.7 版本进行体验.MySQL 5.7 版本目前是 M ...

  2. Hadoop ->> MapReduce编程模型

    对于MapReduce模型的实现,有Java等一些语言实现了接口,或者用像Hive/Pig这样的平台来操作.MapReduce由Map函数.Reduce函数和Main函数实现.第一步,源数据文件按默认 ...

  3. 会话cookie中缺少HttpOnly属性 解决

    会话cookie中缺少HttpOnly属性 解决   只需要写一个过滤器即可 1 package com.neusoft.streamone.framework.security.filter; 2 ...

  4. 怎么看电脑有没有安装USB3.0驱动

    1.首先要看主板是否带USB3.0接口. 2.然后计算机-属性-设备管理器-通用串行总线,就可以看到是否有安装USB3.0驱动    

  5. JsonResponse、FileResponse和StreamingHttpResponse

    一.JsonResponse对象 class JsonResponse(data,encoder=DjangoJSONEncoder,safe=True,json_dumps_params=None, ...

  6. Tomcat与MySQL的数据源连接方法

    Tomcat配置数据源,由于项目经常访问数据库,需要不断地打开关闭,这就耗费了大量的资源.所以用数据源的方式访问数据库. 大体步骤: 配置server.xml 配置项目所在的WebRoot/WEB-I ...

  7. 【洛谷5287】[HNOI2019] JOJO(主席树优化KMP)

    点此看题面 大致题意: 每次往一个字符串末尾加上\(x\)个字符\(c\),或者回到某一历史版本,求\(KMP\)的\(\sum Next_i\). 问题转化 考虑到可以离线. 于是,我们就可以用一个 ...

  8. 郑州Day6

    今天考了毕姥爷的一套题,差点保龄 题目 挺良心的一套题,至少我不用再搬一遍题面了 T1.B君的第一题 我为什么当时去写了一个树形\(dp\)还妄图\(A\)掉啊 这题保龄感觉舒爽 首先如果我们要求的是 ...

  9. mysql中set和enum使用(简单介绍)

    简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...

  10. TensorFlow安装环境的误区

    安装py一定要注意安装的版本,我一开始安装的3.7版本的,现在还没有支持,另外,看清楚自己电脑是32位还是64位的