西门子博图编程:PLC编程规范

14 篇文章 2 订阅
13 篇文章 6 订阅

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块中调用。
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
西门子博图(S7-200)PLC是一种常用于工业自动化控制系统的可编程逻辑控制器。它以其稳定性、可靠性以及广泛应用于电力、能源、交通、化工等领域而闻名。下面是西门子博图PLC指令的一些常见类型与应用: 1. 位与字指令:用于读取和操作位和字数据,包括输入输出模块、中继模块、计数器和定时器等设备的输入输出信号的读取。 2. 运算指令:包括加减乘除、与或非运算等,用于处理数字数据的简单逻辑运算。 3. 移位指令:用于对位或字数据进行位移操作,如左移、右移等,常应用于数据处理和位操作。 4. 比较指令:用于比较两个数据的大小关系,判断是否相等、大于或小于,常用于判断逻辑条件以及流程控制。 5. 计数和定时指令:包括累计计数、累计定时、单位累计计数、单位累计定时等功能,常用于对事件进行计数和时间间隔的控制。 6. 跳转指令:用于控制程序的跳转和循环执行,包括条件跳转、循环跳转、子程序跳转等。 7. 数据传输指令:用于将数据从一个存储区域传输到另一个存储区域,常用于不同设备之间的数据传输与共享。 总结来说,西门子博图PLC指令大全涵盖了位与字指令、运算指令、移位指令、比较指令、计数和定时指令、跳转指令以及数据传输指令等多种类型,可以方便地对不同设备和信号进行读取、操作、判断和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值