设计模式在PLC编程中的应用

Posted HwLib慧兰博

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式在PLC编程中的应用相关的知识,希望对你有一定的参考价值。



 引  言 



最近一个项目需要用到S7-200Smart来作为控制器,虽然我们有自己的HwBasicLib for S7-200/200Smart,但是这次项目的上位机是使用C#来开发,其接口约定和之前HwBasicLib for S7-200/200Smart中搭配的Smartline在格式上有点差异,需要做针对性调整。但因为之前我们在设计HwBasicLib for S7-200/200Smart时采用了设计模式中的适配器模式,因此这次的接口调整非常方便,并没花费多长时间。正是得益于之前正确的设计思路,才会这次轻松的将HwBasicLib for S7-200/200Smart和C#结合应用。



设计模式



设计模式是软件工程中的概念,指的是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

以上是软件工程中对设计模式的定义,在我们之前的文章中也一再强调PLC编程其实是完全可以套用软件工程中的方式方法的,比如我们《TIA Portal高级编程》的核心指导思想-面向组件编程就是源自软件工程。但是设计模式目前在我们的博途教程中还没有讲到,只有在我们的《C#与工业自动化》中的驱动设计部分涉及了一点。除了教程之外,我们在实际项目中,比如我们的组件库HwBasicLib中就使用了设计模式,今天我们借此机会简单介绍下设计模式在PLC编程中的应用。

S7-200Smart因为不支持创建FB,只支持带参数的子程序,其实就是S7-1200/1500中的FC。这种组件在调用时需要为每个引脚传递实参,太多引脚的话会导致调用时很大的工作量,而在博途中,一方面因为不常用的引脚可以隐藏,另一方面FB也因为有背景DB,每个参数都有默认值,所以调用时工作量很少。除此之外,S7-200Smart的工作内存比较小,如果设计的组件考虑太多功能的话很容易导致工作内存不够。所以对于S7-200/200Smart的组件设计,我们的原则是力求精简。因此组件库的设计是满足一般情况下的应用,本地手自动控制、故障诊断等。而对于其它应用,比如搭配Smartline屏的场景,则采用了添加适配模块的方式来解决,这样单个组件比较精简,避免了体积膨胀。所以在HwBasicLib for S7-200/200Smart中,我们除了常用的Motor、Valve等通用组件外,还有用于适配Smartline等操作屏的接口处理模块。

设计模式在PLC编程中的应用

图1 HwBasicLib for S7-200/200Smart


HwBasicLib中的设计模式



软件工程中常用的设计模式主要分为3种类型,共23种模式,参见下图所示。

设计模式在PLC编程中的应用

图2 23种设计模式

在HwBasicLib for S7-200/200Smart中我们使用了适配器模式。适配器模式指的是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。下图直观的演示了这种模式。

设计模式在PLC编程中的应用

图3 适配器模式图解

以最常用的马达为例,HwMotor实现了常规的手自动控制功能,适用于通过按钮、触摸屏等操作的场合。HwMotor为上位机提供了类型为DWORD的接口变量SCW,通过该接口,上位机触摸屏可以在手动模式下控制马达组件、切换手自动操作模式等。

设计模式在PLC编程中的应用

图4 SCW接口

接口变量SCW里面每个位(bit)有特定的功能,比如Bit0是切换手自动、Bit1是HMI手动启动等。在本次项目中,C#上位机和PLC通信重新约定了接口,上位机给每个设备分配了手自动切换、手动启停等命令,同时还要求PLC返回设备状态等信号。下图展示了C#和PLC的部分接口约定。

设计模式在PLC编程中的应用

    图5 PLC和C#上位机接口

对于这种格式的接口,我们显然无法直接在HwBasicLib中的组件里使用。但是我们又不能直接改动HwBasicLib里的组件,这样很容易导致组件版本混乱而难以维护。所以我们的策略是使用适配器模式为组件开发C#接口适配模块。

新建一个子程序,命名为“HwMot2CSharp”。

设计模式在PLC编程中的应用

图6 创建子程序

子程序的参数接口定义如下。

设计模式在PLC编程中的应用

图7 子程序接口定义

在上图所示的接口中,CSAuto和CSStart用于接收C#上位机命令,QFlt和QRunning用于将设备状态返回给C#上位机,输入输出变量SCW用于将数据映射到马达组件的接口SCW中。程序比较简单,如下图所示。

设计模式在PLC编程中的应用

图8 接口模块程序

这样我们的设备组件实例后面挂一个接口适配模块就实现了组件和C#上位机的完美对接。

设计模式在PLC编程中的应用

图9 模块调用示例

适配器模式属于设计模式中的结构型模式,对于组件库在不同应用场景下的接口适配很有意义。


HwLib(慧兰博)技术团队专注于高端自动化技术,如果您对我们的技术教程感兴趣的话,可以X宝上搜索店铺“hwlib”或者“慧兰博”

设计模式在PLC编程中的应用

设计模式在PLC编程中的应用

关于HwLib(慧兰博)技术团队的更多信息:www.hwlib.com.cn

HwLib(慧兰博)技术团队技术资料:

https://www.jianguoyun.com/p/DR20ZAEQq_K3CBivk5kD

或者

https://pan.baidu.com/s/1cInKRSJIRcKQHylV3gafmw

提取码:0s3j




END


— 往期回顾 —



2020.11.03

设计模式在PLC编程中的应用


2020.10.07

设计模式在PLC编程中的应用


2020.10.25

设计模式在PLC编程中的应用


2020.10.21

设计模式在PLC编程中的应用


2020.08.08

设计模式在PLC编程中的应用


2020.10.14

设计模式在PLC编程中的应用


2020.09.15

设计模式在PLC编程中的应用


2020.10.07

设计模式在PLC编程中的应用


专注于工业自动化高端编程应用

以上是关于设计模式在PLC编程中的应用的主要内容,如果未能解决你的问题,请参考以下文章

PLC程序设计规范及编程建议

AB PLC简述

急求 西门子S7-300/400PLC编程入门视频教程地址!我的邮箱912407740@QQ.Com

大学生plc实训报告范文(2)

PLC无线远程控制方案

交通灯的PLC控制设计