您的当前位置:首页正文

S7-300 S7-400语句表(STL)编程手册151-200

2021-08-26 来源:我们爱旅游
程序控制指令 

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 

因篇幅问题不能全部显示,请点此查看更多更全内容