打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
西门子SCL编程入门教程连载(21)——序列化指令
userphoto

2022.09.22 广东

关注

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

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

其基本语法如下:

Serialize(SRC_VARIABLE:=_variant_in_, DEST_ARRAY=>_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语言编程有详细的介绍。如果你感兴趣的话,可以看看下面的链接:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通过面向对象设计串口协议
从零开始学PLC-第二讲指令详解
SCL语言编程从入门到精通
工控新手,是时候抛弃S7 200 ,学习S7 1200啦!
西门子SCL语言编程实例——循环调用电机!
西门子SCL编程入门教程连载(15)-Variant类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服