发布于 2011-11-07 15:48:42
15楼
真的很好,最近一个项目结束后也一直在想怎么使用面向对象的思维去进行自动化控制编程。
文章说的有好几个地方对我很有帮助大家讨论下:
1、在项目中我也是很怕模块被多次调用后,里面的当前逻辑状态将无法监控,这点对我们开发人员如果前期测试完整,那应该是没问题的。但是对于现场维护人员来说,很难去查找具体原因。文章认为只要提供模块功能文档即可,我认为详细文档很重要,但是工控行业与普通IT行业还是有所区别的,仅仅是功能文档还是不够,必须从模块本身的设计去解决问题。可以参考西门子很多功能模块的设计,像一些通讯模块,不仅仅完成了功能需求,当前控制处于什么状态都有输出一个Status状态字,这样我们这些使用者在不需要监控其模块内部时,也可以清楚的了解当前运行情况。
2、类概念的引入。FB+UDT可以实现类概念,当调用FB并指定了某个背景数据块时,即实例化了这个类。多重背景可以将多个单纯的数据类合并,但是很遗憾这样的类在实现动态扩展时我遇到了困难,例如某个设备,它在A区使用了3个电机,但是在B区只有2个电机,DB块我没研究出来怎么动态的去在多重背景中再加一重(不知道这样描述是否合理。。),只能重新定义一个类。如果下次项目使用4个电机,又得重新定义无法参数化。
3、个人倾向使用SFC语言。西门子叫它S7-Graph。一开始它设计的目的是用于顺序控制,但是它的编程思路还真有点适合面向对象(个人感觉,比结构化文本还好用)——当对象处于某状态时,执行某个动作。对象的状态转化使用此语言编程,而执行的动作可以使用FC模块编写,被FB块调用且所有的输入输出参数都来自背景数据块,也可以抽象为一个类。