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

    文章

    615

    浏览量

    29371
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114
  • S7-1200
    +关注

    关注

    11

    文章

    334

    浏览量

    19233

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    西门子S7-1200 MODBUS RTU通讯温度控制器和变频器教程

    该触摸屏和S7-1200PLC进行以太网通讯,方便S7-1200的DB块在触摸屏做出对两个从站相关的设定,熟悉S7-1200的串行通讯功能。
    的头像 发表于 10-30 11:30 1828次阅读
    西门子<b class='flag-5'>S7-1200</b> MODBUS RTU通讯温度控制器和变频器教程

    S7-1200 G2++在机械制造行业的应用分析

    西门子S7-1200 G2++作为新一代基础型控制器,通过软硬件全面升级,在机械制造领域展现出显著的技术优势和应用价值。其核心特性包括增强的运动控制性能、灵活的模块设计、高效的通讯能力以及集成
    的头像 发表于 10-19 08:59 180次阅读

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

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

    plc以太网通讯模块实现:S7-200与S7-1200借PPI助力农业自动发展

    一:S7-200与S71200 在某大型食品加工厂的生产线升级项目中,西门子S7-200与S7-1200的通讯难题一度成为制约生产效率提升的瓶颈。S
    的头像 发表于 08-14 09:41 366次阅读
    plc以太网通讯模块实现:<b class='flag-5'>S7</b>-200与<b class='flag-5'>S7-1200</b>借PPI助力农业自动<b class='flag-5'>化</b>发展

    西门子PLC(S7-1200/1500/300/400)的数据采集与监控方案

    西门子PLC S7-1200S7-1500、S7-300/400型号设备,常用协议:PPI(Process Communication Interface)、PLC与上位机、HMI数据交换
    的头像 发表于 07-04 10:13 968次阅读

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

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

    TaskPool和Worker的对比分析

    TaskPoolWorker内存模型线程间隔离,内存不共享。线程间隔离,内存不共享。 参数传递机制采用标准的结构克隆算法(Structured Clone)进行序列化反序列化,完成参数传递。 支持ArrayBuffer
    发表于 06-18 06:43

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

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

    S7-200Smart与S7-1200通过Modbus协议对接到上位机

    在自动化生产车间中,分布多台PLC自动设备,如包装机(S7-200Smart)、灌装产线(S7-1200)需要用上位机软件集中控制。这些设备距离在几米到几十米不等。通常会考虑有线或者无线通信,选择
    的头像 发表于 06-10 14:30 759次阅读
    <b class='flag-5'>S7</b>-200Smart与<b class='flag-5'>S7-1200</b>通过Modbus协议对接到上位机

    快手上线鸿蒙应用高性能解决方案:数据反序列化性能提升90%

    普通对象(如 JSON 数据)与类实例进行互转,是实现面向对象编程与数据序列化解耦的核心工具。随着业务复杂度的提升,该库在反序列化过程中逐渐暴露出性能瓶颈,影响用户核心体验。因此
    发表于 05-15 10:01

    spartan 6 14位LVDS 反序列化

    spartan 6系列的FPGA 与14位ADC 输出LVDS信号 怎么实现1:14的串转并呢?iserdes2 在ise里面最高只能实现8位啊
    发表于 04-25 15:20

    S7-1200与欧姆龙智能仪表Modbus通信案例

    Modbus 通信是一种应用广泛的通信协议 ,在变频器、智能仪表或是其他的一些智能设备上应用的一种通用通信协议,本文以S7-1200系列PLC作为Modbus主站,以欧姆龙E5EZ的智能温控仪表作为
    的头像 发表于 03-27 17:25 1764次阅读
    <b class='flag-5'>S7-1200</b>与欧姆龙智能仪表Modbus通信案例

    什么是SerDes?SerDes有哪些应用?

    SerDes是一种功能块,用于对高速芯片间通信中使用的数字数据进行序列化反序列化。用于高性能计算(HPC)、人工智能(AI)、汽车、移动和物联网(IoT)应用的现代片上系统(SoC)都实现了
    的头像 发表于 03-27 16:18 4776次阅读
    什么是SerDes?SerDes有哪些应用?

    分布式IO模块与S7-1200 PLC:打造高效分拣系统的新引擎

    在现代物流中心,快速、高效、准确的包裹分拣是衡量整个系统性能的关键指标。为了实现这一目标,国产IO模块与西门子S7-1200 PLC的结合应用,正成为越来越多企业的首选方案。这一组合不仅优化了数据采集和处理流程,还显著提升了分拣效率,降低了运营成本。
    的头像 发表于 01-22 14:56 819次阅读
    分布式IO模块与<b class='flag-5'>S7-1200</b> PLC:打造高效分拣系统的新引擎

    如何选择适合的西门子S7-1200系列PLC型号?

    西门子S7-1200系列PLC作为中小型自动控制器,在研发过程中充分考虑了系统、控制器、人机界面和软件的无缝整合和高效协调,是工业自动领域中的重要组成部分。正确选择适合的S7-1200
    的头像 发表于 12-09 18:24 5779次阅读
    如何选择适合的西门子<b class='flag-5'>S7-1200</b>系列PLC型号?