完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在C#中,Dictionary的主要用途是提供快速的基于键-值对的数据存储和查找。Dictionary的结构是这样的:Dictionary《[key],[value]》。其中key一般为基础数据类型(当然也可以是复杂数据类型),而value在实际使用中除了基础数据类型外大部分是struct、list、object等等。
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数据类型。 在这个PLC数据类型ProductInfo中包含了key和value两部分,其中key是string类型,用作数据索引,相当于数据的识别码。后面的value用于存储数据,一般它是struct类型,这样的好处是可以存储大量的相关数据,比如产品的规格、材质、重量、生产日期等信息。 为了方便使用,我们来封装一个Dictiory处理块,实现数据的查询、保存、删除和修改等功能。功能块接口定义如下。 部分接口说明: 1, Data: 用于接收外部数据,定义为Variant的好处是允许连接任意类型的变量; 2, code: 操作符,比如1表示添加新数据,3表示删除数据; 3, QND: 操作完成,用于外部程序做其他逻辑; 4, QStatus: 状态码,用于调试程序时了解功能块的执行状况。 5, DB: 连接目标DB,用于储存数据; 6, Qkey-value: 用于查询操作时输出数据; 关于状态码,我们的定义如下: 整个功能块实现了Dictionary的添加、查询、修改和删除,类似一个迷你数据库。下面我们以查询功能来介绍下实现逻辑,其他功能基本类似,不再赘述。 为了清楚表达程序逻辑,我绘制了下面这个流程图: 下面我们来结合流程图看下程序: 首先使用运算符“?=”来判断传入的实参是否类型匹配,如果一致的话赋值到变量_tRef,反之退出程序并输出状态码16#8009,提示类型不匹配。然后对数据库进行轮询,如何key值和实参的key值一致则退出程序,并输出状态码16#8000表示查询成功。如果轮询完成后依然没有找到匹配的key值则退出程序,并输出状态码16#8003,表示无此记录。 封装好的Dictionary功能块调用是这样的,它可以处理value为任意的的Dictionary,只需要我们将功能块里面的PLC数据类型做对应调整下即可。 |
|
|
|
只有小组成员才能发言,加入小组>>
878浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:59 , Processed in 0.563996 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号