SCL使用Ref和Variant实现Dictionary

在C#中,Dictionary的主要用途是提供快速的基于键-值对的数据存储和查找。Dictionary的结构是这样的:Dictionary<[key],[value]>。其中key一般为基础数据类型(当然也可以是复杂数据类型),而value在实际使用中除了基础数据类型外大部分是struct、list、object等等。

图片
图1 Dictionary

SCL(Structured Control Language,结构化控制语言)是一种类PASCAL语法的高级编程语言,这种语言基于标准DIN EN 61131-3(国际标准为IEC 61131-3)中定义的ST(Structured Text)。和LAD、FBD相比,SCL对于数据处理有很大的优势。尤其是引入了Variant、ref等语法特性后,其程序编写的灵活性更是得到进一步提升。

不过SCL中目前还没有Dictionary这一类型。如果Dictionary能够用于SCL的话,那么可以在处理复杂数据时大大简化程序,所以根据C#中Dictionary的特点我用SCL实现了一个类似的Dictionary。它的原型是Dictionary<[string],[PLC Data Type]>。在使用时,它可以用于任意数据类型,只需要将里面的修改PLC数据类型修改成对应类型即可。

这个模块实现了一个简单的添加、删除、查询和修改功能,可以像操作数据库那样操作Dictionary,在处理复杂数据时非常有优势,比如物料跟踪等应用场合。

首先我们创建一个PLC数据类型,参见下图。

图片
图2 PLC数据类型

在这个PLC数据类型ProductInfo中包含了key和value两部分,其中key是string类型,用作数据索引,相当于数据的识别码。后面的value用于存储数据,一般它是struct类型,这样的好处是可以存储大量的相关数据,比如产品的规格、材质、重量、生产日期等信息。

为了方便使用,我们来封装一个Dictiory处理块,实现数据的查询、保存、删除和修改等功能。功能块接口定义如下。

图片
图3 Dictionary处理块接口

部分接口说明:

1, Data: 用于接收外部数据,定义为Variant的好处是允许连接任意类型的变量;

2, code: 操作符,比如1表示添加新数据,3表示删除数据;

3, QND: 操作完成,用于外部程序做其他逻辑;

4, QStatus: 状态码,用于调试程序时了解功能块的执行状况。

5, DB: 连接目标DB,用于储存数据;

6, Qkey-value: 用于查询操作时输出数据;

 

关于状态码,我们的定义如下:

图片
图4 状态码

整个功能块实现了Dictionary的添加、查询、修改和删除,类似一个迷你数据库。下面我们以查询功能来介绍下实现逻辑,其他功能基本类似,不再赘述。

为了清楚表达程序逻辑,我绘制了下面这个流程图:

 

图片
图5 流程图

下面我们来结合流程图看下程序:

图片
图6 代码

首先使用运算符“?=”来判断传入的实参是否类型匹配,如果一致的话赋值到变量_tRef,反之退出程序并输出状态码16#8009,提示类型不匹配。然后对数据库进行轮询,如何key值和实参的key值一致则退出程序,并输出状态码16#8000表示查询成功。如果轮询完成后依然没有找到匹配的key值则退出程序,并输出状态码16#8003,表示无此记录。

封装好的Dictionary功能块调用是这样的,它可以处理value为任意的的Dictionary,只需要我们将功能块里面的PLC数据类型做对应调整下即可。

图片
图7 调用Dictionary处理功能块

 

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

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

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

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

或者

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

提取码:0s3j

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值