0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

S7-1200的Deserialize与Serialize介绍

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2022-12-26 11:36 次阅读

Deserialize(反序列化)、Serialize(序列化)

S7-1200将Byte数组(即Byte流)看做是序列,也就是标准数组。与之相反,其他所有格式都是非序列的,通常程序使用的都是非序列的,例如Struct,UDT,或其他格式。

序列化和反序列化指令的作用就是在实现标准数组和其他格式的转换。

对于某些标准功能块,最方便处理的是Byte数组,但处理对象往往是多样的例如Struct、UDT或者其他格式,这时最好的方法就是先将各类对象统一序列化成Byte数组,然后执行相关功能块,最后在执行反序列化返回初始对象。如图1所示,为这两个指令实现的结果。

TIA V13SP1,S7-1200 V4.0开始支持这两个指令。

3b1db22c-8469-11ed-bfe3-dac502259ad0.jpg

图1 指令实现的功能

3b386ab8-8469-11ed-bfe3-dac502259ad0.jpg

图2 指令位置

3b4bf4b6-8469-11ed-bfe3-dac502259ad0.jpg

图3 指令详情

对于Deserialize(反序列化)、Serialize(序列化),目前出了2个版本的指令:

1. TIA 博途 V13SP1开始,S7-1200 V4.0、V4.1支持V1版本,以下为V1版本说明:

Deserialize:参数参见表1

表1 Deserialize参数

参数 声明 数据类型 说明
SRC_ARRAY Input Variant或Array of Byte 标准Byte数组
POS InOut DInt 见下面注意4
Ret_Val Return Int 错误代码
DEST_VARIABLE Output Variant或Struct、UDT、Array等 反序列化后的输出变量

Serialize:参数参见表2

表2 Serialize参数

参数 声明 数据类型 说明
SRC_VARIABLE Input Variant或Struct、UDT、Array等 待序列化的输入变量
POS InOut DInt 见下面注意4
Ret_Val Return Int 错误代码
DEST_ARRAY Output Variant或Array of Byte 标准Byte数组

注意:

(1) V1版本中标准Byte数组不能是优化数据块的数组,可以是诸如P#M100.0 Byte 10这种看做是数组的(原因)。所以Deserialize的SRC_ARRAY与Serialize的DEST_ARRAY支持的Variant类型其实指向的就是P#指针这种,指向其他类型都不可以。

(2)同样是Variant类型,Deserialize的DEST_VARIABLE与Serialize的SRC_VARIABLE是真正的支持Variant类型,并且是可以处理Variant类型的变量的指令之二。

(3) SRC_ARRAY/DEST_ARRAY的数组大小要大于DEST_VARIABLE/SRC_VARIABLE的空间占用

(4)DEST_VARIABLE/SRC_VARIABLE空间占用的计算规则:

位变量位于另一位变量后则地址连续排布,如果位于其他变量类型的后面,则需要从整字节地址开始;

字节大小的变量从整字节地址开始;

字、双字、四字的变量从偶数字节地址开始;

例子:如图4所示,虽然总数上是5个字节,但是因为整形变量从偶数字节地址开始所以空出了一个字节,因此这种排布需要占6个字节。

3b66abbc-8469-11ed-bfe3-dac502259ad0.jpg

图4 6个字节的排布

(4)POS变量

POS变量声明是InOut,用在Byte数组的下标变量,有输入有输出。

Deserialize:POS的初始输入作为待转化的Byte数组的起始元素,指令结束后,POS的输出=初始输入+DEST_VARIABLE占据的字节数

也可以看做指针,初始指针指向Byte数组所在的POS位置,转化后,指针移动了DEST_VARIABLE占据的字节数。

注意:POS>=0,当POS=0时,为Byte数组的第一个元素,所以建议Byte数组使用Array[0..x] of Byte,这样Byte数组下标可以和POS对应上。

例子:POS实例,如图5所示。

3b7d7f4a-8469-11ed-bfe3-dac502259ad0.jpg

图5 POS示例

①:初始POS=0,指针指向数组第0个元素

②:执行Deserialize,转化了12个字节,POS的输出=0+12=12,指针指向数组第12个元素

Serialize:POS的初始输入作为转化后的Byte数组的起始元素,指令结束后,POS的输出=初始输入+SRC_VARIABLE占据的字节数

也可以看做指针,初始指针指向Byte数组所在的POS位置,转化后,指针移动了SRC_VARIABLE占据的字节数。

注意:POS>=0,当POS=0时,为Byte数组的第一个元素,所以建议Byte数组使用Array[0..x] of Byte,这样Byte数组下标可以和POS对应上。

例子参考图5:

①:初始POS=0,指针指向数组第0个元素

②:执行Serialize,转化了12个字节,POS的输出=0+12=12,指针指向数组第12个元素

2. TIA 博途 V14开始,S7-1200 V4.2支持V2版本

功能与V1版本不同的是

(1)标准Byte数组可以是优化数据块的数组

(2)Deserialize的SRC_ARRAY支持Array[*] of Byte

使用举例:

编写FC,实现清零各种DB块的变量

思路:

1. 将需要清空的DB块内所有变量放入Struct/UDT,或者将需要清空的数据块建立成UDT类型生成的DB,然后使用Deserialize(反序列化)指令清空。

