前几天我们发了一篇《PLC-HM编程之架构设计》的PPT,理论性比较强,估计一部分同学看了后可能会有点懵,所以接下面我们会以几篇文章来简单做一些解读。
PLC-HMI的编程理论我觉得完全可以参考软件工程。软件工程发展这么多年,有很多成熟的方法论。各大自动化头部厂商在PLC的语法特性上已经越来越接近高级编程语言,所以我们认为没必要搞那些花里胡哨的噱头,把软件工程里面一些成熟的编程思想拿过来即可。当然也不能照搬,还是有必要做一些针对性地优化、完善。
关于PLC-HMI编程的框架意义在我们之前的一篇文章里面也有过简单介绍《TIAPortal顶级编程技术-序(框架的意义)》。
PLC-HMI与C#我们都做了很多年,也有很多标准产品与定制化项目。在这些产品与项目的开发与实施过程中,我们也常在思考如何提升工程效率。这个《PLC-HM编程之架构设计》就是我们从长期的工程实践中总结出来的。后面接下来的解读文章不一定会按照该PPT的顺序,我们可能会随机找一些重要的点来展开描述。
在《PLC-HM编程之架构设计》的框架设计建议中我们提到了一个“简单易用与灵活通用兼顾”的原则,原文如下图所示。
图1简单易用与灵活通用兼顾
该原则针对的是组件设计。组件是框架的基石,没有大量成熟可用组件的框架毫无价值。对于PLC-HMI的编程架构来说,组件就是经过抽象后封装的设备或者工艺功能块。
图2组件
组件的设计需要考虑通用性,也就是可以适应很多不同的场景。比如就拿变频器控制组件来说,很多场景下只需要在面板上手动设置频率即可,但一些场景下需要接受PID组件的频率调节命令。所以我们在组件设计上两种场景都要考虑。
图3手动设置与自动给定
当然这只是一个例子,实际上一个组件可能会出现在很多场景中,不同场景下对组件的要求都不一样。组件的设计必须尽可能满足这些场景需求。但是组件在满足最低使用需求场景下的使用应该要尽可能地简单。比如组件拖进来不需要设置或者很少设置什么参数,不需要填写或者很少填写什么引脚就可以正常工作。复杂场景下可以通过设置一些引脚就可以实现想要的功能。而这些引脚可以隐藏或者使用Struct收纳起来,从而隐藏了组件的复杂性。除了引脚的隐藏或者收纳外,一些必需的参数也需要设置好合理的默认值,以最大可能地简化其使用。这就是我们说的简单易用与灵活通用兼顾
图4默认场景下只有很少的引脚图5适应不同场景的引脚被隐藏及收纳起
如前所述,PLC的编程已经越来越接近高级编程语言。所以我们只需要把软件工程里面的一些成熟的方法论引入到PLC-HMI里面即可。当然也不是所有的方法、思想都适用,这就需要我们有一定的工程实践经验来总结、提升。
组件设计教程
《TIAPortal高级编程》的最核心部分是组件的开发、设计。它基于面向对象编程思想。详细介绍参见:TIAPortal高级编程面向对象编程视频教程
组件库
HwBasicLib和HwBasicLib4ClassicalWinCC是我们的两款组件库成品。它们的区别是上位机分别为TIAWinCC与经典WinCC。