首页 > 行业资讯 > 西门子SCL编程入门教程连载(21)——序列化指令

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

时间:2022-02-25 来源: 浏览:

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

原创 北岛李工 方正智芯
方正智芯

founderchip

原创工业智能控制领域(PLC、单片机、嵌入式、机器人、通信)的技术及经验分享。

收录于话题 #北岛李工-西门子SCL编程教程 34个

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

北岛李工

你喜欢,就好

赞赏二维码 微信扫一扫赞赏作者 赞赏

已喜欢, 对作者说句悄悄话
最多40字,当前共

  人赞赏

1 / 3

长按二维码向我转账

你喜欢,就好

赞赏二维码

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