本篇是《基于博途V15 西门子S7-1200 ...》系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇。也请专业领域的大神批评指正。

感谢大家关注与支持!

这是第七篇功能指令,本篇介绍两个简单的定时器指令应用实例。上一篇是《基于博途V15 西门子S7-1200 数据处理指令应用-数学函数》,大家可以自行查阅学习。

1.MOVE(移动值)、MOVE_BLK(移动块)、UMOVE_BLK(无中断移动块)和

MOVE_BLK_VARIANT(移动块)

使用移动指令可将数据元素复制到新的存储器地址并从一种数据类型转换为另一种数据类型。移动过程不会更改源数据。

MOVE 指令用于将单个数据元素从参数 IN 指定的源地址复制到参数 OUT指定的目标地址。

MOVE_BLK 和 UMOVE_BLK 指令具有附加的 COUNT 参数。COUNT指定要复制的数据元素个数。每个被复制元素的字节数取决于 PLC 变量表中分配给 IN和 OUT 参数变量名称的数据类型。

1)MOVE、MOVE_BLK、UMOVE_BLK 和 MOVE_BLK_VARIANT 指令

MOVE将存储在指定地址的数据元素复制到新地址或多个地址。MOVE 指令:要在 LAD 或 FBD 中添加其它输出,请单击输出参数旁的“创建”(Create) 图标。

MOVE_BLK将数据元素块复制到新地址的可中断移动。

UMOVE_BLK将数据元素块复制到新地址的不可中断移动。

MOVE_BLK_VARIANT将源存储区域的内容移动到目标存储区域。可以将一个完整的数组或数组中的元素复制到另一个具有相同数据类型的数组中。源数组和目标数组的大小(元素数量)可以不同。可以复制数组中的多个或单个元素。源数组和目标数组都可以用 Variant数据类型来指代。

2)MOVE 指令的数据类型

参数 数据类型 说明

IN SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal, Byte,

Word, DWord, Char, WChar, Array, Struct, DTL, 源地址

Time, Date, TOD, IEC 数据类型,PLC 数据类型

OUT SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal, Byte,

Word, DWord, Char, WChar, Array, Struct, DTL, 目标地址

Time, Date, TOD, IEC 数据类型,PLC 数据类型

注:要添加 MOVE 输出,请单击“创建”(Create) 图标,或右键单击现有 OUT 参数之一的输出短线,并选择“插入输出”(Insert output) 命令。要删除输出,请在其中一个现有 OUT 参数(多于两个原始输出时)的输出短线处单击右键,并选择“删除”(Delete) 命令。

3)MOVE_BLK 和 UMOVE_BLK 指令的数据类型

参数 数据类型 说明

IN SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal Byte,

Word, DWord, Time, Date, TOD, WChar 源起始地址

COUNT UInt 要复制的数据元素数

OUT SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal, Byte,

Word, DWord, Time, Date, TOD, WChar 目标起始地址

4)MOVE_BLK_VARIANT 指令的数据类型

参数 数据类型 说明

SRC Variant(指向数组或单独的数组元素) 欲进行复制操作的源块

COUNT UDInt 要复制的数据元素数

SRC_INDEX DInt SRC 数组的零基索引

DEST_INDEX DInt DEST数组的零基索引

RET_VAL Int 错误信息

DEST Variant(指向数组或单独的数组元素) 源块内容所要复制到的目标区域

5)数据复制操作规则

要复制 Bool 数据类型,请使用 SET_BF、RESET_BF、R、S 或输出线圈 (LAD)

要复制单个基本数据类型,请使用 MOVE

要复制基本数据类型数组,请使用 MOVE_BLK 或 UMOVE_BLK

要复制结构,请使用 MOVE

要复制字符串,请使用 S_MOVE

要复制字符串中的单个字符,请使用 MOVE

MOVE_BLK 和 UMOVE_BLK 指令不能用于将数组或结构复制到 I、Q 或 M 存储区。

6)MOVE_BLK 和 UMOVE_BLK 指令在处理中断的方式上有所不同:

在 MOVE_BLK 执行期间排队并处理中断事件。在中断 OB 子程序中未使用移动目标地址的数据时,或者虽然使用了该数据,但目标数据不必一致时,使用 MOVE_BLK 指令。如果 MOVE_BLK 操作被中断,则最后移动的一个数据元素在目标地址中是完整并且一致的。MOVE_BLK 操作会在中断 OB 执行完成后继续执行。

在 UMOVE_BLK 完成执行前排队但不处理中断事件。如果在执行中断 OB 子程序前移动操作必须完成且目标数据必须一致,则使用 UMOVE_BLK 指令。

