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

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

3天内不再提示

介绍一下MOVE_BLK_VARIANT指令在使用中应注意的问题

jf_61nrsJTz 来源:方正智芯 2024-03-04 10:51 次阅读

块移动指令包括两个:MOVE_BLK和MOVE_BLK_VARIANT,实际项目中都经常被用到。比如设备作业结果的存储及显示功能就需要用到块移动指令。通常采用这种逻辑:首先创建一个数据块,在其中创建一个定长数组(比如可存放100条记录)。每次设备作业流程结束后,将流程结果的数据作为一条记录存放到数组中。

当需要查看某次作业结果的数据时,从数组中读取相关的数据拷贝到临时变量或某个特定变量中即可。这类存储功能一般使用MOVE_BLK_VARIANT指令,因为它可以拷贝结构体数据类型(设备流程结果一般内容比较多,比如包括压力、温度、时间等等,多数采用结构体变量存储),而MOVE_BLK指令只能拷贝基础数据类型(整数、实数等)。数据的写入及读取要设定相应的指针变量,实际应用中经常因为指针错误导致读写错误。今天这篇文章我们介绍一下MOVE_BLK_VARIANT指令在使用中应注意的问题。

b55c8a18-d823-11ee-a297-92fbcf53809c.png

MOVE_BLK_VARIANT指令位于【指令】任务卡的【基本指令】→【移动操作】中,使用梯形图或功能块图编程时可以在这个位置将其拖放到函数或函数块中。使用SCL语言编程时,可以直接输入"MOVE"编辑器会自动提示,如下图所示:

b56f1ad4-d823-11ee-a297-92fbcf53809c.png

指令添加后的初始状态如下图所示:

b576b172-d823-11ee-a297-92fbcf53809c.png

指令参数含义如下:

SRC:可变(Variant)数据类型。源数据,可以是数组或结构体复杂数据类型;

COUNT:无符号双整数(UDINT),要拷贝的记录条数;

SRC_INDEX:双整数(DINT),源数据的索引

DEST_INDEX:双整数(DINT),目标数据的索引;

DEST:可变(Variant)数据类型。目标数据,即源数据要拷贝到的目标区域;

说明:

无论数组的上、下限是如何定义,源数据和目标数据的索引都是从0开始计算的;

如果源数据或目标参数不是数组,则其相应的索引值应为0;

举个例子:

假设存储数组data的定义如下:

data[1..100] of typeResult
//typeResult是用户自定义数据类型

假设过程结果存放在变量tmpResult中。第一次将过程结果存放到存储区数组中的代码如下:

#return_value:=MOVE_BLK_VARIANT(SRC := #tmpResult,
                 COUNT := 1,
                 SRC_INDEX := 0,
                 DEST_INDEX := 0,
                 DEST => "db_storage".data);

注意这里“DEST_INDEX”的值为0,而数据则存放在数组的第一个元素中。由于该数组的下限为1,所以存放在data[1]中。假设定义的存放数据为data[10..110],则存放第一条记录的“DEST_INDEX”的值仍然为0,由于该数组的下限为10,因此数据存放在data[10]中。

实际应用中需要定义写指针变量,随着存入次数的变化修改写指针的值,从而存放到数组的不同位置中。为了防止数据重复写入,存储应在沿信号时进行。

基于上述描述我写了一个简单的数据写入代码,变量定义如下图所示:

b5815dca-d823-11ee-a297-92fbcf53809c.png

代码如下图所示:

b58cef3c-d823-11ee-a297-92fbcf53809c.png

这段代码我已经测试过了,包括数据写满后的情况,如下图所示:

b59d58ea-d823-11ee-a297-92fbcf53809c.png

b5a8fbe6-d823-11ee-a297-92fbcf53809c.png

这篇文章最核心的内容就是大家在使用MOVE_BLK_VARIANT指令时要记住其SRC_INDEX和DEST_INDEX的计算是从0开始的。感兴趣的小伙伴可以把上述的代码进行完善,然后完成数据读取的代码。

好吧,就先聊到这里。


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

    关注

    0

    文章

    60

    浏览量

    17989
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    17066

