在 S7-SCL 中如何访问 BYTE 、WORD 和 DWORD 变量的各个位?

说明:
从 S7-SCL 版本 V5.1 起,可以使用 AT 函数去读写变量的元素。当定义变量视图后,可以读写:n

  • 变量数据类型为 BYTE 、WORD、DWORD 的位n
  • 变量数据类型为 WORD、DWORD 的字节n
  • 变量数据类型为 DWORD 的字

AT 特性主要用于 INPUT,OUTPUT 和本地变量。图. 01 显示了访问 BYTE 变量位的 AT 功能的 S7-SCL 样例:n

在 S7-SCL 中如何访问 BYTE 、WORD 和 DWORD 变量的各个位?
图 01n

图. 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”。

在 S7-SCL 中如何访问 BYTE 、WORD 和 DWORD 变量的各个位?
图 03

图. 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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论