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

    浏览量

    17801
  • SCL
    SCL
    +关注

    关注

    1

    文章

    238

    浏览量

    16875

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    ATmega128开发应用注意的问题

    ATmega128开发应用注意的问题
    发表于 08-20 17:57

    恒温恒湿箱使用注意哪些事项呢?

      恒温恒湿箱  使用过程,你是否会遇到这些问题,“试验过程打开箱门会不会对人体有什么影响;设备使用的电源能否和其他设备同使用;当安装和接线还没结束,能否接通电源开关?等等”这
    发表于 01-10 08:16

    介绍单片机裸机环境编写AT指令程序的种方式

    1.写在前面AT指令各种WIFI模块、2G/4G模块以及些无线通讯模块应用广泛。但是用过的朋友都知道,这种方式对于单片机编程来说,并不友好……本篇文章将以ESP8266 WIFI
    发表于 01-17 06:49

    Variant类型的变量指令说明

    SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CASE进行比较。
    的头像 发表于 03-30 15:13 2229次阅读

    介绍几个常用MOVE系列指令

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

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

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

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

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

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

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

    SIMATIC S7-1500 PLC移动值指令(MOVE)简述

    当允许输入端的状态为“1”时,启动此指令,将IN端的数值输送到OUT端的目的地地址中,IN和OUTx(x为1、2、3)有相同的信号状态,移动值的指令MOVE)及参数见下图1。
    的头像 发表于 05-08 09:33 1.1w次阅读
    SIMATIC S7-1500 PLC移动值<b class='flag-5'>指令</b>(<b class='flag-5'>MOVE</b>)简述

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

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

    博途使用STL中的MOVE指令

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

    移动数据的编程示例

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

    PLC中Move指令可以实现什么功能?

     Move指令是PLC编程中的基本指令之一,常用于在程序中对数据进行移动和传输。在使用Move指令时,需要
    发表于 01-10 15:13 2004次阅读

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

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