关于我

<2017年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

最近来访

留言簿(0)

文章分类

文章档案


最新评论

1. re: 一颗螺栓的旅程
好文章,简洁明了,期待博主对于工厂其他系统的介绍,比如PPS等,期待中--shufeng437
2. re: 美国公路系统对IT系统的借鉴
分析的不错&nbsp;谢谢!--xixihahahehe

阅读排行榜

评论排行榜

PLC编程有诸多限制,如:

  1. 传统的西门子PLC单个DB的存储容量为64KB。
  2. 每次DB结构变更时,都需要编译并重新下载覆盖原DB。
  3. 每次DB结构变更时,OPC变量需要重新映射地址。

 

但有时候我们希望把DB设计得灵活一些,当给PLC增加一些小的元素时,我们不希望覆盖大量的DB。

有时我们希望PLC程序设计得模块化、产品化、基于配置。

在这些应用场景中,我们可以参考面向对象的方法进行PLC编程。

 

本文以质量安灯实例说明了面向对象的PLC编程方法。

业务需求为:

  1. 每个工位配置1条拉绳。
  2. 当拉绳拉下时,灯亮,喇叭播放配置好的音乐。
  3. 当拉绳复位时,灯灭,喇叭静音。
  4. 工位配置在线上。
  5. 线的总数为10。
  6. 工位/拉绳/灯/喇叭的总数为200。

 

下表列出了所有对象,及对应的属性/事件/方法:

 

 

为了让对象更加灵活,我们为每个属性分配1个DB,除了ID,这是因为我们使用数组ARRAY存储数量,每个对象的所有属性DB使用了同样长度的数组,而数组的序号就是对象的ID:

 

 

 

 

因此当我们需要给拉绳增加一个新的属性时,我们只要建立一个新的DB,基本结构为长度为200的数组,并以数组序号的形式建立了与其它拉绳DB的联系。

 

PLC程序调用结构非常简洁:

 

 

由于使用了数组,我们可以很方便地利用SCL的循环语句进行遍历调用:

 

 

寻找外部引用ID也很简单,因为我们可以直接使用数组序号进行符号寻址:

 

 

对于I/Q设备的位&字节地址,我们可以用STRUCT进行定义:

 

 

这样,就可以很方便地利用SCL的PEEK_BOOL/POKE_BOOL函数进行动态调用:

 

 

FC_PEEK_BOOL针对SCL的PEEK_BOOL进行封装:

 

 

Set事件:

 

 

Reset事件:

 

 

下面列出几条PLC面向对象编程的参考建议:

  1. 每个DB定义1个属性。
  2. 使用数组存储数据。
  3. 使用SCL循环语句遍历数组。
  4. 为每个方法编写通用FC函数。

 

 

TIA V13源代码:

http://pan.baidu.com/s/1c28HOOg

发表于: 2017-07-09 23:24 阅读(301) 评论(0) 收藏 好文推荐

本博客所有内容,若无特殊声明,皆为博主原创作品,未经博主授权,任何人不得复制、转载、摘编等任何方式进行使用和传播。

作者该类其他博文:

发表评论(网友发言只代表个人观点,不代表本网站观点或立场。)

您尚未登录,请先【登录或注册