关键词不能为空

位置:白城汽车新闻网 > 汽车资讯 > 基于博途V15 西门子S7-1200数据处理指令应用-移动操作-variant

基于博途V15 西门子S7-1200数据处理指令应用-移动操作-variant

作者:白城汽车新闻网
日期:2020-08-20 06:47:34
阅读:

本篇是《基于博途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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

将按顺序表达的 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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

将 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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

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

2)参数的数据类型

参数 数据类型 说明

IN Word, DWord 有序数据字节 IN

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

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

6. LOWER_BOUND:(读取 ARRAY 下限)

1)LOWER_BOUND 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

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

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

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

7. UPPER_BOUND:(读取 ARRAY 上限)

1)UPPER_BOUND指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

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

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

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

8. Variant 指令

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

1)VariantPut 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

读取 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 指令

基于博途V15 西门子S7-1200数据处理指令应用-移动操作

计算 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。

白城汽车新闻网一直为网友的需求而努力相关推荐