前言:
今天姐妹们对“计数器qu cu ld qd”大概比较重视,朋友们都需要剖析一些“计数器qu cu ld qd”的相关文章。那么小编也在网摘上汇集了一些有关“计数器qu cu ld qd””的相关文章,希望大家能喜欢,咱们快快来了解一下吧!操作数的基本知识
简介
编程指令时,必须指定指令应该处理的数据值。这些值称为操作数。例如,可以使用下列元素作为操作数:
PLC 变量常量背景数据块中的变量全局数据块中的变量
绝对地址和符号名
操作数可以通过绝对地址和符号名加以识别。可以在 PLC 变量表或块的变量声明中定义名称与地址。
可优化访问的数据块 (S7-1200、S7-1500)
可优化访问的数据块中的数据元素只能接收声明中的符号名,无法接收绝对地址。
关键字
SIMATIC 识别一系列关键字,这些关键字有固定的定义且在程序中有特定含义。不应使用这些关键字作为变量或常量的名称。
关键字表,下表列出了所有关键字。
关键字
德语助记符
关键字
英语助记符
说明
&
&
“与”逻辑表达式的逻辑运算
^
^
读取或写入引用值的操作符
A
Q
输出,位
A1
CC1
条件代码位
A0
CC0
条件代码位
AB
QB
输出,字节
AD
QD
输出,双字
AND
AND
“与”逻辑表达式的逻辑运算
ANY
ANY
数据类型,指针
AR1
AR1
地址寄存器 1
AR2
AR2
地址寄存器 2
ARRAY
ARRAY
引入数组规范,其后是“[”和“]”括起来的下标列表
AT
AT
覆盖变量声明
AUTHOR
AUTHOR
作者名、公司名、部门名或其它名称(最多 8 个字符,不含空格)
AW
QW
输出,字
B
B
字节
BEGIN
BEGIN
引入代码块的指令部分或数据块的初始化部分
BIE
BR
二进制结果
BLOCK_FB
BLOCK_FB
指定 FB 的参数类型
BLOCK_FC
BLOCK_FC
指定 FC 的参数类型
BLOCK_SDB
BLOCK_SDB
指定 SDB 的参数类型
BOOL
BOOL
数据类型
BY
BY
FOR 循环的增量
BYTE
BYTE
数据类型
CALL
CALL
调用
CASE
CASE
引入 CASE 语句
CHAR
CHAR
基本数据类型
CODE_VERSION1
CODE_VERSION1
标签,可确定 FB 是否具有多重实例功能。如果要声明多重实例,则 FB 不得具有该特性。
CONST
CONST
开始常量声明
CONTINUE
CONTINUE
在 SCL 中退出循环的指令
COUNTER
COUNTER
指定计数器的参数类型
DATA_BLOCK
DATA_BLOCK
引入数据块
DATE
DATE
数据类型
DATE_AND_TIME
DATE_AND_TIME
数据类型
DB
DB
数据块
DB_ANY
DB_ANY
数据类型
DBB
DBB
数据块,数据字节
DBD
DBD
数据块,数据双字
DBLG
DBLG
数据块长度
DBNO
DBNO
数据块编号
DBW
DBW
数据块,数据字
DBX
DBX
数据块,数据位
DI
DI
背景数据块
DIB
DIB
背景数据块,数据字节
DID
DID
背景数据块,数据双字
DILG
DILG
背景数据块长度
DINO
DINO
背景数据块编号
DINT
DINT
数据类型
DIW
DIW
背景数据块,数据字
DIX
DIX
背景数据块,数据位
DO
DO
在 FOR 和 WHILE 指令中引入指令部分
DT
DT
数据类型
DTL
DTL
数据类型
DWORD
DWORD
数据类型
E
I
输入(通过过程映像),位
EB
IB
输入(通过过程映像),字节
ED
ID
输入(通过过程映像),双字
ELSE
ELSE
IF 和 CASE 语句中的选择分支
ELSIF
ELSIF
IF 指令的选择条件
EN
EN
EN/ENO 机制的系统操作数
ENO
ENO
EN/ENO 机制的系统操作数
END_CASE
END_CASE
结束 CASE 语句
END_DATA_BLOCK
END_DATA_BLOCK
结束数据块
END_FOR
END_FOR
结束 FOR 语句
END_FUNCTION
END_FUNCTION
结束函数
END_FUNCTION_BLOCK
END_FUNCTION_BLOCK
结束函数块
END_IF
END_IF
结束 IF 指令
END_ORGANIZATION_BLOCK
END_ORGANIZATION_BLOCK
结束组织块
END_REGION
END_REGION
块结束
END_REPEAT
END_REPEAT
结束 REPEAT 语句
END_STRUCT
END_STRUCT
结束结构说明
END_SYSTEM_FUNCTION
END_SYSTEM_FUNCTION
结束系统函数
END_SYSTEM_FUNCTION_BLOCK
END_SYSTEM_FUNCTION_BLOCK
结束系统函数块
END_TYPE
END_TYPE
结束 PLC 数据类型
END_VAR
END_VAR
结束声明块
END_WHILE
END_WHILE
结束 WHILE 指令
EW
IW
输入(通过过程映像),字
EXIT
EXIT
在 SCL 中退出循环的指令
FALSE
FALSE
预定义的布尔型常数:逻辑条件为假,值等于 0
FAMILY
FAMILY
块系列名称:如,控制器
FB
FB
函数块
FC
FC
函数
FOR
FOR
引入 FOR 语句
FUNCTION
FUNCTION
引入函数
FUNCTION_BLOCK
FUNCTION_BLOCK
引入函数块
GOTO
GOTO
引入 GOTO 语句
IF
IF
引入 IF 指令
INSTANCE
INSTANCE
数据类型
INT
INT
数据类型
KNOW_HOW_PROTECT
KNOW_HOW_PROTECT
块保护
L
L
局部数据位
LB
LB
局部数据字节
LD
LD
局部数据双字
LDT
LDT
数据类型
LINT
LINT
数据类型
LTIME
LTIME
数据类型
LTOD
LTOD
数据类型
LW
LW
局部数据字
LWORD
LWORD
数据类型
M
M
存储器位
MB
MB
存储器字节
MD
MD
存储器双字
MOD
MOD
求模运算符
MW
MW
存储器字
NAME
NAME
块名称
NETWORK
NETWORK
程序段
NOT
NOT
逻辑取反
NULL
NULL
零指针
OB
OB
组织块
OF
OF
引入数据类型规范/引入 CASE 语句的指令部分
OR
OR
“或”逻辑表达式的逻辑运算
ORGANIZATION_BLOCK
ORGANIZATION_BLOCK
引入组织块
OS
OS
保存溢出
OV
OV
溢出
PA
PQ
输出(直接的外围输出),位
PAB
PQB
输出(直接的外围输出),字节
PAD
PQD
输出(直接的外围输出),双字
PAW
PQW
输出(直接的外围输出),字
PE
PI
输入(直接的外围输入),位
PEB
PIB
输入(直接的外围输入),字节
PED
PID
输入(直接的外围输入),字节
PEW
PIW
输入(直接的外围输入),字
POINTER
POINTER
数据类型
PRAGMA_BEGIN
PRAGMA_BEGIN
引入 Pragma
PRAGMA_END
PRAGMA_END
Pragma 结束
READ_ONLY
READ_ONLY
数据块写保护
REAL
REAL
数据类型
REF
REF
生成引用的指令
REF_TO
REF_TO
声明引用的指令
REGION
REGION
引入块
REPEAT
REPEAT
引入 REPEAT 语句
RET_VAL
RET_VAL
返回值
RETURN
RETURN
SCL 中的 RETURN 语句
S5T
S5T
数据类型 S5TIME 的语法
S5TIME
S5TIME
数据类型
S7_
S7_
系统属性关键字
SDB
SDB
系统数据块
SFB
SFB
系统函数块
SFC
SFC
系统函数
SINT
SINT
数据类型
STRING
STRING
数据类型
STRUCT
STRUCT
引入结构规范,其后是元素列表
STW
STW
状态字
SYSTEM_FUNCTION
SYSTEM_FUNCTION
系统函数
SYSTEM_FUNCTION_BLOCK
SYSTEM_FUNCTION_BLOCK
系统函数块
T
T
时间元件(定时器)
THEN
THEN
引入 IF 指令的指令部分
THIS
THIS
访问 ARRAY 数据块的语法
TIME
TIME
提供时间信息的基本数据类型
TIME_OF_DAY
TIME_OF_DAY
数据类型
TIMER
TIMER
指定定时器的参数类型
TITLE
TITLE
可选块标题或程序段标题
TO
TO
定义 FOR 语句的整个范围值
TOD
TOD
数据类型
TRUE
TRUE
预定义的布尔型常数:逻辑条件为真,值不等于 0
TYPE
TYPE
PLC 数据类型说明
UDT
UDT
全局或 PLC 数据类型
UDINT
UDINT
数据类型
UINT
UINT
数据类型
ULINT
ULINT
数据类型
UNLINKED
UNLINKED
标记“与运行无关”
UNTIL
UNTIL
结束 REPEAT 语句的指令部分
USINT
USINT
数据类型
UO
UO
(Q1=1) AND (Q0=1) 后的查询
VAR
VAR
引入声明块
VAR_IN_OUT
VAR_IN_OUT
引入声明块
VAR_INPUT
VAR_INPUT
引入声明块
VAR_OUTPUT
VAR_OUTPUT
引入声明块
VAR_TEMP
VAR_TEMP
引入声明块
VARIANT
VARIANT
数据类型
VERSION
VERSION
块的版本号
VOID
VOID
函数没有返回值
WCHAR
WCHAR
数据类型
WSTRING
WSTRING
数据类型
WHILE
WHILE
引入 WHILE 指令
WORD
WORD
数据类型
XOR
XOR
逻辑运算
Z
C
计数器
在程序中使用变量
定义
变量是可以在程序中更改的数值的占位符。数值的格式已定义。使用变量使程序变得更灵活。例如,对于每次块调用,可以为在块接口中声明的变量分配不同的值。从而可以重复使用已编程的块,用于实现多种用途。
变量由以下元素组成:
名称数据类型绝对地址标准访问块中的 PLC 变量和 DB 变量都采用绝对地址。可优化访问块中的 DB 变量不使用绝对地址。Value(可选)
声明变量
可以为程序定义具有不同范围的变量:
在 CPU 的所有区域中都适用的 PLC 变量全局数据块中的 DB 变量可用于整个 CPU 范围内的所有块。背景数据块中的 DB 变量,通常在对其进行声明的块中使用。
下表显示的是变量类型之间的区别:
PLC 变量
背景 DB 中的变量
全局 DB 中的变量
应用范围
在整个 CPU 中有效。
CPU 所有块均可使用。
该名称在 CPU 中唯一。
主要用于定义它们的块中。
该名称在背景 DB 中唯一。
CPU 中的所有块均可使用。
该名称在全局 DB 中唯一。
可用的字符
字母、数字、特殊字符
不可使用引号。
不可使用保留关键字。
字母、数字、特殊字符
不可使用保留关键字。
字母、数字、特殊字符
不可使用保留关键字。
使用
I/O 信号(I、IB、IW、ID、Q、QB、QW、QD)
位存储器(M、MB、MW、MD)
块参数(输入、输出和输入/输出参数)
块的静态数据
静态数据
定义位置
PLC 变量表
块接口
全局 DB 声明表
常量
定义
常量是具有固定值的数据,其值在程序运行期间不能更改。常量在程序执行期间可由各种程序元素读取,但不能被覆盖。不同的常量值通常会指定相应的表示方式,具体取决于数据类型和数据格式。类型与非类型表示方式不同。
无类型的常量
在无类型的表示法中,仅输入常量值即可,无需输入数据类型。对于无类型的常量,只有在首次算术运算和逻辑运算中使用后,才会获得数据类型。
以下示例为无类型的表示法:
SCL
#My_Int1 := #My_Int2 + 12345
(*常量“12345”的数据类型
取决于加数 My_Int。2.此时,“12345”的数据类型为 INT。*)
#My_Real1 := #My_Real2 + 12345
(*常量“12345”的数据类型取决于加数 My_Real2。此时,“12345”的数据类型为 REAL。*)
带有数据类型的常量
在有类型的表示法中,除指定常量值外还指定数据类型。
以下示例为有类型的表示法:
SCL
#My_Int1 := INT#12345
(*The data type of the constant is always INT.*)
符号常量
可以选择声明常量符号名,从而使程序中名称下的常量值可用。这使得在更改常量值时,程序更具有可读性并且更易于维护。
符号常量由以下元素组成:
名称数据类型符号常量始终有数据类型;无类型表示法不适用于符号常量。常量值可以选择指定数据类型值范围内的任意值作为常量值。有关值范围的信息,请参见“数据类型”一章。
常量声明
可以定义具有不同适用范围的常量:
全局常量适用于 CPU 的所有区域局部常量仅在块内适用
下表显示常量类型之间的区别:
全局常量
局部常量
适用范围
在整个 CPU 中有效。
该名称在 CPU 中唯一。
仅在声明它们的块中有效。
该名称在块中唯一。
允许的字符
常量名称允许使用的字符包括字母、数字和特殊字符。
常量名称允许使用的字符包括字母、数字和特殊字符。
定义位置
PLC 变量表的“常量”(Constants) 选项卡
块接口
表示法
括在引号中,例如:
"Glob_Const"
带有数字符号前缀,例如:
#Loc_Const
如果声明的局部常量和全局常量具有相同的符号名称,并将此重复指定的名称用作变量的默认值,则会发生名称冲突。此时,系统将自动使用局部常量。
允许的数据类型
对于常量,允许使用所有基本数据类型和所有衍生数据类型:
二进制数,位字符串,整数,浮点数,定时器,日期和时间,字符串
所有显式和隐式类型转换的通用规则均适用。
无类型常量的数据类型
无类型常量不显式指定数据类型。只有在首次算术运算和逻辑运算中使用后,才会获得数据类型。
以下示例说明如何使用无类型常量:
SCL
#My_Int1 := #My_Int2 + 12345
(*常量“12345”的数据类型
取决于加数 My_Int。2.此时,“12345”的数据类型为 INT。*)
#My_Real1 := #My_Real2 + 12345
(*常量“12345”的数据类型取决于加数 My_Real2。此时,“12345”的数据类型为 REAL。*)
寻址操作数
寻址全局变量
要对全局 PLC 变量进行寻址,可以使用绝对地址或符号名称。
说明
LWORD、LINT、ULINT、LREAL、LTIME、LTOD 和 LDT 数据类型只能通过符号名寻址。
按符号名对全局变量寻址
使用符号名称进行寻址时,则需输入 PLC 变量表中的变量名称。全局变量的符号名自动用引号括起来.
可以使用 PLC 变量的符号名称,对基于 PLC 数据类型的结构化变量进行寻址。也可以使用句点分隔各元素的名称。
按绝对地址对全局变量寻址
使用绝对地址寻址时,则需输入 PLC 变量表中的变量地址。对于每个操作数范围,绝对地址使用以零开头的数值地址地址标识符 % 被自动设置为全局变量绝对地址的前缀。
示例
以下示例显示的是符号名与绝对地址寻址的应用:
寻址
说明
%Q1.0
绝对地址:输出 1.0
%I16.4
绝对地址:输入 16.4
%IW4
绝对地址:输入字 4
"Motor"
符号名地址"Motor"
"Value"
符号名地址"Value"
"Structured_Tag"
基于 PLC 数据类型的变量符号地址
"Structured_Tag".Component
结构化变量的元素符号地址。
访问IO设备
CPU 的过程映像是每个周期更新一次。但是,在对时间要求苛刻的应用中,读取或传送数字输入或输出当前状态的频率可能必须高于每个周期一次。为此,可以在操作数中使用 I/O 访问标识符的后缀直接访问 I/O。
如果要从 I/O 直接读取输入,则需使用 I/O 输入存储区 (PI),而非过程映像输入 (I)。外围设备存储区可按位、字节、字或双字读取。
如果要直接写入输出中,则需使用 I/O 输出存储区 (PQ),而非过程映像输出 (Q)。可以位、字节、字或双字形式对外围输出存储区执行写操作。
要直接从外围设备输入读取或写入信号,可以给操作数添加 I/O 访问后缀“:P”。
也可以通过“:P”寻址结构化 PLC 变量中的元素。但无法使用“:P”访问上一级变量。
示例
下列示例显示的是 I/O 访问标识符的应用:
寻址
说明
"Motor"
对过程映像中的 "Motor" 变量进行寻址。
"Motor":P
对 I/O 存储器区(PI 或 PQ)中的 "Motor" 变量进行寻址。
"Structured_Tag".Component
对过程映像中结构化 PLC 变量的元素进行寻址。
"Structured_Tag".Component:P
对 I/O 存储器区(PI 或 PQ)中结构化 PLC 变量的元素进行寻址。
全局数据块中的变量寻址
全局数据块中的变量可以按符号名或绝对地址进行寻址。对于符号寻址,可以使用数据块的名称和变量名,并用圆点分隔。数据块的名称用引号括起来。
对于绝对寻址,可以使用数据块的编号和数据块变量的绝对地址,并用圆点分隔。地址标识符 % 被自动设置为绝对地址的前缀。
S7-1200/1500 提供了一个选项,用于访问编程期间处于未知状态的数据块。为此,请在访问块的块接口中创建一个 DB_ANY 数据类型的块参数。数据块名称或数据块编号将在运行期间传送到此参数。为了访问数据块的内部变量,请使用 DB_ANY 数据类型的块参数名称以及变量的绝对地址,并用圆点分隔。
说明
按绝对地址对 DB 变量寻址
以下变量无法进行绝对寻址:
优化访问块中的变量。LWORD、LINT、ULINT、LREAL、LTIME、LTOD 和 LDT 数据类型的变量。
最佳做法是对这些变量使用更为便捷的符号寻址。
ARRAY 数据块
ARRAY 数据块是一种特殊类型的全局数据块。这些数据块包含一个任意数据类型的 ARRAY。例如,可以是 PLC 数据类型 (UDT) 的 ARRAY。
可通过关键字“THIS”寻址 ARRAY 数据块中的元素。然后再在方括号中指定下标。下标可以是一个常量,也可以是一个变量。变量类型的下标最大可支持长度为 32 位的整数。
寻址 ARRAY 数据块的扩展选项位于“指令”(Instructions) 任务卡的“移动”(Move) 区域中。例如,可以通过这些指令对数据块名称进行间接寻址。
寻址 ARRAY 数据块
ARRAY 数据块是一种特殊形式的 ARRAY。ARRAY 数据块是仅包含一个 ARRAY 的全局数据块。可通过以下语法寻址 ARRAY 数据块中的元素:
"<GlobArrayDBname>".THIS[#i].<元素名称>
SCL:
"<GlobArrayDBname>"."THIS"[#i].<元素名称>
示例
以下示例说明了如何寻址 ARRAY 数据块中的元素:
在 SCL 中寻址
说明
"My_ARRAY_DB"."THIS"[0]
"My_ARRAY_DB" 是一个 ARRAY 数据块,元素的数据类型为 REAL。
在此,将寻址 "My_ARRAY_DB" 中的第一个元素。
"MY_UDT_ARRAY_DB"."THIS"[3].MyREAL
"MY_UDT_ARRAY_DB" 是一个 ARRAY 数据块,元素的数据类型为 PLC 数据类型 (UDT)。在 PLC 数据类型中,各元素的数据类型为 BYTE。
在此,将寻址 "MY_UDT_ARRAY_DB" 中第四个 ARRAY 元素和该元素中的 "MyREAL" 子元素。
寻址 ARRAY 数据块的指令
在“移动 > ARRAY 数据块”(Move > ARRAY DB) 区域的“指令 > 基本指令”(Instructions > Basic instructions) 任务卡中,包含有各种 ARRAY 数据块的寻址方式。例如,使用这些指令间接寻址该数据块的名称。
ReadFromArrayDB:读取数组数据块WriteToArrayDB:写入数组数据块ReadFromArrayDBL:从装载存储器的数组型数据块中读取WriteToArrayDBL:写入装载存储器的 ARRAY 数据块中
间接寻址
间接寻址允许用户寻址在运行之前不计算地址的操作数。采用间接寻址方式时,各程序段可多次执行,而且每次运行时使用的操作数不同。例如,在程序循环中,每次运行都使用不同的下标。
这种方法具有以下优势:
程序更为灵活。间接寻址可在所有 STEP 7 编程语言中使用。程序代码更为清晰易读。可使用数据块和变量的现有名称(符号化寻址),因为显著提高了程序代码的可读性。
S7-1200 和 S7-1500 中的常规间接寻址选项
所有的编程语言都提供以下间接寻址选项:
通过指针间接寻址ARRAY 元素的间接索引通过 DB_ANY 数据类型间接寻址数据块。
语言特定的间接寻址选项
以下指定寻址选项还可以在多种编程语言中提供:
在 STL 中,可以直接通过地址寄存器寻址操作数。在 SCL 中,可以通过以下指令读写变量存储区:POKE - 写入存储器地址POKE_BOOL - 写入存储器位PEEK - 读取存储器地址PEEK_BOOL - 读取存储器位POKE_BLK - 写入存储区域
1.程序示例
在以下示例中,可以使用下标访问来自不同存储区的三个变量。
分别分配给相应下标的三个变量总览:
下标
访问变量
存储区
1
Input_WORD_0
IW 0
2
"Processdata".Temperature
DB 1
3
Output_WORD_4
QW 4
在“默认变量表”(Default tag table) 中声明以下两个变量:
创建全局数据块:
双击“添加新块”(Add new block) 命令。这样会打开“添加新块”(Add new block) 对话框。单击“数据块 (DB)”(Data block (DB)) 按钮。指定名称“DB_Processdata”。选择“Global DB”作为数据块的类型。单击“确定”(OK)。声明数据块元素“Temperature”:
使用指针间接寻址
对于间接寻址,要求特定的数据格式,应包含地址或者还包含操作数的范围和数据类型。该数据格式称为指针。可以使用以下类型的指针:
引用 (S7-1500)VARIANT (S7-1200/1500)POINTER (S7-1500)ANY(S7-1500,仅适用于可标准访问的块)
有关指针数据类型的更多信息,请参考“另请参见”。
说明
SCL 中的 POINTER
在 SCL 中,POINTER 的使用具有一定限制。只能将其转发到被调用块中。
示例
以下举例说明了使用区域内指针进行间接寻址:
在 STL 中寻址
说明
L P#10.0
// 在累加器 1 中(P#10.0)加载指针
T MD20
// 将指针传递给操作数 MD20
L MW [MD20]
// 在累加器 1 中加载 MW10
....
// 任意程序
L MD [MD20]
// 在累加器 1 中加载 MD10
....
// 任意程序
= M [MD20]
// 若 RLO=1,则设置存储器位 M10.0
clipboard
将指针 P#10.0 传递给操作数 MD20。若编程时操作数 MD20 用方括号括起,则在运行时其将被指针中包含的地址替换。
标签: #计数器qu cu ld qd