10.7
格式
调用功能
CALL FC n
注意
如果使用的是语句表编辑器(STL Editor),“n”必须指向现有有效块。在使用之前,还必须定义符号名。
说明
使用该指令,可调用功能(FC)。调用指令能够调用你作为地址输入的功能(FC),与 RLO 或其它条件无关。在处理完被调用块后,调用块程序继续处理。逻辑块的地址可以绝对指定,也可相对指定。
传送参数(增量编辑方式)
调用块可通过一个变量表与被调用的块交换参数。当你输入一个有效的调用语句时,语句表程序中的变量表可自动扩展。
如果调用一个功能,并且调用块的变量声明表中有 IN、OUT 和 IN_OUT 声明,则这些变量作为一个形式参数表被添加到用于调用块的程序中。 在调用功能时,必须在调用逻辑块中为声明的形式参数赋值实际参数。
IN 参数可作为常数、绝对地址或符号地址定义。OUT 和 IN_OUT 参数必须作为绝对地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。 调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符以及 MA 位保存在 B(块)堆栈中。除此之外,调用指令还可去活 MCR 的相关性,然后生成被调用块的本地数据范围。
10-10
程序控制指令
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA 1
RLO -
/FC 0
例如:为 FC6 调用赋值参数
CALL
FC6 形式参数 NO OF TOOL TIME OUT FOUND ERROR
实际参数 := MW100 := MW110 := Q0.1 := Q100.0
10-11
程序控制指令
10.8
格式
调用系统功能块
CALL SFB n1,DB n2
说明
使用该指令,可调用由西门子公司提供的标准功能块(SFB)。调用指令能够调用你作为地址输入的系统功能块(SFB),与 RLO 或其它条件无关。如果使用调用指令调用一个系统功能块,必须为它提供一个背景数据块。在处理完被调用块后,调用块程序继续处理。逻辑块的地址可以绝对指定,也可相对指定。
传送参数(增量编辑方式)
调用块可通过一个变量表与被调用的块交换参数。当你输入一个有效的调用语句时,语句表程序中的变量表可自动扩展。
如果调用一个系统功能块,并且调用块的变量声明表中有 IN、OUT 和 IN_OUT 声明,则这些变量作为一个形式参数表被添加到用于调用块的程序中。 由于在系统功能块处理完之后,实际参数保存在背景数据块中,当调用系统功能块时,只需定义与以前调用相比必须修改的实际参数。如果实际参数是一个数据块,则必须指定完整的绝对地址,例如 DB1,DBW2。
IN 参数可作为常数、绝对地址或符号地址定义。OUT 和 IN_OUT 参数必须作为绝对地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。 调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符以及 MA 位保存在 B(块)堆栈中。除此之外,调用指令还可去活 MCR 的相关性,然后生成被调用块的本地数据范围。
10-12
程序控制指令
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA 1
RLO -
/FC 0
举例
CALL
SFB4,DB4 形式参数 IN: PT: Q: ET:
实际参数 I0.1 T#20s M0.0 MW10
注意
每一次系统功能块调用都必须有一个背景数据块。在上述举例中,数据块 SFB4 和 DB4 必须在调用之前已存在。
10-13
程序控制指令
10.9
格式
调用系统功能
CALL SFC n 注意
如果使用的是语句表编辑器(STL Editor),“n”必须指向现有有效块。在使用之前,还必须定义符号名。
说明
使用该指令,可调用由西门子公司提供的标准功能(SFC)。调用指令能够调用你作为地址输入的系统功能(SFC),与 RLO 或其它条件无关。在处理完被调用块后,调用块程序继续处理。逻辑块的地址可以绝对指定,也可相对指定。
传送参数(增量编辑方式)
调用块可通过一个变量表与被调用的块交换参数。当你输入一个有效的调用语句时,语句表程序中的变量表可自动扩展。
如果调用一个系统功能,并且调用块的变量声明表中有 IN、OUT 和 IN_OUT 声明,则这些变量作为一个形式参数表被添加到用于调用块的程序中。 在调用系统功能时,必须在调用逻辑块中为声明的形式参数赋值实际参数。 IN 参数可作为常数、绝对地址或符号地址定义。OUT 和 IN_OUT 参数必须作为绝对地址或符号地址定义。必须保证所有地址和常数与要传送的数据类型相符。 调用指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符以及 MA 位保存在 B(块)堆栈中。除此之外,调用指令还可去活 MCR 的相关性,然后生成被调用块的本地数据范围。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA 1
RLO -
/FC 0
例如:无参数调用一个系统功能(SFC)
STL CALL
SFC43
解 释
// 调用 SFC43,重新触发看门狗定时器(无参数)。
10-14
程序控制指令
10.10
格式
调用多背景块
CALL # 变量名
说明
通过使用一个功能块的数据类型声明一个静态变量,可以生成一个多背景块。在程序元素目录中只包含已声明的多背景块。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA x
RLO x
/FC x
10.11
从库中调用块
SIMATIC 管理器中的库变量可以用于选择以下程序块: • •
集成在 CPU 操作系统中的程序块(“Standard Library(标准库)”) 保存在库中以便再次使用的程序块
10-15
程序控制指令
10.12
格式
CC 条件调用
CC <逻辑块标识符>
说明
使用该指令,可以在 RLO=1 时调用一个逻辑块。该指令用于无参数调用 FC 或 FB 类型的逻辑块。除了不能使用调用程序传送参数之外,CC 指令与 CALL 指令的用法相同。该指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符以及 MA 位保存在 B(块)堆栈中,去活 MCR 相关性,生成被调用块的本地数据范围,并开始执行调用的程序代码。 逻辑块的地址可以绝对指定,也可相对指定。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA 1
RLO 1
/FC 0
举例
STL
A I 2.0 CC FC6 A M 3.0
解 释
// 检查输入 I 2.0 的信号状态。 // 如果 I 2.0 为“1”,调用功能 FC6。
// 如果 I 2.0 = 1,从调用功能返回处执行;如果 I 2.0 = 0,直接在 A I 2.0 语句后执行。
注意
如果 CALL 指令调用的是一个功能块(FB)或一个系统功能块(SFB),必须在语句中指定一个背景数据块(数据块号)。对于使用 CC 指令的调用,不能将一个数据块分配给语句中的地址。
根据所使用的程序段,程序编辑器(Program Editor)可以在从梯形逻辑编程语言转换为语句表编程语言过程中,生成 UC 指令或 CC 指令。 最好使用 CALL 指令,以避免程序错误。
10-16
程序控制指令
10.13
格式
UC 无条件调用
UC <逻辑块标识符>
说明
使用该指令,可以调用 FC 或 SFC 类型的逻辑块。除了不能与被调用块传送参数之外,UC 指令与 CALL 指令的用法相同。该指令可将返回地址(选择符和相对地址)、两个当前数据块的选择符以及 MA 位保存在 B(块)堆栈中,去活 MCR 相关性,生成被调用块的本地数据范围,并开始执行调用的程序代码。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS 0
OR 0
STA 1
RLO -
/FC 0
举例 1
STL
UC FC6
解 释
// 调用功能 FC6(无参数)。
举例 2
STL UC SFC43
解 释
// 调用系统功能 SFC43(无参数)。
注意
如果 CALL 指令调用的是一个功能块(FB)或一个系统功能块(SFB),必须在
语句中指定一个背景数据块(数据块号)。对于使用 UC 指令的调用,不能将一个数据块分配给语句中的地址。
根据所使用的程序段,程序编辑器(Program Editor)可以在从梯形逻辑编程语言转换为语句表编程语言过程中,生成 UC 指令或 CC 指令。 最好使用 CALL 指令,以避免程序错误。
10-17
程序控制指令
10.14 MCR(主控继电器)
使用 MCR 功能的重要注意事项
警告
为防止人身伤害或财产损失,对于紧急停机功能,禁止使用 MCR 功能代替硬接线机械式主控继电器。
说明
主控继电器(MCR)是一种继电器梯形图逻辑主开关,用于激活或去活电流。根据 MCR 指令,可执行由以下位逻辑和传送指令触发的操作: • • • •
= <位> S <位> R <位>
T <字节>,T <字>,T <双字>
如果 MCR 是“0”,则T 指令使用字节、字和双字将“0”写入存储区。S 和 R 指令则保持现有的值不变。指令 = 可以将“0”写入寻址的位。
程序按 MCR 指令执行及其如何根据 MCR 的信号状态作出反应
MCR 的信号状态 0(去活)
= <位>
写入“0”。 (掉电时,模仿继电器的静止状态) 正常执行
S <位>,R <位> 不写入。 (掉电时,模仿保持其当前状态的继电器) 正常执行
T <字节>,T <字>, T <双字> 写入“0”。 (掉电时,模仿生成数值“0”的元件) 正常执行
1(激活)
10-18
程序控制指令
MCR( - 开始 MCR 区域,)MCR – 结束 MCR 区域
MCR 由一个 1 位宽、8 位深的堆栈控制。当所有 8 个输入项都为“1”时,MCR 激活。使用 MCR( 指令,可以将 RLO 位复制到 MCR 堆栈中。使用 )MCR 指令,可以删除堆栈中的最后一个输入项,并总是空出第 1 层。MCR( 和 )MCR 指令必须成对使用。故障时,即,如果连续 MCR( 指令多于 8 个,或在 MCR 堆栈为空时尝试执行一个 )MCR 指令,将触发 MCRF 错误报文。
MCRA – 激活 MCR 区域,MCRD – 去活 MCR 区域
MCRA 和 MCRD 指令必须成对使用。编程在 MCRA 和 MCRD 之间的指令根据 MCR 位的信号状态执行。编程在 MCRA-MCRD 程序段之外的指令与 MCR 位的信号状态无关。
你必须在被调用块中使用 MCRA 指令,对块中功能(FC)和功能块(FB)的 MCR 相关性进行编程。
10-19
程序控制指令
10.15
10-20
使用 MCR 功能的重要注意事项
在使用主控继电器以 MCRA 方式启动块时应注意: • 如果 MCR 去活,则 MCR( 和 )MCR 之间的程序段的所有赋值(T,=)都写入“0”值。
•
在 MCR( 指令之前,如果 RLO = 0,则 MCR 去活。
危险:PLC 处于 STOP 状态,或未定义运行时间特性!
在 VAR_TEMP 中定义临时变量之后,编译器也可以使用写指令访问本地数据,以便计算地址。这就意味着以下指令顺序会将 PLC 置为 STOP 状态,或造成未定义的运行时间特性: 形式参数存取 • 存取类型为 STRUCT、UDT、ARRAY、STRING 的复杂的 FC 参数部分 • 从版本 2 块的 IN_OUT 区域中存取类型为 STRUCT、UDT、ARRAY、STRING 的复杂的 FB 参数部分
• 如果版本 2 功能块的地址大于 8180.0,则存取它的参数。
•
在版本 2 功能块中存取类型为 BLOCK_DB 的参数打开 DB0。任何后续的数据存取都会将 CPU 切换为“STOP(停止)”状态。T 0、C 0、FC0 或 FB0 经常用于 TIMER、COUNTER、BLOCK_FC 和 BLOCK_FB。 参数传送 • 参数在调用中传送。
LAD/FBD
• 在梯形逻辑或 FBD 中 T 分支和中间输出从 RLO = 0 开始。
补救
从它们对 MCR 的相关性,来解决以上问题:
1. 在语句或程序段出现问题之前,利用 MCRD 指令,可以去活主控继电器。 2.
在语句或程序段出现问题之后,利用 MCRA 指令,可以再次激活主控继电器。
程序控制指令
10.16 MCR( 将 RLO 存入 MCR 堆栈,开始 MCR
使用 MCR 功能的重要注意事项
格式
MCR(
说明
使用 MCR((打开一个 MCR 区域)指令,可以将 RLO 保存在 MCR 堆栈中,并打开一个 MCR 区域。MCR 区域是编程在指令 MCR( 和相应指令 )MCR 之间的指令。指令 MCR( 和 )MCR 必须总是组合使用。
如果 RLO=1,则 MCR 激活。而在该 MCR 区中的 MCR 相关指令正常执行。 如果 RLO=0,则 MCR 去活。
而在该 MCR 区中的 MCR 相关指令根据下表执行。
根据 MCR 位的信号状态执行的指令
MCR 的信号状态 0(去活)
= <位>
写入“0”。 (掉电时,模仿继电器的静止状态) 正常执行
S <位>,R <位> 不写入。 (掉电时,模仿保持其当前状态的继电器) 正常执行
T <字节>,T <字>,T <双字> 写入“0”。 (掉电时,模仿生成数值“0”的元件) 正常执行
1(激活)
MCR( 和 )MCR 指令可以嵌套使用。最大嵌套深度为 8 个指令。最多可有 8 个嵌套堆栈输入项。在堆栈满时,执行 MCR( 会产生一个 MCR 堆栈故障(MCRF)。
10-21
程序控制指令
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA 1
RLO -
/FC 0
举例
STL MCRA A I 1.0 MCR(
A I 4.0 = Q 8.0 L MW20 T QW10 )MCR MCRD A I 1.1 = Q 8.1
解 释
// 激活 MCR 区域。
// 将 RLO 存入 MCR 堆栈,打开 MCR 区域。当 RLO=1(I 1.0 =“1”) 时,MCR 激活;当 RLO=0(I 1.0 =“0”)时,MCR 去活。
// 如果 MCR 去活,则 Q 8.0 置位为“0”,与 I 4.0 无关。
// 如果 MCR 去活,则传送“0”到 QW10。 // 结束 MCR 区域 // 去活 MCR 区域
// 这些指令在 MCR 区域以外,与 MCR 位的信号状态无关。
10-22
程序控制指令
10.17 )MCR 结束 MCR
使用 MCR 功能的重要注意事项
格式
)MCR
说明
使用 )MCR 指令(结束 MCR 区域),可以从 MCR 堆栈中删除一个输入项,并结束 MCR 区域。最后一个 MCR 堆栈位置被释放,并设置为“1”。指令 MCR( 和 )MCR 必须总是组合使用。在堆栈空时,执行 )MCR 指令会产生一个 MCR 堆栈故障(MCRF)。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA 1
RLO -
/FC 0
举例
STL MCRA A I 1.0 MCR(
A I 4.0 = Q 8.0 L MW20 T QW10 )MCR MCRD A I 1.1 = Q 8.1
解 释
// 激活 MCR 区域
// 将 RLO 存入 MCR 堆栈,打开 MCR 区域。当 RLO=1(I 1.0 =“1”)时, MCR 激活;当 RLO=0(I 1.0 =“0”)时,MCR 去活。
// 如果 MCR 去活,则 Q 8.0 置位为“0”,与 I 4.0 无关。
// 如果 MCR 去活,则传送“0”到 QW10。 // 结束 MCR 区域 // 去活 MCR 区域
// 这些指令在 MCR 区域以外,与 MCR 位的信号状态无关。
10-23
程序控制指令
10.18 MCRA 激活 MCR 区域
使用 MCR 功能的重要注意事项
格式
MCRA
说明
使用 MCRA 指令(主控继电器激活),可以激活位于其后的指令的 MCR 相关性。MCRA 指令必须与 MCRD 指令(主控继电器去活)组合使用。编程在 MCRA 和 MCRD 之间的指令根据 MCR 位的信号状态执行。 指令的执行与状态位无关,而且对状态位没有影响。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR -
STA -
RLO -
/FC -
举例
STL MCRA A I 1.0 MCR(
A I 4.0 = Q 8.0 L MW20 T QW10 )MCR MCRD A I 1.1 = Q 8.1
解 释
// 激活 MCR 区域
// 将 RLO 存入 MCR 堆栈,打开 MCR 区域。当 RLO=1(I 1.0 =“1”)时, MCR 激活;当 RLO=0(I 1.0 =“0”)时,MCR 去活。
// 如果 MCR 去活,则 Q 8.0 置位为“0”,与 I 4.0 无关。
// 如果 MCR 去活,则传送“0”到 QW10。 // 结束 MCR 区域 // 去活 MCR 区域
// 这些指令在 MCR 区域以外,与 MCR 位的信号状态无关。
10-24
程序控制指令
10.19 MCRD 去活 MCR 区域
使用 MCR 功能的重要注意事项
格式
MCRD
说明
使用 MCRD 指令(主控继电器去活),可以去活位于其后的指令的 MCR 相关性。MCRD 指令必须与 MCRA 指令(主控继电器激活)组合使用。编程在 MCRA 和 MCRD 之间的指令根据 MCR 位的信号状态执行。 指令的执行与状态位无关,而且对状态位没有影响。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR -
STA -
RLO -
/FC -
举例
STL MCRA A I 1.0 MCR(
A I 4.0 = Q 8.0 L MW20 T QW10 )MCR MCRD A I 1.1 = Q 8.1
解 释
// 激活 MCR 区域
// 将 RLO 存入 MCR 堆栈,打开 MCR 区域。当 RLO=1(I 1.0 =“1”)时, MCR 激活;当 RLO=0(I 1.0 =“0”)时,MCR 去活。
// 如果 MCR 去活,则 Q 8.0 置位为“0”,与 I 4.0 无关。
// 如果 MCR 去活,则传送“0”到 QW10。 // 结束 MCR 区域 // 去活 MCR 区域
// 这些指令在 MCR 区域以外,与 MCR 位的信号状态无关。
10-25
程序控制指令
10-26
移位和循环指令
11 移位和循环移位指令
11.1
移位指令
11.1.1 移位指令概述
说明
使用移位指令,可以将累加器 1 低字中的内容或整个累加器的内容向左或向右逐位移动(请参见“CPU 寄存器”)。将累加器中的内容左移相当于完成乘 2 加权;将累加器中的内容右移相当于完成除 2 加权的运算。例如,如果将十进制数值“3”的等效二进制数左移 3 位,则累加器中的结果是十进制数“24”的二进制数。如果将十进制数值“16”的等效二进制数右移 2 位,则累加器中的结果是十进制数“4”的二进制数。
移位指令后的数字或累加器 2 低字中低字节的数字,指出需移几位。执行移位指令所空出的位既可以用零填入,也可以用符号位的信号状态填入(“0”代表“正”,“1”代表“负”)。最后移出的位装入状态字的 CC 1 位。状态字的 CC 0 和 OV 位清零。可用跳转指令判断 CC 1 位的状态。移位操作是无条件的,也就是说,它们的执行不根据任何条件,也不影响逻辑运算结果。 下述移位指令可供使用: • • • • • •
SSI SSD SLW SRW SLD SRD
移位有符号整数(16 位) 移位有符号双整数(32 位) 字左移(16 位) 字右移(16 位) 双字左移(32 位) 双字右移(32 位)
11-1
移位和循环指令
11.1.2 SSI 移位有符号整数(16 位)
格式:
SSI SSI <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 15 之间。
说明
使用 SSI(右移有符号整数)指令,可以将累加器 1 低字中的内容逐位右移。由移位指令空出的位用符号位(位 15)的信号状态填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SSI <数值>:移位位数通过地址 <数值> 定义。允许数值范围为 0 – 15。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
SSI:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 16,则总是产生相同结果(ACCU 1 = 16#0000,CC 1 = 0,或 ACCU 1 = 16#FFFF,CC 1 = 1)。如果移位位数大于“0”,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
SSI 6 执行之前 SSI 6 执行之后
累加器 1 高字 31... .. 0101 1111 0101 1111
..
0110 0110
...16 0100 0100
累加器 1 低字 15... .. 1001 1101 1111 1110
..
0011 0111
...0 1011 0100
举例 1
STL L MW4 SRW 6 T MW8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容右移 6 位,包括符号位。 // 将结果传送到存储字 MW8。
11-2
移位和循环指令
举例 2
STL L +3 L MW20
SRW
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MW20 的值装入累加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 低字中的内容右移 3 位,包括符号位;空出的位以符号位的信号状态填充。 // 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11.1.3 SSD 移位有符号双整数(32 位)
格式:
SSD SSD <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 32 之间。
说明
使用 SSD(右移有符号双整数)指令,可以将累加器 1 中的内容逐位右移。由移位指令空出的位用符号位的信号状态填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SSD <数值>:移位位数通过地址<数值>定义。允许数值范围为 0 – 32。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
SSD:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 32,则总是产生相同结果(ACCU 1 = 32#00000000,CC 1 = 0 或 ACCU 1 = 32#FFFFFFFF,CC 1 = 1)。如果移位位数大于“0”,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
11-3
移位和循环指令
举例
内 容 位
SSD 7 执行之前 SSD 7 执行之后
累加器 1 高字 31... .. 1000 1111 1111 1111
..
0110 0001
...16 0100 1110
累加器 1 低字 15... .. 0101 1101 1100 1000
..
0011 1011
...0 1011 1010
举例 1
STL L MD4 SSD 7 T MD8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的位右移 7 位,包括符号位。 // 将结果传送到存储双字 MD8。
举例 2
STL L +3 L MD20 SSD
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MD20 的值装入累 加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 中的内容 右移 3 位,包括符号位;空出的位以符号位的信号状态填充。 // 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11-4
移位和循环指令
11.1.4 SLW 字左移(16 位)
格式:
SLW SLW <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 15 之间。
说明
使用 SLW(字左移)指令,可以将累加器 1 低字中的内容逐位左移。由移位指令空出的位用“0”填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SLW <数值>:移位位数通过地址<数值>定义。允许数值范围为 0 – 15。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
SLW:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 16,则总是产生相同结果:ACCU 1- L = 0,CC 1 = 0,CC 0 = 0 和 OV = 0。如果移位位数小于等于 16,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
SLW 5 执行之前 SLW 5 执行之后
累加器 1 高字 31... .. 0101 1111 0101 1111
..
0110 0110
...16 0100 0100
累加器 1 低字 15... .. 0101 1101 1010 0111
..
0011 0110
...0 1011 0000
举例 1
STL L MW4 SLW 5 T MW8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容左移 5 位。 // 将结果传送到存储字 MW8。
11-5
移位和循环指令
举例 2
STL L +3 L MW20
SLW
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MW20 的值装入累 加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 低字中的 内容左移 3 位。
// 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11.1.5 SRW 字右移(16 位)
格式:
SRW SRW <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 15 之间。
说明
使用 SRW(字右移)指令,可以将累加器 1 低字中的内容逐位右移。由移位指令空出的位用“0”填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SRW <数值>:移位位数通过地址<数值>定义。允许数值范围为 0 – 15。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
SRW:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 16,则总是产生相同结果:ACCU 1- L = 0,CC 1 = 0,CC 0 = 0 和 OV = 0。如果移位位数小于等于 16,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
11-6
移位和循环指令
举例
内 容 位
SRW 6 执行之前 SRW 6 执行之后
累加器 1 高字 31... .. 0101 1111 0101 1111
..
0110 0110
...16 0100 0100
累加器 1 低字 15... .. 0101 1101 0000 0001
.. 0011 0111
...0 1011 0100
举例 1
STL L MW4 SRW 6 T MW8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 低字中的位右移 6 位。 // 将结果传送到存储字 MW8。
举例 2
STL L +3 L MW20
SRW
SPP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MW20 的值装入累 加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 低字中的 内容右移 3 位。
// 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11.1.6 SLD 双字左移(32 位)
格式:
SLD SLD <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 32 之间。
说明
使用 SLD(双字左移)指令,可以将累加器 1 中的内容逐位左移。由移位指令空出的位用“0”填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SLD <数值>:移位位数通过地址<数值>定义。允许数值范围为 0 – 32。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
11-7
移位和循环指令
SLD:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 32,则总是产生相同结果:ACCU 1- L = 0,CC 1 = 0,CC 0 = 0 和 OV = 0。如果移位位数小于等于 32,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
SLD 5 执行之前 SLD 5 执行之后
累加器 1 高字 31... .. 0101 1111 1110 1100
..
0110 1000
...16 0100 1011
累加器 1 低字 15... .. 0101 1101 1010 0111
..
0011 0110
...0 1011 0000
举例 1
STL L MD4 SLD 5 T MD8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容左移 5 位。 // 将结果传送到存储双字 MD8。
举例 2
STL L +3 L MD20 SLD
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MD20 的值装入累 加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 中的内容 左移 3 位。
// 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11.1.7 SRD 双字右移(32 位)
格式:
SRD SRD <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
移位的位数在 0 和 32 之间。
11-8
移位和循环指令
说明
使用 SRD(双字右移)指令,可以将累加器 1 中的内容逐位右移。由移位指令空出的位用“0”填充。最后移出的位被装入状态字位 CC 1。要移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
SRD <数值>:移位位数通过地址<数值>定义。允许数值范围为 0 – 32。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则移位指令相当于空操作(NOP)。
SRD:移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果移位位数大于 32,则总是产生相同结果:ACCU 1- L = 0,CC 1 = 0,CC 0 = 0 和 OV = 0。如果移位位数小于等于 32,则状态字位 CC 0 和 OV 被置为“0”。如果移位位数等于“0”,则移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
SRD 7 执行之前 SRD 7 执行之后
累加器 1 高字 31... .. 0101 1111 0000 0000
.. 0110 1011
...16 0100 1110
累加器 1 低字 15... .. 0101 1101 1100 1000
..
0011 1011
...0 1011 1010
举例 1
STL L MD4 SRD 7 T MD8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容右移 7 位。 // 将结果传送到存储双字 MD8。
举例 2
STL L +3 L MD20 SRD
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MD20 的值装入累 加器 1 中。
// 移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 中的内容 右移 3 位。
// 如果最后移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11-9
移位和循环指令
11.2
循环移位指令
11.2.1 循环移位指令概述
说明
使用循环移位指令,可以将累加器 1 中的全部内容循环地逐位左移或右移(参见“CPU 寄存器”)。循环移位指令触发类同于第 14.1 节描写的移位指令。所不同的是,空位填以从累加器中移出的位。
循环移位指令后的数字或累加器 2 低字低字节中的数字,指出需移几位。根据指令,通过状态字的 CC 1 位执行循环。状态字的 CC 0 位复位为“0”。 下述循环移位指令可供使用: • • • •
RLD RRD RLDA RRDA
双字循环左移(32 位) 双字循环右移(32 位)
通过 CC 1 累加器 1 循环左移(32 位) 通过 CC 1 累加器 1 循环右移(32 位)
11.2.2 RLD 双字循环左移(32 位)
格式
RLD RLD <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
循环移位的位数在 0 和 32 之间。
11-10
移位和循环指令
说明
使用 RLD(双字循环左移)指令,可以将累加器 1 中的内容逐位循环左移。通过循环移位指令空出的位都填充以从累加器 1 移出位的信号状态。最后循环移出的位被装入状态字位 CC 1。要循环移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
RLD <数值>:循环移位位数通过地址<数值>定义。
允许数值范围为 0 – 32。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则循环移位指令相当于空操作(NOP)。 RLD:循环移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果累加器 2 低字低字节中的数值大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果循环移位位数等于“0”,则循环移位指令相当于空操作(NOP)。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
RLD 4 执行之前 RLD 4 执行之后
累加器 1 高字 31... .. 0101 1111 1111 0110
..
0110 0100
...16 0100 0101
累加器 1 低字 15... .. 0101 1101 1101 0011
..
0011 1011
...0 1011 0101
举例 1
STL L MD2 RLD 4 T MD8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容循环左移 4 位。 // 将结果传送到存储双字 MD8。
举例 2
STL L +3 L MD20 RLD
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MD20 的值装入累加 器 1 中。
// 循环移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 中的内 容循环左移 3 位。
// 如果最后循环移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11-11
移位和循环指令
11.2.3 RRD 双字循环右移(32 位)
格式:
RRD RRD <数值>
地 址 <数值>
数据类型 整数,无符号
说 明
循环移位的位数在 0 和 32 之间。
说明
使用 RRD(双字循环右移)指令,可以将累加器 1 中的内容逐位循环右移。通过循环移位指令空出的位都填充以从累加器 1 移出位的信号状态。最后循环移出的位被装入状态字位 CC 1。要循环移位的位数可以通过地址<数值>或通过累加器 2 低字低字节中的数值定义。
RRD <数值>:循环移位位数通过地址<数值>定义。
允许数值范围为 0 – 32。如果 <数值> 大于“0”,则 CC 0 和 OV 状态字位被置为“0”。如果 <数值> 等于“0”,则循环移位指令相当于空操作(NOP)。 RRD:循环移位的位数通过累加器 2 低字低字节中的数值定义。允许数值范围为 0 – 255。如果累加器 2 低字低字节中的数值大于“0”,则状态字位被置为“0”。
状态字
写:
BR -
CC 1 x
CC 0 x
OV x
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
RRD 4 执行之前 RRD 4 执行之后
累加器 1 高字 31... .. 0101 1111 1011 0101
..
0110 1111
...16 0100 0110
累加器 1 低字 15... .. 0101 1101 0100 0101
..
0011 1101
...0 1011 0011
举例 1
STL L MD2 RRD 4 T MD8
解 释
// 将数值装入累加器 1 中。
// 将累加器 1 中的内容循环右移 4 位。 // 将结果传送到存储双字 MD8。
11-12
移位和循环指令
举例 2
STL L +3 L MD20
RRD
JP NEXT
解 释
// 将数值“+3”装入累加器 1 中。
// 将累加器 1 中的内容装入累加器 2 中。将存储字 MD20 的值装入累加 器 1 中。
// 循环移位位数为累加器 2 低字低字节中的数值 => 将累加器 1 中的内 容循环右移 3 位。
// 如果最后循环移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。
11.2.4 RLDA 通过 CC 1 累加器 1 循环左移(32 位)
格式
RLDA
说明
使用该指令,可以将累加器 1 中的全部内容通过 CC 1 循环左移 1 位。状态字位 CC 0 和 OV 被置为“0”。
状态字
写:
BR -
CC 1 x
CC 0 0
OV 0
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
RLDA 执行之前 RLDA 执行之后
STL L MD2 RLDA
JP NEXT
解 释
// 将存储双字 MD2 的数值装入累加器 1。
// 将累加器 1 中的内容通过 CC 1 循环左移 1 位。
// 如果最后循环移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。 CC 1 累加器 1 高字 31... .. .. ...16 X 0101 1111 0110 0100 0 1011 1110 1100 1000 (X = 0 或 1,CC 1 的先前信号状态)
累加器 1 低字 15... .. .. 0101 1101 0011 1011 1010 0111
...0 1011 011X
11-13
移位和循环指令
11.2.5 RRDA 通过 CC 1 累加器 1 循环右移(32 位)
格式
RRDA
说明
使用该指令,可以将累加器 1 中的全部内容循环右移 1 位。状态字位 CC 0 和 OV 被置为“0”。
状态字
写:
BR -
CC 1 x
CC 0 0
OV 0
OS -
OR -
STA -
RLO -
/FC -
举例
内 容 位
RRDA 执行之前 RRDA 执行之后
STL L MD2 RRDA
JP NEXT
解 释
// 将存储双字 MD2 的数值装入累加器 1。
// 将累加器 1 中的内容通过 CC 1 循环右移 1 位。
// 如果最后循环移出的位(CC 1) = 1,则跳转到 NEXT 跳转标号。 CC 1 累加器 1 高字 31... .. .. ...16 X 0101 1111 0110 0100 1 X010 1111 1011 0010 (X = 0 或 1,CC 1 的先前信号状态)
累加器 1 低字 15... .. .. 0101 1101 0011 0010 1110 1001
...0
1011 1101
11-14
定时器指令
12 定时器指令
12.1
说明
定时器指令概述
关于正确时间的设定和选择信息,请参见“存储区中定时器的存储单元和定时器的组成部分”。
下述定时器指令可供使用: • • • • • • • • •
FR L LC R SD SE SF SP SS
使能定时器(任意)
将当前定时值作为整数装入累加器 1 将当前定时值作为 BCD 码装入累加器 1 复位定时器 延时接通定时器 延时脉冲定时器 延时断开定时器 脉冲定时器
保持型延时接通定时器
12-1
定时器指令
12.2
存储器区域
存储区中定时器的存储单元和定时器的组成部分
在 CPU 的存储器中,为定时器保留有存储区。该存储区为每一定时器地址保留一个 16 位的字。梯形逻辑指令集支持 256 个定时器。请参考有关 CPU 的技术资料,以建立有效数量的定时器字。 下列功能可以访问定时器存储区: • •
时间值
定时器字的位 0 至位 9 包含二进制码的时间值。时间值按单位个数给出。时间刷新按时基规定的时间间隔为单位减少时间值。时间值逐渐连续减少,一直到等于“0”。时间值可以以二进制、十六进制和二-十进制(BCD)格式输入累加器 1 的低位字。
你可以使用下列格式预装一个时间值: •
W#16#txyz
- 其中,t = 时基(即时间间隔或分辨率) - 其中,xyz = 二-十进制格式的时间值 S5T#aH_bM_cS_dMS 定时器指令
利用时钟计时刷新定时器字。这是 CPU 在 RUN 模式下的功能,按时基规定的时间间隔为单位减少给定时间值,一直到时间值等于“0”。
•
- 其中,H=小时,M=分钟,S=秒,MS=毫秒;用户定义:a,b,c,d - 时基自动选择,时间值按其所取时基取整为下一个较小的数。
你可以输入的最大时间值是9,990秒,或2H_46M_30S(2小时46分30秒)。
12-2
定时器指令
时基
定时器字的位 12 和位 13 包含二进制码的时基。时基定义时间值递减的单位时间间隔。最小时基为 10 ms;最大时基为 10 s。
时 基 10 毫秒 100 毫秒 1 秒 10 秒
时基的二进制码 00 01 10 11
数值不允许超过 2h46m30s(2 小时 46 分 30 秒)。对于范围极限分辨率太高的时间值(例如,2h10ms),将向下舍入为一个有效的分辨率。S5TIME 的一般格式具有如下所示的范围和分辨率:
分辨率 0.01 秒 0.1 秒 1 秒 10 秒
范 围 10 毫秒 – 9 秒 990 毫秒 100 毫秒 – 1 秒 39 秒 900 毫秒 1 秒 – 16 分 39 秒
10 秒 - 2 小时 46 分 30 秒
在累加器 1 中的位组态
当定时器启动时,累加器 1 的内容用作时间值。累加器 1 的位 0 至位 11 为二 - 十进制格式的时间值(BCD 格式:四位一组表示一位十进制数值的二进制码)。位 12 和位 13 包含二进制码的时基。
下图所示为累加器 1 低字中的内容,其中定时值为 127,时基为 1 秒:
时基 1 秒 BCD 码的时间值(0 - 999)
无关:定时器启动时这些位忽略不计
12-3
定时器指令
正确选择定时器
本概述旨在用于帮助为定时作业选择正确的定时器。
I 0.0
Q 4.0 SP_PULSE
Q 4.0 SE_PEXT
Q 4.0 SD_ODT
Q 4.0 SS_ODTS
Q 4.0 SF_OFFDT
定时器 SP_PULSE 脉冲定时器 SE_PEXT
延时脉冲定时器 SD_ODT
延时接通定时器 SS_ODTS
保持型延时接通定时器 SF_OFFDT
延时断开定时器 说 明
输出信号为“1”的最大时间等于设定的时间值 t。如果输入信号变为“0”,则输出信号为“1”的时间较短。
不管输入信号为“1”的时间有多长,输出信号为“1”的时间长度等于设定的时间值。
只有当设定的时间已经结束并且输入信号仍为“1”时,输出信号才从“0”变为“1”。
只有当设定的时间已经结束时,输出信号才从“0”变为“1”,而不管输入信号为“1”的时间有多长。 当输入信号变为“1”或定时器在运行时,输出信号变为“1”。当输入信号从“1”变为“0”时,定时器启动。
12-4
定时器指令
12.3
格式
FR 使能定时器(任意)
FR <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
当 RLO 从“0”变为“1”时,使用该指令,可以清零用于启动寻址定时器的边沿检测标志。位于 FR 指令之前的 RLO 位从“0”到“1”的变化,可以使能定时器。
使能定时器指令并不是启动定时器的必要条件,也不是正常定时器操作的必要条件。它只是用于触发一个正在运行的定时器再启动。只有在 RLO = 1 启动操作连续进行时才能实现再启动。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
举例
STL A FR A L SI A R A = L T
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以脉冲定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
12-5
定时器指令
t = 设定的时间间隔
使能输入端 RLO
I 2.0
(1) 当定时器正在运行时,如果在使能输入端 RLO 从“0”变为“1”,将重新启动定
时器。定时器重新启动时间为由程序设定的时间。如果在使能输入端 RLO 从“1”
I 2.1
启动输入端 RLO 0”,则对定时器没有影响。
变为“
(2) 如果在定时器没有运行时,在使能输入端 RLO 从“0”变为“1”,并且在启动输
I 2.2
入端1”,定时器也将根据设定时间以脉冲格式被启动。 复位输入端 RLO RLO 仍为“
(3) 如果在使能输入端 RLO 从“0”变为“1”,且在启动输入端 RLO 为“0”,则
对定时器没有影响。
时间响应
Q 4.0
检查定时器输出的信
号状态。
装入定时器:L,LC
t = 设定的时间间隔
(1) 当定时器正在运行时,如果在使能输入端 RLO 从“0”变为“1”,将重新启动定时器。定时
器重新启动时间为由程序设定的时间。如果在使能输入端 RLO 从“1”变为“0”,则对定时器没有影响。
(2) 如果在定时器没有运行时,在使能输入端 RLO 从“0”变为“1”,并且在启动输入端 RLO 仍
为“1”,定时器也将根据设定时间以脉冲格式被启动。 (3) 如果在使能输入端 RLO 从“0”变为“1”,且在启动输入端 RLO 为“0”,则对定时器没有
影响。
12-6
定时器指令
12.4
格式
L 将当前定时值作为整数装入累加器 1
L <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在累加器 1 的内容保存到累加器 2 中之后,从寻址定时器字中将当前时间值以二进制整数、不包括时基装入累加器 1 低字中。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR -
STA -
RLO -
/FC -
举例
STL L T1
存储区中的
定时器 T1
定时字
装入指令 L T1 执行后累加器 1 低字中的内 容
解 释
// 将定时器 T1 的当前定时值以二进制格式装入累加器 1 低字。
时基 00=10ms 01=100ms 10=1s 11=10s
二进制编码时间值(0 – 999)
L T1
全为“0”
二进制编码时间值(0 – 999)
注意
使用该指令,只能将当前定时值的二进制码装入累加器 1 的低字中,不能装入时
基。装入的时间等于初始时间减去定时器启动以来的历时时间。
12-7
定时器指令
12.5
格式
LC 将当前定时器值作为 BCD 码装入累加器 1
LC <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在累加器 1 的内容保存到累加器 2 中之后,从寻址定时器字中将当前时间值和时基以二 – 十进制格式(BCD 码)装入累加器 1 中。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR -
STA -
RLO -
/FC -
举例
STL LC T1
存储区中的定时器 T1 定时字
时基 00=10ms 01=100ms 10=1s 11=10s
装入指令 LCT1 执行后累加器 1 低字中的内容
102 百 101 十 100 个
二进制编码时间值(0 – 999)
LC T1 二进制转为 BCD 数
解 释
// 将定时器 T1 的当前定时值和时基以二 – 十进制格式(BCD)装入累加器 1 低字。
时间值(BCD码)
12-8
定时器指令
12.6
格式
R 复位定时器
R <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“0”变为“1”时,停止当前定时功能,并对寻址定时器字的时间值和时基清零。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
举例
STL
A I 2.1 R T1
解 释
// 检查输入 I 2.1 的信号状态是否 RLO 从“0”变为“1”,然后复位定时器 T1。
12-9
定时器指令
12.7
格式
SP 脉冲定时器
SP <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“0”变为“1”时,启动寻址的定时器。 只要 RLO = 1,即开始进行设定时间计时。如果在设定时间间隔到以前,RLO 变为“0”,则定时器停止。该定时器启动指令需要将时间值和时基以 BCD 码的格式保存在累加器 1 的低字中。
请参见“存储区中定时器的存储单元和定时器的组成部分”。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
举例
STL A FR A L SP A R A = L T LC T
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10 T1 MW12
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以脉冲定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
// 将定时器 T1 的当前时间值作为 BCD 码装入。
12-10
定时器指令
使能输入:I 2.0 启动输入:I 2.1 复位输入:I 2.2 定时器
输出 Q 4.0 装入定时器:L,LC
t = 设定的时间间隔
12.8
格式
SE 延时脉冲定时器
SE <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“0”变为“1”时,启动寻址的定时器。 即使期间 RLO 变为“0”,程序设定的时间间隔也将计时。如果在设定时间间隔到以前,RLO 从“0”变为“1”,则重新开始设定时间间隔计时。该定时器启动指令需要将时间值和时基以 BCD 码的格式保存在累加器 1 的低字中。 请参见“存储区中定时器的存储单元和定时器的组成部分”。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
12-11
定时器指令
举例
STL A FR A L SE A R A = L T LC T
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10 T1 MW12
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以延时脉冲定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
// 将定时器 T1 的当前时间值作为 BCD 码装入。
I 2.0 使能输入
启动输入端 I 2.1 复位输入端 I 2.2 定时器 输出 Q 4.0
装入定时器:L,LC
t = 设定的时间间隔
12-12
定时器指令
12.9
格式
SD 延时接通定时器
SD <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“0”变为“1”时,启动寻址的定时器。 只要 RLO = 1,即开始进行设定时间计时。如果在设定时间间隔到以前,RLO 变为“0”,则定时器停止。该定时器启动指令需要将时间值和时基以 BCD 码的格式保存在累加器 1 的低字中。
请参见“存储区中定时器的存储单元和定时器的组成部分”。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
举例
STL A FR A L SD A R A = L T LC T
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10 T1 MW12
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以延时接通定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
// 将定时器 T1 的当前时间值作为 BCD 码装入。
12-13
定时器指令
使能输入 I 2.0
启动输入端
I 2.1 I 2.2
复位输入端
定时器
输出 Q 4.0
装入定时器:
L,LC
t = 设定的时间间隔
12.10
格式
SS 保持型延时接通定时器
SS <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“0”变为“1”时,启动寻址的定时器。即使期间 RLO 变为“0”,程序设定的时间间隔也将计时。如果在设定时间间隔到以前,RLO 从“0”变为“1”,则重新开始设定时间间隔计时。该定时器启动指令需要将时间值和时基以 BCD 码的格式保存在累加器 1 的低字中。 请参见“存储区中定时器的存储单元和定时器的组成部分”。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
12-14
定时器指令
举例
STL A FR A L SS A R A = L T LC T
使能输入 I 2.0 启动输入端 复位输入端 定时器 输出 Q 4.0
I 2.1 I 2.2
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10 T1 MW12
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以保持型延时接通定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
// 将定时器 T1 的当前时间值作为 BCD 码装入。
装入定时器:L,LC
t = 设定的时间间隔
12-15
定时器指令
12.11
格式
SF 延时断开定时器
SF <定时器>
地 址 <定时器>
数据类型 TIMER
存储区 T
说 明
定时器编号,范围与 CPU 有关
指令说明
使用该指令,可以在 RLO 从“1”变为“0”时,启动寻址的定时器。 只要 RLO = 0,即开始进行设定时间计时。如果在设定时间间隔到以前,RLO 变为“1”,则定时器停止。该定时器启动指令需要将时间值和时基以 BCD 码的格式保存在累加器 1 的低字中。
请参见“存储区中定时器的存储单元和定时器的组成部分”。
状态字
写:
BR -
CC 1 -
CC 0 -
OV -
OS -
OR 0
STA -
RLO -
/FC 0
举例
STL A FR A L SF A R A = L T LC T
I 2.0 T1 I 2.1
S5T#10s T1 I 2.2 T1 T1 Q 4.0 T1 MW10 T1 MW12
解 释
// 使能定时器 T1。
// 预设累加器 1 为 10 秒。
// 以延时断开定时器方式启动定时器 T1。
// 复位定时器 T1。
// 检查定时器 T1 的信号状态。
// 将定时器 T1 的当前时间值作为二进制码装入。
// 将定时器 T1 的当前时间值作为 BCD 码装入。
12-16
定时器指令
使能输入 I 2.0
启动输入端
I 2.1 I 2.2
复位输入端 定时器 输出 Q 4.0
装入定时器:L,LC
t = 设定的时间间隔
12-17
定时器指令
12-18
13 字逻辑指令
13.1
说明
字逻辑指令概述
字逻辑指令按照布尔逻辑将成对的字(16 位)和双字(32 位)逐位进行比较。每个字或双字都必须分别存放在 2 个累加器中。
对于字,其实是把累加器 2 低字的内容与累加器 1 低字的内容进行逻辑运算。操作的结果被存放在累加器 1 的低字中,原来的内容被覆盖。
对于双字,其实是把累加器 2 的内容与累加器 1 的内容进行逻辑运算。操作的结果被存放在累加器 1 中,原来的内容被覆盖。
如果结果不等于“0”,则状态字的位 CC 1 被置为“1”。如果结果等于“0”,则状态字的位 CC 1 被置为“0”。 下述字逻辑指令可供使用: • • • • • •
AW OW XOW AD OD XOD
字“与”(16 位) 字“或”(16位) 字“异或”(16位) 双字“与”(32 位) 双字“或”(32位) 双字“异或”(32位)
13-1
因篇幅问题不能全部显示,请点此查看更多更全内容