原文标题:西门子SCL编程入门教程连载(22)——块移动指令

文章出处:【微信号:方正智芯,微信公众号:方正智芯】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    变频器的基础知识及使用注意的问题

    变频器是利用电力半导体器件的通断作用将工频电源变换为另频率的电能控制装置。本文主要介绍了变频器的基本知识,包括它的分类、组成、应用范围、使用
    发表于 05-13 09:10

    音乐集成电路使用注意事项

    音乐集成电路使用注意事项音乐集成电路使用
    发表于 09-19 16:28 714次阅读

    ATmega128开发应用注意的问题

    ATmega128开发应用注意的问题 ATmega128是AVR系列功能最强的单片机,具有如下主要特点:   (1)先进的RI
    发表于 10-26 09:06 3051次阅读

    大型矩阵工程使用注意的问题

    大型矩阵工程使用注意的问题   大型矩阵均采用统的模块化设计,其好处包括:更换与维修方便;输入/输出组合灵活
    发表于 02-09 11:47 338次阅读

    大型矩阵工程使用注意的问题

    大型矩阵工程使用注意的问题 大型矩阵均采用统的模块化设计,其好处包括:更换与维修方便;输入/输出组合灵活;输入/
    发表于 02-21 13:36 628次阅读

    Variant类型的变量指令说明

    SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp定义为Variant类型的参数,该语句输出是数据类型,程序
    的头像 发表于 03-30 15:13 2853次阅读

    介绍几个常用MOVE系列指令

    支持通过MOVE指令个变量传送到多个变量,但是该功能不支持传送复杂数据类型(DTL、结构、数组等)或字符串的字符。
    的头像 发表于 07-07 10:48 1.1w次阅读

    支持处理Variant类型的变量的指令说明

    从TIA V13SP1 开始,S7-1200 V4.0开始,支持以下处理Variant类型的变量的指令
    的头像 发表于 01-03 16:56 2542次阅读

    S7-1200填充块指令(U)FILL_BLK使用说明

    (U)FILL_BLK指令是当EN条件满足时,实现用输入变量批量填充输出区域的功能。
    的头像 发表于 01-13 10:33 3292次阅读

    西门子S7-1200PLC块移动指令MOVE_BLK操作

    S7-1200PLC,l利用MOVE_BLK指令可以将个存储区(源范围)的数据移动到另
    的头像 发表于 04-06 10:29 6354次阅读

    SIMATIC S7-1500 PLC存储区移动指令与交换指令简述

    个存储区(源区域)的数据移动到另个存储区(目标区域)。使用输入COUNT可以指定将移动到目标区域中的元素个数。可通过输入IN中元素的宽度来定义元素待移动的宽度。存储区移动指令(
    的头像 发表于 05-08 11:14 4372次阅读
    SIMATIC S7-1500 PLC存储区移动<b class='flag-5'>指令</b>与交换<b class='flag-5'>指令</b>简述

    博途使用STLMOVE指令

    现在, S7-1500 CPU 上可使用 STL MOVE 指令进行编程。
    的头像 发表于 06-06 11:10 6598次阅读
    博途使用STL<b class='flag-5'>中</b>的<b class='flag-5'>MOVE</b><b class='flag-5'>指令</b>

    移动数据的编程示例

    编程示例 在此编程示例,将移动在生产班次期间为示例收集的数据值以作进步处理。收集的数据放在 ARRAY 。通过“MOVE_BLK_VARIANT:移动块”(
    的头像 发表于 08-23 10:10 1396次阅读
    移动数据的编程示例

    PLCMove指令可以实现什么功能?

     Move指令是PLC编程的基本指令,常用于程序
    发表于 01-10 15:13 1.1w次阅读

    部分TIA集成指令处理的方法介绍

    对于优化的DB块,可使用FILL_BLK指令或创建相同的UDT结构类型的DB块,使用MOVE指令清零DB块数据。
    发表于 04-15 09:34 1192次阅读
    部分TIA集成<b class='flag-5'>指令</b>处理的方法<b class='flag-5'>介绍</b>