说明:
从 S7-SCL 版本 V5.1 起,可以使用 AT 函数去读写变量的元素。当定义变量视图后,可以读写:n
- 变量数据类型为 BYTE 、WORD、DWORD 的位n
- 变量数据类型为 WORD、DWORD 的字节n
- 变量数据类型为 DWORD 的字
AT 特性主要用于 INPUT,OUTPUT 和本地变量。图. 01 显示了访问 BYTE 变量位的 AT 功能的 S7-SCL 样例:n
图. 01n
在这个 S7-SCL 的样例程序中,创建了输入叁数的多视图。如果 FB40 被调用,你能参数化作为输入和输出变数的 " MainVarByte" 、 " X2" 和 " X5" 叁数。" FilterVar" 叁数不在调用块中出现。变量 " MainVarByte" 被分为变量 " FilterVar" 的 8个布尔值。请参考 S7-SCL 的在线帮助中 "声明变量范围视图 " 部分。n
数据类型的声明 | 变量的数据类型 | ||||
基本类型 | 复杂类型 | ANY/指针 | |||
FB | 声明视图 VAR, VAR_TEMP, VAR_IN, 或VAR_OUT |
基本类型 复杂类型 ANY/指针 |
X X |
X X X1) |
X1) |
声明视图 VAR_IN_OUT |
基本类型 复杂类型 ANY/指针 |
X | X | ||
FC | 声明视图 VAR或 VAR_TEMP |
基本类型 复杂类型 ANY/指针 |
X X |
X X X |
X |
声明视图 VAR_IN, VAR_OUT 或 VAR_IN_OUT |
基本类型 复杂类型 ANY/指针 |
X | X |
表. 01
1)这里应该注意变量域“VAR_OUT”中的 ANY 指针在功能块中是不允许的。上述样例程序也不能用于 FC 中的 VAR_IN 变量和 VAR_OUT 域。
图. 02 示例复制两个输入变量 (WORD数据类型)到一个输出变量 (DWORD数据类型)。 两个输入变量的存储区 "A_word"和 "B_word"被复制到输出变量 "C_dword"。
图. 02
变量“A_word”中的数据被写入到输出“C_dword”的低位字中,而变量“B_word”中的数据被写入到高位字中。
C_dword | |||
高位字节 | 低位字节 | 高位字节 | 低位字节 |
高位字(“C_dwort.B_high”) | 低位字 (“C_dwort.A_low”) |
表.02
以上样例也可用于要被复制到 WORD 变量中的 BYTE 变量。
注意:
不能定义一个由 8 个布尔类型变量组成的 "BYTE" 类型的结构。因为结构变量最小是一个 WORD , 一个结构不能由一个字节组成。
补救:
定义一个 8 个布尔的队列替代现有的 8 个布尔变量组成的结构。这样就可以访问每个位了。
变量声明 | 备注 |
ByteVar: Byte; BoolVar AT ByteVar: STRUCT BoolVar_1:= BOOL; BoolVar_2:= BOOL; |
错误 编译的错误信息: "数据类型和变量类型不一致" |
ByteVar: BYTE; BoolVar AT ByteVar: ARRAY [0 .. 7] OF BOOL; |
正确 (如 图. 01) |
表. 03
这个限制不适用于变量类型 WORD 和 DWORD 。
软件环境:
本 FAQ 的图片由 S7-SCL 版本 V5.3 生成。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc333282.html