执行 MOVE 指令之后,ENO 始终为真。

7)ENO 状态

ENO 条件 结果

1 无错误 成功复制了全部的 COUNT 个元素。

0 源 (IN) 范围或目标 (OUT) 范围超出可用存储区。 复制适当的元素。不复制部分元素。

2. Deserialize

可以使用“取消序列化”指令将 PLC 数据类型 (UDT) 块的顺序表示转换回 PLC 数据类型并填充所有内容。如果比较结果为 TRUE,则功能框输出为 TRUE。按顺序表达的 PLC 数据类型所对应的存储区必须采用 Array of Byte 数据类型,并且必须为数据块声明标准的访问方式,而不是优化访问方式。转换前要确保有足够的存储空间。该指令可以将多个按顺序表示的已转换 PLC 数据类型重新转换回之前的原始数据类型。

如果只想转换一个按顺序表达的 PLC 数据类型(UDT),也可以使用指令“TRCV:通过通信连接接收数据。

1)DESERIALIZE 指令

将按顺序表达的 PLC 数据类型 (UDT) 转换回 PLC 数据类型,并填充整个内容。

2)DESERIALIZE 指令的参数

参数 类型 数据类型 说明

SRC_ARRAY IN Variant 包含数据流的全局数据块

DEST_VARIABLE INOUT Variant 已转换的 PLC 数据类型(UDT) 存储所在的变量

POS INOUT DInt 已转换的 PLC 数据类型所使用的字节数

RET_VAL OUT Int 错误信息

3)RET_VAL 参数

RET_VAL*

(W#16#...) 说明

0000 无错误

80B0 SRC_ARRAY 和 DEST_VARIABLE 参数的存储区重叠。

8136 DEST_VARIABLE 参数的数据块未采用标准访问类型。

8150 参数 SRC_ARRAY 的 Variant 数据类型不含任何值。

8151 参数 SRC_ARRAY 生成代码时出错。

8153 SRC_ARRAY 参数的存储空间不足。

8250 参数 DEST_VARIABLE 的 Variant 数据类型不含任何值。

8251 参数 DEST_VARIABLE 生成代码时出错。

8254 DEST_VARIABLE 参数的数据类型无效。

8382 参数 POS 的值超出数组的限制。

3. Serialize

可以使用“Serialize”指令将多个 PLC 数据类型 (UDT) 转换成按顺序表达的版本,并且不丢失结构。可以使用此指令将程序中的多个结构化数据项暂时保存到缓冲区中(例如,保存到全局数据块中),并发送给另一 CPU。存储已转换的 PLC 数据类型的存储区必须采用 ARRAY of BYTE 数据类型,并且已声明为标准访问方式。转换前要确保有足够的存储空间。

POS 参数包含有关已转换的 PLC 数据类型所占字节数的信息。

如果只想发送一个 PLC 数据类型(UDT),可以使用指令“TSEND:通过通信连接发送数据”。

1)SERIALIZE 指令

将 PLC 数据类型 (UDT) 转换为按顺序表达的版本。

2)SERIALIZE 指令的参数

参数 类型 数据类型 说明

SRC_VARIABLE IN Variant 待转换为按顺序表达版本的 PLC 数据类型 (UDT)

DEST_ARRAY INOUT Variant 作为所生成的数据流的存储目标的数据块

POS INOUT DInt 已转换的 PLC 数据类型所使用的字节数。计算出的 POS

参数是从零开始的。

RET_VAL OUT Int 错误信息

4. FILL_BLK(填充块)和 UFILL_BLK(无中断填充块)

1)FILL_BLK 和 UFILL_BLK 指令

FILL_BLK可中断填充指令:使用指定数据元素的副本填充地址范围。

UFILL_BLK不中断填充指令:使用指定数据元素的副本填充地址范围。

2)参数的数据类型

参数 数据类型 说明

IN SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal,

Byte, Word, DWord, Time, Date, TOD, Char, WChar 数据源地址

COUNT UDint, USInt, UInt 要复制的数据元素数

OUT SInt, Int, DInt, USInt, UInt, UDInt, Real, LReal,

Byte, Word, DWord, Time, Date, TOD, Char, WChar 数据目标地址

3)数据填充操作规则

要使用 BOOL 数据类型填充,请使用 SET_BF、RESET_BF、R、S 或输出线圈(LAD)

要使用单个基本数据类型填充,请使用 MOVE

要使用基本数据类型填充数组,请使用 FILL_BLK 或 UFILL_BLK

要填充字符串中的单个字符,请使用 MOVE

FILL_BLK 和 UFILL_BLK 指令不能用于将数组填充到 I、Q 或 M 存储区。