2. 用于清空的Byte数组可以使用M区。对于S7-1211C与S7-1212C有4kB的M区,对于S7-1214C、S7-1215C、S7-1217C有8kB的M区,通常不会用到很多,这样可以利用其中靠后不常用的区域,例如2kB来清空最多2kB的DB块。

3. 有多个不同的结构的DB,都可以先后清空。

编写的FC、DB及调用,如图6-8所示。

3b981076-8469-11ed-bfe3-dac502259ad0.jpg

图6 FC编写

3baea5c0-8469-11ed-bfe3-dac502259ad0.jpg

图7 使用的DB24

3bbb4b54-8469-11ed-bfe3-dac502259ad0.jpg

图8 FC调用

图8中DB37为UDT_1类型生成的DB,可以直接填写在Variant类型的InOut_1的实参处,并且完整清空DB37。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • POS
    POS
    +关注

    关注

    3

    文章

    119

    浏览量

    28339
  • SRC
    SRC
    +关注

    关注

    0

    文章

    61

    浏览量

    18038
  • S7-1200
    +关注

    关注

    11

    文章

    331

    浏览量

    18056

原文标题:S7-1200:Deserialize(反序列化)、Serialize(序列化)

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于S7-1200的设备与网络组态

    本文档内容介绍了基于S7-1200的设备与网络组态,以及S7-1200的概要及功能。
    发表于 09-25 18:14 28次下载
    基于<b class='flag-5'>S7-1200</b>的设备与网络组态

    基于S7-1200的软硬件要求及实例

    本文档内容介绍了基于S7-1200的软硬件要求及实例,供网友参考。
    发表于 09-25 18:18 22次下载
    基于<b class='flag-5'>S7-1200</b>的软硬件要求及实例

    基于S7-1200的PLC的编程及扩展

    S7-1200 系列是一款可编程逻辑控制器 (PLC, Programmable Logic Controller),可以控制各种自动化应用。S7-1200设计紧凑、成本低廉且具有功能强大的指令集
    发表于 09-25 18:39 27次下载

    WinCC V7.2与S7-1200的PLC通讯

    自WinCC V7.2版本起,软件新增加了 SIMATIC S7-1200S7-1500 Channel通道,用于WinCC与 S7-1200/S7-1500 PLC之间的通信。此
    发表于 09-26 19:06 11次下载
    WinCC V7.2与<b class='flag-5'>S7-1200</b>的PLC通讯

    基于WinCC V7.2与S7-1200/1500 PLC通讯步骤介绍

    自WinCC V7.2版本起,软件新增加了 SIMATIC S7-1200S7-1500 Channel通道,用于WinCC与 S7-1200/S7-1500 PLC之间的通信。此
    发表于 09-28 11:01 37次下载
    基于WinCC V7.2与<b class='flag-5'>S7-1200</b>/1500 PLC通讯步骤<b class='flag-5'>介绍</b>

    s7-1200系统手册

    S7-1200适用
    发表于 10-23 09:41 0次下载

    S7-1200入门手册

    S7-1200适用
    发表于 10-23 09:34 0次下载

    s7-1200技术规范

    S7-1200适用
    发表于 10-23 09:29 0次下载

    S7-1200通讯手册

    本文档内容介绍了基于S7-1200通讯,其中包含了配置步骤图文详解。供网友参考
    发表于 11-28 19:49 34次下载

    S7-1200S7-1200进行S7通信的详细资料说明

    S7-1200 的 PROFINET 通信口可以做 S7 通信的服务器端或客户端(CPU V2.0及以上版本)。S7-1200 仅支持 S7 单边通信,仅需在客户端单边组态连接和编程,
    的头像 发表于 08-17 10:51 3w次阅读
    <b class='flag-5'>S7-1200</b>和<b class='flag-5'>S7-1200</b>进行<b class='flag-5'>S7</b>通信的详细资料说明

    S7-1200 PWM功能简介

    S7-1200 PWM功能简介。
    发表于 04-23 14:38 43次下载

    S7-1200:Deserialize(反序列化)、Serialize(序列化)

    S7-1200将Byte数组(即Byte流)看做是序列,也就是标准数组。与之相反,其他所有格式都是非序列的,通常程序使用的都是非序列的,例如Struct,UDT,或其他格式。
    的头像 发表于 04-19 11:23 3853次阅读

    S7-1200:Deserialize(反序列化)、Serialize(序列化)

    V1版本中标准Byte数组不能是优化数据块的数组,可以是诸如P#M100.0 Byte 10这种看做是数组的(原因)。所以Deserialize的SRC_ARRAY与Serialize的DEST_ARRAY支持的Variant类型其实指向的就是P#指针这种,指向其他类型都
    的头像 发表于 04-27 16:16 3950次阅读

    S7-1200S7-300的选型区别

    在硬件扩展方面,S7-300的主机架多支持八个扩展模块,而S7-1200支持扩展多八个信号模块和多三个通信模块。以S7-300 CPU313C和S7-1200 CPU1214C为例,
    的头像 发表于 05-04 15:18 1751次阅读
    <b class='flag-5'>S7-1200</b>与<b class='flag-5'>S7</b>-300的选型区别

    西门子S7-1200 PLC的指令介绍

    了最新的技术,为用户提供了更为高效、灵活的控制方案。本文将详细介绍S7-1200 PLC的指令系统,包括其指令分类、具体指令功能以及在实际应用中的优势。
    的头像 发表于 06-18 14:52 3084次阅读