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

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

3天内不再提示

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

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-04-19 11:23 次阅读

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

S7-1200将Byte数组(即Byte流)看做是序列,也就是标准数组。与之相反,其他所有格式都是非序列的,通常程序使用的都是非序列的,例如Struct,UDT,或其他格式。序列化和反序列化指令的作用就是在实现标准数组和其他格式的转换。对于某些标准功能块,最方便处理的是Byte数组,但处理对象往往是多样的例如Struct、UDT或者其他格式,这时最好的方法就是先将各类对象统一序列化成Byte数组,然后执行相关功能块,最后在执行反序列化返回初始对象。如图1所示,为这两个指令实现的结果。

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

2effcaca-bf89-11ec-9e50-dac502259ad0.jpg

图1 指令实现的功能

2f1ccd46-bf89-11ec-9e50-dac502259ad0.jpg

图2 指令位置

2f2fb104-bf89-11ec-9e50-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个字节。

2f538520-bf89-11ec-9e50-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所示。

2f6d8c36-bf89-11ec-9e50-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所示。

2f986e38-bf89-11ec-9e50-dac502259ad0.jpg

图6 FC编写

2fb7ec5e-bf89-11ec-9e50-dac502259ad0.jpg

图7 使用的DB24

2fd3f106-bf89-11ec-9e50-dac502259ad0.jpg

图8 FC调用

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

--------------------END------------------

审核编辑 :李倩


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

    关注

    0

    文章

    613

    浏览量

    28328
  • 数组
    +关注

    关注

    1

    文章

    414

    浏览量

    25906
  • S7-1200
    +关注

    关注

    11

    文章

    331

    浏览量

    17905

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

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

收藏 人收藏

    评论

    相关推荐

    python训练出的模型怎么调用

    使用pickle模块 pickle 是Python的一个内置模块,用于序列化反序列化Python对象结构。使用 pickle 可以方便地保存和加载模型。 import pickle # 保存模型
    的头像 发表于 07-11 10:15 1587次阅读

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

    西门子S7-1200 PLC,作为西门子自动控制产品中的一款紧凑型控制器,凭借其强大的功能和易用性,在工业控制领域得到了广泛的应用。S7-1200 PLC不仅具备标准的PLC功能,还融入
    的头像 发表于 06-18 14:52 2368次阅读

    西门子S7-1200 PLC如何通过模拟量控制变频器

    在现代工业自动领域中,变频器因其能实现对交流电动机的平滑调速而得到了广泛应用。西门子S7-1200 PLC(可编程逻辑控制器)作为工业控制领域的重要设备,其通过模拟量控制变频器的方式,不仅提高了
    的头像 发表于 06-18 09:26 2254次阅读

    简述S7-1200 PLC的硬件组成

    S7-1200 PLC(Programmable Logic Controller,可编程逻辑控制器)是西门子公司推出的一款小型、模块的可编程控制器,广泛应用于工业自动、过程控制、机械控制等领域
    的头像 发表于 06-14 10:04 4420次阅读

    西门子S7-1200 PLC的优缺点分析

    西门子S7-1200 PLC作为自动控制系统中的核心组件,自推出以来就受到了广泛关注。其紧凑的模块设计、强大的功能以及灵活的扩展性,使得它在工业自动领域占据了重要的地位。然而,任
    的头像 发表于 06-13 11:33 2908次阅读

    西门子S7-1200 PLC的基本功能

    西门子S7-1200 PLC(Programmable Logic Controller)是一款紧凑型、模块的可编程逻辑控制器,专为满足各种自动应用需求而设计。其强大的功能、灵活的配置以及卓越
    的头像 发表于 06-13 11:29 1919次阅读

    在嵌入式系统中集成Rust和Qt的实践

    Rust 拥有丰富的库生态系统,用于序列化反序列化、异步操作、解析不安全输入、线程、静态分析等,而 Qt 是一个 C++ 工具包,支持跨各种平台的丰富的、基于 GUI 的应用程序,从 iOS 到嵌入式Linux。Qt 应用程序包括表示业务逻辑的 C++ 插件
    发表于 05-03 10:26 1698次阅读
    在嵌入式系统中集成Rust和Qt的实践

    ROS机器人操作系统的实现原理

    面对序列化,很多人心中可能会有很多疑问。 首先,为什么要序列化?或者更具体的说,既然对象的信息本来就是以字节的形式储存在内存中,那为什么要多此一举把一些字节数据转换成另一种形式的、一维的、连续的字节数据呢?
    的头像 发表于 04-27 02:39 2995次阅读
    ROS机器人操作系统的实现原理

    苹果将允许维修部分iPhone使用二手原装配件,但仍禁用第三方配件

    他指出,“零件序列化” 是一个广为人知且常带负面含义的词汇。许多人误解为苹果阻止 iPhone 使用第三方零件,然而事实并非如此。苹果的序列化匹配旨在确认设备中的部件真实性以及实现更精准的配合度。
    的头像 发表于 04-12 14:22 368次阅读

    俄勒冈州禁止数码设备使用“序列化”技术

    该法案对诸如苹果iPhone等数字产品产生巨大影响,意即制造商无法利用“零件序列化”技术束缚消费者选择第三方维修服务或自主修复非原产部件,同时也不能以此减少设备性能或误导使用者。
    的头像 发表于 03-28 10:46 502次阅读

    如何使用S7-1200 CPU的存储卡呢?

    S7-1200 CPU 使用的存储卡为 SD 卡,存储卡中可以存储用户项目文件,有如下3种功能
    的头像 发表于 02-26 09:53 1753次阅读
    如何使用<b class='flag-5'>S7-1200</b> CPU的存储卡呢?

    S7-1200如何实现内部数据的掉电保持?

    S7-1200 PLC 可以通过多种方式实现内部数据的掉电保持,以确保在断电或重启后数据不会丢失。
    的头像 发表于 01-29 16:11 6828次阅读

    西门子S7-1200S7-300PLC之间的区别有哪些?

    S7-1200作为新推出的紧凑型控制器,其产品定位在原有的SIMATIC S7-200和S7-300之间,它与S7-300的区别主要体现在硬件、通信、工程、存储器、功能块、计数器、定时
    的头像 发表于 01-10 10:54 1011次阅读
    西门子<b class='flag-5'>S7-1200</b>与<b class='flag-5'>S7</b>-300PLC之间的区别有哪些?

    s71200可用step7S7-1200的硬件结构

    S7-1200主要由CPU模块、信号板、信号模块、通信模块和编程软件组成,各种模块安装在标准DIN导轨上。
    发表于 01-10 10:53 2367次阅读
    <b class='flag-5'>s</b>71200可用step<b class='flag-5'>7</b>吗 <b class='flag-5'>S7-1200</b>的硬件结构

    西门子plc如何选型 s7-1500和s7-1200区别

    S7-1200是一种小型的PLC,适用于小型自动应用。它具有较小的尺寸、较低的成本和中等级别的性能。S7-1200系列提供了多种CPU型号和不同数量的I/O模块,可扩展性较强。
    发表于 01-10 10:48 5496次阅读