博途v15模拟量转换_基于博途V15西门⼦S7-1200数据处理指
令应⽤-移动操作
本篇是《基于博途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 参数的数据类型⽆效。
parameter数据类型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) 范围超出可⽤存储区 复制适当的元素。不复制部分元素。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论