FILL_BLK 和 UFILL_BLK 指令可将源数据元素 IN 复制到通过参数 OUT 指定初始地址的目标中。复制过程不断重复并填充相邻的一组地址,直到副本数等于COUNT 参数。

FILL_BLK 和 UFILL_BLK 指令在处理中断的方式上有所不同:

在 FILL_BLK 执行期间排队并处理中断事件。在中断 OB子程序中未使用移动目标地址的数据时,或者虽然使用了该数据,但目标数据不必一致时,使用 FILL_BLK 指令。

在 UFILL_BLK 完成执行前排队但不处理中断事件。如果在执行中断 OB

子程序前移动操作必须完成且目标数据必须一致,则使用 UFILL_BLK 指令。

4)ENO 状态

ENO 条件 结果

1 无错误 IN 元素成功复制到全部的 COUNT 个目标中。

0 目标 (OUT) 范围超出可用存储区 复制适当的元素。不复制部分元素。

5. SWAP(交换字节)

1)SWAP 指令

用于反转二字节和四字节数据元素的字节顺序。不改变每个字节中的位顺序。执行 SWAP 指令之后,ENO 始终为 TRUE。

2)参数的数据类型

参数 数据类型 说明

IN Word, DWord 有序数据字节 IN

OUT Word, DWord 反转有序数据字节 OUT

6. LOWER_BOUND:(读取 ARRAY 下限)

1)LOWER_BOUND 指令

在块接口中,可声明 ARRAY[*] 的变量。这些局部变量可读取 ARRAY 限值。此时,需要在 DIM 参数中指定维数。LOWER_BOUND(读取 ARRAY 下限)指令允许读取 ARRAY 的变量下限。

2)下表列出了指令“LOWER_BOUND:读取 ARRAY 下限”:

7. UPPER_BOUND:(读取 ARRAY 上限)

1)UPPER_BOUND指令

在块接口中,可声明 ARRAY[*] 的变量。这些局部变量可读取 ARRAY 限值。此时,需要在 DIM 参数中指定维数。UPPER_BOUND(读取 ARRAY 上限)指令允许读取 ARRAY 的变量上限。

2)下表列出了指令“UPPER_BOUND:读取 ARRAY 上限”:

8. Variant 指令

VariantGet(读取 VARIANT 变量值) 可以使用“读取 Variant 变量值”指令读取 SRC 参数的 Variant 所指向的变量,并将其写入到 DST 参数的变量中。SRC 参数的数据类型为 Variant。除了 Variant 之外,所有数据类型都可为 DST 参数指定。DST 参数的变量所用的数据类型必须与 Variant 所指向的数据类型相匹配。

1)VariantPut 指令

读取 SRC 参数所指向的变量,并将其写入到 DST 参数的变量中。

2)VariantPut 指令的参数

参数 数据类型 说明

SRC Bit strings, integers, floating-point numbers, timers,

date and time, character strings, ARRAY elements, 指向源数据的指针

PLC data types

DST Variant 将要写入数据的目标

3)ENO 状态

ENO 条件 结果

1 无错误 指令会将 SRC 的变量数据复制到 DST 变量中。

0 使能输入 EN 的信号状态为“0”,或数据类型不匹配。 指令不复制任何数据。

4)CountOfElements(获取 ARRAY 元素数目)

可以使用“获取 ARRAY 元素数目”指令来查询 Variant 指向的变量中所含有的 Array 元素数目。如果是一维 ARRAY,指令将返回上限和下限间之差 +1。如果是多维ARRAY,指令返回所有维度的结果。

5)CountOfElements 指令

计算 IN 参数指向的数组中所含数组元素的数目。

如果 Variant 指向 Array of Bool,指令的计数范围将包含填充元素(至最接近的字节边界)。例如,对 Array[0..1] of Bool 进行计数时,指令将返回 8。

6)CountOfElements 指令的参数

参数 数据类型 说明

IN Variant 待计算数组元素个数的变量

RET_VAL UDint 指令结果

7)ENO 状态

ENO 条件 结果

1 无错误 指令将返回数组元素的数目。

0 使用输入 EN 的信号状态为“0”或变量未指向数组。 指令返回 0。

