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

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

3天内不再提示

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

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-04-27 16:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

7fdb7346-c582-11ec-bce3-dac502259ad0.jpg

图1 指令实现的功能

7feeebe2-c582-11ec-bce3-dac502259ad0.jpg

图2 指令位置

8007fb14-c582-11ec-bce3-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个字节。

80218d4a-c582-11ec-bce3-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所示。

803a4ea2-c582-11ec-bce3-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所示。

804fa464-c582-11ec-bce3-dac502259ad0.jpg

图6 FC编写

806f878e-c582-11ec-bce3-dac502259ad0.jpg

图7 使用的DB24

80865306-c582-11ec-bce3-dac502259ad0.jpg

图8 FC调用

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

审核编辑 :李倩


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

    关注

    0

    文章

    616

    浏览量

    29619
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27517
  • S7-1200
    +关注

    关注

    11

    文章

    335

    浏览量

    19833

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MAX9277/MAX9281:3.12Gbps GMSL 序列化器的技术剖析与应用指南

    MAX9277/MAX9281:3.12Gbps GMSL 序列化器的技术剖析与应用指南 在当今的电子设备中,高速数据传输和高清视频显示的需求日益增长,这对信号传输的稳定性和效率提出了更高的要求
    的头像 发表于 05-12 17:40 567次阅读

    JSON:简洁代码高效搞定序列化反序列化

    面对频繁的数据交互需求,用最简方式实现JSON序列化反序列化已成为开发者必备技能,借助主流库,轻松实现零负担数据转换。JSON(JavaScriptObjectNotation)是一种轻量级
    的头像 发表于 02-25 19:04 313次阅读
    JSON:简洁代码高效搞定<b class='flag-5'>序列化</b>与<b class='flag-5'>反序列化</b>

    IO序列化操作:提升系统互操作性的关键技术

    在异构系统并存的今天,IO序列化操作成为实现系统间互操作性的核心技术。通过标准的数据格式(如JSON、Protobuf、Hessian等),不同语言、平台的系统得以无缝交换信息。合理设计序列化策略
    的头像 发表于 02-25 16:02 254次阅读
    IO<b class='flag-5'>序列化</b>操作:提升系统互操作性的关键技术

    【ioqueue】 IO序列化操作全解析

    从内存对象到可存储或可传输的字节流,IO序列化操作完成了数据形态的转化。这一过程不仅涉及编码与解码逻辑,还需处理版本兼容、安全性与性能开销等问题。全面掌握这一技术路径,有助于构建更加健壮的应用系统
    的头像 发表于 02-24 19:22 276次阅读
    【ioqueue】 IO<b class='flag-5'>序列化</b>操作全解析

    极简代码,搞定JSON序列化反序列化

    快速实现JSON数据的生成(序列化)与解析(反序列化)。 目前json库已全面支持LuatOS开发系列产品,开发者可根据项目实际需求,灵活选用并进行快速集成与开发。 一、 JSON基础要点 在
    的头像 发表于 02-23 21:46 503次阅读
    极简代码,搞定JSON<b class='flag-5'>序列化</b>与<b class='flag-5'>反序列化</b>

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选 在当今数字的时代,数字视频处理技术日新月异。对于电子工程师而言,选择一款性能卓越、功能丰富的数字视频序列化器至关重要。今天,我们
    的头像 发表于 12-30 14:00 499次阅读

    深入解析LM2512A:高性能RGB显示接口序列化

    深入解析LM2512A:高性能RGB显示接口序列化器 在电子设备的显示领域,如何高效、稳定地传输高质量的图像数据是一个关键问题。TI的LM2512A作为一款专门的移动像素链路(MPL - 1)24位
    的头像 发表于 12-26 11:30 663次阅读

    SN65HVS885:工业自动的理想数字输入序列化

    SN65HVS885:工业自动的理想数字输入序列化器 在工业和建筑自动领域,对于高通道密度数字输入模块的需求日益增长。德州仪器(TI)的SN65HVS885作为一款八通道数字输入序列化
    的头像 发表于 12-25 11:00 642次阅读

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 桥接序列化

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 桥接序列化器 在电子工程师的日常工作中,选择一款合适的器件来实现特定功能至关重要。今天,我们聚焦于德州仪器(TI
    的头像 发表于 12-22 15:50 625次阅读

    DS90UH947-Q1:1080p OpenLDI至FPD - Link III序列化器的深度解析

    DS90UH947-Q1:1080p OpenLDI 至 FPD - Link III 序列化器的深度解析 在当今的电子设备领域,视频传输技术的发展日新月异,对于高质量、高速率视频传输的需求也越来越
    的头像 发表于 12-22 15:40 574次阅读

    探索DS90UH981-Q1:4K DSI到FPD-Link IV桥接序列化器的卓越性能

    探索DS90UH981-Q1:4K DSI到FPD-Link IV桥接序列化器的卓越性能 在当今的电子设备设计领域,对于高速、可靠且功能强大的视频传输解决方案的需求与日俱增。DS90UH981-Q1
    的头像 发表于 12-17 11:15 743次阅读

    轻量级参数的管理框架(C语言)

    反序列化操作。 方便在本地储存设备(如flash、eeprom等)保存/读取二进制数据,甚至还可以跨设备传输使用 提供了两种方式: 第一种:只需要提供参数数据保存/加载的回调函数,调用相关接口函数
    发表于 12-16 06:24

    天拓四方分享:什么事S7-1200 G2++?

    中国市场动态,致力于满足广大用户的多样需求。基于此,西门子在 S7-1200 G2 的基础上,精心打造了增强型 PLC——S7-1200 G2++。此次推出的型号包含 S7 - 12
    的头像 发表于 09-05 17:17 1594次阅读

    西门子S7-1200 G2的7大亮点及最新功能

    西门子S7-1200 G2是新发布的新一代可编程逻辑控制器(PLC),作为S7-1200系列的升级版,它在硬件设计、性能、运动控制、通信能力和安全功能等方面进行了显著改进,适用于中小型自动
    的头像 发表于 07-03 17:04 4475次阅读
     西门子<b class='flag-5'>S7-1200</b> G2的<b class='flag-5'>7</b>大亮点及最新功能

    鸿蒙5开发宝藏案例分享---跨线程性能优化指南

    为什么拖慢性能? 当对象跨线程传递时(比如主线程→子线程),系统会 自动序列化反序列化 。如果对象结构复杂(比如嵌套数组、类方法),耗时会暴增!举个例子: // 未优化的写法:传递整个对象
    发表于 06-12 17:13