vue2.0中组建里面套用组件_设计模式在PLC编程中的应用

本文介绍了如何在PLC编程中应用设计模式,特别是适配器模式。通过一个具体的S7-200Smart项目案例,展示了如何使用适配器模式来解决不同接口兼容性问题,确保组件与C#上位机的无缝对接。同时,提到了在Vue2.0组件设计中也可以借鉴这种模式。
摘要由CSDN通过智能技术生成
a855d00af5f30722e62e670a6dce9187.png

点击上面蓝字关注我们

 引  言 

最近一个项目需要用到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等操作屏的接口处理模块。

d29f4f6b2fa18b52d4b86d0139b96ae5.png

图1 HwBasicLib for S7-200/200Smart

HwBasicLib中的设计模式

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

1429d50aef5f5980e3085b4eb985cf92.png

图2 23种设计模式

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

6bc38ab2919995eece3a74d03c02d9b2.png

图3 适配器模式图解

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

1a24ce2721fb0a3d3906de934157dbdf.png

图4 SCW接口

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

12a61e0add6d11287650d0705fc80331.png

    图5 PLC和C#上位机接口

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

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

f0a9397f99867f6dcd20d6b08db1b270.png

图6 创建子程序

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

f0fdd02a1865aec03d677000f8b2eabb.png

图7 子程序接口定义

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

4d7b9bba841afebc080f70a10b501932.png

图8 接口模块程序

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

b28af83ef6dac9067702d63e945162ed.png

图9 模块调用示例

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

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

d42da02f61a7475b0d0e8b2c5e1ec33e.png

d9fbbfe49616a890136ee45bfb9ea657.png

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

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

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

或者

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

提取码:0s3j

END

— 往期回顾 —

用于WinCC的微信控件

2020.11.03

8c422f1ca5891acc773489336ca9c15f.png

通用数据报表软件

2020.10.07

3380a68d3f9f55729cf690692f903eae.png

使用HwSheetAdv制作WinCC报表

2020.10.25

ceb59cb999ac4490e42a10ae7097bad6.png

写给初学者的博途教程(1.基础条件)

2020.10.21

3380a68d3f9f55729cf690692f903eae.png

写给初学者的C#教程[专题1--S7通信](1)

2020.08.08

d0c3b4c256cda8cffda75ef56dbcefab.png

HwLib.IAUA(工业自动化统一架构)

2020.10.14

9b1050545a7e45861ca51969daef781f.png

C#通信类库

2020.09.15

5b83d0aac71c32dea21a1a026a4eb8ea.png

通用数据报表软件

2020.10.07

13584fcd27e3af8f95f3a0a6a94ea246.png

HwLib(慧兰博)公众号

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

5b83d0aac71c32dea21a1a026a4eb8ea.png

HwLib(慧兰博)微信号

c3ed4368938d565a81cc1fe37e83f183.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值