serializearray

PLC编程经常会遇到数据处理,很多指令需要数组作为输入条件,比如数据移动的MOVE_BLK指令。我们实际使用的许多数据是用户定义的类型(UDT)或结构类型。在这种情况下,我们可以使用序列化指令-serialize将UDT或struct类型的数据转换为标准数组进行操作。数据处理完成后,使用反序列化指令Deserialize将其转换为以前的数据类型。通信中也常用序列化指令,将UDT或struct类型的数据转换成标准数组并发送给通信伙伴。在今天的文章中,我们来详细谈谈序列化指令Serialize。

serializearray

Serialize可以在Broadcom Step7开发环境的指令列表中找到,如下图所示:

其基本语法如下:

serialize(SRC _ VARIABLE:= _ variant _ in _,DEST _数组= & gt_ variant _ out _,pos: = _ dint _ inout _)该指令的参数具有以下含义:

SRC_VARIABLE:输入参数,待序列化的变量,支持所有数据类型;DEST_ARRAY:输出参数,序列化后的数组,类型为字节或字符(数组);POS:输入/输出参数,序列化的起始位置。通常,POS从数组的下标0开始,当执行完一次序列化操作后,POS会变成下一次序列化写入的起始下标;

让我们举个例子

首先,我们定义用户定义的数据类型typeTest,如下图所示:

添加一个全局数据块,并向其中添加以下变量:

源数据sourceData,数据类型为上述定义的typeTest;目标数组targetArray,类型为字节数组,用来存放序列化后的数据;posSerialize,存放序列化指令的位置数据(POS);reValue,存放序列化指令的返回值;

添加功能块FB10_SerialTest和输入参数start开始序列化操作。序列化不适合重复执行,所以我用上升沿信号触发,代码如下图所示:

在主程序OB1中调用FB10,一次序列化后数据块中的数据如下:

可以看到,在执行序列化之后,POS的值变成了10。如果再次执行,将从数组编号为10的元素开始写,即targeArray[10]],写长为10。显然,当前的数组长度不足以进行第二次写入。在这种情况下,要么清除posSerialize的值,要么增加数组的长度。

在将多个变量序列化到同一个数组的操作中,如果POS的返回值是奇数,应该是+1,然后进行下一次序列化,防止数据被覆盖。

好了,关于序列化指令已经说得够多了。

我的书《西门子S7-1200/1500 PLC SCL语言编程》对SCL语言编程有详细的介绍。如果你有兴趣,可以看看下面的链接:

#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: ” “; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf1-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); }

西门子SCL语言编程

¥85.97

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论