博途IEC TIME数据类型_基于博途V15 西门子S7-1200数据处理指令应用-移动操作相关推荐

  1. tia v15 添加项目_基于博途V15 西门子S7-1200 计数器指令应用

    本篇是<基于博途V15 西门子S7-1200 ...>系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇.也请专业领域的大神批评指正. 感谢大家关注与支持! ...

  2. 博途创建vb脚本实例_基于博途V15 西门子S7-1200 定时器指令应用实例

    本篇是<基于博途V15 西门子S7-1200 ...>系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇.也请专业领域的大神批评指正. 感谢大家关注与支持! ...

  3. 西门子触摸屏修改ip地址_基于博途V15 西门子S7-1200与触摸屏一个简单的例子

    本篇是<基于博途V15 西门子S7-1200 ...>系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇.也请专业领域的大神批评指正. 感谢大家关注与支持! ...

  4. pythontuple数据类型_阿博的Python之路-详解Tuple数据类型

    之前阿博分享了List数据类型,今天来和小伙伴们分享Tuple(元组)数据类型. 注意:阿博的开发环境是Python3. Tuple简介 与List类似,不同之处在于元组的元素不能修改,元组使用小括号 ...

  5. github博客突然无法访问_紫菜头博客被DNS污染攻击关站

    原标题:紫菜头博客被DNS污染攻击关站 近日,网赚圈老牌博客"紫菜头博客"站长爆料,网站这阵子持续遭遇勒索攻击,随后网站域名也DNS污染,彻底被搞垮了,以后网站关站,不玩了,之前, ...

  6. 佳博便携式条码打印机怎么使用_佳博条码打印机打印模式设置问题

    现在市面上很多条码打印机的打印模式有两种:热转印和热敏式.热转印模式一般是配合碳带用来打印铜版纸,热敏式主要是打印热敏纸. 正是因为这两种打印模式所打印的材质不同,所以我们在更换了打印材质的时候,也要 ...

  7. 汇博机器人上市了吗_汇博机器人品牌简介_汇博教学实训机器人_汇博分拣机器人怎么样→十大品牌网...

    江苏汇博机器人技术股份有限公司(简称汇博机器人)是专门从事机器人技术研发与产业化企业.公司团队骨干成员均来自于我国重要的机器人技术研发基地之一--哈尔滨工业大学机器人研究所,公司拥有雄厚的研发实力和高 ...

  8. 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信

    如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...

  9. python 身份证识别器_基于Python的身份证验证识别和数据处理

    淚眼2000 发表于:2020-11-14 13:42 阅读: 164次 今天给大家分享关于基于Python的身份证验证识别和数据处理的文章,我看过之后受受益匪浅,希望对大家的学习有所帮助,如果觉得有 ...

  10. 博途v15模拟量转换_基于博途V15 西门子S7-1200 + 模拟量SM 1234 正反转变频调速实例...

    一.准备工作 所需设备:西门子CPU 1215C AC/DC/Rly6ES7 215-1BG40-0XB0 SEW变频器MDX61B+通信模块DFE32B SM12346ES7 234-4HE32-0 ...

最新文章

  1. 同时测试多个服务是否存活的脚本[shell和perl]
  2. Purism 发布 PureBoot:高度安全、完整的 Linux 引导流程
  3. [日更-2019.5.2、3、4] 关于JVM的概略分析
  4. 三招助你轻松搞定超Diao氛围
  5. FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul
  6. Cropper – 简单的 jQuery 图片裁剪插件
  7. Android JNI(二)——实战JNI入门之Hello World
  8. 中国电信物联网平台入门学习笔记3: 电信开发者平台使用
  9. Model与Record转换适配
  10. Sort Integers by the Number of 1 Bits
  11. [Extjs6] 修改默认的日期月份格式
  12. 你不能访问此共享文件夹,因为你组织的安全策略的解决办法
  13. 使用unity编写简单的弹幕游戏【ten seconds】
  14. 高仿腾讯QQ即时通讯IM项目
  15. 家庭理财,轻松记账修改收支记录这样操作
  16. java 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期
  17. 如何看待阿里云要做“全球产业AI的拓荒者”?
  18. 牛视源码定制,抖音矩阵系统。come here
  19. 关于合成孔径声纳技术一点感想
  20. matlab关闭文本,matlab parpool 关闭

热门文章

  1. 服务器主机如何多开虚拟机,服务器主机多开虚拟机
  2. 2040: [蓝桥杯2022初赛] 砍竹子(优先队列)
  3. 有哪些防护措施可以解决DDOS攻击?
  4. 函数论_E.C.Tichmarsh_Page 4 级数一致收敛的魏尔斯特拉斯 M-判别法 的推广
  5. 用Excel绘制曲线图
  6. PS CC2018安装及破解方法
  7. 小学班级计算机社团活动章程,西华小学速算社团活动章程.doc
  8. 怒肝最新保姆级前端学习路线,速成贴心全面!
  9. 求两个数的最小公倍数及多个数的最小公倍数的求法
  10. java十进制二进制之间的互相转换