S7-300 和 S7-400 编程的语句表

分类:电子电工 日期: 点击:0
S7-300 和 S7-400 编程的语句表-0 S7-300 和 S7-400 编程的语句表-1 S7-300 和 S7-400 编程的语句表-2 S7-300 和 S7-400 编程的语句表-3 S7-300 和 S7-400 编程的语句表-4 S7-300 和 S7-400 编程的语句表-5 S7-300 和 S7-400 编程的语句表-6 S7-300 和 S7-400 编程的语句表-7 S7-300 和 S7-400 编程的语句表-8 S7-300 和 S7-400 编程的语句表-9

s ______________ ______________ ______________ ______________ ______________ ______________ ______________ ______________ ______________ SIMATIC S7-300 和 S7-400 编程的语句表 (STL) 功能手册 05/2017 A5E41525031-AA 前言 位逻辑指令 1 比较指令 2 转换指令 3 计数器指令 4 数据块指令 5 逻辑控制指令 6 整型数学运算指令 7 浮点运算指令 8 装载和传送指令 9 程序控制指令 10 移位和循环指令 11 定时器指令 12 字逻辑指令 13 累加器指令 14 所有 STL 指令概述 A 编程实例 B 参数传送 C 法律资讯 警告提示系统 为了您的人身安全以及避免财产损失,必须注意本手册中的提示。人身安全的提示用一个警告三角表示,仅与财 产损失有关的提示不带警告三角。警告提示根据危险等级由高到低如下表示。 危险 表示如果不采取适当的预防措施,可能导致死亡或严重的人身伤害。 警告 表示如果不采取适当的预防措施,可能导致死亡或严重的人身伤害。 注意 表示如果不采取适当的预防措施,可能导致轻微的人身伤害。 注意 表示如果不采取适当的预防措施,可能造成财产损失。 当出现多个危险等级的情况下,每次总是使用最高等级的警告提示。如果在某个警告提示中带有警告可能导致人 身伤害的警告三角,则可能在该警告提示中另外还附带有可能导致财产损失的警告。 合格的专业人员 仅允许安装和驱动与本文件相关的附属设备或系统。设备或系统的调试和运行仅允许由合格的专业人员进行。本 文件安全技术提示中的合格专业人员是指根据安全技术标准具有从事进行设备、系统和电路的运行,接地和标识 资格的人员。 按规定使用 Siemens 产品 注意下列各项: 警告 Siemens 产品只允许用于目录和相关技术文件中规定的使用情况。如果要使用其他公司的产品和组件,必须得到 Siemens 推荐和允许。正确的运输、储存、组装、装配、安装、调试、操作和维护是产品安全、正常运行的前提。 必须遵守允许的环境条件。必须注意相关文件中的提示。 商标 所有带有标记符号 ® 的都2017的注册商标。标签中的其他符号可能是一些其他商标,这是出于保护所有者权利 的目地由第三方使用而特别标示的。 免责声明 我们已检查过本手册中的内容与所描述的硬件和软件相符。由于差错在所难免,我们不能保证完全一致。我们会 定期审查本手册中的信息,并在后续版本中进行必要的更正。 Siemens AG A5E41525031-AA Copyright © Siemens AG 2017. Division Digital Factory Ⓟ 03/2017 恕不提前通知 保留所有权利 Postfach 48 48 90026 NÜRNBERG GERMANY 前言 用途 本手册是您以语句表编程语言 STL 创建用户程序的指南。 本手册还包含了对 STL 语言元素的语法和函数进行描述的参考部分。 所需要的基础知识 本手册供 S7 程序员、操作员以及维护/维修人员使用。 要了解本手册,需要具有自动化技术的常规知识。 除此之外,还需要具有计算机应用能力和其它类似于 PC (例如,编程设备)的、使用 MS Windows XP、 MS Windows Server 2003 或 MS Windows 7 版操作系统的工作设备的知识。 手册应用范围 本手册适用于 STEP 7 编程软件包 5.6 版本。 符合的标准 STL 符合国际电工技术委员会 IEC 1131-3 标准所定义的"指令表"语言,但在操作方面有很大的不同。 欲知更多详细资料,请参见 STEP 7 文件 NORM_TBL.RTF 中的标准表。 在线帮助 集成于软件中的在线帮助是对本手册的补充。提供在线帮助的目的是,在使用软件时提供详细的支持。 该帮助系统通过一些界面集成于软件中: • 上下文相关帮助提供关于当前语境(例如,打开的对话框或激活的窗口)的信息。可以通过通过菜 单命令帮助 > 上下文相关的帮助,或按下 F1 键或通过使用工具栏上的问号符来打开上下文相关 的帮助。 • 可以通过使用菜单命令帮助 > 目录,或在上下文相关的帮助窗口中按"STEP 7 帮助"按钮来调用 STEP 7 中的常规帮助。 • 可以通过按"词汇表"按钮,调用所有 STEP 7 应用程序的词汇表。 本手册是"语句表帮助"的摘录。由于手册和在线帮助具有完全相同的结构,因此非常容易在手册和在 线帮助之间切换。 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 3 前言 更多支持 如果有任何技术问题,请联系西门子代表或代理商。 您可以在下列网页中查找联系人: http://www.siemens.com/automation/partner 可以在下列网址上找到单个 SIAMTIC 产品和系统的技术文档指南: http://www.siemens.com/simatictechdokuportal 可以在下列网址上获得在线目录和订货系统: http://mall.automation.siemens.com/ 培训中心 西门子提供了很多培训教程,帮助您熟悉 SIMATIC S7 自动化系统。 请联系当地的培训中心,或位于德国纽伦堡(D 90026)的培训总部,以获取详细信息。 Internet:http://sitrain.automation.siemens.com/sitrainworld/ 技术支持 您可访问"技术支持"来了解所有的工业自动化和驱动技术产品 • 通过网站请求支持 http://www.siemens.com/automation/support-request 关于技术支持的更多信息请参见 Internet 网页: http://www.siemens.com/automation/service Internet 服务和支持 除文档以外,还在 Internet 上在线提供了专业技术信息,网址如下: http://www.siemens.com/automation/service&support 可在其中查找下列内容: • 公司简讯,经常提供产品的最新信息。 • 相应文档资料,可通过"服务和支持"中的搜索功能查找。 • 论坛,世界各地的用户和专家可以在此交流经验。 • 您当地的关于工业自动化和驱动技术的销售代表。 • 关于现场服务、维修、备件和查阅等信息。 S7-300 和 S7-400 编程的语句表(STL) 4 参考手册, 05/2017, A5E41525031-AA 前言 安全提示: 西门子在工业安全功能方面提供产品和解决方案,旨在支持工厂、系统、机器和网络的安全运行。 为保护工厂、系统、机器和网络免受网络攻击威胁,必须实施并不断保持全方位的先进工业安全理念。 西门子产品和解决方案仅仅是其中的一个方面。 客户应负责保护其工厂、系统、机器和网络免受未经授权的访问。系统、机器和组件仅可连接企业网 络,且只能在必要时且相应安全措施(例如,使用防火墙和网络分段)到位的情况下连接互联网。 此外,还应考虑西门子在相应安全措施方面的指导。有关工业安全的更多信息,请访问 http://www.siemens.com/industrialsecurity。 西门子产品和解决方案经过不断发展,安全性日趋完善。西门子强烈建议您尽快应用产品更新,并始 终使用最新的产品版本。如果使用不再受支持的产品版本,并且未能应用最新的更新,则会增加客户 受到网络攻击的危险。 要时刻了解产品更新,请订阅西门子工业安全 RSS 信息源 http://www.siemens.com/industrialsecurity。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 5 前言 S7-300 和 S7-400 编程的语句表(STL) 6 参考手册, 05/2017, A5E41525031-AA 目录 前言 ................................................................................................................................................................ 3 目录 ................................................................................................................................................................ 7 1 位逻辑指令 ............................................................................................................................................. 13 1.1 位逻辑指令概述 ............................................................................................................................ 13 1.2 A 与运算 .................................................................................................................................... 15 1.3 AN 与非运算 .............................................................................................................................. 16 1.4 O 或运算 .................................................................................................................................... 17 1.5 ON 或非运算 ............................................................................................................................. 18 1.6 X 异或 ........................................................................................................................................ 19 1.7 XN 同或运算 .............................................................................................................................. 20 1.8 O 先与运算后或运算 ................................................................................................................. 21 1.9 A( 与运算嵌套开始 .................................................................................................................... 22 1.10 AN( 与非运算嵌套开始 .............................................................................................................. 23 1.11 O( 或运算嵌套开始 .................................................................................................................... 23 1.12 ON( 或非运算嵌套开始 .............................................................................................................. 24 1.13 X( 异或运算嵌套开始 ................................................................................................................. 24 1.14 XN( 同或运算嵌套开始 .............................................................................................................. 25 1.15 ) 嵌套结束 .................................................................................................................................. 25 1.16 = 赋值 ....................................................................................................................................... 27 1.17 R 复位 ....................................................................................................................................... 28 1.18 S 置位 ........................................................................................................................................ 29 1.19 NOT 对 RLO 取反 ..................................................................................................................... 30 1.20 SET 置位 RLO (=1) ................................................................................................................... 30 1.21 CLR 清零 RLO (=0) ................................................................................................................... 32 1.22 SAVE 将 RLO 保存到 BR 寄存器 .............................................................................................. 33 1.23 FN 下降沿 .................................................................................................................................. 34 1.24 FP 上升沿 .................................................................................................................................. 36 2 比较指令 ................................................................................................................................................ 39 2.1 比较指令概述 ................................................................................................................................ 39 2.2 ? I 比较整数(16 位) ...................................................................................................................... 40 2.3 ? D 比较长整数(32 位) ................................................................................................................. 41 2.4 ? R 比较浮点数(32 位) ................................................................................................................. 42 3 转换指令 ................................................................................................................................................ 43 3.1 转换指令概述 ................................................................................................................................ 43 3.2 BTI 将 BCD 码转换为整型(16 位) .............................................................................................. 44 3.3 ITB 将整型(16 位)转换为 BCD 码 .............................................................................................. 45 3.4 BTD 将 BCD 码转换为整型(32 位) ............................................................................................ 46 3.5 ITD 将整型(16 位)转换为长整型(32 位) ..................................................................................... 47 3.6 DTB 将长整型(32 位)转换为 BCD 码 ......................................................................................... 48 3.7 DTR 将长整型(32 位)转换为浮点数(32 位 IEEE 754) ............................................................... 49 3.8 INVI 对整数求反码(16 位).......................................................................................................... 50 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 7 目录 3.9 INVD 二进制反码双精度整数(32 位) ......................................................................................... 51 3.10 NEGI 对整数求补码(16 位) ........................................................................................................ 52 3.11 NEGD 二进制补码双精度整数(32 位) ........................................................................................ 53 3.12 NEGR 浮点数(32 位,IEEE 754)取反 ....................................................................................... 54 3.13 CAW 改变 ACCU 1-L (16 位)中的字节顺序 .............................................................................. 55 3.14 CAD 改变 ACCU 1 (32 位)中的字节顺序 .................................................................................. 56 3.15 RND 取整 .................................................................................................................................. 57 3.16 TRUNC 截断 ............................................................................................................................. 58 3.17 RND+ 取整为高位长整数 .......................................................................................................... 59 3.18 RND- 取整为低位长整数 ........................................................................................................... 60 4 计数器指令 ............................................................................................................................................. 61 4.1 计数器指令概述 ............................................................................................................................ 61 4.2 FR 启用计数器(释放) ................................................................................................................. 62 4.3 L 将当前计数器值载入 ACCU 1 ................................................................................................ 63 4.4 LC 将当前计数器值作为 BCD 码载入 ACCU 1.......................................................................... 64 4.5 R 重置计数器............................................................................................................................. 66 4.6 S 设置计数器预设值 .................................................................................................................. 67 4.7 CU 升值计数器 .......................................................................................................................... 68 4.8 CD 向下计数 .............................................................................................................................. 69 5 数据块指令 ............................................................................................................................................. 71 5.1 数据块指令概述 ............................................................................................................................ 71 5.2 OPN 打开数据块 ....................................................................................................................... 72 5.3 CDB 交换共享 DB 和背景 DB ................................................................................................... 73 5.4 L DBLG 在 ACCU 1 中装载共享数据块的长度 .......................................................................... 73 5.5 L DBNO 在 ACCU 1 中装载共享数据块的编号 ......................................................................... 74 5.6 L DILG 在 ACCU 1 中装载背景 DB 的长度 ............................................................................... 74 5.7 L DINO 在 ACCU 1 中装载背景 DB 的编号 ............................................................................... 75 6 逻辑控制指令 ......................................................................................................................................... 77 6.1 逻辑控制指令概述 ........................................................................................................................ 77 6.2 JU 无条件跳转 ........................................................................................................................... 79 6.3 JL 跳转到标签 ........................................................................................................................... 80 6.4 JC 当 RLO = 1 时跳转 ............................................................................................................... 82 6.5 JCN 当 RLO = 0 时跳转 ............................................................................................................ 83 6.6 JCB 当带 BR 位的 RLO = 1 时跳转 ........................................................................................... 84 6.7 JNB 当带 BR 位的 RLO = 0 时跳转 ........................................................................................... 85 6.8 JBI 当 BR = 1 时跳转 ................................................................................................................. 86 6.9 JNBI 当 BR = 0 时跳转 .............................................................................................................. 87 6.10 JO 当 OV = 1 时跳转 ................................................................................................................. 88 6.11 JOS 当 OS = 1 时跳转............................................................................................................... 89 6.12 JZ 当为零时跳转........................................................................................................................ 91 6.13 JN 当不为零时跳转 ................................................................................................................... 92 6.14 JP 当为正时跳转 ....................................................................................................................... 93 6.15 JM 当为负时跳转 ....................................................................................................................... 94 6.16 JPZ 当为正或零时跳转 .............................................................................................................. 95 6.17 JMZ 当为负或零时跳转 ............................................................................................................. 96 6.18 JUO 无序时跳转 ........................................................................................................................ 97 S7-300 和 S7-400 编程的语句表(STL) 8 参考手册, 05/2017, A5E41525031-AA 目录 6.19 LOOP 循环 ................................................................................................................................ 99 7 整型数学运算指令 ................................................................................................................................ 101 7.1 整数算术指令概述 ...................................................................................................................... 101 7.2 使用整数算术指令时得出状态字的位数值 .................................................................................. 102 7.3 +I ACCU 1 + ACCU 2,整型(16 位) ........................................................................................ 103 7.4 -I ACCU 2 - ACCU 1,整型(16 位) ......................................................................................... 104 7.5 *I ACCU 1 * ACCU 2,整型(16 位) ......................................................................................... 105 7.6 /I ACCU 2 / ACCU 1,整型(16 位) .......................................................................................... 106 7.7 + + 整型常数(16 位、32 位) .................................................................................................... 108 7.8 +D ACCU 1 + ACCU 2,长整型(32 位) .................................................................................. 110 7.9 -D ACCU 2 - ACCU 1,长整型(32 位) .................................................................................... 111 7.10 *D ACCU 1 * ACCU 2,长整型(32 位) .................................................................................... 112 7.11 /D ACCU 2 / ACCU 1,长整型(32 位) ..................................................................................... 113 7.12 MOD 除法余数,长整型(32 位) ............................................................................................... 115 8 浮点运算指令 ....................................................................................................................................... 117 8.1 浮点运算指令概述 ...................................................................................................................... 117 8.2 使用浮点运算指令时得出状态字的位数值 .................................................................................. 118 8.3 浮点型数学运算指令 基本原理 ................................................................................................... 119 8.3.1 +R 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相加 ................................................... 119 8.3.2 -R 以浮点数(32 位 IEEE 754)的形式从 ACCU 2 减去 ACCU 1 ............................................... 121 8.3.3 *R 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相乘 ................................................. 123 8.3.4 /R 以浮点数(32 位 IEEE 754)的形式用 ACCU 1 除 ACCU 2 ................................................... 125 8.3.5 ABS 浮点数(32 位 IEEE 754)的绝对值 ................................................................................... 127 8.4 浮点型数学运算指令 扩展运算 ................................................................................................... 128 8.4.1 SQR 计算浮点数(32 位)的平方 ............................................................................................... 128 8.4.2 SQRT 计算浮点数(32 位)的平方根 .......................................................................................... 129 8.4.3 EXP 计算浮点数(32 位)的指数值 ............................................................................................ 130 8.4.4 LN 计算浮点数(32 位)的自然对数 ........................................................................................... 131 8.4.5 SIN 计算浮点数(32 位)角度的正弦值 ...................................................................................... 132 8.4.6 COS 计算浮点数(32 位)角度的余弦值 ..................................................................................... 133 8.4.7 TAN 计算浮点数(32 位)角度的正切值 ..................................................................................... 134 8.4.8 ASIN 计算浮点数(32 位)的反正弦值 ........................................................................................ 135 8.4.9 ACOS 计算浮点数(32 位)的反余弦值 ...................................................................................... 136 8.4.10 ATAN 计算浮点数(32 位)的反正切值 ...................................................................................... 137 9 装载和传送指令 .................................................................................................................................... 139 9.1 装载和传送指令概述 ................................................................................................................... 139 9.2 L 装载 ...................................................................................................................................... 140 9.3 L STW 将状态字加载到 ACCU 1 中 ........................................................................................ 142 9.4 LAR1 从 ACCU 1 装载地址寄存器 1 ....................................................................................... 143 9.5 LAR1 用长整型(32 位指针)装载地址寄存器 1 ................................................................. 144 9.6 LAR1 AR2 从地址寄存器 2 装载地址寄存器 1 ........................................................................ 145 9.7 LAR2 从 ACCU 1 装载地址寄存器 2 ....................................................................................... 145 9.8 LAR2 用长整型(32 位指针)装载地址寄存器 2 ................................................................. 146 9.9 T 传送 ...................................................................................................................................... 147 9.10 T STW 将 ACCU 1 传送至状态字 ............................................................................................ 148 9.11 CAR 交换地址寄存器 1 和地址寄存器 2 .................................................................................. 149 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 9 目录 9.12 TAR1 将地址寄存器 1 传送至 ACCU 1 ................................................................................... 149 9.13 TAR1 将地址寄存器 1 传送至目标地址(32 位指针) ......................................................... 150 9.14 TAR1 AR2 将地址寄存器 1 传送至地址寄存器 2 .................................................................... 151 9.15 TAR2 将地址寄存器 2 传送至 ACCU 1 ................................................................................... 151 9.16 TAR2 将地址寄存器 2 传送至目标地址(32 位指针) ......................................................... 152 10 程序控制指令 ....................................................................................................................................... 153 10.1 程序控制指令总览 ...................................................................................................................... 153 10.2 BE 块结束 ................................................................................................................................ 154 10.3 BEC 有条件的块结束 .............................................................................................................. 155 10.4 BEU 无条件的块结束 .............................................................................................................. 156 10.5 CALL 块调用 ........................................................................................................................... 157 10.6 调用 FB....................................................................................................................................... 160 10.7 调用 FC ...................................................................................................................................... 162 10.8 调用 SFB .................................................................................................................................... 164 10.9 调用 SFC .................................................................................................................................... 166 10.10 调用多重背景 .............................................................................................................................. 167 10.11 调用来自库的块 .......................................................................................................................... 167 10.12 CC 条件调用 ............................................................................................................................ 168 10.13 UC 无条件调用 ........................................................................................................................ 169 10.14 MCR (主控继电器)...................................................................................................................... 170 10.15 关于使用 MCR 功能的重要注意事项 .......................................................................................... 172 10.16 MCR( 将 RLO 保存到 MCR 堆栈中,开始 MCR ..................................................................... 173 10.17 )MCR 结束 MCR ..................................................................................................................... 175 10.18 MCRA 激活 MCR 区域 ............................................................................................................ 176 10.19 MCRD 取消激活 MCR 区域 ..................................................................................................... 177 11 移位和循环指令 .................................................................................................................................... 179 11.1 移位指令 ..................................................................................................................................... 179 11.1.1 移位指令概述 .............................................................................................................................. 179 11.1.2 SSI 带符号整型移位(16 位) ..................................................................................................... 180 11.1.3 SSD 带符号长整型移位(32 位) ................................................................................................ 182 11.1.4 SLW 左移字(16 位) .................................................................................................................. 184 11.1.5 SRW 右移字(16 位) ................................................................................................................. 186 11.1.6 SLD 左移双字(32 位) ............................................................................................................... 188 11.1.7 SRD 右移双字(32 位) .............................................................................................................. 190 11.2 循环移位指令 .............................................................................................................................. 192 11.2.1 循环移位指令概述 ...................................................................................................................... 192 11.2.2 RLD 循环左移双字(32 位) ....................................................................................................... 193 11.2.3 RRD 循环右移双字(32 位) ....................................................................................................... 195 11.2.4 RLDA 通过 CC 1 循环左移 ACCU 1 (32 位) ............................................................................ 197 11.2.5 RRDA 通过 CC 1 循环右移 ACCU 1(32 位) ............................................................................ 198 12 定时器指令 ........................................................................................................................................... 199 12.1 定时器指令总览 .......................................................................................................................... 199 12.2 定时器在存储器中的位置与定时器组件 ...................................................................................... 200 12.3 FR 启用定时器(自由) ............................................................................................................... 203 12.4 L 将当前定时器值作为整数载入 ACCU 1 ................................................................................ 205 12.5 LC 将当前定时器值作为 BCD 载入 ACCU 1 ........................................................................... 207 S7-300 和 S7-400 编程的语句表(STL) 10 参考手册, 05/2017, A5E41525031-AA 目录 12.6 R 复位定时器........................................................................................................................... 209 12.7 SP 脉冲定时器 ........................................................................................................................ 210 12.8 SE 扩展脉冲定时器 ................................................................................................................. 212 12.9 SD 接通延迟定时器 ................................................................................................................. 214 12.10 SS 掉电保护接通延时定时器 ................................................................................................... 216 12.11 SF 断开延时定时器 ................................................................................................................. 218 13 字逻辑指令 ........................................................................................................................................... 221 13.1 字逻辑指令概述 .......................................................................................................................... 221 13.2 AW 单字与运算(16 位) ............................................................................................................ 222 13.3 OW 单字或运算(16 位) ............................................................................................................ 224 13.4 XOW 单字异或运算(16 位) ...................................................................................................... 226 13.5 AD 双字与运算(32 位) ............................................................................................................. 228 13.6 OD 双字或运算(32 位) ............................................................................................................. 230 13.7 XOD 双字异或运算(32 位) ....................................................................................................... 232 14 累加器指令 ........................................................................................................................................... 235 14.1 累加器和地址寄存器指令概述 .................................................................................................... 235 14.2 TAK 将 ACCU 1 与 ACCU 2 互换 ............................................................................................ 236 14.3 POP 具有两个 ACCU 的 CPU ................................................................................................. 237 14.4 POP 具有四个 ACCU 的 CPU ................................................................................................. 238 14.5 PUSH 具有两个 ACCU 的 CPU .............................................................................................. 239 14.6 PUSH 具有四个 ACCU 的 CPU .............................................................................................. 240 14.7 ENT 进入 ACCU 堆栈 ............................................................................................................. 241 14.8 LEAVE 离开 ACCU 堆栈 ......................................................................................................... 242 14.9 INC 增加 ACCU 1-L-L ............................................................................................................. 242 14.10 DEC 减少 ACCU 1-L-L ............................................................................................................ 244 14.11 +AR1 将 ACCU 1 加到地址寄存器 1 ....................................................................................... 245 14.12 +AR2 将 ACCU 1 加到地址寄存器 2 ....................................................................................... 246 14.13 BLD 程序显示指令(空) ............................................................................................................ 247 14.14 NOP 0 空指令.......................................................................................................................... 247 14.15 NOP 1 空指令.......................................................................................................................... 248 A 所有 STL 指令概述 ............................................................................................................................... 249 A.1 按德语助记符(SIMATIC)排序的 STL 指令 .................................................................................. 249 A.2 按英语助记符(国际)排序的 STL 指令 ......................................................................................... 255 B 编程实例 .............................................................................................................................................. 261 B.1 编程实例总览 .............................................................................................................................. 261 B.2 实例:位逻辑指令 ...................................................................................................................... 262 B.3 实例:定时器指令 ...................................................................................................................... 266 B.4 实例:计数器和比较指令 ........................................................................................................... 269 B.5 实例:整型数学运算指令 ........................................................................................................... 271 B.6 实例:字逻辑指令 ...................................................................................................................... 272 C 参数传送 .............................................................................................................................................. 275 索引 ............................................................................................................................................................ 277 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 11 目录 S7-300 和 S7-400 编程的语句表(STL) 12 参考手册, 05/2017, A5E41525031-AA 1 位逻辑指令 1.1 位逻辑指令概述 描述 位逻辑指令使用两个数字 1 和 0。这两个数字构成二进制系统的基础。这两个数字 1 和 0 称为二进制 数字或位。对于触点和线圈而言,1 表示已激活或已励磁,0 表示未激活或未励磁。 位逻辑指令解释信号状态 1 和 0,并根据布尔逻辑将其组合。这些组合产生称为"逻辑运算结果"(RLO) 的结果 1 或 0。 布尔位逻辑适用于下列基本指令: • A 与运算 • AN 与非运算 • O 或运算 • ON 或非运算 • X 异或 • XN 同或运算 • O 先与运算后或运算 可使用下列指令执行嵌套表达式: • A( 与运算嵌套开始 • AN( 与非运算嵌套开始 • O( 或运算嵌套开始 • ON( 或非运算嵌套开始 • X( 异或运算嵌套开始 • XN( 同或运算嵌套开始 • ) 嵌套结束 可使用下列指令之一终止布尔位逻辑串: • = 赋值 • R 复位 • S 置位 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 13 位逻辑指令 1.1 位逻辑指令概述 可使用下列指令之一更改逻辑运算的结果(RLO): • NOT 对 RLO 取反 • SET 置位 RLO (=1) • CLR 清零 RLO (=0) • SAVE 将 RLO 保存到 BR 寄存器 对上升沿或下降沿转换做出反应的其它指令: • FN 下降沿 • FP 上升沿 S7-300 和 S7-400 编程的语句表(STL) 14 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.2 A 与运算 1.2 A 与运算 格式 A <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 A 检查寻址位的状态是否为"1",并将测试结果与 RLO 进行与运算。 状态字位检查: AND 指令还可通过下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、OV、OS、UO、BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - x x x 1 实例 Relay Logic STL Program A I 1.0 A I 1.1 = Q 4.0 Power rail I 1.0 signal state 1 I 1.1 signal state 1 Q 4.0 signal state 1 Displays closed switch NO contact NC contact Coil S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 15 位逻辑指令 1.3 AN 与非运算 1.3 AN 与非运算 格式 N <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 AN 检查寻址位的状态是否为"0",并将测试结果与 RLO 进行与运算。 状态字位检查: AND NOT 指令还可通过下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、OV、OS、UO、 BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - x x x 1 实例 STL Program A I 1.0 AN I 1.1 = Q 4.0 Relay Logic Power rail I 1.0 Signal state 0 NO contact I 1.1 Signal state 1 NC contact Q 4.0 Signal state 0 Coil S7-300 和 S7-400 编程的语句表(STL) 16 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.4 O 或运算 1.4 O 或运算 格式 O <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 O 检查寻址位的状态是否为"1",并将测试结果与 RLO 进行或运算。 状态字位检查: OR 指令还可通过下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、OV、OS、UO、BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x x 1 实例 STL Program O I 1.0 O I 1.1 = Q 4.0 Relay Logic Power rail I 1.0 Signal state 1 No contact I 1.1 Signal state 0 No contact Q 4.0 Signal state 1 Coil Displays closed switch S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 17 位逻辑指令 1.5 ON 或非运算 1.5 ON 或非运算 格式 ON <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 ON 检查寻址位的状态是否为"0",并将测试结果与 RLO 进行或运算。 状态字位检查: OR NOT 指令还可通过下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、OV、OS、UO、 BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: 实例 STL Program Relay Logic Power rail I 1.0 Signal state 0 NO contact Q 4.0 Signal state 1 I 1.1 Signal state 1 NC O I 1.0 ON I 1.1 = Q 4.0 Coil contact S7-300 和 S7-400 编程的语句表(STL) 18 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.6 X 异或 1.6 X 异或 格式 X <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 X 检查寻址位的状态是否为"1",并将测试结果与 RLO 进行异或运算。 也可以重复使用 Exclusive OR 函数。这样,如果有奇数个被检查地址状态为"1",则逻辑运算的最终 结果为"1"。 状态字位检查: EXCLUSIVE OR 指令还可通过使用下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、OV、 OS、UO、BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x x 1 实例 Statement List Program X I 1.0 X I 1.1 = Q 4.0 Power rail Contact I 1.0 Contact I 1.1 Q 4.0 Coil Relay Logic S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 19 位逻辑指令 1.7 XN 同或运算 1.7 XN 同或运算 格式 XN <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D、T、C 描述 XN 检查寻址位的状态是否为"0",并将测试结果与 RLO 进行异或运算。 状态字位检查: EXCLUSIVE OR NOT 指令还可通过使用下列地址直接检查状态字:==0、<>0、>0、<0、>=0、<=0、 OV、OS、UO、BR。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x x 1 实例 Statement List Program X I 1.0 XN I 1.1 = Q 4.0 Power rail Contact I 1.0 Contact I 1.1 Q 4.0 Coil Relay Logic S7-300 和 S7-400 编程的语句表(STL) 20 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.8 O 先与运算后或运算 1.8 O 先与运算后或运算 格式 O 描述 O 函数根据下列规则对 AND 函数执行逻辑 OR 指令:先与运算后或运算 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - x 1 - x 实例 Statement List Program Power rail I 0.0 Q 4.0 Coil M 10.0 M 10.1 M 0.3 I 0.2 A I 0.0 A M 10.0 = Q 4.0 A I 0.2 A M 0.3 O M 10.1 O Relay Logic S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 21 位逻辑指令 1.9 A( 与运算嵌套开始 1.9 A( 与运算嵌套开始 格式 A( 描述 A( (与运算嵌套开始)将 RLO 和 OR 位及一个函数代码保存到嵌套的堆栈中。最多可有七个嵌套堆栈 条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 实例 Statement List Program A( O I 0.0 O M 10.0 ) = Q 4.0 Power rail I 0.0 Q 4.0 Coil I 0.2 A M 10.1 M 10.1 M 10.0 M10.3 A( O I 0.2 O M 10.3 ) Relay Logic S7-300 和 S7-400 编程的语句表(STL) 22 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.10 AN( 与非运算嵌套开始 1.10 AN( 与非运算嵌套开始 格式 AN( 描述 AN( (与非运算嵌套打开)将 RLO 和 OR 位及一个函数代码保存到嵌套的堆栈中。最多可有七个嵌套堆 栈条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 1.11 O( 或运算嵌套开始 格式 O( 描述 O( (或运算嵌套打开)将 RLO 和 OR 位及一个函数代码保存到嵌套的堆栈中。最多可有七个嵌套堆栈 条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 23 位逻辑指令 1.12 ON( 或非运算嵌套开始 1.12 ON( 或非运算嵌套开始 格式 ON( 描述 ON( (OR NOT 嵌套打开)将 RLO 和 OR 位及一个函数代码保存到嵌套的堆栈中。最多可有七个嵌套 堆栈条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 1.13 X( 异或运算嵌套开始 格式 X( 描述 X( (异或运算嵌套打开) 将 RLO 和 OR 位及一个函数代码保存到嵌套堆栈中。最多可有七个嵌套堆栈 条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 24 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.14 XN( 同或运算嵌套开始 1.14 XN( 同或运算嵌套开始 格式 XN( 描述 XN( (同或运算嵌套打开)将 RLO 和 OR 位及一个函数代码保存到嵌套堆栈中。最多可有七个嵌套堆栈 条目。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 1.15 ) 嵌套结束 格式 ) 描述 ) (嵌套结束)从嵌套堆栈中删除条目,恢复 OR 位,根据函数代码将包含在堆栈条目中的 RLO 与当前 RLO 互连,并将结果分配给 RLO。如果函数代码为"AND"或"AND NOT",则 OR 位也包括在内。 打开括号组的语句: • U( 与运算嵌套开始 • UN( 与非运算嵌套开始 • O( 或运算嵌套开始 • ON( 或非运算嵌套开始 • X( 异或运算嵌套开始 • XN( 同或运算嵌套开始 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 25 位逻辑指令 1.15 ) 嵌套结束 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - x 1 x 1 实例 Statement List Program A( O I 0.0 O M 10.0 ) = Q 4.0 Relay Logic Power rail I 0.0 Q 4.0 Coil I 0.2 A M 10.1 M 10.1 M 10.0 M10.3 A( O I 0.2 O M 10.3 ) S7-300 和 S7-400 编程的语句表(STL) 26 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.16 = 赋值 1.16 = 赋值 格式 <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D 描述 = <位>如果 MCR = 1,则将 RLO 写入打开的主控继电器的寻址位。如果 MCR = 0,则将值 0 而不是 RLO 写入寻址位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x - 0 实例 A I 1.0 = Q 4.0 I 1.0 Q 4.0 0 1 0 1 Signal state diagrams Power rail Q 4.0 Coil I 1.0 Statement List Program Relay Logic S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 27 位逻辑指令 1.17 R 复位 1.17 R 复位 格式 R <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D 描述 R (将位进行复位)如果 RLO = 1 且主控继电器 MCR = 1,则在寻址位中放入"0"。如果 MCR = 0,则寻址位不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x - 0 实例 Relay Logic Power rail I 1.0 NO contact Q 4.0 Coils Q 4.0 STL Program A I 1.0 S Q 4.0 A I 1.1 R Q 4.0 I 1.0 I 1.1 Q 4.0 0 1 0 1 0 1 Signal state diagrams I 1.1 NC Contact S7-300 和 S7-400 编程的语句表(STL) 28 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.18 S 置位 1.18 S 置位 格式 S <位> 地址 数据类型 存储区 <位> BOOL I、Q、M、L、D 指令描述 S (将位进行置位)如果 RLO = 1 且打开的主控继电器 MCR = 1,则在寻址位中放入"1"。如果 MCR = 0, 则寻址位不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x - 0 实例 Power rail I 1.0 NO contact Q 4.0 Coil Q 4.0 I 1.0 I 1.1 Q 4.0 0 1 0 1 0 1 Signal state diagrams Coil I 1.1 NC contact A I 1.0 S Q 4.0 A I 1.1 R Q4.0 Statement List Program Relay Logic S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 29 位逻辑指令 1.19 NOT 对 RLO 取反 1.19 NOT 对 RLO 取反 格式 NOT 描述 NOT 对 RLO 取反。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - 1 x - 1.20 SET 置位 RLO (=1) 格式 SET 描述 SET 将 RLO 置位到信号状态"1"。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 1 0 S7-300 和 S7-400 编程的语句表(STL) 30 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.20 SET 置位 RLO (=1) 实例 STL Program Signal State Result of Logic Operation (RLO) SET = M 10.0 = M 15.1 = M 16.0 CLR = M 10.1 = M 10.2 1 0 1 1 1 0 0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 31 位逻辑指令 1.21 CLR 清零 RLO (=0) 1.21 CLR 清零 RLO (=0) 格式 CLR 描述 CLR 将 RLO 设置到信号状态"0"。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 0 0 0 实例 Statement List Signal State Result of Logic Operation (RLO) SET = M 10.0 = M 15.1 = M 16.0 CLR = M 10.1 = M 10.2 1 0 1 1 1 0 0 S7-300 和 S7-400 编程的语句表(STL) 32 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.22 SAVE 将 RLO 保存到 BR 寄存器 1.22 SAVE 将 RLO 保存到 BR 寄存器 格式 SAVE 指令描述 SAVE 将 RLO 保存到 BR 位中。第一个校验位/FC 不复位。因此,BR 位的状态包括在下一程序段中 的与逻辑运算内。 建议不要在同一个块或二级块中对 BR 位使用 SAVE 并执行后续查询,因为 BR 位可能会被这两个操 作之间的大量指令改变。退出块之前使用 SAVE 指令的意义在于,此操作将 ENO 输出(= BR 位)设置 为 RLO 位的值,从而可以将该块的出错处理添加至此。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: x - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 33 位逻辑指令 1.23 FN 下降沿 1.23 FN 下降沿 格式 FN <位> 地址 数据类型 存储区 描述 <位> BOOL I、Q、M、L、D 沿标记,存储 RLO 的上一信号状态。 描述 FN<位> (RLO 下降沿)检测 RLO 从"1"跳转到"0"时的下降沿,并以 RLO = 1 指示此情况。 在每个程序扫描周期期间,都会将 RLO 位的信号状态与上一周期获取的状态进行比较,以判断状态 是否改变。上一 RLO 状态必须存储在沿标记地址(<位>)中才能进行比较。如果当前状态与上一 RLO"1" 状态 (检测到下降沿) 不同,则执行此指令之后 RLO 位将为"1"。 注意 由于块的本地数据只在块运行时有效,因此如果要监视的位位于过程映像中,则此指令没有意义。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x x 1 定义 RLO 0 Positive Edge Negative Edge Time 1 S7-300 和 S7-400 编程的语句表(STL) 34 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.23 FN 下降沿 实例 如果可编程逻辑控制器在触点 I 1.0 检测到下降沿,则会在 Q 4.0 处励磁线圈一个 OB1 扫描周期。 1 2 3 4 5 6 7 8 9 1 0 1 0 1 0 I 1.0 M 1.0 Q 4.0 A I 1.0 FN M 1.0 = Q 4.0 OB1 Scan Cycle No: Signal State Diagram Statement List S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 35 位逻辑指令 1.24 FP 上升沿 1.24 FP 上升沿 格式 FP <位> 地址 数据类型 存储区 描述 <位> BOOL I、Q、M、L、D 沿标记,存储 RLO 的上一信号状态。 描述 FP <位> (RLO 上升沿)检测 RLO 从"0"跳转到"1"时的上升沿,并以 RLO = 1 指示此情况。 在每个程序扫描周期期间,都会将 RLO 位的信号状态与上一周期获取的状态进行比较,以判断状态 是否改变。上一 RLO 状态必须存储在沿标记地址(<位>)中才能进行比较。如果当前状态与上一 RLO"0" 状态(检测到上升沿)不同,则执行此指令之后 RLO 位将为"1"。 注意 由于块的本地数据只在块运行时有效,因此如果要监视的位位于过程映像中,则此指令没有意义。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 x x 1 定义 RLO 0 Positive Edge Negative Edge Time 1 S7-300 和 S7-400 编程的语句表(STL) 36 参考手册, 05/2017, A5E41525031-AA 位逻辑指令 1.24 FP 上升沿 实例 如果可编程逻辑控制器在触点 I 1.0 检测到上升沿,则会在 Q 4.0 处励磁线圈一个 OB1 扫描周期。 1 2 3 4 5 6 7 8 9 1 0 1 0 1 0 I 1.0 M 1.0 Q 4.0 A I 1.0 FP M 1.0 = Q 4.0 OB1 Scan Cycle No: Signal State Diagram Statement List S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 37 2 比较指令 2.1 比较指令概述 描述 根据您选择的比较类型来比较 ACCU1 和 ACCU2: == ACCU1 等于 ACCU2 <> ACCU1 不等于 ACCU2 > ACCU1 大于 ACCU2 < ACCU1 小于 ACCU2 >= ACCU1 大于等于 ACCU2 <= ACCU1 小于等于 ACCU2 如果比较结果为 true,则此函数的 RLO 为"1"。状态字位 CC 1 和 CC 0 表示关系"小于"、"等于"或" 大于"。 有执行以下功能的比较指令: • ? I 比较整数(16 位) • ? D 比较长整数(32 位) • ? R 比较浮点数(32 位) S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 39 比较指令 2.2 ? I 比较整数(16 位) 2.2 ? I 比较整数(16 位) 格式 ==I、<>I、>I、=I、<=I 指令描述 比较整数(16 位)指令将 ACCU 2-L 的内容与 ACCU 1-L 的内容进行比较。ACCU 2-L 和 ACCU 1-L 的 内容被解释为 16 位整数。其比较结果由 RLO 和相关状态字位的设置来表示。RLO = 1 表示比较结果 为 true;RLO = 0 表示比较结果为 false。状态字位 CC 1 和 CC 0 表示关系"小于"、"等于"或"大于"。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x 0 - 0 x x 1 RLO 的值 执行的比较指令 RLO 结果(如果 ACCU 2 > ACCU 1 RLO 结果(如果 ACCU 2 = ACCU 1 RLO 结果(如果 ACCU 2 < ACCU 1 ==I 0 1 0 <> I 1 0 1 > I 1 0 0 = I 1 1 0 <= I 0 1 1 实例 STL 解释 L MW10 //装载 MW10 的内容(16 位整数)。 L IW24 //装载 IW24 的内容(16 位整数)。 > I //比较 ACCU 2-L (MW10)是否大于(>) ACCU 1-L (IW24)。 = M 2.0 //RLO = 1 (如果 MW10 > IW24)。 S7-300 和 S7-400 编程的语句表(STL) 40 参考手册, 05/2017, A5E41525031-AA 比较指令 2.3 ? D 比较长整数(32 位) 2.3 ? D 比较长整数(32 位) 格式 ==D、<>D、>D、=D、<=D 指令描述 比较长整数(32 位)指令将 ACCU 2 的内容与 ACCU 1 的内容进行比较。ACCU 2 和 ACCU 1 的内容 被解释为 32位整数。其比较结果由RLO 和相关状态字位的设置来表示。RLO = 1 表示比较结果为true; RLO = 0 表示比较结果为 false。状态字位 CC 1 和 CC 0 表示关系"小于"、"等于"或"大于"。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x 0 - 0 x x 1 RLO 的值 执行的比较指令 RLO 结果(如果 ACCU 2 > ACCU 1 RLO 结果(如果 ACCU 2 = ACCU 1 RLO 结果(如果 ACCU 2 < ACCU 1 == D 0 1 0 <> D 1 0 1 > D 1 0 0 = D 1 1 0 <= D 0 1 1 实例 STL 解释 L MD10 //装载 MD10 的内容(长整型,32 位)。 L ID24 //装载 ID24 的内容(长整型,32 位)。 > D //比较 ACCU 2 (MD10)是否大于(>) ACCU 1 (ID24)。 = M 2.0 //RLO = 1 (如果 MD10 > ID24) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 41 比较指令 2.4 ? R 比较浮点数(32 位) 2.4 ? R 比较浮点数(32 位) 格式 ==R、<>R、>R、=R、<=R 指令描述 比较浮点数(32 位,IEEE 754)指令将 ACCU 2 的内容与 ACCU 1 的内容进行比较。ACCU 1 和 ACCU 2 的内容被解释为浮点数(32 位,IEEE 754)。其比较结果由 RLO 和相关状态字位的设置来表示。RLO = 1 表示比较结果为 true;RLO = 0 表示比较结果为 false。状态字位 CC 1 和 CC 0 表示关系"小于"、 "等于"或"大于"。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x 0 x x 1 RLO 的值 执行的比较指令 RLO 结果(如果 ACCU 2 > ACCU 1 RLO 结果(如果 ACCU 2 = ACCU 1 RLO 结果(如果 ACCU 2 < ACCU 1 == R 0 1 0 <> R 1 0 1 > R 1 0 0 < R 0 0 1 >= R 1 1 0 <= R 0 1 1 实例 STL 解释 L MD10 //装载 MD10 的内容(浮点数)。 L 1.359E+02 //装载常数 1.359E+02。 > R //比较 ACCU 2 (MD10)是否大于(>) ACCU 1 (1.359-E+02)。 = M 2.0 //RLO = 1 (如果 MD10 > 1.359E+02)。 S7-300 和 S7-400 编程的语句表(STL) 42 参考手册, 05/2017, A5E41525031-AA 3 转换指令 3.1 转换指令概述 描述 可使用下列指令将二进制编码的十进制数和整数转换为其它类型的数字: • BTI 将 BCD 码转换为整型(16 位) • ITB 将整型(16 位)转换为 BCD 码 • BTD 将 BCD 码转换为整型(32 位) • ITD 将整型(16 位)转换为长整型(32 位) • DTB 将长整型(32 位)转换为 BCD 码 • DTR 将长整型(32 位)转换为浮点数(32 位 IEEE 754) 可使用下列指令计算整数的补(反)码,或将浮点数的符号取反: • INVI 对整数求反码(16 位) • INVD 二进制反码双精度整数(32 位) • NEGI 对整数求补码(16 位) • NEGD 二进制补码双精度整数(32 位) • NEGR 浮点数(32 位,IEEE 754)取反 可使用下列"改变累加器 1 中的位顺序"指令将累加器 1 的低字字节或整个累加器中的字节的顺序反转。 • CAW 改变 ACCU 1-L (16 位)中的字节顺序 • CAD 改变 ACCU 1 (32 位)中的字节顺序 可使用下列任何指令将累加器 1 中的 32 位 IEEE 浮点数转换为 32 位整型(长整型)。各个指令的取整 方法有所不同: • RND 取整 • TRUNC 截断 • RND+ 取整为高位长整数 • RND- 取整为低位长整数 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 43 转换指令 3.2 BTI 将 BCD 码转换为整型(16 位) 3.2 BTI 将 BCD 码转换为整型(16 位) 格式 BTI 描述 BTI (3 位 BCD 数从十进制到二进制的转换)将 ACCU 1-L 的内容解释为三位二进制编码的十进制数 (BCD 码),并将其转换为 16 位整型。结果存储在累加器 1 的低字中。累加器 1 的高字和累加器 2 保 持不变。 ACCU 1-L 中的 BCD 数字:BCD 数字的允许值范围从"-999"至"+999"。位 0 到位 11 解释为数值,位 15 解释为 BCD 数字的符号(0 = 正,1= 负)。位 12 至位 14 在转换中不使用。如果 BCD 数字的十进 制(四位)数字处于 10 至 15 的无效范围,则在转换期间会出现 BCDF 错误。通常,CPU 会转入 STOP 模式。但是,通过对 OB121 编程可设计另一种出错响应,用以处理该同步编程错误。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 //将 BCD 数字载入 ACCU 1-L。 BTI //从 BCD 码转换为整型;将结果存储在 ACCU 1-L 中。 T MW20 //将结果(整数)传送到 MW20。 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 0 BTI BCD to Integer "+915" BCD 15... ...8 7... ...0 " + " " 9 " " 1 " " 5 " MW10 "+915" Integer MW20 S7-300 和 S7-400 编程的语句表(STL) 44 参考手册, 05/2017, A5E41525031-AA 转换指令 3.3 ITB 将整型(16 位)转换为 BCD 码 3.3 ITB 将整型(16 位)转换为 BCD 码 格式 ITB 描述 ITB (16 位整数从二进制到十进制的转换)将 ACCU 1-L 的内容解释为 16 位整数,并将其转换为三位 二进制编码的十进制数(BCD 码)。结果存储在累加器 1 的低字中。位 0 到位 11 包含 BCD 数字的值。 位 12 至位 15 用来表示 BCD 数字的符号状态(0000 = 正,1111= 负)。累加器 1 的高字和累加器 2 保 持不变。 BCD 数字的范围为"-999"至"+999"。如果超出允许范围,则状态位 OV 和 OS 被置位为 1。 执行该指令时不涉及 RLO,也不会影响 RLO。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MW10 //将整数载入 ACCU 1-L。 ITB //从整型转换为 BCD (16 位);将结果存储在 ACCU 1-L 中。 T MW20 //将结果(BCD 数字)传送到 MW20。 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 1 1 1 1 ITB Integer to BCD "-413" Integer 15... ...8 7... ...0 MW10 "-413" BCD MW20 " - " " 4 " " 1 " " 3 " S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 45 转换指令 3.4 BTD 将 BCD 码转换为整型(32 位) 3.4 BTD 将 BCD 码转换为整型(32 位) 格式 BTD 描述 BTD (7 位 BCD 数字从十进制到二进制的转换)将 ACCU 1 的内容解释为 7 位二进制编码的十进制数 (BCD),并将其转换为 32 位长整型。结果存储在累加器 1 中。累加器 2 保持不变。 ACCU 1 中的 BCD 数字:BCD 数字的允许值范围从"-9,999,999"至"+9,999,999"。位 0 到位 27 解释 为数值,位 31 解释为 BCD 数字的符号(0 = 正,1= 负)。位 28 至位 30 在转换中不使用。 如果任何十进制数(BCD 编码的四位组)处于 10 至 15 的无效范围,则在转换期间会出现 BCDF 错误。 通常,CPU 会转入 STOP 模式。但是,通过对 OB121 编程可设计另一种出错响应,用以处理该同步 编程错误。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MD10 //将 BCD 数字载入 ACCU 1。 BTD //从 BCD 码转换为整型;结果存储在 ACCU 1 中。 T MD20 //将结果(长整型)传送到 MD20。 BTD BCD to Double Integer "+157821" 31... ...16 15... ...0 " + " " 0 " " 1 " " 5 " MD10 "+157821" MD20 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 " 7 " " 8 " " 2 " " 1 " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 1 0 1 1 0 S7-300 和 S7-400 编程的语句表(STL) 46 参考手册, 05/2017, A5E41525031-AA 转换指令 3.5 ITD 将整型(16 位)转换为长整型(32 位) 3.5 ITD 将整型(16 位)转换为长整型(32 位) 格式 ITD 描述 ITD (16 位整数转换为 32 位整数)将 ACCU 1-L 的内容解释为 16 位整数并将其转换为 32 位长整数。 结果存储在累加器 1 中。累加器 2 保持不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW12 //将整数载入 ACCU 1。 ITD //从整型(16 位)转换为长整型(32 位); //将结果存储在 ACCU 1 中。 T MD20 //将结果(长整型)传送到 MD20。 实例:MW12 ="-10" (整型,16 位) 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 ITD 之前 XXXX XXXX XXXX XXXX 1111 1111 1111 0110 执行 ITD 之后 1111 1111 1111 1111 1111 1111 1111 0110 (X = 0 或 1,这些位不用于转换) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 47 转换指令 3.6 DTB 将长整型(32 位)转换为 BCD 码 3.6 DTB 将长整型(32 位)转换为 BCD 码 格式 DTB 描述 DTB (32 位整型数的二进制到十进制转换)将 ACCU 1 中的内容解析为 32 位长整型数,并将其转换为 七位二进制编码的十进制数(BCD)。结果保存在累加器 1 中。位 0 到位 27 包含 BCD 数字的值。位 28 至位 31 用来表示 BCD 数字的符号状态(0000 = 正,1111 = 负)。累加器 2 保持不变。 BCD 数的范围为"-9,999,999"至"+9,999,999"。如果超出允许范围,则状态位 OV 和 OS 被置位为 1。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MD10 //将 32 位整数载入 ACCU 1。 DTB //从整型(32 位)转换为 BCD 码,结果存储在 ACCU 1 中。 T MD20 //将结果(BCD 数字)传送到 MD20。 DTB Integer to BCD "-701" Integer 31... ...16 15... ...0 MD10 "-701" BCD MD20 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 " - " " 0 " " 0 " " 0 " " 0 " " 7 " " 0 " " 1 " 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 S7-300 和 S7-400 编程的语句表(STL) 48 参考手册, 05/2017, A5E41525031-AA 转换指令 3.7 DTR 将长整型(32 位)转换为浮点数(32 位 IEEE 754) 3.7 DTR 将长整型(32 位)转换为浮点数(32 位 IEEE 754) 格式 DTR 描述 DTR (32 位整数转换为 32 位 IEEE 浮点数)将 ACCU 1 的内容解释为 32 位长整型,并将其转换为 32 位 IEEE 浮点数。如必要,该指令会对结果取整。(32 位整数比 32 位浮点数精度更高)。结果存储在累 加器 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MD10 //将 32 位整数载入 ACCU 1。 DTR //从长整型转换为浮点型(32 位 IEEE FP);将结果存储在 //ACCU 1 中。 T MD20 //将结果(BCD 数字)传送到 MD20。 DTR Integer (32 bit) to IEEE floating-point (32 Bit) "+500" Integer 31 ...0 MD10 "+500" IEEE-FP MD20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 1 bit Sign of the mantissa 8-bit exponent 0 1 0 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30... 22... 23-bit mantissa S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 49 转换指令 3.8 INVI 对整数求反码(16 位) 3.8 INVI 对整数求反码(16 位) 格式 INVI 描述 INVI (对整数求反码)在 ACCU 1-L 中形成 16 位数值的二进制反码。二进制反码是通过将各个位的值 取反形成的,即,用"0"替换"1",用"1"替换"0"。结果存储在累加器 1 的低字中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IW8 //将值载入 ACCU 1-L。 INVI //形成 16 位二进制反码。 T MW10 //将结果传送到 MW10。 目录 ACCU1-L 位 15 . . . . . . . . . . 0 执行 IVNI 之前 0110 0011 1010 1110 执行 INVI 之后 1001 1100 0101 0001 S7-300 和 S7-400 编程的语句表(STL) 50 参考手册, 05/2017, A5E41525031-AA 转换指令 3.9 INVD 二进制反码双精度整数(32 位) 3.9 INVD 二进制反码双精度整数(32 位) 格式 INVD 描述 INVD (二进制反码双精度整数)在 ACCU 1 中形成 32 位数值的二进制反码。二进制反码是通过将各个 位的值取反形成的,即,用"0"替换"1",用"1"替换"0"。结果存储在累加器 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L ID8 //将值载入 ACCU 1 中。 INVD //形成二进制反码(32 位)。 T MD10 //将结果传送到 MD10。 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 IVND 之前 0110 1111 1000 1100 0110 0011 1010 1110 执行 INVD 之后 1001 0000 0111 0011 1001 1100 0101 0001 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 51 转换指令 3.10 NEGI 对整数求补码(16 位) 3.10 NEGI 对整数求补码(16 位) 格式 NEGI 描述 NEGI (对整数求补码)在 ACCU 1-L 中形成 16 位数值的二进制补码。二进制补码是通过将各个位的值 取反形成的,即,用"0"替换"1",用"1"替换"0";然后加"1"。结果存储在累加器 1 的低字中。补码指令 等效于乘以"-1"。状态位 CC 1、CC 0、OS 和 OV 则根据函数运算的结果来设置。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 状态字生成 CC 1 CC 0 OV OS 结果 = 0 0 0 0 - -32768 <= 结果 <= -1 0 1 0 - 32767 >= 结果 >= 1 1 0 0 - 结果 = 2768 0 1 1 1 实例 STL 解释 L IW8 //将值载入 ACCU 1-L。 NEGI //形成 16 位二进制补码。 T MW10 //将结果传送到 MW10。 目录 ACCU1-L 位 15 . . . . . . . . . . 0 执行 NEGI 之前 0101 1101 0011 1000 执行 NEGI 之后 1010 0010 1100 1000 S7-300 和 S7-400 编程的语句表(STL) 52 参考手册, 05/2017, A5E41525031-AA 转换指令 3.11 NEGD 二进制补码双精度整数(32 位) 3.11 NEGD 二进制补码双精度整数(32 位) 格式 NEGD 描述 NEGD (二进制补码双精度整数)在 ACCU 1 中形成 32 位数值的二进制补码。二进制补码是通过将各 个位的值取反形成的,即,用"0"替换"1",用"1"替换"0";然后加"1"。结果存储在累加器 1 中。补码指 令等效于乘以"-1"。执行该指令时不涉及 RLO,也不会影响 RLO。状态位 CC 1、CC 0、OS 和 OV 则根据函数运算的结果来设置。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 状态字生成 CC 1 CC 0 OV OS 结果 = 0 0 0 0 - -2.147.483.647 <= 结果 <= -1 0 1 0 - 2.147.483.647 >= 结果 >= 1 1 0 0 - 结果 = -2 147 483 648 0 1 1 1 实例 STL 解释 L ID8 //将值载入 ACCU 1 中。 NEGD //生成二进制补码(32 位)。 T MD10 //将结果传送到 MD10。 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 NEGD 之前 0101 1111 0110 0100 0101 1101 0011 1000 执行 NEGD 之后 1010 0000 1001 1011 1010 0010 1100 1000 (X = 0 或 1,这些位不用于转换) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 53 转换指令 3.12 NEGR 浮点数(32 位,IEEE 754)取反 3.12 NEGR 浮点数(32 位,IEEE 754)取反 格式 NEGR 指令描述 NEGR (32 位 IEEE 浮点数取反)对 ACCU 1 中的浮点数(32 位,IEEE 754)取反。该指令将反转 ACCU 1 中位 31 (尾数的符号)的状态。结果存储在累加器 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L ID8 //将值载入 ACCU 1(实例:ID 8 = 1.5E+02)。 NEGR //浮点数(32 位,IEEE 754)取反;将结果存储在 //ACCU 1 中。 T MD10 //将结果传送到 MD10(实例:结果 = -1.5E+02)。 S7-300 和 S7-400 编程的语句表(STL) 54 参考手册, 05/2017, A5E41525031-AA 转换指令 3.13 CAW 改变 ACCU 1-L (16 位)中的字节顺序 3.13 CAW 改变 ACCU 1-L (16 位)中的字节顺序 格式 CAW 描述 CAW 反转 ACCU 1-L 中的字节顺序。结果存储在累加器 1 的低字中。累加器 1 的高字和累加器 2 保 持不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 //将 MW10 的值装载到 ACCU 1 中。 CAW //反转 ACCU 1-L 中的字节顺序。 T MW20 //将结果传送到 MW20。 目录 ACCU1-H-H ACCU1-H-L ACCU1-L-H ACCU1-L-L 执行 CAW 之前 值 A 值 B 值 C 值 D 执行 CAW 之后 值 A 值 B 值 D 值 C S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 55 转换指令 3.14 CAD 改变 ACCU 1 (32 位)中的字节顺序 3.14 CAD 改变 ACCU 1 (32 位)中的字节顺序 格式 CAD 描述 CAD 反转 ACCU 1 中的字节顺序。结果存储在累加器 1 中。累加器 2 保持不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MD10 //将 MD10 的值装载到 ACCU 1 中。 CAD //反转 ACCU 1 中的字节顺序。 T MD20 //将结果传送到 MD20。 目录 ACCU1-H-H ACCU1-H-L ACCU1-L-H ACCU1-L-L 执行 CAD 之前 值 A 值 B 值 C 值 D 执行 CAD 之后 值 D 值 C 值 B 值 A S7-300 和 S7-400 编程的语句表(STL) 56 参考手册, 05/2017, A5E41525031-AA 转换指令 3.15 RND 取整 3.15 RND 取整 格式 RND 描述 RND (32 位 IEEE 浮点数转换为 32 位整型)将 ACCU 1 的内容解释为 32 位 IEEE 浮点数(32 位,IEEE 754)。该指令将 32 位 IEEE 浮点数转换位 32 位整型(长整型),并将结果取整为最接近的整数。如果 所转换数字的小数部分介于偶数和奇数结果之间,则该指令选择偶数结果。如果超出允许范围,则状 态位 OV 和 OS 被置位为 1。结果存储在累加器 1 中。 出现错误(使用了不能表示为 32 位整数的 NaN 或浮点数)时不执行转换并显示溢出。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MD10 //将浮点数载入 ACCU 1-L。 RND //将浮点数(32 位,IEEE 754)转换为整型 //(32 位),并对结果取整。 T MD20 //将结果(长整型)传送到 MD20。 转换前的值 转换后的值 MD10 = "100.5" => RND => MD20 = "+100" MD10 = "-100.5" => RND => MD20 = "-100" S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 57 转换指令 3.16 TRUNC 截断 3.16 TRUNC 截断 格式 TRUNC 描述 TRUNC (32 位 IEEE 浮点数转换为 32 位整型)将 ACCU 1 的内容解释为 32 位 IEEE 浮点数。该指令 将 32 位 IEEE 浮点数转换为 32 位整型(长整型)。运算结果为所转换浮点数的整数部分(IEEE 取整模 式"取整到零")。如果超出允许范围,则状态位 OV 和 OS 被置位为 1。结果存储在累加器 1 中。 出现错误(使用了不能表示为 32 位整数的 NaN 或浮点数)时不执行转换并显示溢出。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MD10 //将浮点数载入 ACCU 1-L。 TRUN C //将浮点数(32 位,IEEE 754)转换为整型(32 位), //并对结果取整。将结果存储在 ACCU 1 中。 T MD20 //将结果(长整型)传送到 MD20。 转换前的值 转换后的值 MD10 = "100.5" => TRUNC => MD20 = "+100" MD10 = "-100.5" => TRUNC => MD20 = "-100" S7-300 和 S7-400 编程的语句表(STL) 58 参考手册, 05/2017, A5E41525031-AA 转换指令 3.17 RND+ 取整为高位长整数 3.17 RND+ 取整为高位长整数 格式 RND+ 描述 RND+ (32 位 IEEE 浮点数转换为 32 位整型)将 ACCU 1 的内容解释为 32 位 IEEE 浮点数。该指令将 32 位 IEEE 浮点数转换为 32 位整型(长整型),并将结果取整为大于或等于所转换浮点数的最小整数 (IEEE 取整模式"取整为正无穷")。如果数字超出允许范围,则状态位 OV 和 OS 被置位到 1。结果存 储在累加器 1 中。 出现错误(使用了不能表示为 32 位整数的 NaN 或浮点数)时不执行转换并显示溢出。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MD10 //将浮点数(32 位,IEEE 754)载入 ACCU 1-L 中。 RND+ //将浮点数(32 位,IEEE 754)转换为整型(32 位), //并对结果取整。将输出存储在 ACCU 1 中。 T MD20 //将结果(长整型)传送到 MD20。 转换前的值 转换后的值 MD10 = "100.5" => RND+ => MD20 = "+101" MD10 = "-100.5" => RND+ => MD20 = "-100" S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 59 转换指令 3.18 RND- 取整为低位长整数 3.18 RND- 取整为低位长整数 格式 RND– 描述 RND- (32 位 IEEE 浮点数转换为 32 位整型)将 ACCU 1 的内容解释为 32 位 IEEE 浮点数。该指令将 32 位 IEEE 浮点数转换为 32 位整型(长整型),并将结果取整为小于或等于所转换浮点数的最大整数 (IEEE 取整模式"取整为负无穷")。如果超出允许范围,则状态位 OV 和 OS 被置位为 1。结果存储在 累加器 1 中。 出现错误(使用了不能表示为 32 位整数的 NaN 或浮点数)时不执行转换并显示溢出。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - x x - - - - 实例 STL 解释 L MD10 //将浮点数载入 ACCU 1-L。 RND– //将浮点数(32 位,IEEE 754)转换为整型(32 位), //并对结果取整。结果存储在 ACCU 1 中。 T MD20 //将结果(长整型)传送到 MD20。 转换前的值 转换后的值 MD10 = "100.5" => RND- => MD20 = "+100" MD10 = "-100.5" => RND- => MD20 = "-100" S7-300 和 S7-400 编程的语句表(STL) 60 参考手册, 05/2017, A5E41525031-AA 4 计数器指令 4.1 计数器指令概述 描述 计数器是 STEP 7 编程语言中用于计数的函数元素。在 CPU 存储器中,有为计数器保留的区域。此 存储区为每个计数器保留一个 16 位字。语句表指令集支持 256 个计数器。要获得有关 CPU 中有多少 可用计数器的信息,请参考 CPU 的技术数据。 计数器指令是仅有的可以访问存储区的函数。 可使用下列计数器指令在此范围内改变计数值: • FR 启用计数器(释放) • L 将当前计数器值载入 ACCU 1 • LC 将当前计数器值作为 BCD 码载入 ACCU 1 • R 重置计数器 • S 设置计数器预设值 • CU 升值计数器 • CD 向下计数 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 61 计数器指令 4.2 FR 启用计数器(释放) 4.2 FR 启用计数器(释放) 格式 FR <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 计数器,其范围取决于 CPU。 描述 当 RLO 从"0"跳转到"1"时,FR <计数器>会将边缘检测标记清零,该标记用于设置和选择寻址计数器 的升值或降值计数。设置计数器或进行正常计数时不需启用计数器。也就是说,即使设置计数器的预 设值、升值计数器或降值计数器的常数 RLO 为 1,在启用之后也不会再次执行这些指令。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.0 //检查输入 I 2.0 的信号状态。 FR C3 //当 RLO 从 0 跳转到 1 时,启用计数器 C3。 S7-300 和 S7-400 编程的语句表(STL) 62 参考手册, 05/2017, A5E41525031-AA 计数器指令 4.3 L 将当前计数器值载入 ACCU 1 4.3 L 将当前计数器值载入 ACCU 1 格式 L <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 计数器,其范围取决于 CPU。 描述 ACCU 1 的内容保存到 ACCU 2 中后,L <计数器> 将寻址计数器的当前计数值作为整型值载入 ACCU 1-L。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L C3 //以二进制格式将计数器 C3 的计数值载入 ACCU 1-L。 Contents of ACCU1-L after Load instruction L C3 Count value (0 to 999) in binary coding L C3 Count value (0 to 999) in binary coding Counter word for counter C3 in memory All "0" 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 63 计数器指令 4.4 LC 将当前计数器值作为 BCD 码载入 ACCU 1 4.4 LC 将当前计数器值作为 BCD 码载入 ACCU 1 格式 LC <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 计数器,其范围取决于 CPU。 描述 ACCU 1 的旧内容保存到 ACCU 2 中后,LC <计数器>将寻址计数器的计数值作为 BCD 码载入 ACCU 1。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 64 参考手册, 05/2017, A5E41525031-AA 计数器指令 4.4 LC 将当前计数器值作为 BCD 码载入 ACCU 1 实例 STL 解释 LC C3 //以二进制编码的十进制格式将计数器 C3 的计数值载入 ACCU 1-L。 Contents of ACCU1-L after Load instruction LC C3 Counter value (0 to 999) in binary coding LC Z3 Counter value in BCD Counter word for counter C3 in memory 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 0 0 0 0 101 Tens 100 Ones 102 Hundreds S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 65 计数器指令 4.5 R 重置计数器 4.5 R 重置计数器 格式 R <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 要预置的计数器,其范围 取决于 CPU。 描述 如果 RLO=1,R <计数器> 会将"0"载入寻址计数器中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.3 //检查输入 I 2.3 的信号状态。 R C3 //如果 RLO 从 0 跳转到 1,则将计数器 C3 复位到 0。 S7-300 和 S7-400 编程的语句表(STL) 66 参考手册, 05/2017, A5E41525031-AA 计数器指令 4.6 S 设置计数器预设值 4.6 S 设置计数器预设值 格式 S <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 要预置的计数器,其范围 取决于 CPU。 描述 当 RLO 从"0"跳转到"1"时,S <计数器> 将 ACCU 1-L 的计数值载入寻址计数器。ACCU 1 中的计数 值必须是介于"0"和"999"之间的 BCD 码形式的数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.3 //检查输入 I 2.3 的信号状态。 L C#3 //将计数值 3 载入 ACCU 1-L。 S C1 //如果 RLO 从 0 跳转到 1,则设置计数器 C1,以进行计数。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 67 计数器指令 4.7 CU 升值计数器 4.7 CU 升值计数器 格式 CU <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 计数器,其范围取决于 CPU。 描述 当 RLO 从"0"跳转到"1",并且计数小于"999"时,CU <计数器>将寻址计数器的计数值增 1。当计数值 达到上限"999"时,升值过程停止。RLO 的附加跳转无效,而且溢出的 OV 位不被置位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.1 //如果在输入 I 2.1 有上升沿改变。 CU C3 //当 RL0 从 0 跳转到 1 时,计数器 C3 的计数值增 1。 S7-300 和 S7-400 编程的语句表(STL) 68 参考手册, 05/2017, A5E41525031-AA 计数器指令 4.8 CD 向下计数 4.8 CD 向下计数 格式 CD <计数器> 地址 数据类型 存储区 描述 <计数器> COUNTER C 计数器,其范围取决于 CPU。 描述 当 RLO 从"0"跳转到"1",并且计数大于 0 时,CD <计数器>将寻址计数器的计数值减 1。当计数达到 下限"0"时,降值过程停止。由于计数器不用负值计数,所以 RLO 的附加跳转无效。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 L C#14 //计数器预设值。 A I 0.1 //检测到 I 0.1 的上升沿后,预置计数器的值。 S C1 //如果启用预置,则载入计数器 1 预设值。 A I 0.0 //每当 I 0.0 有上升沿时,降值计数一次。 CD C1 //当 RL0 根据输入 I 0.0 的状态从 0 跳转至 1 时,将计数器 C1 减 1。 AN C1 //使用 C1 位进行零检测。 = Q 0.0 //如果计数器 1 的值为零,则 Q 0.0 = 1。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 69 计数器指令 4.8 CD 向下计数 S7-300 和 S7-400 编程的语句表(STL) 70 参考手册, 05/2017, A5E41525031-AA 5 数据块指令 5.1 数据块指令概述 描述 可以使用"打开数据块"(OPN)指令将数据块作为共享数据块或背景数据块打开。程序本身可同时容纳 一个打开的共享数据块和一个打开的背景数据块。 提供下列"数据块"指令: • OPN 打开数据块 • CDB 交换共享 DB 和背景 DB • L DBLG 在 ACCU 1 中装载共享数据块的长度 • L DBNO 在 ACCU 1 中装载共享数据块的编号 • L DILG 在 ACCU 1 中装载背景 DB 的长度 • L DINO 在 ACCU 1 中装载背景 DB 的编号 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 71 数据块指令 5.2 OPN 打开数据块 5.2 OPN 打开数据块 格式 OPN <数据块> 地址 数据块类型 源地址 <数据块> DB、DI 1 至 65535 指令描述 OPN <数据块> 将数据块作为共享数据块或背景数据块打开。可以同时打开一个共享数据块和一个背 景数据块。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 OPN DB10 //将数据块 DB10 作为共享数据块打开。 L DBW35 //将已打开数据块的数据字 35 装载到 ACCU 1-L 中。 T MW22 //将 ACCU 1-L 的内容传送到 MW22 中。 OPN DI20 //将数据块 DB20 作为背景数据块打开。 L DIB12 //将已打开背景数据块的数据字节 12 装载到 ACCU 1-L 中。 T DBB37 //将 ACCU 1-L 的内容传送到已打开的共享数据块的数据字节 37。 S7-300 和 S7-400 编程的语句表(STL) 72 参考手册, 05/2017, A5E41525031-AA 数据块指令 5.3 CDB 交换共享 DB 和背景 DB 5.3 CDB 交换共享 DB 和背景 DB 格式 CDB 指令描述 CDB 用于交换共享数据块和背景数据块。该指令的作用是交换数据块寄存器。共享数据块变为背景数 据块,或相反。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 5.4 L DBLG 在 ACCU 1 中装载共享数据块的长度 格式 L DBLG 指令描述 L DBLG (装载共享数据块的长度)会在 ACCU 1 的内容保存到 ACCU 2 中后,将共享数据块的长度装 载到 ACCU 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 OPN DB10 //将数据块 DB10 作为共享数据块打开。 L DBLG //装载共享数据块的长度(DB10 的长度)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 73 数据块指令 5.5 L DBNO 在 ACCU 1 中装载共享数据块的编号 L MD10 //如果数据块足够长,则该长度作为用于比较的值。 地址 描述 <跳转标签> 跳转目标的符号名。 描述 JU <跳转标签>中断线性程序扫描,并跳转到一个跳转目标,与状态字的内容无关。线性程序扫描在 跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳 转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程 序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单 字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 A I 1.0 A I 1.2 JC DELE //当 RLO=1 时,跳转到跳转标签 DELE。 L MB10 INC 1 T MB10 JU FORW //无条件跳转到跳转标签 FORW。 DELE: L 0 T MB10 FORW: A I 2.1 //跳转到跳转标签 FORW 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 79 逻辑控制指令 6.3 JL 跳转到标签 6.3 JL 跳转到标签 格式 JL <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 JL <跳转标签> (通过跳转到列表进行跳转)允许编程多次跳转。跳转目标列表(最多 255 个条目)从 JL 指令的下一行开始,到 JL 地址中引用的跳转标签的前一行结束。每个跳转目标由一个 JU 指令组成。 跳转目标的数目(0 - 255)则从 ACCU 1-L-L 中获取。 只要 ACCU 的内容小于 JL 指令和跳转标签之间跳转目标的数目,JL 指令就跳转到 JU 指令中的一条。 当 ACCU 1-L-L=0 时,跳转到第一条 JU 指令。当 ACCU 1-L-L=1 时,跳转到第二个 JU 指令,以此 类推。如果跳转目标的数目太大,则在跳转到目标列表中的最后一条 JU 指令后,JL 指令跳转到第一 条指令处。 跳转目标列表必须包含 JU 指令,该指令位于 JL 指令地址中引用的跳转标签之前。跳转列表内的所有 其它指令都是非法的。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 80 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.3 JL 跳转到标签 实例 STL 解释 L MB0 //将跳转目标数目装载到 ACCU 1-L-L 中。 JL LSTX //当 ACCU 1-L-L > 3 时的跳转目标。 JU SEG0 //当 ACCU 1-L-L = 0 时的跳转目标。 JU SEG1 //当 ACCU 1-L-L = 1 时的跳转目标。 JU COMM //当 ACCU 1-L-L = 2 时的跳转目标 JU SEG3 //当 ACCU 1-L-L = 3 时的跳转目标 LSTX: JU COMM SEG0: * //允许的指令 * JU COMM SEG1: * //允许的指令 * JU COMM SEG3: * //允许的指令。 * JU COMM COMM: * * S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 81 逻辑控制指令 6.4 JC 当 RLO = 1 时跳转 6.4 JC 当 RLO = 1 时跳转 格式 JC <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当逻辑运算的结果为 1 时,JC <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序 扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内 执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距 离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组 合(单字、双字或三字语句)。 当逻辑运算的结果为 0 时,不执行跳转。将 RLO 设置为 1,继续对下一个语句执行程序扫描。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 1 0 实例 STL 解释 A I 1.0 A I 1.2 JC JOVR //当 RLO=1 时,跳转到跳转标签 JOVR。 L IW8 //当不执行跳转时,在此继续执行程序扫描。 T MW22 JOVR: A I 2.1 //跳转到跳转标签 JOVR 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 82 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.5 JCN 当 RLO = 0 时跳转 6.5 JCN 当 RLO = 0 时跳转 格式 JCN <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当逻辑运算的结果为 0 时,JCN <跳转标签> 就中断线性程序扫描,并跳转到一个跳转目标。线性程 序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块 内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转 距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句 组合(单字、双字或三字语句)。 当逻辑运算的结果为 1 时,不执行跳转。继续对下一个语句执行程序扫描。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 1 0 实例 STL 解释 A I 1.0 A I 1.2 JCN JOVR //当 RLO = 0 时,跳转到跳转标签 JOVR。 L IW8 //当不执行跳转时,在此继续执行程序扫描。 T MW22 JOVR: A I 2.1 //跳转到跳转标签 JOVR 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 83 逻辑控制指令 6.6 JCB 当带 BR 位的 RLO = 1 时跳转 6.6 JCB 当带 BR 位的 RLO = 1 时跳转 格式 JCB <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当逻辑运算的结果为 1 时,JCB <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序 扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内 执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距 离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组 合(单字、双字或三字语句)。 当逻辑运算的结果为 0 时,不执行跳转。将 RLO 设置为 1,继续对下一个语句执行程序扫描。 将 RLO 复制到 BR 中,以执行 JCB <跳转标签>指令,而与 RLO 的状态无关。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: x - - - - 0 1 1 0 实例 STL 解释 A I 1.0 A I 1.2 JCB JOVR //当 RLO=1 时,跳转到跳转标签 JOVR。 //将 RLO 位的内容复制到 BR 位。 L IW8 //当不执行跳转时,在此继续执行程序扫描。 T MW22 JOVR: A I 2.1 //跳转到跳转标签 JOVR 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 84 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.7 JNB 当带 BR 位的 RLO = 0 时跳转 6.7 JNB 当带 BR 位的 RLO = 0 时跳转 格式 JNB <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当逻辑运算的结果为 0 时,JNB <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序 扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内 执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距 离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组 合(单字、双字或三字语句)。 当逻辑运算的结果为 1 时,不执行跳转。将 RLO 设置为 1,继续对下一个语句执行程序扫描。 当存在一个 JNB <跳转标签>指令时,将 RLO 复制到 BR,而与 RLO 的状态无关。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: x - - - - 0 1 1 0 实例 STL 解释 A I 1.0 A I 1.2 JNB JOVR //当 RLO = 0 时,跳转到跳转标签 JOVR。 //将 RLO 位的内容复制到 BR 位中。 L IW8 //当不执行跳转时,在此继续执行程序扫描。 T MW22 JOVR: A I 2.1 //跳转到跳转标签 JOVR 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 85 逻辑控制指令 6.8 JBI 当 BR = 1 时跳转 6.8 JBI 当 BR = 1 时跳转 格式 JBI <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 BR 为 1 时,JBI <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描 在跳转目标处继续执行。由跳转标签确定跳转目标。跳转标签最多四个字符,且第一个字符必须为字 母。跳转标签后必须带有一个冒号":",且在行中必须位于程序语句之前。允许向前跳转和向后跳转。 只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯 一。最大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序 中使用的语句组合(单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 86 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.9 JNBI 当 BR = 0 时跳转 6.9 JNBI 当 BR = 0 时跳转 格式 JNBI <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 BR 为 0 时,JNBI <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫 描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执 行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离 为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合 (单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 87 逻辑控制指令 6.10 JO 当 OV = 1 时跳转 6.10 JO 当 OV = 1 时跳转 格式 JO <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 BR 为 1 时,JO <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描 在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行 跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为 程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单 字、双字或三字语句)。在一个组合的算术指令中,在每个单独的算术指令后检查是否发生溢出,以确 保每个中间结果都位于允许范围内,或使用指令 JOS。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 L 3 *I //将 MW10 的内容乘以"3"。 JO OVER //当结果超出最大范围(OV=1)时,跳转。 T MW10 //当不执行跳转时,在此继续执行程序扫描。 A M 4.0 R M 4.0 JU NEXT OVER: AN M 4.0 //跳转到跳转标签 OVER 后,在此继续执行程序扫描。 S M 4.0 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 88 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.11 JOS 当 OS = 1 时跳转 6.11 JOS 当 OS = 1 时跳转 格式 JOS <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 OS 为 1 时,JOS <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描 在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行 跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为 程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单 字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 89 逻辑控制指令 6.11 JOS 当 OS = 1 时跳转 实例 STL 解释 L IW10 L MW12 *I L DBW25 +I L MW14 –I JOS OVER //在计算 OS=1 期间,如果三个指令中有一个发生溢出, //则跳转。(参见注意事项)。 T MW16 //当不执行跳转时,在此继续执行程序扫描。 A M 4.0 R M 4.0 JU NEXT OVER: AN M 4.0 //跳转到跳转标签 OVER 后,在此继续执行程序扫描。 S M 4.0 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 注意 在这种情况下,不要使用 JO 指令。当发生溢出时,JO 指令只检查上一条-I 指令。 S7-300 和 S7-400 编程的语句表(STL) 90 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.12 JZ 当为零时跳转 6.12 JZ 当为零时跳转 格式 JZ <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 CC 1 = 0 且 CC 0 = 0 时,JZ <跳转标签> (当结果 = 0 时跳转)就中断线性程序扫描,并跳转 到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和 向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该 块内必须唯一。最大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目 取决于程序中使用的语句组合(单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 SRW 1 JZ ZERO //当被移出的位 = 0 时,跳转到跳转标签 ZERO。 L MW2 //当不执行跳转时,在此继续执行程序扫描。 INC 1 T MW2 JU NEXT ZERO: L MW4 //跳转到跳转标签 ZERO 后,在此继续执行程序扫描。 INC 1 T MW4 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 91 逻辑控制指令 6.13 JN 当不为零时跳转 6.13 JN 当不为零时跳转 格式 JN <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当由状态位 CC 1 和 CC 0 指示的结果大于或小于零时(CC 1=0/CC 0=1 或 CC 1=1/CC 0=0),JN <跳 转标签> (当结果 <> 0 时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目 标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即, 跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的 -32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或 三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IW8 L MW12 XOW JN NOZE //当 ACCU 1-L 的内容不等于零时跳转。 AN M 4.0 //当不执行跳转时,在此继续执行程序扫描。 S M 4.0 JU NEXT NOZE: AN M 4.1 //跳转到跳转标签 NOZE 后,在此继续执行程序扫描。 S M 4.1 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 92 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.14 JP 当为正时跳转 6.14 JP 当为正时跳转 格式 JP <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 CC 1 = 1 且 CC 0 = 0 时,JP <跳转标签> (当结果 < 0 时跳转)就中断线性程序扫描,并跳 转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转 和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在 该块内必须唯一。最大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数 目取决于程序中使用的语句组合(单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IW8 L MW12 –I //IW8 的内容减去 MW12 的内容。 JP POS //当结果 > 0(即 ACCU 1 > 0)时跳转。 AN M 4.0 //当不执行跳转时,在此继续执行程序扫描。 S M 4.0 JU NEXT POS: AN M 4.1 //跳转到跳转标签 POS 后,在此继续执行程序扫描。 S M 4.1 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 93 逻辑控制指令 6.15 JM 当为负时跳转 6.15 JM 当为负时跳转 格式 JM <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 CC 1 = 0 且 CC 0 = 1 时,JM <跳转标签> 当结果 < 0 时跳转)就中断线性程序扫描,并跳转 到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和 向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该 块内必须唯一。最大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目 取决于程序中使用的语句组合(单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IW8 L MW12 –I //IW8 的内容减去 MW12 的内容。 JM NEG //当结果 < 0 (即,ACCU 1 的内容 < 0)时跳转。 AN M 4.0 //当不执行跳转时,在此继续执行程序扫描。 S M 4.0 JU NEXT NEG : AN M 4.1 //跳转到跳转标签 NEG 后,在此继续执行程序扫描。 S M 4.1 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 94 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.16 JPZ 当为正或零时跳转 6.16 JPZ 当为正或零时跳转 格式 JPZ <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当由状态位 CC 1 和 CC 0 指示的结果大于或等于零时(CC 1=0/CC 0=0 或 CC 1=1/CC 0=0),JPZ < 跳转标签> (当结果 >= 0 时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转 目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转, 即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代 码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双 字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - 实例 STL 解释 L IW8 L MW12 –I //IW8 的内容减去 MW12 的内容。 JPZ REG0 //当结果 >=0(即,ACCU 1 的内容 >= 0)时跳转。 AN M 4.0 //当不执行跳转时,在此继续执行程序扫描。 S M 4.0 JU NEXT REG0: AN M 4.1 //跳转到跳转标签 REG0 后,在此继续执行程序扫描。 S M 4.1 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 95 逻辑控制指令 6.17 JMZ 当为负或零时跳转 6.17 JMZ 当为负或零时跳转 格式 JMZ <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当由状态位 CC 1 和 CC 0 指示的结果小于或等于零时(CC 1=0/CC 0=0 或 CC 1=0/CC 0=1),JMZ <跳转标签> (当结果 <= 0 时跳转)就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳 转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转, 即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代 码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双 字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IW8 L MW12 –I //IW8 的内容减去 MW12 的内容。 JMZ RGE0 //当结果 <=0 时跳转(即,ACCU 1 的内容 <= 0)。 AN M 4.0 //当不执行跳转时,在此继续执行程序扫描。 S M 4.0 JU NEXT RGE0: AN M 4.1 //跳转到跳转标签 RGE0 后,在此继续执行程序扫描。 S M 4.1 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 96 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.18 JUO 无序时跳转 6.18 JUO 无序时跳转 格式 JUO <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 当状态位 CC 1 = 1 且 CC 0 = 1 时,JUO <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。 线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在 一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最 大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序中使用 的语句组合(单字、双字或三字语句)。 在下列情况下,状态位 CC 1 = 1 且 CC 0 = 1: • 发生被零除时 • 使用了非法指令时 • 浮点比较的结果为"无序",即,使用了一种无效格式时。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 97 逻辑控制指令 6.18 JUO 无序时跳转 实例 STL 解释 L MD10 L ID2 /D //MD10 的内容除以 ID2 的内容 JUO ERRO //当被零除时跳转(即,ID2 = 0)。 T MD14 //当不执行跳转时,在此继续执行程序扫描。 A M 4.0 R M 4.0 JU NEXT ERRO: AN M 4.0 //跳转到跳转标签 ERROR 后,在此继续执行程序扫描。 S M 4.0 NEXT: NOP 0 //跳转到跳转标签 NEXT 后,在此继续执行程序扫描。 S7-300 和 S7-400 编程的语句表(STL) 98 参考手册, 05/2017, A5E41525031-AA 逻辑控制指令 6.19 LOOP 循环 6.19 LOOP 循环 格式 LOOP <跳转标签> 地址 描述 <跳转标签> 跳转目标的符号名。 描述 LOOP <跳转标签> (对 ACCU 1-L 进行减 1 操作,并在 ACCU 1-L <> 0 时跳转)可简化循环编程。ACCU 1-L 中包含循环计数器。指令跳转到指定的跳转目标。只要 ACCU 1-L 的内容不等于 0,就一直执行 跳转。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。 只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯 一。最大跳转距离为程序代码的-32768 或+32767 个字。可以跳过的实际语句的最大数目取决于程序 中使用的语句组合(单字、双字或三字语句)。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 计算因子为 5 的实例 STL 解释 L l#1 //将整型常数(32 位)装载到 ACCU 1 中。 T MD20 //将 ACCU 1 的内容传送给 MD20 (初始化)。 L 5 //将循环周期的数目装载到 ACCU 1-L 中。 NEXT: T MW10 //跳转标签 = 循环开始/将 ACCU 1-L 传送给循环计数器。 L MD20 * D //MD20 的当前内容乘以 MB10 的当前内容。 T MD20 //将相乘结果传送给 MD20。 L MW10 //将循环计数器的内容装载到 ACCU 1 中。 LOOP NEXT //对 ACCU 1 的内容进行减 1 操作,当 ACCU 1-L > 0 时, //跳转到 NEXT 跳转标签。 L MW24 //完成循环后,在此继续执行程序扫描。 L 200 > I S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 99 逻辑控制指令 6.19 LOOP 循环 S7-300 和 S7-400 编程的语句表(STL) 100 参考手册, 05/2017, A5E41525031-AA 7 整型数学运算指令 7.1 整数算术指令概述 描述 算术指令组合累加器 1 和累加器 2 的内容。对于带有两个累加器的 CPU,累加器 2 的内容保持不变。 对于带 4 个累加器的 CPU,将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加器 3 中。累加器 4 的旧内容保持不变。 使用整数运算,您可以对两个整数(16 和 32 位)执行以下运算: • +I ACCU 1 + ACCU 2,整型(16 位) • -I ACCU 2 - ACCU 1,整型(16 位) • *I ACCU 1 * ACCU 2,整型(16 位) • /I ACCU 2 / ACCU 1,整型(16 位) • + 整型常数相加(16、32 位) • +D ACCU 1 + ACCU 2,长整型(32 位) • -D ACCU 2 - ACCU 1,长整型(32 位) • *D ACCU 1 * ACCU 2,长整型(32 位) • /D ACCU 2 / ACCU 1,长整型(32 位) • MOD 除法余数,长整型(32 位) 参见使用整数算术指令时得出状态字的位数值。 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 101 整型数学运算指令 7.2 使用整数算术指令时得出状态字的位数值 7.2 使用整数算术指令时得出状态字的位数值 描述 整数算术指令影响状态字中的下列位:CC1 和 CC0、OV 和 OS。 下表显示指令结果为整数(16 位和 32 位)时状态字中各位的信号状态: 结果的有效范围 CC 1 CC 0 OV OS 0 (零) 0 0 0 * 16 位:-32 768 <= 结果 < 0 (负数) 32 位:-2 147 483 648 <=结果 < 0 (负数) 0 1 0 * 16 位:32 767 >= 结果 > 0 (正数) 32 位:2 147 483 647 >= 结果 > 0 (正数) 1 0 0 * * 指令结果不影响 OS 位。 结果的无效范围 A1 A0 OV OS 下溢(加法) 16 位:结果 = -65536 32 位:结果 = -4 294 967 296 0 0 1 1 下溢(乘法) 16 位:结果 < -32 768 (负数) 32 位:结果 < -2 147 483 648 (负数) 0 1 1 1 溢出(加法、减法) 16 位:结果 > 32 767 (正数) 32 位:结果 > 2 147 483 647 (正数) 0 1 1 1 溢出(乘法、除法) 16 位:结果 > 32 767 (正数) 32 位:结果 > 2 147 483 647 (正数) 1 0 1 1 下溢(加法、减法) 16 位:结果 < -32. 768 (负数) 32 位:结果 < -2 147 483 648 (负数) 1 0 1 1 被 0 除 1 1 1 1 操作 A1 A0 OV OS +D:结果 = -4 294 967 296 0 0 1 1 /D 或 MOD:除以 0 1 1 1 1 S7-300 和 S7-400 编程的语句表(STL) 102 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.3 +I ACCU 1 + ACCU 2,整型(16 位) 7.3 +I ACCU 1 + ACCU 2,整型(16 位) 格式 +I 描述 +I (16 位整数相加)将 ACCU 1-L 的内容与 ACCU 2-L 中的内容相加,并将结果存储在 ACCU 1-L 中。 将 ACCU 1-L 和 ACCU 2-L 的内容解释为 16 位整数。执行该指令时不涉及 RLO,也不会影响 RLO。 作为指令运算结果的一个功能,将对状态字的位 CC 1、CC 0、OS 和 OV 进行设置。在发生溢出/下 溢时,该指令生成一个 16 位整数,而不是一个 32 位整数。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 总和 = 0 0 0 0 - -32768 <= 总和 < 0 0 1 0 - 32767 >= 总和 > 0 1 0 0 - 总和 = -65536 0 0 1 1 65534 >= 总和 > 32767 0 1 1 1 -65535 <= 总和 < -32768 1 0 1 1 实例 STL 解释 L IW10 //将 IW10 的数值装载到 ACCU 1-L 中。 L MW14 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。//将 MW14 的数值装载到 //ACCU 1-L 中。 +I //ACCU 2-L 和 ACCU 1-L 相加;将结果存储在 ACCU 1-L 中。 T DB1.DBW25 //将 ACCU 1-L(结果)的内容传送到 DB1 的 DBW25 中。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 103 整型数学运算指令 7.4 -I ACCU 2 - ACCU 1,整型(16 位) 7.4 -I ACCU 2 - ACCU 1,整型(16 位) 格式 – I 描述 I (16 位整数相减)从 ACCU 2-L 的内容中减去 ACCU 1-L 的内容,并将结果存储在 ACCU 1-L 中。将 ACCU 1-L 和 ACCU 2-L 的内容解释为 16 位整数。执行该指令时不涉及 RLO,也不会影响 RLO。作 为指令运算结果的一个功能,将对状态字的位 CC 1、CC 0、OS 和 OV 进行设置。在发生溢出/下溢 时,该指令生成一个 16 位整数,而不是一个 32 位整数。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 差 = 0 0 0 0 - -32768 <= 差 < 0 0 1 0 - 32767 >= 差 > 0 1 0 0 - 65535 >= 差 > 32767 0 1 1 1 -65535 <= 差 < -32768 1 0 1 1 实例 STL 解释 L IW10 //将 IW10 的数值装载到 ACCU 1-L 中。 L MW14 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。将 MW14 的数值装载到 //ACCU 1-L 中。 –I //从 ACCU 2-L 中减去 ACCU 1-L;将结果存储在 ACCU 1-L 中。 T DB1.DBW25 //将 ACCU 1-L(结果)的内容传送到 DB1 的 DBW25 中。 S7-300 和 S7-400 编程的语句表(STL) 104 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.5 *I ACCU 1 * ACCU 2,整型(16 位) 7.5 *I ACCU 1 * ACCU 2,整型(16 位) 格式 *I 描述 *I(乘以 16 位整数)ACCU 2-L 的内容乘以 ACCU 1-L 的内容。将 ACCU 1-L 和 ACCU 2-L 的内容解释 为 16 位整数。结果作为一个 32 位整数存储在 ACCU 1 中。当状态字的位为 OV1 = 1 和 OS = 1 时, 表示结果超出 16 位整数范围。 执行该指令时不涉及 RLO,也不会影响 RLO。作为指令运算结果的一个功能,将对状态字的位 CC 1、 CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 乘积 = 0 0 0 0 - -32768 <= 乘积 < 0 0 1 0 - 32767 >= 乘积 > 0 1 0 0 - 1073741824 >= 乘积 > 32767 1 0 1 1 -1073709056<=乘积<-32768 0 1 1 1 实例 STL 解释 L IW10 //将 IW10 的数值装载到 ACCU 1-L 中。 L MW14 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。 //将 MW14 的内容载入 ACCU 1-L。 *I //ACCU 2-L 和 ACCU 1-L 相乘;结果存储在 ACCU 1 中。 T DB1.DBD25 //将 ACCU 1(结果)的内容传送到 DB1 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 105 整型数学运算指令 7.6 /I ACCU 2 / ACCU 1,整型(16 位) 7.6 /I ACCU 2 / ACCU 1,整型(16 位) 格式 /I 描述 /I(16 位整数相除)ACCU 2-L 的内容除以 ACCU 1-L 的内容。将 ACCU 1-L 和 ACCU 2-L 的内容解释 为 16 位整数。结果存储在 ACCU 1 中,包含两个 16 位整数,即商和余数。在 ACCU 1-L 中存储商, 在 ACCU 1-H 中存储余数。执行该指令时不涉及 RLO,也不会影响 RLO。作为指令运算结果的一个 功能,将对状态字的位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 商 = 0 0 0 0 - -32768 <= 商 < 0 0 1 0 - 32767 >= 商 > 0 1 0 0 - 商 = 32768 1 0 1 1 被零除 1 1 1 1 实例 STL 解释 L IW10 //将 IW10 的数值装载到 ACCU 1-L 中。 L MW14 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。将 MW14 的数值装载到 //ACCU 1-L 中。 /I //ACCU 2-L 除以 ACCU 1-L; 将结果存储在 ACCU 1 中。ACCU 1-L: //商、ACCU 1-H: 余数 T MD20 //将 ACCU 1(结果)的内容传送到 MD20 中。 S7-300 和 S7-400 编程的语句表(STL) 106 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.6 /I ACCU 2 / ACCU 1,整型(16 位) 实例:13 除以 4 执行指令(IW10)前,ACCU 2-L 的内容: "13" 执行指令(MW14)前,ACCU 1-L 的内容: "4" 指令 /I (ACCU 2-L / ACCU 1-L): "13/4" 执行指令后,ACCU 1-L 的内容(商): "3" 执行指令后,ACCU 1-H 的内容(余数): "1" S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 107 整型数学运算指令 7.7 + + 整型常数(16 位、32 位) 7.7 + + 整型常数(16 位、32 位) 格式 + <整型常数> 地址 数据类型 描述 <整型常数> (16 位或 32 位整数) 要相加的整数 描述 + <整型常数>将整型常数加到 ACCU 1 的内容中,并将结果存储在 ACCU 1 中。该指令的执行与状态 字的位无关,也不影响状态字的位。执行该指令时不涉及,也不会影响状态字的位。 + <16 位整型常数>:将一个 16 位整型常数(范围为-32768 至+32767)加到 ACCU 1-L 的内容中,然 后将结果存储在 ACCU 1-L 中。 + <32 位整型常数>:将一个 32 位整型常数(范围为-2,147,483,648 至 2,147,483,647)加到 ACCU 1 的内容中,然后将结果存储在 ACCU 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 1 STL 解释 L IW10 //将 IW10 的数值装载到 ACCU 1-L 中。 L MW14 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。将 MW14 的数值装载到 //ACCU 1-L 中。 +I //ACCU 2-L 和 ACCU 1-L 相加;将结果存储在 ACCU 1-L 中。 + 25 //ACCU 1-L 与 25 相加;将结果存储在 ACCU 1-L 中。 T DB1.DBW25 //将 ACCU 1-L(结果)的内容传送到 DB1 的 DBW25 中。 S7-300 和 S7-400 编程的语句表(STL) 108 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.7 + + 整型常数(16 位、32 位) 实例 2 STL 解释 L IW12 L IW14 + 100 //ACCU 1-L 与 100 相加;将结果存储在 ACCU 1-L 中。 > I //当 ACCU 2 > ACCU 1 或 IW12 > (IW14 + 100)时 JC NEXT //则条件跳转到跳转标签 NEXT。 实例 3 STL 解释 L MD20 L MD24 +D //ACCU 1 和 ACCU 2 相加;将结果存储在 ACCU 1 中。 + l# -200 //ACCU 1 与-200 相加;将结果存储在 ACCU 1 中。 T MD28 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 109 整型数学运算指令 7.8 +D ACCU 1 + ACCU 2,长整型(32 位) 7.8 +D ACCU 1 + ACCU 2,长整型(32 位) 格式 +D 描述 +D (32 位整数相加)将 ACCU 1 的内容与 ACCU 2 中的内容相加,并将结果存储在 ACCU 1 中。将 ACCU 1 的内容和 ACCU 2 的内容解释为 32 位整数。执行该指令时不涉及 RLO,也不会影响 RLO。 作为指令运算结果的一个功能,将对状态字的位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 总和 = 0 0 0 0 - -2147483648 <= 总和 < 0 0 1 0 - 2147483647 >= 总和 > 0 1 0 0 - 总和 = -4294967296 0 0 1 1 4294967294 >= 总和 > 2147483647 0 1 1 1 -4294967295 <= 总和 < -2147483648 1 0 1 1 实例 STL 解释 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 +D //ACCU 2 和 ACCU 1 相加;将结果存储在 ACCU 1 中。 T DB1.DBD25 //将 ACCU 1(结果)的内容传送到 DB1 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 110 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.9 -D ACCU 2 - ACCU 1,长整型(32 位) 7.9 -D ACCU 2 - ACCU 1,长整型(32 位) 格式 -D 描述 -D (32 位整数相减)从 ACCU 2 的内容中减去 ACCU 1 的内容,并将结果存储在 ACCU 1 中。将 ACCU 1 的内容和 ACCU 2 的内容解释为 32 位整数。执行该指令时不涉及 RLO,也不会影响 RLO。作为指 令运算结果的一个功能,将对状态字的位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 差 = 0 0 0 0 - -2147483648 <= 差 < 0 0 1 0 - 2147483647 >= 差 > 0 1 0 0 - 4294967295 >= 差 > 2147483647 0 1 1 1 -4294967295 <= 差 < -2147483648 1 0 1 1 实例 STL 解释 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 -D //从 ACCU 2 中减去 ACCU 1;将结果存储在 ACCU 1 中。 T DB1.DBD25 //将 ACCU 1(结果)的内容传送到 DB1 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 111 整型数学运算指令 7.10 *D ACCU 1 * ACCU 2,长整型(32 位) 7.10 *D ACCU 1 * ACCU 2,长整型(32 位) 格式 *D 描述 *D (乘以 32 位整数)ACCU 2 的内容乘以 ACCU 1 的内容。将 ACCU 1 的内容和 ACCU 2 的内容解释 为 32 位整数。结果作为一个 32 位整数存储在 ACCU 1 中。当状态字的位为 OV1 = 1 和 OS = 1 时, 表示结果超出 32 位整数范围。 执行该指令时不涉及 RLO,也不会影响 RLO。作为指令运算结果的一个功能,将对状态字的位 CC 1、 CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 乘积 = 0 0 0 0 - -2147483648 <= 乘积 < 0 0 1 0 - 2147483647 >= 乘积 > 0 1 0 0 - 乘积 > 2147483647 1 0 1 1 乘积 < -2147483648 0 1 1 1 实例 STL 解释 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。 //将 MD14 的内容装载到 ACCU 1 中。 *D //ACCU 2 和 ACCU 1 相乘;将结果存储在 ACCU 1 中。 T DB1.DBD25 //将 ACCU 1(结果)的内容传送到 DB1 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 112 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.11 /D ACCU 2 / ACCU 1,长整型(32 位) 7.11 /D ACCU 2 / ACCU 1,长整型(32 位) 格式 /D 描述 /D (32 位整数相除)ACCU 2 的内容除以 ACCU 1 的内容。将 ACCU 1 的内容和 ACCU 2 的内容解释 为 32 位整数。在 ACCU 1 中存储该指令的结果。结果只给出商,不给出余数。(指令 MOD 可用于获 取余数。) 执行该指令时不涉及 RLO,也不会影响 RLO。作为指令运算结果的一个功能,将对状态字的位 CC 1、 CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 参见使用整数算术指令时得出状态字的位数值。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 商 = 0 0 0 0 - -2147483648 <= 商 < 0 0 1 0 - 2147483647 >= 商 > 0 1 0 0 - 商 = 2147483648 1 0 1 1 被零除 1 1 1 1 实例 STL 解释 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 /D //ACCU 2 除以 ACCU 1; 结果存储在 ACCU 1 中(商)。 T MD20 //将 ACCU 1(结果)的内容传送到 MD20 中。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 113 整型数学运算指令 7.11 /D ACCU 2 / ACCU 1,长整型(32 位) 实例:13 除以 4 执行指令(ID10)前,ACCU 2 的内容: "13" 执行指令(MD14)前,ACCU 1 的内容: "4" 指令/D (ACCU 2 / ACCU 1): "13/4" 执行指令后,ACCU 1 的内容(商): "3" S7-300 和 S7-400 编程的语句表(STL) 114 参考手册, 05/2017, A5E41525031-AA 整型数学运算指令 7.12 MOD 除法余数,长整型(32 位) 7.12 MOD 除法余数,长整型(32 位) 格式 MOD 描述 MOD (32 位整数除法的余数)ACCU 2 的内容除以 ACCU 1 的内容。将 ACCU 1 的内容和 ACCU 2 的 内容解释为 32 位整数。在 ACCU 1 中存储该指令的结果。结果只给出除法的余数,不给出商。(指令 /D 可用于获取商。) 执行该指令时不涉及 RLO,也不会影响 RLO。作为指令运算结果的一个功能,将对状态字的位 CC 1、 CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - 生成状态位 CC 1 CC 0 OV OS 余数 = 0 0 0 0 - -2147483648 <= 余数 < 0 0 1 0 - 2147483647 >= 余数 > 0 1 0 0 - 被零除 1 1 1 1 实例 STL 解释 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 MOD //ACCU 2 除以 ACCU 1;结果存储在 ACCU 1 中(余数)。 T MD20 //将 ACCU 1(结果)的内容传送到 MD20 中。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 115 整型数学运算指令 7.12 MOD 除法余数,长整型(32 位) 实例:13 除以 4 执行指令(ID10)前,ACCU 2 的内容: "13" 执行指令(MD14)前,ACCU 1 的内容: "4" 指令 MOD (ACCU 2 / ACCU 1): "13/4" 执行指令后,ACCU 1 的内容(余数): "1" S7-300 和 S7-400 编程的语句表(STL) 116 参考手册, 05/2017, A5E41525031-AA 8 浮点运算指令 8.1 浮点运算指令概述 描述 该运算指令组合累加器 1 和 2 的内容。对于带有两个累加器的 CPU,累加器 2 的内容保持不变。 对于具有四个累加器的 CPU,则会将累加器 3 的内容复制到累加器 2 中,并将累加器 4 的内容复制 到累加器 3 中。累加器 4 的旧内容保持不变。 IEEE 32 位浮点数属于被称作实数(REAL)的数据类型。您可使用浮点运算指令通过两个 32 位 IEEE 浮点数来执行下列数学运算指令: • +R ACCU 1 加 ACCU 2 • -R ACCU 2 减 ACCU 1 • *R ACCU 1 乘 ACCU 2 • /R ACCU 2 除以 ACCU 1 利用浮点运算,可用一个 32 位 IEEE 浮点数执行下列运算: • ABS 绝对值 • SQR 计算平方 • SQRT 计算平方根 • EXP 计算指数值 • LN 计算自然对数 • SIN 计算角的正弦值 • COS 计算角的余弦值 • TAN 计算角的正切值 • ASIN 计算反正弦值 • ACOS 计算反余弦值 • ATAN 计算反正切值 参见判断状态字的位。 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 117 浮点运算指令 8.2 使用浮点运算指令时得出状态字的位数值 8.2 使用浮点运算指令时得出状态字的位数值 描述 基本运算类型会影响状态字中的下列位:CC 1 和 CC 0、OV 和 OS。 下表说明了指令结果为浮点数(32 位)时状态字中各位的信号状态: 结果的有效范围 CC 1 CC 0 OV OS +0, -0 (空) 0 0 0 * -3.402823E+38 < 结果 < -1.175494E-38 (负数) 0 1 0 * +1.175494E-38 < 结果 < 3.402824E+38 (正数) 1 0 0 * * 指令结果不影响 OS 位。 结果的无效范围 CC 1 CC 0 OV OS 下溢 -1.175494E-38 < 结果< - 1.401298E-45 (负数) 0 0 1 1 下溢 +1.401298E-45 < 结果< +1.175494E-38 (正数) 0 0 1 1 上溢 结果 < -3.402823E+38 (负数) 0 1 1 1 溢出 结果 > 3.402823E+38 (正数) 1 0 1 1 无效浮点数或非法指令 (输入值不在有效范围内) 1 1 1 1 S7-300 和 S7-400 编程的语句表(STL) 118 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.3 浮点型数学运算指令 基本原理 8.3 浮点型数学运算指令 基本原理 8.3.1 +R 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相加 格式 +R 指令描述 +R (加 32 位 IEEE 浮点数)将累加器 1 与累加器 2 的内容相加,并将结果存储到累加器 1 中。将累加 器 1 和累加器 2 中的内容解释为 32 位 IEEE 浮点数。执行该指令时不涉及 RLO,也不会影响 RLO。 结果会对状态位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 119 浮点运算指令 8.3 浮点型数学运算指令 基本原理 实例 STL 解释 OPN DB10 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 IACCU 1 的值装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 +R //ACCU 2 和 ACCU 1 相加;将结果存储在 ACCU 1 中。 T DBD25 //将 ACCU 1 的内容(结果)传送到 DB10 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 120 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.3 浮点型数学运算指令 基本原理 8.3.2 -R 以浮点数(32 位 IEEE 754)的形式从 ACCU 2 减去 ACCU 1 格式 -R 描述 -R (减 32 位 IEEE 浮点数)从累加器 2 减去累加器 1 的内容,并将结果存储到累加器 1 中。将累加器 1 和累加器 2 中的内容解释为 32 位 IEEE 浮点数。结果存储在累加器 1 中。执行该指令时不涉及 RLO, 也不会影响 RLO。结果会对状态位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 121 浮点运算指令 8.3 浮点型数学运算指令 基本原理 实例 STL 解释 OPN DB10 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 IACCU 1 的值装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 –R //从 ACCU 2 中减去 ACCU 1;将结果存储在 ACCU 1 中。 T DBD25 //将 ACCU 1 的内容(结果)传送到 DB10 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 122 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.3 浮点型数学运算指令 基本原理 8.3.3 *R 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相乘 格式 *R 指令描述 *R (乘 32 位 IEEE 浮点数)累加器 2 与累加器 1 的内容相乘。将累加器 1 和累加器 2 中的内容解释为 32 位 IEEE 浮点数。结果作为 32 位 IEEE 浮点数存储在累加器 1 中。执行该指令时不涉及 RLO,也 不会影响 RLO。结果会对状态位 CC 1、CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。累加器 4 的内容保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 123 浮点运算指令 8.3 浮点型数学运算指令 基本原理 实例 STL 解释 OPN DB10 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 IACCU 1 的值装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 *R //ACCU 2 和 ACCU 1 相乘;将结果存储在 ACCU 1 中。 T DBD25 //将 ACCU 1 的内容(结果)传送到 DB10 的 DBD25 中。 S7-300 和 S7-400 编程的语句表(STL) 124 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.3 浮点型数学运算指令 基本原理 8.3.4 /R 以浮点数(32 位 IEEE 754)的形式用 ACCU 1 除 ACCU 2 格式 /R 指令描述 /R (除 32 位 IEEE 浮点数)将累加器 2 的内容除以累加器 1 的内容。将累加器 1 和累加器 2 中的内容 解释为 32 位 IEEE 浮点数。执行该指令时不涉及 RLO,也不会影响 RLO。结果会对状态位 CC 1、 CC 0、OS 和 OV 进行设置。 对于带 2 个累加器的 CPU 而言,累加器 2 的结果保持不变。 对于带 4 个累加器的 CPU,还将累加器 3 的内容复制到累加器 2 中,将累加器 4 的内容复制到累加 器 3 中。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x x - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 125 浮点运算指令 8.3 浮点型数学运算指令 基本原理 实例 STL 解释 OPN DB10 L ID10 //将 ID10 的值装载到 ACCU 1 中。 L MD14 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD14 的值装载到 //ACCU 1 中。 /R //ACCU 2 除以 ACCU 1; 将结果存储在 ACCU 1 中。 T DBD20 //将 ACCU 1 的内容(结果)传送到 DB10 的 DBD20 中。 S7-300 和 S7-400 编程的语句表(STL) 126 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.3 浮点型数学运算指令 基本原理 8.3.5 ABS 浮点数(32 位 IEEE 754)的绝对值 格式 ABS 描述 ABS (32 位 IEEE FP 的绝对值)在 ACCU 1 中计算浮点数(32 位 IEEE 浮点数)的绝对值。结果存储在 累加器 1 中。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L ID8 //将值载入 ACCU 1(实例:ID8 = -1.5E+02). ABS //生成绝对值;将结果存储在 ACCU 1 中。 T MD10 //将结果传送到 MD10 (实例:结果 = 1.5E+02). S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 127 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4 浮点型数学运算指令 扩展运算 8.4.1 SQR 计算浮点数(32 位)的平方 格式 SQR 指令描述 SQR (生成 IEEE 754 32 位浮点数的平方)计算 ACCU 1 中的浮点数(32 位,IEEE 754)的平方。结果 存储在累加器 1 中。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -qNaN 1 1 1 1 实例 STL 解释 OPN DB17 //打开数据块 DB17。 L DBD0 //将数据双字 DBD0 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) SQR //计算 ACCU 1 中浮点数(32 位,IEEE //754)的平方。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 SQR 指令期间未出错, //则跳转到 OK 跳转标签。 BEU //如果执行 SQR //指令时出错,则块无条件结束。 OK: T DBD4 //将结果从 ACCU 1 传送到数据块中的双字 DBD4。 S7-300 和 S7-400 编程的语句表(STL) 128 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.2 SQRT 计算浮点数(32 位)的平方根 格式 SQRT 指令描述 SQRT (生成 32 位,IEEE 754 浮点数的平方根)计算 ACCU 1 中的浮点数(32 位,IEEE 754)的平方根。 结果存储在累加器 1 中。输入值必须大于或等于零。然后得出结果也是正数。唯一的例外是-0 的平方 根是-0。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) SQRT //计算 ACCU 1 中浮点数(32 位,IEEE 754)的平方根。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 SQRT 指令期间未出错, //则跳转到 OK 跳转标签。 BEU //如果执行 SQRT 指令时出错,则块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 129 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.3 EXP 计算浮点数(32 位)的指数值 格式 EXP 指令描述 EXP (生成 32 位,IEEE 754 浮点数的指数值)计算 ACCU 1 中浮点数(32 位,IEEE 754)的指数值(以 e 为底的指数值)。结果存储在累加器 1 中。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) EXP //在 ACCU 1 中计算浮点数(32 位,IEEE 754)的指数值, //底数为 e。将结果存储在 ACCU 1 中。 //将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 EXP 指令期间未出错, //则跳转到 OK 跳转标签。. BEU //如果执行 EXP 指令时出错,则块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 130 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.4 LN 计算浮点数(32 位)的自然对数 格式 LN 指令描述 LN (生成 IEEE 754 32 位浮点数的自然对数)计算 ACCU 1 中浮点数(32 位,IEEE 754)的自然对数(以 e 为底的对数)。结果存储在累加器 1 中。输入值必须大于或等于零。此指令影响 CC 1、CC 0、UO 和 OV 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) LN //计算 ACCU 1 中浮点数(32 位,IEEE 754)的自然对数。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行此指令期间未出错,则跳转到 OK 跳转标签。 BEU //如果执行此指令时出错,则块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 131 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.5 SIN 计算浮点数(32 位)角度的正弦值 格式 SIN 指令描述 SIN(计算 32 位 IEEE 754 浮点数角度的正弦)计算用弧度表示的角度的正弦。角度必须表示为 ACCU 1 中的浮点数。结果存储在累加器 1 中。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +规格化 1 0 0 - +非规格化 0 0 1 1 溢出 +零 0 0 0 - +无穷大 1 0 1 1 -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -qNaN 1 1 1 1 参见评估浮点数功能状态字的位 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) SIN //计算 ACCU 1 中浮点数(32 位,IEEE 754)的正弦值。将结果存储在 ACCU 1 中。 T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 132 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.6 COS 计算浮点数(32 位)角度的余弦值 格式 COS 指令描述 COS (计算 32 位 IEEE 754 浮点数角度的余弦)计算用弧度表示的角度的余弦值。角度必须表示为 ACCU 1 中的浮点数。结果存储在累加器 1 中。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +规格化 1 0 0 - +非规格化 0 0 1 1 溢出 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) COS //计算 ACCU 1 中浮点数(32 位,IEEE 754)的余弦值。将结果存储在 ACCU 1 中。 T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 133 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.7 TAN 计算浮点数(32 位)角度的正切值 格式 TAN 指令描述 TAN (计算 32 位 IEEE 754 浮点数角度的正切)计算用弧度表示的角度的正切值。角度必须表示为 ACCU 1 中的浮点数。结果存储在累加器 1 中。此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +无穷大 1 0 1 1 溢出 +规格化 1 0 0 - +非规格化 0 0 1 1 下溢 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -无穷大 0 1 1 1 溢出 -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) TAN //计算 ACCU 1 中浮点数(32 位,IEEE 754)的余弦值。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 TAN 指令期间未出错,跳转到 OK 跳转标签。 BEU //如果执行 TAN 指令时出错,块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 134 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.8 ASIN 计算浮点数(32 位)的反正弦值 格式 ASIN 指令描述 ASIN (生成 32 位,IEEE 754 浮点数的反正弦值)计算 ACCU 1 中浮点数的反正弦值。输入值的允许 值范围 -1 <= 输入值 <= +1 结果是以弧度表示的角度。值位于下列范围 -π / 2 <= arc sine (ACCU1) <= +π / 2, with π = 3.14159... 此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +规格化 1 0 0 - +非规格化 0 0 1 1 溢出 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) ASIN //计算 ACCU 1 中浮点数(32 位,IEEE 754)的反正弦值。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 ASIN 指令期间未出错,则跳转到 OK 跳转标签。 BEU //如果执行 ASIN 指令时出错,则块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 135 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.9 ACOS 计算浮点数(32 位)的反余弦值 格式 ACOS 指令描述 ACOS (生成 32 位,IEEE 754 浮点数的反余弦值)计算 ACCU 1 中浮点数的反余弦值。输入值的允许 值范围 -1 <= 输入值 <= +1 结果是用弧度表示的角度。值位于下列范围 0 <= arc cosine (ACCU1) <= π, with π = 3.14159... 此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +规格化 1 0 0 - +非规格化 0 0 1 1 溢出 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) ACOS //计算 ACCU 1 中浮点数(32 位,IEEE 754)的反余弦值。将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0"。 JC OK //如果在执行 ACOS 指令期间未出错,则跳转到 OK 跳转标签。 BEU //如果执行 ACOS 指令时出错,则块无条件结束。 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 136 参考手册, 05/2017, A5E41525031-AA 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 8.4.10 ATAN 计算浮点数(32 位)的反正切值 格式 ATAN 指令描述 ATAN (计算 32 位 IEEE 754 浮点数的反正切值)在 ACCU 1 中计算浮点数的反正切值。结果是以弧度 表示的角度。值位于下列范围内 -π / 2 <= arc tangent (ACCU1) <= +π / 2, with π = 3.14159... 此指令影响 CC 1、CC 0、OV 和 OS 状态字位。 累加器 2 的内容(以及具有四个累加器的 CPU 的累加器 3 和累加器 4 的内容)保持不变。 结果 ACCU 1 中的结果为 CC 1 CC 0 OV OS 注意 +qNaN 1 1 1 1 +规格化 1 0 0 - +非规格化 0 0 1 1 溢出 +零 0 0 0 - -零 0 0 0 - -非规格化 0 0 1 1 下溢 -规格化 0 1 0 - -qNaN 1 1 1 1 实例 STL 解释 L MD10 //将存储器双字 MD10 中的值载入到 ACCU 1 中。 //(该值必须为浮点数格式。) ATAN //计算 ACCU 1 中浮点数(32 位,IEEE 754)的反正切值 将结果存储在 ACCU 1 中。 AN OV //扫描状态字中的 OV 位,确定是否是"0", JC OK //如果在执行 ATAN 指令期间未出错,则跳转到 OK 跳转标签。 BEU //如果执行 ATAN 指令时出错,则块无条件结束 OK: T MD20 //将结果从 ACCU 1 传送到存储器双字 MD20。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 137 浮点运算指令 8.4 浮点型数学运算指令 扩展运算 S7-300 和 S7-400 编程的语句表(STL) 138 参考手册, 05/2017, A5E41525031-AA 9 装载和传送指令 9.1 装载和传送指令概述 描述 可使用装载(L)和传送(T)指令进行编程,以在输入或输出模块与存储区之间、或在各存储区之间进行 信息交换。CPU 在每个扫描周期中将这些指令作为无条件指令执行,也就是说,它们不受语句逻辑运 算结果的影响。 可用下列装载和传送指令: • L 装载 • L STW 将状态字加载到 ACCU 1 中 • LAR1 AR2 从地址寄存器 2 装载地址寄存器 1 • LAR1 用长整型(32 位指针)装载地址寄存器 1 • LAR1 从 ACCU 1 装载地址寄存器 1 • LAR2 用长整型(32 位指针)装载地址寄存器 2 • LAR2 从 ACCU 1 装载地址寄存器 2 • T 传送 • T STW 将 ACCU 1 传送至状态字 • TAR1 AR2 将地址寄存器 1 传送至地址寄存器 2 • TAR1 将地址寄存器 1 传送至目标地址(32 位指针) • TAR2 将地址寄存器 2 传送至目标地址(32 位指针) • TAR1 将地址寄存器 1 传送至 ACCU 1 • TAR2 将地址寄存器 2 传送至 ACCU 1 • CAR 交换地址寄存器 1 和地址寄存器 2 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 139 装载和传送指令 9.2 L 装载 9.2 L 装载 格式 L <地址> 地址 数据类型 存储区 源地址 <地址> BYTE WORD DWORD E、A、PE、M、L、D、指 针、参数 0...65535 0...65534 0...65532 描述 在将 ACCU 1 的原有内容保存到 ACCU 2 中,并将 ACCU 1 复位到"0"后,L <地址>会将被寻址的字 节、字或双字装载到 ACCU 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L IB10 //将输入字节 IB10 装载到 ACCU 1-L-L 中。 L MB120 //将存储器字节 MB120 装载到 ACCU 1-L-L 中。 L DBB12 //将数据字节 DBB12 装载到 ACCU 1-L-L 中。 L DIW15 //将背景数据字 DIW15 装载到 ACCU 1-L 中。 L LD252 //将本地数据双字 LD252 装载到 ACCU 1 中。 L P# I 8.7 //将指针装载到 ACCU 1 中。 L OTTO //将参数"OTTO"装载到 ACCU 1 中。 L P# ANNA //将指针装载到 ACCU 1 的指定参数中。 //(此指令装载指定参数的相对地址偏移量。 //要在多重背景 FB 中计算背景数据块中的绝对偏移量, //必须将 AR2 寄存器的内容添加到此值。 S7-300 和 S7-400 编程的语句表(STL) 140 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.2 L 装载 ACCU 1 的内容 ACCU 1 的内容 ACCU1-H-H ACCU1-H-L ACCU1-L-H ACCU1-L-L 执行装载指令前 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 执行 L MB10 (L <字节>)后 00000000 00000000 00000000 执行 L MW10 (L <字>)后 00000000 00000000 执行 L MD10 (L <双字>)后 执行 L P# ANNA (在 FB 中)后 <86> 。 要在多重背景 FB 中计算背景数据块中的绝对 偏移量,必须将 AR2 寄存器的内容添加到此值。 执行 L P# ANNA (在 FC 中)后 <传送至 ANNA 的数据的跨区域地址> X ="1"或"0" S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 141 装载和传送指令 9.3 L STW 将状态字加载到 ACCU 1 中 9.3 L STW 将状态字加载到 ACCU 1 中 格式 L STW 描述 L STW(带有地址 STW 的指令 L)用状态字内容装载 ACCU 1。执行该指令时不考虑状态位,也不会影 响状态位。 注意 对于 S7-300 系列 CPU,L STW 语句不装载状态字的 FC、STA 和 OR 位。只有第 1、4、5、6、7 和第 8 位装载到累加器 1 低字的相应位中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L STW //将状态字内容装载到 ACCU 1 中。 执行 L STW 后,ACCU 1 的内容为: 位 31-9 8 7 6 5 4 3 2 1 0 内容: 0 BR CC 1 CC 0 OV OS OR STA RLO /FC S7-300 和 S7-400 编程的语句表(STL) 142 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.4 LAR1 从 ACCU 1 装载地址寄存器 1 9.4 LAR1 从 ACCU 1 装载地址寄存器 1 格式 LAR1 描述 LAR1 用 ACCU 1 的内容(32 位指针)装载地址寄存器 AR1。ACCU 1 和 ACCU 2 保持不变。执行该指 令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 143 装载和传送指令 9.5 LAR1 用长整型(32 位指针)装载地址寄存器 1 9.5 LAR1 用长整型(32 位指针)装载地址寄存器 1 格式 LAR1 地址 数据类型 存储区 源地址 DWORD 指针常量 D、M、L 0...65532 描述 LAR1 用所寻址的双字 的内容或指针常量装载地址寄存器 AR1。ACCU 1 和 ACCU 2 保持不 变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例:直接地址 STL 解释 LAR1 DBD20 //用数据双字 DBD20 中的指针装载 AR1。 LAR1 DID30 //用背景数据双字 DID30 中的指针装载 AR1。 LAR1 LD180 //用本地数据双字 LD180 中的指针装载 AR1。 LAR1 MD24 //用存储器双字 MD24 的内容装载 AR1。 实例:指针常数 STL 解释 LAR1 P#M100.0 //用 32 位指针常量装载 AR1。 S7-300 和 S7-400 编程的语句表(STL) 144 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.6 LAR1 AR2 从地址寄存器 2 装载地址寄存器 1 9.6 LAR1 AR2 从地址寄存器 2 装载地址寄存器 1 格式 LAR1 AR2 描述 LAR1 AR2(带有地址 AR2 的指令 LAR1)用地址寄存器 AR2 的内容装载地址寄存器 1。ACCU 1 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 9.7 LAR2 从 ACCU 1 装载地址寄存器 2 格式 LAR2 描述 LAR2 用 ACCU 1 的内容(32 位指针)装载地址寄存器 AR2。 ACCU 1 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 145 装载和传送指令 9.8 LAR2 用长整型(32 位指针)装载地址寄存器 2 9.8 LAR2 用长整型(32 位指针)装载地址寄存器 2 格式 LAR2 地址 数据类型 存储区 源地址 DWORD 指针常量 D、M、L 0...65532 描述 LAR2 用所寻址的双字 的内容或指针常量装载地址寄存器 AR2。ACCU 1 和 ACCU 2 保持 不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例:直接地址 STL 解释 LAR2 DBD 20 //用数据双字 DBD20 中的指针装载 AR2。 LAR2 DID 30 //用背景数据双字 DID30 中的指针装载 AR2。 LAR2 LD 180 //用本地数据双字 LD180 中的指针装载 AR2。 LAR2 MD 24 //用存储器双字 MD24 中的指针装载 AR2。 实例:指针常数 STL 解释 LAR2 P#M100.0 //用 32 位指针常量装载 AR2。 S7-300 和 S7-400 编程的语句表(STL) 146 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.9 T 传送 9.9 T 传送 格式 T <地址> 地址 数据类型 存储区 源地址 <地址> BYTE WORD DWORD I、Q、PQ、M、L、D 0...65535 0...65534 0...65532 描述 如果主控继电器打开(MCR = 1),T <地址> 会将 ACCU 1 的内容传送(复制)到目标地址。如果 MCR = 0,则用 0 写目标地址。从 ACCU 1 复制的字节数取决于目标地址中表明的长度。传送后,ACCU 1 还保存此数据。当传送至直接 I/O 区域(存储器类型 PQ)时,还将 ACCU 1 的内容或"0"(如果 MCR=0) 传送至过程映像输出表(存储器类型 Q)中的相应地址。执行该指令时不考虑状态位,也不会影响状态 位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 T QB10 //将 ACCU 1-L-L 的内容传送给输出字节 QB10。 T MW14 //将 ACCU 1-L 的内容传送给存储器字 MW14。 T DBD2 //将 ACCU 1 的内容传送给数据双字 DBD2。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 147 装载和传送指令 9.10 T STW 将 ACCU 1 传送至状态字 9.10 T STW 将 ACCU 1 传送至状态字 格式 T STW 描述 T STW(带有地址 STW 的指令 T)将 ACCU 1 的 0 至 8 位传送给状态字。 该指令的执行与状态位无关。 注意:对于 S7-300 系列的 CPU,不由 T STW 指令写入状态字/ER、STA 和 OR 的位。根据 ACCU1 的位设置,仅写入位 1、4、5、6、7 和 8。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: x x x x x x x x x 实例 STL 解释 T STW //将 ACCU 1 的 0 至 8 位传送给状态字。 ACCU 1 的各个位包含以下状态位: 位 31-9 8 7 6 5 4 3 2 1 0 内容: *) BR CC 1 CC 0 OV OS OR STA RLO /FC *)未传送位。 S7-300 和 S7-400 编程的语句表(STL) 148 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.11 CAR 交换地址寄存器 1 和地址寄存器 2 9.11 CAR 交换地址寄存器 1 和地址寄存器 2 格式 CAR 描述 CAR (交换地址寄存器)交换地址寄存器 AR1 和 AR2 的内容。执行该指令时不考虑状态位,也不会影 响状态位。 地址寄存器 AR1 的内容移到地址寄存器 AR2 中, 地址寄存器 AR2 的内容移到地址寄存器 AR1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 9.12 TAR1 将地址寄存器 1 传送至 ACCU 1 格式 TAR1 描述 TAR1 将地址寄存器 AR1 的内容传送给 ACCU 1 (32 位指针)。ACCU 1 中的原有内容保存在 ACCU 2 中。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 149 装载和传送指令 9.13 TAR1 将地址寄存器 1 传送至目标地址(32 位指针) 9.13 TAR1 将地址寄存器 1 传送至目标地址(32 位指针) 格式 TAR1 地址 数据类型 存储区 源地址 DWORD D、M、L 0...65532 描述 TAR1 将地址寄存器 AR1 的内容传送给寻址的双字 。目标区域可以为存储器双字(MD)、本 地数据双字(LD)、数据双字(DBD)和背景数据字(DID)。 ACCU 1 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 TAR1 DBD20 //将 AR1 的内容传送给数据双字 DBD20。 TAR1 DID30 //将 AR1 的内容传送给背景数据双字 DID30。 TAR1 LD18 //将 AR1 的内容传送给本地数据双字 LD18。 TAR1 MD24 //将 AR1 的内容传送给存储器双字 MD24。 S7-300 和 S7-400 编程的语句表(STL) 150 参考手册, 05/2017, A5E41525031-AA 装载和传送指令 9.14 TAR1 AR2 将地址寄存器 1 传送至地址寄存器 2 9.14 TAR1 AR2 将地址寄存器 1 传送至地址寄存器 2 格式 TAR1 AR2 描述 TAR1 AR2(带有地址 AR2 的指令 TAR1)将地址寄存器 AR1 的内容传送给地址寄存器 AR2。 ACCU 1 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 9.15 TAR2 将地址寄存器 2 传送至 ACCU 1 格式 TAR2 描述 TAR2 将地址寄存器 AR2 的内容传送给 ACCU 1 (32 位指针)。ACCU 1 的内容提前保存到 ACCU 2 中。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 151 装载和传送指令 9.16 TAR2 将地址寄存器 2 传送至目标地址(32 位指针) 9.16 TAR2 将地址寄存器 2 传送至目标地址(32 位指针) 格式 TAR2 地址 数据类型 存储区 源地址 DWORD D、M、L 0...65532 描述 TAR2 将地址寄存器 AR2 的内容传送给寻址的双字 。目标区域可以为存储器双字(MD)、本 地数据双字(LD)、数据双字(DBD)和背景双字(DID)。 ACCU 1 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 TAR2 DBD20 //将 AR2 的内容传送给数据双字 DBD20。 TAR2 DID30 //将 AR2 的内容传送给背景双字 DID30。 TAR2 LD18 //将 AR2 的内容传送给本地数据双字 LD18。 TAR2 MD24 //将 AR2 的内容传送给存储器双字 MD24。 S7-300 和 S7-400 编程的语句表(STL) 152 参考手册, 05/2017, A5E41525031-AA 10 程序控制指令 10.1 程序控制指令总览 描述 下列指令可用于执行程序控制指令: • BE 块结束 • BEC 有条件的块结束 • BEU 无条件的块结束 • CALL 块调用 • CC 条件调用 • UC 无条件调用 • • 调用 FB • 调用 FC • 调用 SFB • 调用 SFC • 调用多重背景 • 调用来自库的块 • MCR (主控继电器) • 关于使用 MCR 功能的重要注意事项 • MCR( 将 RLO 保存到 MCR 堆栈中,开始 MCR • )MCR 结束 MCR • MCRA 激活 MCR 区域 • MCRD 取消激活 MCR 区域 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 153 程序控制指令 10.2 BE 块结束 10.2 BE 块结束 格式 BE 描述 BE (块结束)终止当前块中的程序扫描,并导致跳转到调用当前块的那个块中。程序扫描继续执行调用 程序中紧跟块调用声明之后的第一条指令。当前本地数据区将被释放,前一个本地数据区将变为当前 本地数据区。当块被调用时所打开的数据块被重新打开。此外,还将恢复调用块的 MCR 依存关系, 而 RLO 被从当前块移送到调用当前块的那个块中。BE 不依赖于任何条件。然而,如果 BE 指令被跳 过,则当前程序扫描将不会结束,将从块中跳转目标处开始继续执行。 BE 指令对于 S5 软件有所不同。在 S7 硬件中,该指令使用时与 BEU 的功能相同。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 实例 STL 解释 A I 1.0 JC NEXT //如果 RLO = 1 (I 1.0 = 1),则跳转到 NEXT 跳转标签。 L IW4 //若未执行跳转,则从此处继续。 T IW10 A I 6.0 A I 6.1 S M 12.0 BE //块结束 NEXT: NOP 0 //若执行跳转,则从此处继续。 S7-300 和 S7-400 编程的语句表(STL) 154 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.3 BEC 有条件的块结束 10.3 BEC 有条件的块结束 格式 BEC 描述 如果 RLO = 1,则 BEC (有条件的块结束)中断当前块中的程序扫描,导致跳转至调用当前的那个块。 程序扫描继续执行块调用之后的第一条指令。当前本地数据区将被释放,前一个本地数据区将变为当 前本地数据区。在块被调用时为当前数据块的数据块被重新打开。恢复调用块的 MCR 依存关系。 RLO (= 1)被从已终止的块传送到被调用的块。如果 RLO = 0,则不执行 BEC。RLO 被设为 1,程序 扫描继续执行 BEC 之后的指令。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - x 0 1 1 0 实例 STL 解释 A I 1.0 //更新 RLO。 BEC //如果 RLO = 1,则结束块。 L IW4 //如果未执行 BEC,则从此处继续,RLO = 0。 T MW10 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 155 程序控制指令 10.4 BEU 无条件的块结束 10.4 BEU 无条件的块结束 格式 BEU 描述 BEU (无条件的块结束)终止当前块中的程序扫描,并导致跳转到调用当前块的那个块中。程序扫描继 续执行块调用之后的第一条指令。当前本地数据区将被释放,前一个本地数据区将变为当前本地数据 区。当块被调用时所打开的数据块被重新打开。此外,还将恢复调用块的 MCR 依存关系,而 RLO 被 从当前块移送到调用当前块的那个块中。BEU 不依赖于任何条件。然而,如果 BEU 指令被跳过,当 前程序扫描将不会结束,将从块中跳转目标处开始继续执行。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 实例 STL 解释 A I 1.0 JC NEXT //如果 RLO = 1 (I 1.0 = 1),则跳转到 NEXT 跳转标签。 L IW4 //若未执行跳转,则从此处继续。 T IW10 A I 6.0 A I 6.1 S M 12.0 BEU //无条件的块结束。 NEXT: NOP 0 //若执行跳转,则从此处继续。 S7-300 和 S7-400 编程的语句表(STL) 156 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.5 CALL 块调用 10.5 CALL 块调用 格式 CALL <逻辑块标识符> 描述 CALL <逻辑块标识符>用于调用功能(FC)或功能块(FB)、系统功能(SFC)或系统功能块(SFB),或调用 由 Siemens 提供的标准预编程的程序块。CALL 指令调用作为地址输入的 FC 和 SFC,或 FB 和 SFB, 它与 RLO 或任何其它条件无关。如果使用 CALL 调用 FB 或 SFB,必须为块提供相关的背景数据块。 在被调用块处理完成之后,调用块程序将继续逻辑处理。可以绝对方式或符号方式指定逻辑块的地址。 在 SFB/SFC 调用结束之后,将恢复寄存器内容。 实例:CALL FB1, DB1 或 CALL FILLVAT1, RECIPE1 逻辑块 块类型 绝对地址调用语法 FC 功能 CALL FCn SFC 系统功能 CALL SFCn FB 功能块 CALL FBn1,DBn2 SFB 系统功能块 CALL SFBn1,DBn2 注意 在使用 STL 编辑器时,上表中的引用(n、n1 和 n2)必须指向有效存在的块。否则,必须在使用前定义 符号名。 传递参数(增量编辑模式) 调用块可通过变量表与被调用块交换参数。在输入有效的 CALL 声明后,变量表将自动在 STL 程序中 扩展。 如果调用 FB、SFB、FC 或 SFC,且被调用块的变量声明表具有 IN、OUT 和 IN_OUT 声明,这些变 量将作为形式参数表被添加到调用块中。 当调用 FC 和 SFC 时,必须从调用逻辑块将实际参数分配给形式参数。 当调用 FB 和 SFB 时,必须仅指定那些必须由前一个调用更改的实际参数。在处理完 FB 之后,实际 参数将被保存在背景数据块中。如果实际参数是数据块,必须指定完整的绝对地址,例如:DB1、DBW2。 IN 参数可作为常数、绝对或符号地址来指定。而 OUT 和 IN_OUT 参数必须作为绝对或符号地址来指 定。必须确保所有地址和常数符合要传送的数据类型。 CALL 保存返回地址(选择器和相对地址)、两个当前数据块的选择器以及 B (块)堆栈中的 MA 位。此外, CALL 将取消激活 MCR 依存关系,然后创建要传送的块的本地数据区。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 157 程序控制指令 10.5 CALL 块调用 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 实例 1:为 FC6 调用分配参数 CALL FC6 形式参数 实际参数 NO OF TOOL := MW100 TIME OUT := MW110 FOUND := Q 0.1 ERROR := Q 100.0 实例 2:不带参数调用 SFC STL 解释 CALL SFC43 //调用 SFC43,重新触发看门狗定时器(无参数)。 实例 3:使用背景数据块 DB1 调用 FB99 CALL FB99,DB1 形式参数 实际参数 MAX_RPM := #RPM1_MAX MIN_RPM := #RPM1 MAX_POWER := #POWER1 MAX_TEMP := #TEMP1 S7-300 和 S7-400 编程的语句表(STL) 158 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.5 CALL 块调用 实例 4:使用背景数据块 DB2 调用 FB99 CALL FB99,DB2 形式参数 实际参数 MAX_RPM := #RPM2_MAX MIN_RPM := #RPM2 MAX_POWER := #POWER2 MAX_TEMP := #TEMP2 注意 每个 FB 或 SFB 调用都必须有一个背景数据块。在上面的实例中,块 DB1 和 DB2 在调用前必须始终 存在。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 159 程序控制指令 10.6 调用 FB 10.6 调用 FB 格式 CALL FB n1, DB n1 描述 该指令用于调用用户自定义的功能块(FB)。CALL 指令调用作为地址输入的功能块,与 RLO 或其它条 件无关。如果使用 CALL 调用功能块,必须为其提供一个背景数据块。在处理完所调用的块之后,处 理过程将继续处理调用该块的程序。可以绝对方式或符号方式指定逻辑块的地址。 传递参数(增量编辑模式) 调用块可通过变量表与被调用块交换参数。在输入有效的 CALL 指令后,变量表将自动在语句表程序 中扩展。 如果调用功能块,且被调用块的变量声明表具有 IN、OUT 和 IN_OUT 声明,这些变量将作为形式参 数表被添加到调用块的程序中。 当调用功能块时,由于在处理功能块之后实际参数被保存在背景数据块中,因而只需指定那些必须由 前一个调用更改的实际参数。如果实际参数是数据块,必须指定完整的绝对地址,例如:DB1、DBW2。 IN 参数可作为常数、绝对或符号地址来指定。而 OUT 和 IN_OUT 参数必须作为绝对或符号地址来指 定。必须确保所有地址和常数符合要传送的数据类型。 CALL 保存返回地址(选择器和相对地址)、两个打开的数据块的选择器以及 B (块)堆栈中的 MA 位。此 外,CALL 将取消激活 MCR 依存关系,然后创建要传送的块的本地数据区。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 160 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.6 调用 FB 实例 1:使用背景数据块 DB1 调用 FB99 CALL FB99,DB1 形式参数 实际参数 MAX_RPM := #RPM1_MAX MIN_RPM := #RPM1 MAX_POWER := #POWER1 MAX_TEMP := #TEMP1 实例 2:使用背景数据块 DB1 调用 FB99 CALL FB99,DB2 形式参数 实际参数 MAX_RPM := #RPM2_MAX MIN_RPM := #RPM2 MAX_POWER := #POWER2 MAX_TEMP := #TEMP2 注意 每个功能块调用都必须有一个背景数据块。在上面的实例中,块 DB1 和 DB2 在调用前必须始终存在。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 161 程序控制指令 10.7 调用 FC 10.7 调用 FC 格式 CALL FC n 注意 如果使用的是 STL 编辑器,则引用(n)必须与现有的有效块相关。还必须在使用前定义符号名。 描述 该指令用于调用功能(FC)。CALL 指令调用作为地址输入的 FC,与 RLO 或其它条件无关。在处理完 所调用的块之后,处理过程将继续处理调用该块的程序。可以绝对方式或符号方式指定逻辑块的地址。 传递参数(增量编辑模式) 调用块可通过变量表与被调用块交换参数。在输入有效的 CALL 指令后,变量表将自动在语句表程序 中扩展。 如果调用功能,且被调用块的变量声明表具有 IN、OUT 和 IN_OUT 声明,这些变量将作为形式参数 表被添加到调用块的程序中。 当调用功能时,必须从调用逻辑块将实际参数分配给形式参数。 IN 参数可作为常数、绝对或符号地址来指定。而 OUT 和 IN_OUT 参数必须作为绝对或符号地址来指 定。必须确保所有地址和常数符合要传送的数据类型。 CALL 保存返回地址(选择器和相对地址)、两个打开的数据块的选择器以及 B (块)堆栈中的 MA 位。此 外,CALL 将取消激活 MCR 依存关系,然后创建要传送的块的本地数据区。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 162 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.7 调用 FC 实例:为 FC6 调用分配参数 CALL FC6 形式参数 实际参数 NO OF TOOL := MW100 TIME OUT := MW110 FOUND := Q0.1 ERROR := Q100.0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 163 程序控制指令 10.8 调用 SFB 10.8 调用 SFB 格式 CALL SFB n1, DB n2 描述 该指令用于调用由 Siemens 提供的标准功能块(SFB)。CALL 指令调用作为地址输入的 SFB,与 RLO 或其它条件无关。如果使用 CALL 调用系统功能块,必须为其提供一个背景数据块。在处理完所调用 的块之后,处理过程将继续处理调用该块的程序。可以绝对方式或符号方式指定逻辑块的地址。 传递参数(增量编辑模式) 调用块可通过变量表与被调用块交换参数。在输入有效的 CALL 指令后,变量表将自动在语句表程序 中扩展。 如果调用系统功能块,且被调用块的变量声明表具有 IN、OUT 和 IN_OUT 声明,这些变量将作为形 式参数表被添加到调用块的程序中。 当调用系统功能块时,由于在处理系统功能块之后实际参数被保存在背景数据块中,因而只需指定那 些必须由前一个调用更改的实际参数。如果实际参数是数据块,必须指定完整的绝对地址,例如:DB1、 DBW2。 IN 参数可作为常数、绝对或符号地址来指定。而 OUT 和 IN_OUT 参数必须作为绝对或符号地址来指 定。必须确保所有地址和常数符合要传送的数据类型。 CALL 保存返回地址(选择器和相对地址)、两个打开的数据块的选择器以及 B (块)堆栈中的 MA 位。此 外,CALL 将取消激活 MCR 依存关系,然后创建要传送的块的本地数据区。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 164 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.8 调用 SFB 实例 CALL SFB4,DB4 形式参数 实际参数 IN: I0.1 PT: T#20s Q: M0.0 ET: MW10 注意 每个系统功能块调用都必须有一个背景数据块。在上面的实例中,块 SFB4 和 DB4 在调用前必须始 终存在。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 165 程序控制指令 10.9 调用 SFC 10.9 调用 SFC 格式 CALL SFC n 注意 如果使用的是 STL 编辑器,则引用(n)必须与现有的有效块相关。还必须在使用前定义符号名。 描述 该指令用于调用由 Siemens 提供的标准功能(SFC)。CALL 指令调用作为地址输入的 SFC,与 RLO 或其它条件无关。在处理完所调用的块之后,处理过程将继续处理调用该块的程序。可以绝对方式或 符号方式指定逻辑块的地址。 传递参数(增量编辑模式) 调用块可通过变量表与被调用块交换参数。在输入有效的 CALL 指令后,变量表将自动在语句表程序 中扩展。 如果调用系统功能,且被调用块的变量声明表具有 IN、OUT 和 IN_OUT 声明,这些变量将作为形式 参数表被添加到调用块的程序中。 当调用系统功能时,必须从调用逻辑块将实际参数分配给形式参数。 IN 参数可作为常数、绝对或符号地址来指定。而 OUT 和 IN_OUT 参数必须作为绝对或符号地址来指 定。必须确保所有地址和常数符合要传送的数据类型。 CALL 保存返回地址(选择器和相对地址)、两个打开的数据块的选择器以及 B (块)堆栈中的 MA 位。此 外,CALL 将取消激活 MCR 依存关系,然后创建要传送的块的本地数据区。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 实例:不带参数调用 SFC STL 解释 CALL SFC43 //调用 SFC43,重新触发看门狗定时器(无参数)。 S7-300 和 S7-400 编程的语句表(STL) 166 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.10 调用多重背景 10.10 调用多重背景 格式 CALL # 变量名称 描述 通过声明一个具有功能块数据类型的静态变量,创建一个多重背景。只有已声明的多重背景才会被包 括在程序元素目录中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 x x x 10.11 调用来自库的块 可在此使用 SIMATIC 管理器中提供的库来选择以下块: • 集成在 CPU 操作系统中的块("标准库") • 保存在库中,以备日后使用。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 167 程序控制指令 10.12 CC 条件调用 10.12 CC 条件调用 格式 CC <逻辑块标识符> 描述 CC <逻辑块标识符>(有条件的块调用)在 RLO=1 时调用逻辑块。CC 用于调用不带参数的 FC 或 FB 类型的逻辑块。CC 的使用方式与 CALL 指令相同,除了无法在调用程序时传送参数。指令将返回地 址(选择器和相对地址)、两个当前数据块的选择器以及 MA 位保存在 B (块)堆栈中,取消激活 MCR 依 存关系,创建被调用块的本地数据区,开始执行被调用的代码。可以绝对方式或符号方式指定逻辑块 的地址。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 1 0 实例 STL 解释 A I 2.0 //检查输入 I 2.0 的信号状态。 CC FC6 //如果 I 2.0 为"1",调用功能 FC6。 A M 3.0 //当从被调用功能返回后执行(I 2.0 = 1),或如果 I 2.0 = 0,直接在 //A I 2.0 声明之后执行。 注意 如果 CALL 指令调用功能块(FB)或系统功能块(SFB),必须在声明中指定背景数据块(DB 编号)。不得 与 CC 指令一起使用"BlockFB"或"BlockFC"类型的变量。由于无法使用声明的地址中的 CC 指令将数 据块分配给调用,只能将该指令用于不带块参数和静态本地数据的块。 在将梯形图逻辑编程语言转换为语句表编程语言期间,取决于所使用的程序段,程序编辑器将生成 UC 指令或 CC 指令。您应当尝试使用 CALL 指令来代替,以避免程序发生错误。 S7-300 和 S7-400 编程的语句表(STL) 168 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.13 UC 无条件调用 10.13 UC 无条件调用 格式 UC <逻辑块标识符> 描述 UC <逻辑块标识符> (无条件调用块)调用 FC 或 SFC 类型的逻辑块。UC 与 CALL 指令类似,除了无 法使用被调用块传送参数。指令将返回地址(选择器和相对地址)、两个当前数据块的选择器以及 MA 位保存在 B (块)堆栈中,取消激活 MCR 依存关系,创建被调用块的本地数据区,开始执行被调用的 代码。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - 0 0 1 - 0 实例 1 STL 解释 UC FC6 //调用功能 FC6 (不带参数)。 实例 2 STL 解释 UC SFC43 //调用系统功能 SFC43 (不带参数)。 注意 当使用 CALL 指令调用 FB 或 SFB,必须在指令中指定背景数据块(DB 编号)。不得与 UC 指令一起使 用"BlockFB"或"BlockFC"类型的变量。由于无法使用声明的地址中的 UC 指令将数据块分配给调用, 只能将该指令用于不带块参数和静态本地数据的块。 在将梯形图逻辑编程语言转换为语句表编程语言期间,取决于所使用的程序段,程序编辑器将生成 UC 指令或 CC 指令。您应当尝试使用 CALL 指令来代替,以避免程序发生错误。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 169 程序控制指令 10.14 MCR (主控继电器) 10.14 MCR (主控继电器) 关于使用 MCR 功能的重要注意事项 ! 警告 为了防止人员受伤或财产损失,切勿使用 MCR 来代替紧急停止功能硬接线的机械主控继电器。 描述 主控继电器(MCR)是一个用于通电和断电的继电器梯形图逻辑主站开关。由下列位逻辑触发的指令和 传送指令取决于 MCR: • = <位> • S <位> • R <位> • T <字节>、T <字>、T <双字> 如果 MCR 为 0,T 指令(用于字节、字和双字)将 0 写入到存储器。S 和 R 指令则不改变现有值。指令 =将"0"写入所给定地址的位中。 取决于 MCR 的指令和它们对 MCR 信号状态的响应 MCR 的信号状态 = <位> S <位>, R <位> T <字节>, T <字> T <双字> 0 ("OFF") 写入 0。 (模拟继电器在移除电压后进 入其静止状态。) 不写入。 (模拟继电器在移除电压后保 持其当前状态。) 写入 0。 (模拟组件在移除电压后生成 一个 0 值。) 1 ("ON") 正常处理 正常处理 正常处理 MCR( - 开始 MCR 区域,)MCR - 结束 MCR 区域 MCR 由一个一位宽八位深的堆栈控制。当所有八个条目都为 1 时,MCR 激活。MCR( 指令将 RLO 位复制到 MCR 堆栈中。)MCR 指令从堆栈中移除最后一个条目,并将空出来的位置设为 1。 MCR(和)MCR 指令必须始终成对使用。当发生故障时,即当连续使用超过八个 MCR(指令,或者试图 在 MCR 堆栈为空时执行 MCR)指令时,将触发 MCRF 出错消息。 S7-300 和 S7-400 编程的语句表(STL) 170 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.14 MCR (主控继电器) MCRA - 激活 MCR 区域,MCRD - 取消激活 MCR 区域 MCRA 和 MCRD 必须始终成对使用。在 MCRA 和 MCRD 之间所编的指令将取决于 MCR 位的状态。 在 MCRA-MCRD 序列之外所编的指令与 MCR 位状态无关。 必须在被调用块中使用 MCRA 指令编定块中功能(FC)和功能块(FB)的 MCR 依存关系。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 171 程序控制指令 10.15 关于使用 MCR 功能的重要注意事项 10.15 关于使用 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 类型的复杂 FC 参数的构成成分。 • 如果其地址大于 8180.0,访问具有多重背景功能的功能块(版本 2 型块)的参数。 • 访问具有多重背景功能的功能块(版本 2 型块)的 BLOCK_DB 类型的参数,打开 DB0。其 后任何数据访问都将会把 CPU 设为 STOP 模式。T 0、C 0、FC0 或 FB0 也将始终用于 TIMER、COUNTER、BLOCK_FC 和 BLOCK_FB。 参数传递 • 进行参数传送的调用。 LAD/FBD • 梯形图中的 T 分支和中线输出或 FBD 以 RLO = 0 开始。 纠正方法 解除上述命令的 MCR 依存关系: 1st 在有关的声明或程序段之前使用 MCRD 指令取消激活主控继电器。 2nd 在有关的声明或程序段之后使用 MCRA 指令重新激活主控继电器。 S7-300 和 S7-400 编程的语句表(STL) 172 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.16 MCR( 将 RLO 保存到 MCR 堆栈中,开始 MCR 10.16 MCR( 将 RLO 保存到 MCR 堆栈中,开始 MCR 关于使用 MCR 功能的重要注意事项 格式 MCR( 描述 MCR( 打开 MCR 区域)将 RLO 保存到 MCR 堆栈中并打开一个 MCR 区域。MCR 区域是介于指令 MCR(和相应的指令)MCR 之间的指令。指令 MCR(必须始终与指令)MCR 成对使用。 如果 RLO=1,则 MCR 为"on"。该 MCR 区域中取决于 MCR 的指令正常执行。 如果 RLO=0,则 MCR 为"off"。 该 MCR 区域中取决于 MCR 的指令将按照下表所述执行。 取决于 MCR 位状态的指令 MCR 的信号状态 = <位> S <位>, R <位> T <字节>, T <字> T <双字> 0 ("OFF") 写入 0。 (模拟继电器在移除电压后进 入其静止状态。) 不写入。 (模拟继电器在移除电压后保 持其当前状态。) 写入 0。 (模拟组件在移除电压后生成 一个 0 值。) 1 ("ON") 正常处理 正常处理 正常处理 MCR(和)MCR 指令可嵌套使用。最大嵌套深度为八个指令。最多允许的堆栈条目数为八。在堆栈已 满的情况下执行 MCR(将产生 MCR 堆栈故障(MCRF))。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 1 - 0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 173 程序控制指令 10.16 MCR( 将 RLO 保存到 MCR 堆栈中,开始 MCR 实例 STL 解释 MCRA //激活 MCR 区域。 A I 1.0 MCR( //将 RLO 保存到 MCR 堆栈中,打开 MCR 区域。当 RLO=1 (I 1.0 ="1")时, //MCR = "on" 当 RLO=0 (I 1.0 ="0")时,MCR = "off" A I 4.0 = Q 8.0 //如果 MCR = "off",则无论 I 4.0 为何值,Q 8.0 都将被设为"0"。 L MW20 T QW10 //如果 MCR = "off",则将"0"传送到 QW10。 )MCR //MCR 区域结束。 MCRD //取消激活 MCR 区域。 A I 1.1 = Q 8.1 //这些指令位于 MCR 区域之外,不依赖于 MCR 位。 S7-300 和 S7-400 编程的语句表(STL) 174 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.17 )MCR 结束 MCR 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 STA RLO /FC 写: - - - - - 0 1 - 0 实例 STL 解释 MCRA //激活 MCR 区域。 A I 1.0 MCR( //将 RLO 保存到 MCR 堆栈中;打开 MCR 区域。当 RLO=1 (I 1.0 ="1")时, //MCR = "on" 当 RLO=0 (I 1.0 ="0")时,MCR = "off"。 A I 4.0 = Q 8.0 //如果 MCR = "off",则无论 I 4.0 为何值,Q 8.0 都将被设为"0"。 L MW20 T QW10 //如果 MCR = "off",则将"0"传送到 QW10。 )MCR //MCR 区域结束。 MCRD //取消激活 MCR 区域。 A I 1.1 = Q 8.1 //这些指令位于 MCR 区域之外,不依赖于 MCR 位。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 175 程序控制指令 10.18 MCRA 激活 MCR 区域 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 //激活 MCR 区域。 A I 1.0 MCR( //将 RLO 保存到 MCR 堆栈中,打开 MCR 区域。当 RLO=1 (I 1.0 ="1")时, //MCR = "on" 当 RLO=0 (I 1.0 ="0")时,MCR = "off" A I 4.0 = Q 8.0 //如果 MCR = "off",则无论 I 4.0 为何值,Q 8.0 都将被设为"0"。 L MW20 T QW10 //如果 MCR = "off",则将"0"传送到 QW10。 )MCR //MCR 区域结束。 MCRD //取消激活 MCR 区域。 A I 1.1 = Q 8.1 //这些指令位于 MCR 区域之外,不依赖于 MCR 位。 S7-300 和 S7-400 编程的语句表(STL) 176 参考手册, 05/2017, A5E41525031-AA 程序控制指令 10.19 MCRD 取消激活 MCR 区域 10.19 MCRD 取消激活 MCR 区域 关于使用 MCR 功能的重要注意事项 格式 MCRD 描述 MCRD (主控继电器取消激活)取消激活跟在其后的指令的 MCR 依存关系。指令 MCRA (主控继电器 激活)必须始终与指令 MCRD (主控继电器取消激活)成对使用。在 MCRA 和 MCRD 之间所编的指令 将取决于 MCR 位的信号状态。 执行该指令时不涉及,也不会影响状态字的位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 MCRA //激活 MCR 区域。 A I 1.0 MCR( //将 RLO 保存到 MCR 堆栈中,打开 MCR 区域。当 RLO=1 (I 1.0 ="1")时, //MCR = "on" 当 RLO=0 (I 1.0 ="0")时,MCR = "off" A I 4.0 = Q 8.0 //如果 MCR = "off",则无论 I 4.0 为何值,Q 8.0 都将被设为"0"。 L MW20 T QW10 //如果 MCR = "off",则将"0"传送到 QW10。 )MCR //MCR 区域结束。 MCRD //取消激活 MCR 区域。 A I 1.1 = Q 8.1 //这些指令位于 MCR 区域之外,不依赖于 MCR 位。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 177 程序控制指令 10.19 MCRD 取消激活 MCR 区域 S7-300 和 S7-400 编程的语句表(STL) 178 参考手册, 05/2017, A5E41525031-AA 11 移位和循环指令 11.1 移位指令 11.1.1 移位指令概述 描述 可使用移位指令逐位左移或右移累加器 1 中低字的内容或整个累加器的内容(参见 CPU 寄存器)。左移 n 位相当于将累加器的内容乘以"2 n ";右移 n 位相当于将累加器的内容除以"2 n "。例如,将以二进制 格式表示的十进制数 3 左移 3 位时,在累加器中出现相当于十进制数 24 的二进制编码。将以二进制 格式表示的十进制数 16 右移 2 位时,在累加器中出现相当于十进制数 4 的二进制编码。 移位指令后的数字或在累加器 2 的低字低字节中的数值表示要移位的数目。由零或符号位的信号状态 (0 代表正数、1 代表负数)填充移位指令空出的位。将最后一个移出的位装载到状态字的 CC 1 位中。 复位状态字的 CC 0 和 OV 位为 0。可使用跳转指令来判断 CC 1 位。移位运算是无条件的,即,它们 的执行不需要任何特殊的条件,且不影响逻辑运算的结果。 下列移位指令可用: • SSI 带符号整型移位(16 位) • SSD 带符号长整型移位(32 位) • SLW 左移字(16 位) • SRW 右移字(16 位) • SLD 左移双字(32 位) • SRD 右移双字(32 位) S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 179 移位和循环指令 11.1 移位指令 11.1.2 SSI 带符号整型移位(16 位) 格式 SSI SSI <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 15 描述 SSI (右移带符号整型)只逐位向右移动 ACCU 1-L 的内容。由符号位(位 15)的信号状态填充移位指令 空出的位。将最后一个移出的位装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指 定要移位的位数目。 SSI <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,复位状态字 的位 CC 0 和 OV 为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SSI:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 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 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SSI 6 前 0101 1111 0110 0100 1001 1101 0011 1011 执行 SSI 6 后 0101 1111 0110 0100 1111 1110 0111 0100 S7-300 和 S7-400 编程的语句表(STL) 180 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MW4 //将值载入 ACCU 1 中。 SRW 6 //将 ACCU 1 中的带符号的位向右移动 6 位。 T MW8 //将结果传送到 MW8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MW20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MW20 的数值装载到 ACCU 1 中。 SRW //移位数目为 ACCU 2-L-L 的数值 => 将 ACCU 1-L 中的带符号的位右移 3 位; //用符号位的状态填充空闲位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 181 移位和循环指令 11.1 移位指令 11.1.3 SSD 带符号长整型移位(32 位) 格式 SSD SSD <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 32 描述 SSD(右移带符号的长整型)逐位向右移动 ACCU 1 的整个内容。由符号位的信号状态填充移位指令空 出的位。将最后一个移出的位装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指定 要移位的位数目。 SSD <数目>:地址<数目>指定移位数目。允许的数值范围为 0 32。当<数目>大于 0 时,将状态字的 位 CC 0 和 OV 复位为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SSD:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 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 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SSD 7 前 1000 1111 0110 0100 0101 1101 0011 1011 执行 SSD 7 后 1111 1111 0001 1110 1100 1000 1011 1010 S7-300 和 S7-400 编程的语句表(STL) 182 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MD4 //将值载入 ACCU 1 中。 SSD 7 //根据符号,将 ACCU 1 中的位右移 7 位。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MD20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD20 的数值装载到 ACCU 1 中。 SSD //移位数目为 ACCU 2-L-L 的数值 => 将 ACCU 1 中的带符号的位右移 3 位, //用符号位的状态填充空闲位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 183 移位和循环指令 11.1 移位指令 11.1.4 SLW 左移字(16 位) 格式 SLW SLW <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 15 描述 SLW(左移字)只逐位向左移动 ACCU 1-L 的内容。由零填充移位指令空出的位。将最后一个移出的位 装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指定要移位的位数目。 SLW <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,将状态字 的位 CC 和 OV 复位为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SLW:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 16 时,始 终产生相同的结果:ACCU 1-L = 0、CC 1 = 0、CC 0 = 0 和 OV = 0。当 0 < 移位数目 <= 16 时,复 位状态字的位 CC 0 和 OV 为 0。当移位数目为 0 时,则将移位指令视为 NOP 操作。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SLW 5 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 SLW 5 后 0101 1111 0110 0100 1010 0111 0110 0000 S7-300 和 S7-400 编程的语句表(STL) 184 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MW4 //将值载入 ACCU 1 中。 SLW 5 //将 ACCU 1 中的位向左移动 5 位。 T MW8 //将结果传送到 MW8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MW20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MW20 的数值装载到 ACCU 1 中。 SLW //移位数目是 ACCU 2-L-L 的数值 => 将 ACCU 1-L 中的位向左移动 3 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 185 移位和循环指令 11.1 移位指令 11.1.5 SRW 右移字(16 位) 格式 SRW SRW <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 15 描述 SRW(右移字)只逐位向右移动 ACCU 1-L 的内容。由零填充移位指令空出的位。将最后一个移出的位 装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指定要移位的位数目。 SRW <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,将状态字 的位 CC 0 和 OV 复位为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SRW:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 16 时,始 终产生相同的结果:ACCU 1-L = 0、CC 1 = 0、CC 0 = 0 和 OV = 0。当 0 < 移位数目 <= 16 时,复 位状态字的位 CC 0 和 OV 为 0。当移位数目为 0 时,则将移位指令视为 NOP 操作。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SRW 6 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 SRW 6 后 0101 1111 0110 0100 0000 0001 0111 0100 S7-300 和 S7-400 编程的语句表(STL) 186 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MW4 //将值载入 ACCU 1 中。 SRW 6 //将 ACCU 1-L 中的位向右移动 6 位。 T MW8 //将结果传送到 MW8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MW20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MW20 的数值装载到 ACCU 1 中。 SRW //移位数目是 ACCU 2-L-L 的数值 => 将 ACCU 1-L 中的位向右移动 3 位。 SPP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 187 移位和循环指令 11.1 移位指令 11.1.6 SLD 左移双字(32 位) 格式 SLD SLD <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 32 描述 SLD(左移双字)逐位向左移动 ACCU 1 的整个内容。由零填充移位指令空出的位。将最后一个移出的 位装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指定要移位的位数目。 SLD <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将状态字 的位 CC 和 OV 复位为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SLD:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 32 时,始 终产生相同的结果:ACCU 1 = 0、CC 1 = 0、CC 0 = 0 和 OV = 0。当 0 < 移位数目 <= 32 时,复位 状态字的位 CC 0 和 OV 为 0。当移位数目为 0 时,则将移位指令视为 NOP 操作。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SLD 5 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 SLD 5 后 1110 1100 1000 1011 1010 0111 0110 0000 S7-300 和 S7-400 编程的语句表(STL) 188 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MD4 //将值载入 ACCU 1 中。 SLD 5 //将 ACCU 1 中的位向左移动 5 位。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MD20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD20 的数值装载到 ACCU 1 中。 SLD //移位数目是 ACCU 2-L-L 的数值 => 将 ACCU 1 中的位向左移动 3 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 189 移位和循环指令 11.1 移位指令 11.1.7 SRD 右移双字(32 位) 格式 SRD SRD <数目> 地址 数据类型 描述 <数字> 整型、无符号 要移位的位数目,范围为 0 - 32 描述 SRD(右移双字)逐位向右移动 ACCU 1 的整个内容。由零填充移位指令空出的位。将最后一个移出的 位装载到状态字的 CC 1 位中。地址<数目>或 ACCU 2-L-L 中的数值指定要移位的位数目。 SRD <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将状态字 的位 CC 0 和 OV 复位为 0。当<数目>等于 0 时,则将此移位指令视为 NOP 操作。 SRD:移位数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 32 时,始 终产生相同的结果:ACCU 1 = 0、CC 1 = 0、CC 0 = 0 和 OV = 0。当 0 < 移位数目 <= 32 时,复位 状态字的位 CC 0 和 OV 为 0。当移位数目为 0 时,则将移位指令视为 NOP 操作。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 SRD 7 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 SRD 7 后 0000 0000 1011 1110 1100 1000 1011 1010 S7-300 和 S7-400 编程的语句表(STL) 190 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.1 移位指令 实例 1 STL 解释 L MD4 //将值载入 ACCU 1 中。 SRD 7 //将 ACCU 1 中的位向右移动 7 位。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MD20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD20 的数值装载到 ACCU 1 中。 SRD //移位数目是 ACCU 2-L-L 的数值 => 将 ACCU 1 中的位向右移动 3 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 191 移位和循环指令 11.2 循环移位指令 11.2 循环移位指令 11.2.1 循环移位指令概述 描述 可使用循环移位指令逐位左移或右移累加器 1 的整个内容(参见 CPU 寄存器)。循环移位指令触发与 14.1 节所描述的移位指令相似的功能。然而,它使用累加器中移出的位的信号状态填充空出的位。 循环移位指令后的数字或在累加器 2 的低字低字节中的数值表示要循环移位的数目。取决于指令的具 体情况,循环移位也可以通过状态字的 CC 1 位进行。复位状态字的 CC 0 位为 0。 下列循环移位指令可用: • RLD 循环左移双字(32 位) • RRD 循环右移双字(32 位) • RLDA 通过 CC 1 循环左移 ACCU 1 (32 位) • RRDA 通过 CC 1 循环右移 ACCU 1(32 位) S7-300 和 S7-400 编程的语句表(STL) 192 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.2 循环移位指令 11.2.2 RLD 循环左移双字(32 位) 格式 RLD RLD <数目> 地址 数据类型 描述 <数字> 整型、无符号 要循环移位的位数目,范围为 0 - 32 描述 RLD(循环左移双字)逐位向左循环移动 ACCU 1 的整个内容。循环移位指令空出的位由 ACCU 1 中移 出位的信号状态填充。最后移出的位被装载到状态位 CC 1 中。而地址<数目>或 ACCU 2-L-L 中的数 值则指定要循环移位的位数目。 RLD <数目>:地址<数目>指定循环移位的数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将 状态字的位 CC 0 和 OV 复位为 0。当<数目>等于 0 时,则将此循环移位指令视为 NOP 操作。 RLD:循环移位的数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。当 ACCU 2-L-L 内 的数值大于 0 时,将状态字的位 CC 0 和 OV 复位为 0。如果循环移位的数目为零,则将此循环移位 指令视为 NOP 操作。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 RLD 4 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 RLD 4 后 1111 0110 0100 0101 1101 0011 1011 0101 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 193 移位和循环指令 11.2 循环移位指令 实例 1 STL 解释 L MD2 //将值载入 ACCU 1 中。 RLD 4 //将 ACCU 1 中的位向左循环移动 4 位。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MD20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD20 的数值装载到 ACCU 1 中。 RLD //循环移位数目是 ACCU 2-L-L 的值 => 将 ACCU 1 中的位向左循环移动 3 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 194 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.2 循环移位指令 11.2.3 RRD 循环右移双字(32 位) 格式 RRD RRD <数目> 地址 数据类型 描述 <数字> 整型、无符号 要循环移位的位数目,范围为 0 - 32 描述 RRD(循环右移双字)逐位向右循环移动 ACCU 1 的整个内容。循环移位指令空出的位由 ACCU 1 中移 出位的信号状态填充。最后移出的位被装载到状态位 CC 1 中。而地址<数目>或 ACCU 2-L-L 中的数 值则指定要循环移位的位数目。 RRD <数目>:地址<数目>指定循环移位的数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将 状态字的位 CC 0 和 OV 复位为 0。当<数目>等于 0 时,则将此循环移位指令视为 NOP 操作。 RRD:循环移位的数目由 ACCU 2-L-L 中的数值指定。可能的数值范围为 0 - 255。当 ACCU 2-L-L 的数值大于 0 时,复位状态字的位为 0。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x x x - - - - - 实例 目录 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 RRD 4 前 0101 1111 0110 0100 0101 1101 0011 1011 执行 RRD 4 后 1011 0101 1111 0110 0100 0101 1101 0011 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 195 移位和循环指令 11.2 循环移位指令 实例 1 STL 解释 L MD2 //将值载入 ACCU 1 中。 RRD 4 //将 ACCU 1 中的位向右循环移动 4 位。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L +3 //将数值+3 装载到 ACCU 1 中。 L MD20 //将 ACCU 1 的内容装载到 ACCU 2 中。将 MD20 的数值装载到 ACCU 1 中。 RRD //循环移位数目是 ACCU 2-L-L 的数值 => 将 ACCU 1 中的位向右循环移动 3 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 196 参考手册, 05/2017, A5E41525031-AA 移位和循环指令 11.2 循环移位指令 11.2.4 RLDA 通过 CC 1 循环左移 ACCU 1 (32 位) 格式 RLDA 描述 RLDA (通过 CC 1 循环左移双字)通过 CC 1 将 ACCU 1 的整个内容循环左移 1 位。复位状态字的位 CC 0 和 OV 为 0。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 目录 CC 1 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 RLDA 前 X 0101 1111 0110 0100 0101 1101 0011 1011 执行 RLDA 后 0 1011 1110 1100 1000 1011 1010 0111 011X (X = 0 或 1,CC 1 之前的信号状态) STL 解释 L MD2 //将 MD2 的数值装载到 ACCU 1 中。 RLDA //通过 CC 1,将 ACCU 1 中的位循环左移 1 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 197 移位和循环指令 11.2 循环移位指令 11.2.5 RRDA 通过 CC 1 循环右移 ACCU 1(32 位) 格式 RRDA 描述 RRDA(通过 CC 1 循环右移双字)将 ACCU 1 的整个内容循环向右移动 1 位。复位状态字的位 CC 0 和 OV 为 0。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 目录 CC 1 ACCU1-H ACCU1-L 位 31 . . . . . . . . . . 16 15 . . . . . . . . . . 0 执行 RRDA 前 X 0101 1111 0110 0100 0101 1101 0011 1011 执行 RRDA 后 1 X010 1111 1011 0010 0010 1110 1001 1101 (X = 0 或 1,CC 1 之前的信号状态) STL 解释 L MD2 //将 MD2 的数值装载到 ACCU 1 中。 RRDA //通过 CC 1,将 ACCU 1 中的位循环右移 1 位。 JP NEXT //当最后一个移出的位(CC 1) = 1 时,跳转到 NEXT 跳转标签。 S7-300 和 S7-400 编程的语句表(STL) 198 参考手册, 05/2017, A5E41525031-AA 12 定时器指令 12.1 定时器指令总览 描述 有关设置和选择正确的定时信息,请参阅定时器在存储器中的位置与定时器组件描述。 提供以下定时器指令: • FR 启用定时器(自由) • L 将当前定时器值作为整数载入 ACCU 1 • LC 将当前定时器值作为 BCD 载入 ACCU 1 • R 复位定时器 • SD 接通延迟定时器 • SE 扩展脉冲定时器 • SF 断开延时定时器 • SP 脉冲定时器 • SS 掉电保护接通延时定时器 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 199 定时器指令 12.2 定时器在存储器中的位置与定时器组件 12.2 定时器在存储器中的位置与定时器组件 存储器中的区域 CPU 存储器中有一个为定时器保留的区域。该存储器区为每个定时器地址保留一个 16 位的字。FBD 编程支持 256 个定时器。请参阅 CPU 的技术信息以建立多个可用的定时器字。 以下功能可访问定时器存储区域: • 定时器指令 • 利用时钟定时更新定时器字。在运行模式下,CPU 的这个功能可按照由时间基准指定的间隔将给 定的时间值递减一个单位,直到该时间值等于零为止。递减操作与用户程序异步。这表示所得到 的时间总是较短,最高可达时基的一个时间间隔。 时间值 定时器字的位 0 到 9 包含二进制编码的时间值。时间值指定多个单位。时间更新可按照由时间基准指 定的间隔将时间值递减一个单位。递减会持续进行,直至时间值等于零为止。可以在累加器 1 的低字 中以二进制、十六进制或二进制编码的十进制(BCD)格式装入时间值。 可使用以下格式之一预先加载时间值: • W#16#txyz 其中 t = 时间基准(即时间间隔或分辨率) 此处 xyz = 以二进制编码的十进制格式表示的时间值 • S5T#aH_bM_cS_dMS 其中,H = 小时,M = 分钟,S = 秒钟,MS = 毫秒; 用户变量为:a、b、c、d 自动选择时间基准,其值舍入为具有该时间基准的下一个较小的数字。 可以输入的最大时间值是 9,990s 或 2H_46M_30S。 S7-300 和 S7-400 编程的语句表(STL) 200 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.2 定时器在存储器中的位置与定时器组件 时间基准 定时器字的位 12 和 13 包含二进制编码的时间基准。时间基准定义时间值减小一个单位的间隔。最小 时间基准为 10 ms;最大为 10 s。 时间基准 时间基准的二进制编码 10ms 00 100ms 01 1 s 10 10 s 11 数值不得超出 2h_46m_30s。超出范围或分辨率的数值将被向下舍入。S5TIME 的一般格式有以下限 制: 分辨率 范围 0.01s 10MS 至 9S_990MS 0.1s 100MS 至 1M_39S_900MS 1 秒 1S 至 16M_39S 10 秒 10S 到 2H_46M_30S ACCU 1 中的位组态 当启动定时器时,ACCU1 的内容将被用作时间值。ACCU1-L 的 0 到 11 位保留二进制编码的十进制 格式时间值(BCD 格式:每个四位元组包含的二进制码代表一个十进制值)。第 12 和 13 位存放二进制 编码的时间基准。 下图显示了装载定时器值 127 和 1 秒时间基准的 ACCU1-L 的内容: x x 1 0 15... ...8 7... ...0 0 0 0 1 0 0 1 0 0 1 1 1 1 2 7 Time value in BCD (0 to 999) Time base 1 second Irrelevant: These bits are ignored when the timer is started. S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 201 定时器指令 12.2 定时器在存储器中的位置与定时器组件 选择正确的定时器 该总览旨在帮您为定时任务选择正确的定时器。 t t t t t I 0.0 Q 4.0 S_PULSE Q 4.0 S_PEXT Q 4.0 S_ODT Q 4.0 S_ODTS Q 4.0 S_OFFDT 定时器 描述 S_PULSE 脉冲定时器 输出信号保持在 1 的最长时间与编程时间值 t 相同。如果输入信号变为 0,则输出 信号停留在 1 的时间会很短。 S_PEXT 延长脉冲定时器 输出信号在编程时间长度内始终保持在 1,而与输入信号停留在 1 的时间长短无关。 S_ODT 接通延迟定时器 仅在编程时间到期,且输入信号仍为 1 时,输出信号变为 1。 S_ODTS 保持接通延迟定时器 输出信号仅在编程时间到期时才从 0 变为 1,而与输入信号停留在 1 的时间长短无 关。 S_OFFDT 关闭延迟定时器 输出信号在输入信号变为 1 时或当定时器在运行时变为 1。当输入信号从 1 变为 0 是启动时间。 S7-300 和 S7-400 编程的语句表(STL) 202 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.3 FR 启用定时器(自由) 12.3 FR 启用定时器(自由) 格式 FR <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 当 RLO 从"0"跳转到为"1"时,FR <定时器>清除用于启动寻址定时器的边沿检测标记。启用指令(FR) 前,RLO 位由 0 跳转到 1 即可启用定时器。 无论是启动定时器还是正常的定时器指令,都不需要定时器的启用。启用只适用于重触发一个正在运 行的定时器,即重新启动定时器。只有在 RLO = 1 的情况下继续处理启动指令时,才可进行重新启动。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SI T1 //启动定时器 T1 以作为脉冲定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制的格式装载定时器 T1 的当前时间值。 T MW10 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 203 定时器指令 12.3 FR 启用定时器(自由) RLO at enable input RLO at start input RLO at reset input Time response t = programmed time interval Check signal state at timer output. Load timer: L, LC I 2.0 I 2.1 I 2.2 Q 4.0 3 1 t t 2 (1) 在定时器运行的同时 RLO 在启用输入处从 0 变为 1,会完全重新启动定时器。程序时间将用作重 新启动的当前时间。则 RLO 在启用输入处从 1 变为 0 将不会有任何作用。 (2) 如果在定时器未运行时 RLO 在启用输入处从 0 变为 1,且在使能输入处仍有一个值为 1 的 RLO, 则定时器也会作为脉冲以已编程的时间启动。 (3) 当使能输入处仍有值为 1 的 RLO 时,则 RLO 在启用输入处从 0 变为 1 对定时器毫无影响。 S7-300 和 S7-400 编程的语句表(STL) 204 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.4 L 将当前定时器值作为整数载入 ACCU 1 12.4 L 将当前定时器值作为整数载入 ACCU 1 格式 L <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 在将 ACCU 1 的内容存入 ACCU 2 中后,L <定时器>会从没有时间基准的寻址定时器字中以二进制整 数的形式将当前定时器值装入 ACCU 1-L。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L T1 //以二进制整数的形式为 ACCU 1 装载定时器 T1 的当前定时器值。 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 Time value (0 to 999) in binary coding Time base 00 = 10 ms 01 = 100 ms 10 = 1 s 11 = 10 s L T1 Time value (0 to 999) in binary coding Timer word for timer T1 in memory Contents of ACCU1-L after Load instruction L T1 All "0" 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 205 定时器指令 12.4 L 将当前定时器值作为整数载入 ACCU 1 注意 L <定时器> 只将当前定时器值的二进制代码装入 ACCU1-L,而不装载时间基准。装载的时间为初始 值减去自定时器启动后所消耗的时间。 S7-300 和 S7-400 编程的语句表(STL) 206 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.5 LC 将当前定时器值作为 BCD 载入 ACCU 1 12.5 LC 将当前定时器值作为 BCD 载入 ACCU 1 格式 LC <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 在将 ACCU 1 的内容存入 ACCU 2 中后,LC <定时器>会从寻址定时器字中以二进制编码的十进制 (BCD)数的形式将当前定时器值和时间基准装入 ACCU 1 中。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 207 定时器指令 12.5 LC 将当前定时器值作为 BCD 载入 ACCU 1 实例 STL 解释 LC T1 //以二进制编码十进制(BCD)的格式为 ACCU 1-L 装载定时器 T1 的时间基准和当前定时器值。 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 Time value (0 to 999) in binary coding Time base 00 = 10 ms 01 = 100 ms 10 = 1 s 11 = 10 s LC T1 Binary to BCD Time value in BCD Timer word for timer T1 in memory Contents of ACCU1-L after Load instruction LC T1 0 0 0 0 20 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 101 Tens 100 Ones 102 Hundreds Time base 00 = 10 ms 01 = 100 ms 10 = 1 s 11 = 10 s S7-300 和 S7-400 编程的语句表(STL) 208 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.6 R 复位定时器 12.6 R 复位定时器 格式 R <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 如果在 RLO 从 0 跳转到 1,R <定时器>会停止当前计时功能并清除寻址定时器字的定时器值和时间 基准。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 实例 STL 解释 A I 2.1 R T1 //检查输入 I 2.1 的信号状态。如果 RLO 从 0 跳转到 1,则复位定时器 T1。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 209 定时器指令 12.7 SP 脉冲定时器 12.7 SP 脉冲定时器 格式 SP <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 SP <定时器> 在 RLO 从"0"跳转到"1"时启动寻址的定时器。只要 RLO = 1,程序时间间隔就会流逝。 如果在程序时间间隔截止之前 RLO 跳转到"0",则停止计时器。此定时器启动指令要求将时间值和时 间基准作为 BCD 数存储在 ACCU 1-L 中。 参见定时器在存储器中的位置与定时器组件。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 S7-300 和 S7-400 编程的语句表(STL) 210 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.7 SP 脉冲定时器 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SP T1 //启动定时器 T1 以作为脉冲定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制形式装载定时器 T1 的当前时间值。 T MW10 LC T1 //以 BCD 形式装载定时器 T1 的当前时间值。 T MW12 I 2.0 I 2.1 I 2.2 Q 4.0 t = programmed time interval t Enable input Start input Reset input Timer Output Load timer: L, LC S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 211 定时器指令 12.8 SE 扩展脉冲定时器 12.8 SE 扩展脉冲定时器 格式 SE <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 SE <定时器> 在 RLO 从"0"跳转到"1"时启动寻址的定时器。程序时间间隔会流逝,即使 RLO 在这段 时间内跳转到"0"。如果在程序时间间隔截止之前 RLO 从"0"跳转到"1",则重新开始程序时间间隔。此 定时器启动指令要求将时间值和时间基准作为 BCD 数存储在 ACCU 1-L 中。 参见定时器在存储器中的位置与定时器组件。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 S7-300 和 S7-400 编程的语句表(STL) 212 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.8 SE 扩展脉冲定时器 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SE T1 //将定时器 T1 启动为扩展脉冲定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制形式装载定时器 T1 的当前定时器值。 T MW10 LC T1 //以 BCD 形式装载定时器 T1 的当前定时器值。 T MW12 t = programmed time interval I 2.0 I 2.1 I 2.2 Q 4.0 t Enable input Start input Reset input Timer Output Load timer: L, LC S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 213 定时器指令 12.9 SD 接通延迟定时器 12.9 SD 接通延迟定时器 格式 SD <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 在 RLO 从"0"跳转到"1"时,SD <定时器>启动寻址的定时器。只要 RLO = 1,程序时间间隔就会流 逝。如果在程序时间间隔截止之前 RLO 跳转到"0",则停止计时。此定时器启动指令要求将时间值和 时间基准作为 BCD 数存储在 ACCU 1-L 中。 参见定时器在存储器中的位置与定时器组件。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 S7-300 和 S7-400 编程的语句表(STL) 214 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.9 SD 接通延迟定时器 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SD T1 //启动定时器 T1 作为接通延时定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制形式装载定时器 T1 的当前定时器值。 T MW10 LC T1 //以 BCD 形式装载定时器 T1 的当前定时器值。 T MW12 I 2.0 I 2.1 I 2.2 t =programmed time interval t t Q 4.0 Enable Input Start Input Reset Input Timer Output Load Timer: L, LC S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 215 定时器指令 12.10 SS 掉电保护接通延时定时器 12.10 SS 掉电保护接通延时定时器 格式 SS <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 SS <定时器> (将定时器启动为带保持的接通定时器)在 RLO 从"0"跳转到"1"时启动寻址的定时器。完 整的程序时间间隔会流逝,即使 RLO 在这段时间内跳转到"0"。如果在程序时间间隔截止之前 RLO 从 "0"跳转到"1",则重新触发程序时间间隔(重新启动)。此定时器启动指令要求将时间值和时间基准作为 BCD 数存储在 ACCU 1-L 中。 参见定时器在存储器中的位置与定时器组件。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 S7-300 和 S7-400 编程的语句表(STL) 216 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.10 SS 掉电保护接通延时定时器 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SS T1 //将定时器 T1 启动为带保持的接通延时定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制形式装载定时器 T1 的当前时间值。 T MW10 LC T1 //以 BCD 形式装载定时器 T1 的当前时间值。 T MW12 I 2.0 I 2.1 I 2.2 t = programmed time interval Q 4.0 t Start input Enable input Reset input Timer Output Load timer: L, LC S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 217 定时器指令 12.11 SF 断开延时定时器 12.11 SF 断开延时定时器 格式 SF <定时器> 地址 数据类型 存储区 描述 <定时器> TIMER T 定时器编号、范围取决于 CPU 指令描述 SF <定时器> 在 RLO 从"1"跳转到"0"时启动寻址的定时器。只要 RLO = 0,程序时间间隔就会流逝。 如果在程序时间间隔截止之前 RLO 跳转到"1",则停止计时。此定时器启动指令要求将时间值和时间 基准作为 BCD 数存储在 ACCU 1-L 中。 参见定时器在存储器中的位置与定时器组件。 状态字 BIE A1 A0 OV OS OR STA VKE /ER 写: - - - - - 0 - - 0 S7-300 和 S7-400 编程的语句表(STL) 218 参考手册, 05/2017, A5E41525031-AA 定时器指令 12.11 SF 断开延时定时器 实例 STL 解释 A I 2.0 FR T1 //启用定时器 T1。 A I 2.1 L S5T#10s //在 ACCU 1 中预置 10s。 SF T1 //将定时器 T1 启动为断开延时定时器。 A I 2.2 R T1 //复位定时器 T1。 A T1 //检查定时器 T1 的信号状态。 = Q 4.0 L T1 //以二进制形式装载定时器 T1 的当前定时器值。 T MW10 LC T1 //以 BCD 形式装载定时器 T1 的当前定时器值。 T MW12 t = programmed time interval I 2.0 I 2.1 I 2.2 Q 4.0 t t Enable input Start input Reset input Timer Output Load timer: L, LC S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 219 定时器指令 12.11 SF 断开延时定时器 S7-300 和 S7-400 编程的语句表(STL) 220 参考手册, 05/2017, A5E41525031-AA 13 字逻辑指令 13.1 字逻辑指令概述 描述 字逻辑指令按照布尔逻辑逐位比较字(16 位)和双字(32 位)对。每个字或双字必须位于两个累加器其中 一个之内。 对于字而言,累加器 2 的低字中的内容会与累加器 1 的低字中的内容组合。组合结果存储在累加器 1 的低字中,同时覆盖原有的内容。 对于双字而言,累加器 2 的内容与累加器 1 的内容相组合。组合结果存储在累加器 1 中,同时覆盖原 有的内容。 如结果不等于 0,则将状态字的位 CC 1 置为"1"。如结果等于 0,则将状态字的位 CC 1 置为"0"。 要执行字逻辑运算,可使用下列指令: • AW 单字与运算(16 位) • OW 单字或运算(16 位) • XOW 单字异或运算(16 位) • AD 双字与运算(32 位) • OD 双字或运算(32 位) • XOD 双字异或运算(32 位) S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 221 字逻辑指令 13.2 AW 单字与运算(16 位) 13.2 AW 单字与运算(16 位) 格式 AW AW <常数> 地址 数据类型 描述 <常数> WORD, 16 位常数 使用与运算(AND)同 ACCU 1-L 组合的位模式 指令描述 AW (单字与运算)根据布尔逻辑与运算,将 ACCU 1-L 的内容与 ACCU 2-L 的内容或与 16 位常数逐位 进行组合。只有当两个在逻辑运算中组合的两个字的相应位都为"1"时,结果字中的位才为"1"。结果 存储在 ACCU 1-L 中。ACCU 1-H 和 ACCU 2 (以及 ACCU 3 和 ACCU 4,对于具有四个 ACCU 的 CPU)保持不变。状态位 CC 1 被置为运算结果(如结果不等于零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 AW:组合 ACCU 1-L 和 ACCU 2-L。 AW <常数>:将 ACCU 1 和 16 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 15 . . . . . . . . . . 0 执行 AW 前的 ACCU 1-L 0101 1001 0011 1011 ACCU 2-L 或 16 位常数: 1111 0110 1011 0101 执行 AW 后的结果(ACCU 1-L) 0101 0000 0011 0001 S7-300 和 S7-400 编程的语句表(STL) 222 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.2 AW 单字与运算(16 位) 实例 1 STL 解释 L IW20 //将 IW20 的内容装入 ACCU 1-L。 L IW22 //将 ACCU 1 的内容装载到 ACCU 2 中。 //将 IW22 的内容装入 ACCU 1-L。 AW //使用与运算将 ACCU 1-L 中的位与 ACCU 2-L 的位相组合, //将结果存储在 ACCU 1-L 中。 T MW 8 //将结果传送到 MW8。 实例 2 STL 解释 L IW20 //将 IW20 的内容装入 ACCU 1-L。 AW W#16#0FFF //使用与运算,将 ACCU 1-L 的位与 16 位常数 //(0000_1111_1111_1111)的位模式组合,将结果存储在 ACCU 1-L 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 223 字逻辑指令 13.3 OW 单字或运算(16 位) 13.3 OW 单字或运算(16 位) 格式 OW OW <常数> 地址 数据类型 描述 <常数> WORD, 16 位常数 使用或运算(OR)与 ACCU 1-L 组合的位模式 指令描述 OW (单字或运算)根据布尔逻辑或运算,将 ACCU 1-L 的内容与 ACCU 2-L 的内容或与 16 位常数逐位 组合。只有当在逻辑运算中组合的两个字的相应位中至少有一位是"1"时,结果字中的位才为"1"。结 果存储在 ACCU 1-L 中。ACCU 1-H 和 ACCU 2 (以及 ACCU 3 和 ACCU 4,对于具有四个 ACCU 的 CPU)保持不变。执行该指令时不涉及 RLO,也不会影响 RLO。状态位 CC 1 被置为运算结果(如结果 不等于零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 OW:组合 ACCU 1-L 和 ACCU 2-L。 OW <常数>:将 ACCU 1-L 与 16 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 15 . . . . . . . . . . 0 执行 OW 前的 ACCU 1-L 0101 0101 0011 1011 ACCU 2-L 或 16 位常数: 1111 0110 1011 0101 执行 OW 后的结果(ACCU 1-L) 1111 0111 1011 1111 S7-300 和 S7-400 编程的语句表(STL) 224 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.3 OW 单字或运算(16 位) 实例 1 STL 解释 L IW20 //将 IW20 的内容装入 ACCU 1-L。 L IW22 //将 ACCU 1 的内容装载到 ACCU 2 中。 //将 IW22 的内容装入 ACCU 1-L。 OW //使用或运算,将 ACCU 1-L 中的位与 ACCU 2-L 的位组合,将结果存储在 ACCU 1-L 中。 T MW8 //将结果传送到 MW8。 实例 2 STL 解释 L IW20 //将 IW 20 的内容装入 ACCU 1-L。 OW W#16#0FFF //使用或运算,将 ACCU 1-L 的位与 16 位常数 //(0000_1111_1111_1111)的位模式相组合,将结果存储在 ACCU 1-L 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 225 字逻辑指令 13.4 XOW 单字异或运算(16 位) 13.4 XOW 单字异或运算(16 位) 格式 XOW XOW <常数> 地址 数据类型 描述 <常数> WORD, 16 位常数 使用异或(XOR)运算与 ACCU 1-L 组合的位模式 指令描述 XOW (单字异或运算)根据布尔逻辑异或运算,将 ACCU 1-L 的内容与 ACCU 2-L 的内容或与 16 位的 常数逐位组合。只有当两个在逻辑运算中组合的字的相应位中有一位是"1"时,结果字中的位才为"1"。 结果存储在 ACCU 1-L 中。ACCU 1-H 和 ACCU 2 保持不变。状态位 CC 1 被置为运算结果(如结果不 等于零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 可多次使用异或运算函数。如果所选中地址有奇数个"1",则逻辑运算结果为"1"。 XOW:组合 ACCU 1-L 和 ACCU 2-L。 XOW <常数>:将 ACCU 1-L 与 16 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 15 . . . . . . . . . . 0 执行 XOW 前的 ACCU 1 0101 0101 0011 1011 ACCU 2-L 或 16 位常数: 1111 0110 1011 0101 执行 XOW 后的结果(ACCU 1) 1010 0011 1000 1110 S7-300 和 S7-400 编程的语句表(STL) 226 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.4 XOW 单字异或运算(16 位) 实例 1 STL 解释 L IW20 //将 IW20 的内容装入 ACCU 1-L。 L IW22 //将 ACCU 1 的内容装载到 ACCU 2 中。将 ID24 的内容装入 ACCU 1-L。 XOW //使用异或运算,将 ACCU 1-L 的位与 ACCU 2-L 的位组合,将结果存储在 ACCU 1-L 中。 T MW8 //将结果传送到 MW8。 实例 2 STL 解释 L IW20 //将 IW20 的内容装入 ACCU 1-L。 XOW 16#0FFF //使用异或运算,将 ACCU 1-L 的位与 16 位常数(0000_1111_1111_1111)的位模式相组合, //将结果存储在 ACCU 1-L 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 227 字逻辑指令 13.5 AD 双字与运算(32 位) 13.5 AD 双字与运算(32 位) 格式 AD AD <常数> 地址 数据类型 描述 <常数> DWORD, 32 位常数 使用与运算(AND)与 ACCU 1 组合的位模式 指令描述 AD (双字与运算)根据布尔逻辑与运算,将 ACCU 1 的内容与 ACCU 2 的内容或与 32 位的常数逐位进 行组合。只有当在逻辑运算中组合的两个双字的相应位都为"1"时,结果双字中的位才为"1"。该结果 存储在 ACCU 1 中。ACCU 2 (以及 ACCU 3 和 ACCU 4,对于具有四个 ACCU 的 CPU)保持不变。 状态位 CC 1 被置为运算结果(如结果不等于零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 AD:将 ACCU 1 与 ACCU 2 组合。 AD <常数>:将 ACCU 1 和 32 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 31 . . . . . . . . . . . . . . . . . 0 执行 UD 前的 ACCU 1 0101 0000 1111 1100 1000 1001 0011 1011 ACCU 2 或 32 位常数 1111 0011 1000 0101 0111 0110 1011 0101 执行 UD 后的结果(ACCU 1) 0101 0000 1000 0100 0000 0000 0011 0001 S7-300 和 S7-400 编程的语句表(STL) 228 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.5 AD 双字与运算(32 位) 实例 1 STL 解释 L ID20 //将 ID20 的内容装入 ACCU 1。 L ID24 //将 ACCU 1 的内容装载到 ACCU 2 中。将 ID20 的内容装入 //ACCU 1。 AD //使用与运算将 ACCU 1 中的位与 ACCU 2 中的位组合,将结果存储在 ACCU 1 中。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L ID 20 //将 ID20 的内容装入 ACCU 1。 AD DW#16#0FFF_EF21 //使用与运算将 ACCU 1 的位与 32 位常数 //(0000_1111_1111_1111_1110_1111_0010_0001)的位模式组合, //将结果存储在 ACCU 1 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签 //(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 229 字逻辑指令 13.6 OD 双字或运算(32 位) 13.6 OD 双字或运算(32 位) 格式 OD OD <常数> 地址 数据类型 描述 <常数> DWORD, 32 位常数 使用或运算(OR)与 ACCU 1 组合的位模式 指令描述 OD (双字或运算)根据布尔逻辑或运算,将 ACCU 1 的内容与 ACCU 2 的内容或与 32 位常数逐位组合。 只有当在逻辑运算中组合的两个双字的相应位中至少有一位是"1"时,结果双字中的位才为"1"。该结 果存储在 ACCU 1 中。ACCU 2 (以及 ACCU 3 和 ACCU 4,对于具有四个 ACCU 的 CPU)保持不变。 状态位 CC 1 被置为运算结果的函数(如结果不等于零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 OD:将 ACCU 1 与 ACCU 2 组合。 OD <常数>:将 ACCU 1 和 32 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 31 . . . . . . . . . . . . . . . . . 0 执行 OD 前的 ACCU 1 0101 0000 1111 1100 1000 0101 0011 1011 ACCU 2 或 32 位常数: 1111 0011 1000 0101 0111 0110 1011 0101 执行 OD 后的结果(ACCU 1) 1111 0011 1111 1101 1111 0111 1011 1111 S7-300 和 S7-400 编程的语句表(STL) 230 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.6 OD 双字或运算(32 位) 实例 1 STL 解释 L ID20 //将 ID20 的内容装入 ACCU 1。 L ID24 //将 ACCU 1 的内容装载到 ACCU 2 中。将 ID20 的内容装入 //ACCU 1。 OD //使用或运算,将 ACCU 1 中的位与 ACCU 2 中的位组合,将结果存储在 //ACCU 1 中。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L ID20 //将 ID20 的内容装入 ACCU 1。 OD DW#16#0FFF_EF21 //使用或运算,将 ACCU 1 中的位与 32 位常数 //(0000_1111_1111_1111_1110_1111_0010_0001)的位模式组合,将结果存储在 //ACCU 1 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 231 字逻辑指令 13.7 XOD 双字异或运算(32 位) 13.7 XOD 双字异或运算(32 位) 格式 XOD XOD <常数> 地址 数据类型 描述 <常数> DWORD, 32 位常数 使用异或 (XOR)运算与 ACCU 1 组合的位模式。 指令描述 XOD (双字异或运算)根据布尔逻辑 XOR(异或)运算,将 ACCU 1 的内容与 ACCU 2 的内容或与 32 位 常数逐位组合。当在逻辑运算中组合的两个双字的相应位中仅有一位是"1"时,结果双字中的位才为 "1"。该结果存储在 ACCU 1 中。ACCU 2 保持不变。状态位 CC 1 被置为运算的结果(如结果不等于 零,则 CC 1 = 1)。复位状态字的位 CC 0 和 OV 为 0。 可多次使用异或运算函数。如果所选中地址有奇数个"1",则逻辑运算结果为"1"。 XOD:将 ACCU 1 与 ACCU 2 组合。 XOD <常数>:将 ACCU 1 和 32 位常数组合。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - x 0 0 - - - - - 实例 位 31 . . . . . . . . . . . . . . . . . 0 执行 XOD 前的 ACCU 1 0101 0000 1111 1100 1000 0101 0011 1011 ACCU 2 或 32 位常数: 1111 0011 1000 0101 0111 0110 1011 0101 执行 XOD 后的结果(ACCU 1) 1010 0011 0111 1001 1111 0011 1000 1110 S7-300 和 S7-400 编程的语句表(STL) 232 参考手册, 05/2017, A5E41525031-AA 字逻辑指令 13.7 XOD 双字异或运算(32 位) 实例 1 STL 解释 L ID20 //将 ID20 的内容装入 ACCU 1。 L ID24 //将 ACCU 1 的内容装载到 ACCU 2 中。将 ID20 的内容装入 //ACCU 1。 XOD //使用异或运算,将 ACCU 1 中的位与 ACCU 2 的位组合, //将结果存储在 ACCU 1 中。 T MD8 //将结果传送到 MD8。 实例 2 STL 解释 L ID20 //将 ID20 的内容装入 ACCU 1。 XOD DW#16#0FFF_EF21 //使用异或运算,将 ACCU 1 中的位与 32 位常数 //(0000_1111_1111_1111_1111_1110_0010_0001)的位模式组合, //将结果存储在 ACCU 1 中。 JP NEXT //如结果不等于零,则跳转到下一个跳转标签 //(CC 1 = 1)。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 233 字逻辑指令 13.7 XOD 双字异或运算(32 位) S7-300 和 S7-400 编程的语句表(STL) 234 参考手册, 05/2017, A5E41525031-AA 14 累加器指令 14.1 累加器和地址寄存器指令概述 描述 下列指令可用于处理一个或两个累加器的内容: • TAK 将 ACCU 1 与 ACCU 2 互换 • PUSH 具有两个 ACCU 的 CPU • PUSH 具有四个 ACCU 的 CPU • POP 具有两个 ACCU 的 CPU • POP 具有四个 ACCU 的 CPU • ENT 进入 ACCU 堆栈 • LEAVE 离开 ACCU 堆栈 • INC 增加 ACCU 1-L-L • DEC 减少 ACCU 1-L-L • +AR1 将 ACCU 1 加到地址寄存器 1 • +AR2 将 ACCU 1 加到地址寄存器 2 • BLD 程序显示指令(空) • NOP 0 空指令 • NOP 1 空指令 参见 • CAW 改变 ACCU 1-L (16 位)中的字节顺序 • CAD 改变 ACCU 1 (32 位)中的字节顺序 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 235 累加器指令 14.2 TAK 将 ACCU 1 与 ACCU 2 互换 14.2 TAK 将 ACCU 1 与 ACCU 2 互换 格式 TAK 描述 TAK (将 ACCU 1 与 ACCU 2 互换)将把 ACCU 1 的内容与 ACCU 2 的内容交换。执行该指令时不考 虑状态位,也不会影响状态位。对具有四个 ACCU 的 CPU,ACCU 3 和 ACCU 4 的内容保持不变。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例:从较大值中减去较小值 STL 解释 L MW10 //将 MW10 的内容载入 ACCU 1-L。 L MW12 //将 ACCU 1-L 的内容装载到 ACCU 2-L 中。将 MW12 //的内容载入 ACCU 1-L。 > I //检查 ACCU 2-L (MW10)是否大于 ACCU 1-L (MW12)。 SPB NEXT //如果 ACCU 2 (MW10)大于 ACCU 1 (MW12),则跳转到 NEXT 跳转标签。 TAK //将 ACCU 1 的内容与 ACCU 2 的内容交换 NEXT: –I //从 ACCU 1-L 的内容中减去 ACCU 2-L 的内容。 T MW14 //将结果(= 较大值减较小值)传送到 MW14。 目录 ACCU 1 ACCU 2 执行 TAK 指令之前 执行 TAK 指令之后 S7-300 和 S7-400 编程的语句表(STL) 236 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.3 POP 具有两个 ACCU 的 CPU 14.3 POP 具有两个 ACCU 的 CPU 格式 POP 描述 POP (具有两个 ACCU 的 CPU)将 ACCU 2 的全部内容复制到 ACCU 1。ACCU 2 保持不变。执行该 指令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 T MD10 //将 ACCU 1 的内容(= 值 A)传送到 MD10 POP //将 ACCU 2 的整个内容复制到 ACCU 1 T MD14 //将 ACCU 1 的内容(= 值 B)传送到 MD14 目录 ACCU 1 ACCU 2 执行 POP 指令之前 值 A 值 B 执行 POP 指令之后 值 B 值 B S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 237 累加器指令 14.4 POP 具有四个 ACCU 的 CPU 14.4 POP 具有四个 ACCU 的 CPU 格式 POP 描述 POP (具有四个 ACCU 的 CPU)将 ACCU 2 的全部内容复制到 ACCU 1,将 ACCU 3 的内容复制到 ACCU 2,并将 ACCU 4 的内容复制到 ACCU 3。ACCU 4 保持不变。执行该指令时不考虑状态位, 也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 T MD10 //将 ACCU 1 的内容(= 值 A)传送到 MD10 POP //将 ACCU 2 的整个内容复制到 ACCU 1 T MD14 //将 ACCU 1 的内容(= 值 B)传送到 MD14 目录 ACCU 1 ACCU 2 ACCU 3 ACCU 4 执行 POP 指令之前 值 A 值 B 值 C 值 D 执行 POP 指令之后 值 B 值 C 值 D 值 D S7-300 和 S7-400 编程的语句表(STL) 238 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.5 PUSH 具有两个 ACCU 的 CPU 14.5 PUSH 具有两个 ACCU 的 CPU 格式 PUSH 描述 PUSH (ACCU 1 到 ACCU 2)将 ACCU 1 的整个内容复制到 ACCU 2。ACCU 1 保持不变。执行该指 令时不考虑状态位,也不会影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 //将 MW10 的内容载入 ACCU 1。 PUSH //将 ACCU 1 的整个内容复制到 ACCU 2 目录 ACCU 1 ACCU 2 执行 PUSH 指令之前 执行 PUSH 指令之后 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 239 累加器指令 14.6 PUSH 具有四个 ACCU 的 CPU 14.6 PUSH 具有四个 ACCU 的 CPU 格式 PUSH 描述 PUSH (具有四个 ACCU 的 CPU)将 ACCU 3 的内容复制到 ACCU 4,将 ACCU 2 的内容复制到 ACCU 3,并将 ACCU 1 的内容复制到 ACCU 2。ACCU 1 保持不变。执行该指令时不考虑状态位,也不会 影响状态位。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MW10 //将 MW10 的内容载入 ACCU 1。 PUSH //将 ACCU 1 的整个内容复制到 ACCU 2,将 ACCU 2 的内容复制到 ACCU 3, //并将 ACCU 3 的内容复制到 ACCU 4。 目录 ACCU 1 ACCU 2 ACCU 3 ACCU 4 执行 PUSH 指令之前 值 A 值 B 值 C 值 D 执行 PUSH 指令之后 值 A 值 A 值 B 值 C S7-300 和 S7-400 编程的语句表(STL) 240 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.7 ENT 进入 ACCU 堆栈 14.7 ENT 进入 ACCU 堆栈 格式 ENT 描述 ENT (进入累加器堆栈)将把 ACCU 3 的内容复制到 ACCU 4,并将 ACCU 2 的内容复制到 ACCU 3。 如果在装载指令前面直接编程 ENT 指令,则可将中间结果保存到 ACCU 3 中。 实例 STL 解释 L DBD0 //从数据双字 DBD0 中将值载入 ACCU 1。 //(该值必须为浮点数格式。) L DBD4 //将值从 ACCU 1 复制到 ACCU 2。 //从数据双字 DBD4 中将值载入 ACCU 1。(该值必须为浮点数格式)。 +R //将 ACCU 1 和 ACCU 2 的内容作为浮点数(32 位,IEEE 754)相加,并将结果保存到 ACCU 1 中。 L DBD8 //将值从 ACCU 1 复制到 ACCU 2,并从数据双字 DBD8 中将值载入 ACCU 1。 ENT //将 ACCU 3 的内容复制到 ACCU 4。将 ACCU 2 的内容(中间结果) //复制到 ACCU 3。 L DBD12 //从数据双字 DBD12 中将值载入 ACCU 1。 –R //从 ACCU 2 的内容中减去 ACCU 1 的内容,并将结果保存在 ACCU 1 中。 //将 ACCU 3 的内容复制到 ACCU 2。 //将 ACCU 4 的内容复制到 ACCU 3。 /R //将 ACCU 2 (DBD0 + DBD4)的内容除以 ACCU 1 (DBD8 - DBD12)的内容。 //将结果保存在 ACCU 1 中。 T DBD16 //将结果(ACCU 1)传送到数据双字 DBD16。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 241 累加器指令 14.8 LEAVE 离开 ACCU 堆栈 14.8 LEAVE 离开 ACCU 堆栈 格式 LEAVE 描述 LEAVE (离开累加器堆栈)将 ACCU 3 的内容复制到 ACCU 2,并将 ACCU 4 的内容复制到 ACCU 3。 如果在移位或循环指令前面直接编程 LEAVE 指令,并将各累加器组合,则 leave 指令就可起到数学 运算指令的作用。ACCU 1 的内容和 ACCU 4 的内容保持不变。 14.9 INC 增加 ACCU 1-L-L 格式 INC <8 位整数> 参数 数据类型 描述 <8 位整数> 8 位整型常数 加到 ACCU 1-L-L 上的常数,范围从 0 至 255 描述 INC <8位整数> (增加ACCU 1-L-L)将ACCU 1-L-L 的内容加上8位整数,并将结果存储在ACCU 1-L-L 中。ACCU 1-L-H、ACCU 1-H 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响状态 位。 注意 这些指令不适合 16 位或 32 位数学运算,因为从累加器 1 的低字的低字节到累加器 1 的低字的高字节 不会产生进位。对 16 位或 32 位算术运算,分别使用+I 或+D 指令。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 242 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.9 INC 增加 ACCU 1-L-L 实例 STL 解释 L MB22 //载入 MB22 的值 INC 1 //指令"ACCU 1(MB22)加 1";结果存储在 ACCU 1-L-L 中 T MB22 //将 ACCU 1-L-L 的内容(结果)传送回 MB22。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 243 累加器指令 14.10 DEC 减少 ACCU 1-L-L 14.10 DEC 减少 ACCU 1-L-L 格式 DEC <8 位整数> 地址 数据类型 描述 <8 位整数> 8 位整型常数 ACCU 1-L-L 减去常数,范围从 0 至 255 描述 DEC <8 位整数> (减少 ACCU 1-L-L)从 ACCU 1-L-L 的内容中减去 8 位整数,并将结果存储在 ACCU 1-L-L 中。ACCU 1-L-H、ACCU 1-H 和 ACCU 2 保持不变。执行该指令时不考虑状态位,也不会影响 状态位。 注意 这些指令不适合 16 位或 32 位数学运算,因为从累加器 1 的低字的低字节到累加器 1 的低字的高字节 不会产生进位。对 16 位或 32 位算术运算,分别使用+I 或+D 指令。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 STL 解释 L MB250 //载入 MB250 的值 DEC 1 //指令"ACCU 1-L-L 减 1",结果存储在 ACCU 1-L-L 中。 T MB250 //将 ACCU 1-L-L 的内容(结果)传送回 MB250。 S7-300 和 S7-400 编程的语句表(STL) 244 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.11 +AR1 将 ACCU 1 加到地址寄存器 1 14.11 +AR1 将 ACCU 1 加到地址寄存器 1 格式 +AR1 +AR1 参数 数据类型 描述 指针常数 被加到 AR1 上的地址 描述 +AR1 (加到 AR1)将在语句或 ACCU 1-L 中指定的偏移量加到 AR1 的内容上。首先将整数(16 位)扩展 为符号正确的 24 位,然后将其加到 AR1 的最低有效的 24 位(AR1 中的相对地址的一部分)。在 AR1 中,区域 ID 的部分(位 24、25 和 26)保持不变。执行该指令时不考虑状态位,也不会影响状态位。 +AR1:要加到 AR1 的内容中的整数(16 位)由 ACCU 1-L 中的值指定。允许的值范围为 -32768 至 +32767。 +AR1 :要加的偏移量由 地址指定。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 1 STL 解释 L +300 //将值载入 ACCU 1-L +AR1 //将 ACCU 1-L (整数,16 位)加到 AR1。 实例 2 STL 解释 +AR1 P#300.0 //将偏移量 300.0 加到 AR1。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 245 累加器指令 14.12 +AR2 将 ACCU 1 加到地址寄存器 2 14.12 +AR2 将 ACCU 1 加到地址寄存器 2 格式 +AR2 +AR2 参数 数据类型 描述 指针常数 被加到 AR2 上的地址 描述 +AR2 (加到 AR2)将在指令或 ACCU 1-L 中指定的偏移量加到 AR2 的内容中。首先将整数(16 位)扩展 为符号正确的 24 位,然后将其加到 AR2 的最低有效的 24 位(AR2 中的相对地址的一部分)。在 AR2 中,区域 ID 的部分(位 24、25 和 26)保持不变。执行该指令时不考虑状态位,也不会影响状态位。 +AR2:要加到 AR2 的内容中的整数(16 位)由 ACCU 1-L 中的值指定。允许的值范围为 -32768 至 +32767。 +AR2 :要加的偏移量由 地址指定。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 实例 1 STL 解释 L +300 //载入 ACCU 1-L 中的值。 +AR1 //将 ACCU 1-L (整数,16 位)加到 AR2。 实例 2 STL 解释 +AR1 P#300.0 //将偏移量 30.0 加到 AR2。 S7-300 和 S7-400 编程的语句表(STL) 246 参考手册, 05/2017, A5E41525031-AA 累加器指令 14.13 BLD 程序显示指令(空) 14.13 BLD 程序显示指令(空) 格式 BLD <数字> 地址 描述 <数字> 数字指定 BLD 指令,范围从 0 至 255 描述 BLD <数字> (程序显示指令;空指令)不执行任何功能,并且不影响状态位。该指令用于编程设备(PG) 的图形显示。在 STL 中显示梯形图或 FBD 程序时将自动创建它。地址 <数字> 指定 BLD 指令并由编 程设备生成。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - 14.14 NOP 0 空指令 格式 NOP 0 描述 NOP 0 (地址为"0"的指令 NOP)不执行任何功能,并且不影响状态位。该指令代码包含具有 16 个零的 位模式。当显示某个程序时,该指令仅对编程设备(PG)有用。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 247 累加器指令 14.15 NOP 1 空指令 14.15 NOP 1 空指令 格式 NOP 1 描述 NOP 1 (地址为"1"的指令 NOP)不执行任何功能,并且不影响状态位。该指令代码包含具有 16 个"1" 的位模式。当显示某个程序时,该指令仅对编程设备(PG)有用。 状态字 BR CC 1 CC 0 OV OS OR STA RLO /FC 写: - - - - - - - - - S7-300 和 S7-400 编程的语句表(STL) 248 参考手册, 05/2017, A5E41525031-AA A 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 + + 整型数学运算指令 加整型常数(16、32 位) = = 位逻辑指令 赋值 ) ) 位逻辑指令 嵌套结束 +AR1 +AR1 累加器 AR1 将 ACCU 1 加到地址寄存器 1 +AR2 +AR2 累加器 AR2 将 ACCU 1 加到地址寄存器 2 +D +D 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相加 -D -D 整型数学运算指令 以长整型(32 位)数的形式从 ACCU 2 中减去 ACCU 1 *D *D 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相乘 /D /D 整型数学运算指令 以长整型(32 位)数的形式用 ACCU 1 除 ACCU 2 ? D ? D 比较 比较长整型数(32 位) ==、<>、>、<、>=、<= +I +I 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为整型(16 位)相加 -I -I 整型数学运算指令 以整型(16 位)的形式从 ACCU 2 中减去 ACCU 1 *I *I 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为整型数(16 位)相乘 /I /I 整型数学运算指令 以整型数(16 位)的形式用 ACCU 1 除 ACCU 2 ? I ? I 比较 比较整型数(16 位) ==、<>、>、<、>=、<= +R +R 浮点型指令 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相加 -R -R 浮点型指令 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754)相减 *R *R 浮点型指令 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相乘 /R /R 浮点型指令 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754)相除 ? R ? R 比较 比较浮点数(32 位) ==、<>、>、<、>=、<= ABS ABS 浮点型指令 浮点数的(32 位 IEEE 754)绝对值 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 249 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 ACOS ACOS 浮点型指令 生成浮点数(32 位)的反余弦 ASIN ASIN 浮点型指令 生成浮点数(32 位)的反正弦 ATAN ATAN 浮点型指令 生成浮点数(32 位)的反正切 AUF OPN DB 调用 打开数据块 BE BE 程序控制 块结束 BEA BEU 程序控制 无条件的块结束 BEB BEC 程序控制 有条件的块结束 BLD BLD 程序控制 程序显示指令(空) BTD BTD 转换 将 BCD 码转换为整型(32 位) BTI BTI 转换 将 BCD 码转换为整型(16 位) CALL CALL 程序控制 块调用 CALL CALL 程序控制 调用多重背景 CALL CALL 程序控制 调用来自库的块 CC CC 程序控制 条件调用 CLR CLR 位逻辑指令 清除 RLO (=0) COS COS 浮点型指令 以浮点数(32 位)形式生成角的余弦 DEC DEC 累加器 减量 ACCU 1-L-L DTB DTB 转换 长整型(32 位)转换为 BCD 码 DTR DTR 转换 将长整型(32 位)转换为浮点数(32 位,IEEE 754) ENT ENT 累加器 进入 ACCU 堆栈 EXP EXP 浮点型指令 生成浮点数(32 位)的指数值 FN FN 位逻辑指令 下降沿 FP FP 位逻辑指令 上升沿 FR FR 计数器 启用计数器(自由) (自由,FR C 0 至 C 255) FR FR 定时器 启用定时器(自由) INC INC 累加器 增量 ACCU 1-L-L INVD INVD 转换 二进制反码双精度整数(32 位) INVI INVI 转换 对整数求反码(16 位) ITB ITB 转换 整型(16 位)转换为 BCD 码 ITD ITD 转换 整型(16 位)转换为长整型(32 位) L L 装载/传送 装载 L DBLG L DBLG 装载/传送 在 ACCU 1 中装载共享 DB 的长度 L DBNO L DBNO 装载/传送 在 ACCU 1 中装载共享 DB 的编号 L DILG L DILG 装载/传送 在 ACCU 1 中装载背景 DB 的长度 L DINO L DINO 装载/传送 在 ACCU 1 中装载背景 DB 的编号 L STW L STW 装载/传送 将状态字装载到 ACCU 1 中 S7-300 和 S7-400 编程的语句表(STL) 250 参考手册, 05/2017, A5E41525031-AA 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 L L 装载/传送 将当前定时器的值作为整数装入 ACCU 1 (当前定时器值可以是 0 至 255 之间的数字,例如 L T 32) L L 装载/传送 将当前计数器值装入 ACCU 1 (当前计数器值可以是 0 至 255 之 间的数字,例如 L C 15) LAR1 LAR1 装载/传送 从 ACCU 1 中装载地址寄存器 LAR1 LAR1 装载/传送 用长整型(32 位指针)装载地址寄存器 1 LAR1 LAR1 装载/传送 从地址寄存器 2 装载地址寄存器 1 LAR2 LAR2 装载/传送 从 ACCU 1 中装载地址寄存器 2 LAR2 LAR2 装载/传送 用长整型(32 位指针)装载地址寄存器 2 LC LC 计数器 将当前计数器的值以 BCD 码装入 ACCU 1 (当前定时器值可以 是 0 至 255 之间的数字,例如 LC C 15) LC LC 定时器 将当前定时器值以 BCD 码装入 ACCU 1 (当前计数器值可以是 0 至 255 之间的数字,例如 LC T 32) LEAVE LEAVE 累加器 离开 ACCU 堆栈 LN LN 浮点型指令 生成浮点数(32 位)的自然对数 LOOP LOOP 跳转 回路 MCR( MCR( 程序控制 将 RLO 保存在 MCR 堆栈中,开始 MCR )MCR )MCR 程序控制 结束 MCR MCRA MCRA 程序控制 激活 MCR 区域 MCRD MCRD 程序控制 取消激活 MCR 区域 MOD MOD 整型数学运算指令 除法余数为长整型(32 位) NEGD NEGD 转换 二进制补码双精度整数(32 位) NEGI NEGI 转换 对整数求补码(16 位) NEGR NEGR 转换 浮点数(32 位,IEEE 754)取反 NOP 0 NOP 0 累加器 空指令 NOP 1 NOP 1 累加器 空指令 NOT NOT 位逻辑指令 取反 RLO O O 位逻辑指令 或 O( O( 位逻辑指令 或运算嵌套开始 OD OD 字逻辑指令 双字或运算(32 位) ON ON 位逻辑指令 或非运算 ON( ON( 位逻辑指令 或非运算嵌套开始 OW OW 字逻辑指令 单字或运算(16 位) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 251 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 POP POP 累加器 具有两个 ACCU 的 CPU POP POP 累加器 具有四个 ACCU 的 CPU PUSH PUSH 累加器 具有两个 ACCU 的 CPU PUSH PUSH 累加器 具有四个 ACCU 的 CPU R R 位逻辑指令 复位 R R 计数器 复位计数器 (当前计数器可以是 0 至 255 之间的数字,例如 R C 15) R R 定时器 复位定时器 (当前计数器可以是 0 至 255 之间的数字,例如 R T 32) RLD RLD 移位/循环 双字循环左移(32 位) RLDA RLDA 移位/循环 通过 CC 1 (32 位)左循环 ACCU 1 RND RND 转换 取整 RND+ RND+ 转换 向上取整长整型 RND- RND- 转换 向下取整长整型 RRD RRD 移位/循环 双字循环右移(32 位) RRDA RRDA 移位/循环 经过 CC 1 (32 位)右循环 ACCU 1 S S 位逻辑指令 置位 S S 计数器 设置计数器预设值 (当前计数器可以是 0 至 255 之间的数字,例 如 S C 15) SA SF 定时器 断开延时定时器 SAVE SAVE 位逻辑指令 将 ROL 保存在 BR 寄存器中 SE SD 定时器 接通延时定时器 SET SET 位逻辑指令 置位 SI SP 定时器 脉冲定时器 SIN SIN 浮点型指令 以浮点数(32 位)形式生成角的正弦 SLD SLD 移位/循环 双字左移(32 位) SLW SLW 移位/循环 字左移(16 位) SPA JU 跳转 无条件跳转 SPB JC 跳转 如果 RLO = 1,则跳转 SPBB JCB 跳转 如果具有 BR 的 RLO = 1,则跳转 SPBI JBI 跳转 如果 BR = 1,则跳转 SPBIN JNBI 跳转 如果 BR = 0,则跳转 SPBN JCN 跳转 如果 RLO = 0,则跳转 SPBNB JNB 跳转 如果具有 BR 的 RLO = 0,则跳转 SPL JL 跳转 跳转到标签 SPM JM 跳转 如果为负,则跳转 SPMZ JMZ 跳转 如果为负或零,则跳转 S7-300 和 S7-400 编程的语句表(STL) 252 参考手册, 05/2017, A5E41525031-AA 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 SPN JN 跳转 如果非零,则跳转 SPO JO 跳转 如果 OV = 1,则跳转 SPP JP 跳转 如果为正,则跳转 SPPZ JPZ 跳转 如果为正或零,则跳转 SPS JOS 跳转 如果 OS = 1,则跳转 SPU JUO 跳转 如果无序,则跳转 SPZ JZ 跳转 如果为零,则跳转 SQR SQR 浮点型指令 生成浮点数(32 位)的平方 SQRT SQRT 浮点型指令 生成浮点数(32 位)的平方根 SRD SRD 移位/循环 双字右移(32 位) SRW SRW 移位/循环 单字右移(16 位) SS SS 定时器 带保持的接通延时定时器 SSD SSD 移位/循环 移位有符号长整数(32 位) SSI SSI 移位/循环 移位有符号长整型数(16 位) SV SE 定时器 扩展脉冲定时器 T T 装载/传送 传送 T STW T STW 装载/传送 将 ACCU 1 传送到状态字 TAD CAD 转换 改变 ACCU 1 (32 位)中的字节顺序 TAK TAK 累加器 切换 ACCU 1 与 ACCU 2 TAN TAN 浮点型指令 以浮点数(32 位)形式生成角的正切 TAR CAR 装载/传送 将地址寄存器 1 与地址寄存器 2 进行交换 TAR1 TAR1 装载/传送 将地址寄存器 1 传送到 ACCU 1 TAR1 TAR1 装载/传送 将地址寄存器 1 传送到目标地址(32 位指针) TAR1 TAR1 装载/传送 将地址寄存器 1 传送到地址寄存器 2 TAR2 TAR2 装载/传送 将地址寄存器 2 传送到地址寄存器 1 TAR2 TAR2 装载/传送 将地址寄存器 2 传送到目标地址(32 位指针) TAW CAW 转换 改变 ACCU 1-L (16 位)中的字节顺序 TDB CDB 转换 交换共享 DB 和背景 DB TRUNC TRUNC 转换 截尾 U A 位逻辑指令 与运算 U( A( 位逻辑指令 与运算嵌套开始 UC UC 程序控制 无条件调用 UD AD 字逻辑指令 双字与运算(32 位) UN AN 位逻辑指令 与非运算 UN( AN( 位逻辑指令 与非运算嵌套开始 UW AW 字逻辑指令 单字与运算(16 位) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 253 所有 STL 指令概述 A.1 按德语助记符(SIMATIC)排序的 STL 指令 德语 助记符 英语助记符 程序 元素 目录 描述 X X 位逻辑指令 异或运算 X( X( 位逻辑指令 异或运算嵌套开始 XN XN 位逻辑指令 同或运算 XN( XN( 位逻辑指令 同或运算嵌套开始 XOD XOD 字逻辑指令 双字异或运算(32 位) XOW XOW 字逻辑指令 单字异或运算(16 位) ZR CD 计数器 向下计数器 ZV CU 计数器 向上计数器 S7-300 和 S7-400 编程的语句表(STL) 254 参考手册, 05/2017, A5E41525031-AA 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 + + 整型数学运算指令 加整型常数(16、32 位) = = 位逻辑指令 赋值 ) ) 位逻辑指令 嵌套结束 +AR1 +AR1 累加器 AR1 将 ACCU 1 加到地址寄存器 1 +AR2 +AR2 累加器 AR2 将 ACCU 1 加到地址寄存器 2 +D +D 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相加 -D -D 整型数学运算指令 以长整型(32 位)数的形式从 ACCU 2 中减去 ACCU 1 *D *D 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相乘 /D /D 整型数学运算指令 以长整型(32 位)数的形式用 ACCU 1 除 ACCU 2 ? D ? D 比较 比较长整型数(32 位) ==、<>、>、<、>=、<= +I +I 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为整型(16 位)相加 -I -I 整型数学运算指令 以整型(16 位)的形式从 ACCU 2 中减去 ACCU 1 *I *I 整型数学运算指令 将 ACCU 1 和 ACCU 2 作为整型数(16 位)相乘 /I /I 整型数学运算指令 以整型数(16 位)的形式用 ACCU 1 除 ACCU 2 ? I ? I 比较 比较整型数(16 位) ==、<>、>、<、>=、<= +R +R 浮点型指令 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相加 -R -R 浮点型指令 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754)相减 *R *R 浮点型指令 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754)相乘 /R /R 浮点型指令 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754)相除 ? R ? R 比较 比较浮点数(32 位) ==、<>、>、<、>=、<= A U 位逻辑指令 与运算 A( U( 位逻辑指令 与运算嵌套开始 ABS ABS 浮点型指令 浮点数的(32 位 IEEE 754)绝对值 ACOS ACOS 浮点型指令 生成浮点数(32 位)的反余弦 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 255 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 AD UD 字逻辑指令 双字与运算(32 位) AN UN 位逻辑指令 与非运算 AN( UN( 位逻辑指令 与非运算嵌套开始 ASIN ASIN 浮点型指令 生成浮点数(32 位)的反正弦 ATAN ATAN 浮点型指令 生成浮点数(32 位)的反正切 AW UW 字逻辑指令 单字与运算(16 位) BE BE 程序控制 块结束 BEC BEB 程序控制 有条件的块结束 BEU BEA 程序控制 无条件的块结束 BLD BLD 程序控制 程序显示指令(空) BTD BTD 转换 将 BCD 码转换为整型(32 位) BTI BTI 转换 将 BCD 码转换为整型(16 位) CAD TAD 转换 改变 ACCU 1 (32 位)中的字节顺序 CALL CALL 程序控制 块调用 CALL CALL 程序控制 调用多重背景 CALL CALL 程序控制 调用来自库的块 CAR TAR 装载/传送 将地址寄存器 1 与地址寄存器 2 进行交换 CAW TAW 转换 改变 ACCU 1-L (16 位)中的字节顺序 CC CC 程序控制 条件调用 CD ZR 计数器 向下计数器 CDB TDB 转换 交换共享 DB 和背景 DB CLR CLR 位逻辑指令 清除 RLO (=0) COS COS 浮点型指令 以浮点数(32 位)形式生成角的余弦 CU ZV 计数器 向上计数器 DEC DEC 累加器 减量 ACCU 1-L-L DTB DTB 转换 长整型(32 位)转换为 BCD 码 DTR DTR 转换 将长整型(32 位)转换为浮点数(32 位,IEEE 754) ENT ENT 累加器 进入 ACCU 堆栈 EXP EXP 浮点型指令 生成浮点数(32 位)的指数值 FN FN 位逻辑指令 下降沿 FP FP 位逻辑指令 上升沿 FR FR 计数器 启用计数器(自由) (自由,FR C 0 至 C 255) FR FR 定时器 启用定时器(自由) INC INC 累加器 增量 ACCU 1-L-L INVD INVD 转换 二进制反码双精度整数(32 位) S7-300 和 S7-400 编程的语句表(STL) 256 参考手册, 05/2017, A5E41525031-AA 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 INVI INVI 转换 对整数求反码(16 位) ITB ITB 转换 整型(16 位)转换为 BCD 码 ITD ITD 转换 整型(16 位)转换为长整型(32 位) JBI SPBI 跳转 如果 BR = 1,则跳转 JC SPB 跳转 如果 RLO = 1,则跳转 JCB SPBB 跳转 如果具有 BR 的 RLO = 1,则跳转 JCN SPBN 跳转 如果 RLO = 0,则跳转 JL SPL 跳转 跳转到标签 JM SPM 跳转 如果为负,则跳转 JMZ SPMZ 跳转 如果为负或零,则跳转 JN SPN 跳转 如果非零,则跳转 JNB SPBNB 跳转 如果具有 BR 的 RLO = 0,则跳转 JNBI SPBIN 跳转 如果 BR = 0,则跳转 JO SPO 跳转 如果 OV = 1,则跳转 JOS SPS 跳转 如果 OS = 1,则跳转 JP SPP 跳转 如果为正,则跳转 JPZ SPPZ 跳转 如果为正或零,则跳转 JU SPA 跳转 无条件跳转 JUO SPU 跳转 如果无序,则跳转 JZ SPZ 跳转 如果为零,则跳转 L L 装载/传送 装载 L DBLG L DBLG 装载/传送 在 ACCU 1 中装载共享 DB 的长度 L DBNO L DBNO 装载/传送 在 ACCU 1 中装载共享 DB 的编号 L DILG L DILG 装载/传送 在 ACCU 1 中装载背景 DB 的长度 L DINO L DINO 装载/传送 在 ACCU 1 中装载背景 DB 的编号 L STW L STW 装载/传送 将状态字装载到 ACCU 1 中 L L 定时器 将当前定时器的值作为整数装入 ACCU 1 (当前定时器值可以是 0 至 255 之间的数字,例如 L T 32) L L 计数器 将当前计数器值装入 ACCU 1 (当前计数器值可以是 0 至 255 之 间的数字,例如 L C 15) LAR1 LAR1 装载/传送 从 ACCU 1 中装载地址寄存器 LAR1 LAR1 装载/传送 用长整型(32 位指针)装载地址寄存器 1 LAR1 AR2 LAR1 AR2 装载/传送 从地址寄存器 2 装载地址寄存器 1 LAR2 LAR2 装载/传送 从 ACCU 1 中装载地址寄存器 2 LAR2 LAR2 装载/传送 用长整型(32 位指针)装载地址寄存器 2 LC LC 计数器 将当前计数器的值以 BCD 码装入 ACCU 1 (当前定时器值可以 是 0 至 255 之间的数字,例如 LC C 15) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 257 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 LC LC 定时器 将当前定时器值以 BCD 码装入 ACCU 1 (当前计数器值可以是 0 至 255 之间的数字,例如 LC T 32) LEAVE LEAVE 累加器 离开 ACCU 堆栈 LN LN 浮点型指令 生成浮点数(32 位)的自然对数 LOOP LOOP 跳转 回路 MCR( MCR( 程序控制 将 RLO 保存在 MCR 堆栈中,开始 MCR )MCR )MCR 程序控制 结束 MCR MCRA MCRA 程序控制 激活 MCR 区域 MCRD MCRD 程序控制 取消激活 MCR 区域 MOD MOD 整型数学运算指令 除法余数为长整型(32 位) NEGD NEGD 转换 二进制补码双精度整数(32 位) NEGI NEGI 转换 对整数求补码(16 位) NEGR NEGR 转换 浮点数(32 位,IEEE 754)取反 NOP 0 NOP 0 累加器 空指令 NOP 1 NOP 1 累加器 空指令 NOT NOT 位逻辑指令 取反 RLO O O 位逻辑指令 或 O( O( 位逻辑指令 或运算嵌套开始 OD OD 字逻辑指令 双字或运算(32 位) ON ON 位逻辑指令 或非运算 ON( ON( 位逻辑指令 或非运算嵌套开始 OPN AUF DB 调用 打开数据块 OW OW 字逻辑指令 单字或运算(16 位) POP POP 累加器 具有两个 ACCU 的 CPU POP POP 累加器 具有四个 ACCU 的 CPU PUSH PUSH 累加器 具有两个 ACCU 的 CPU PUSH PUSH 累加器 具有四个 ACCU 的 CPU R R 位逻辑指令 复位 R R 计数器 复位计数器 (当前计数器可以是 0 至 255 之间的数字,例如 R C 15) R R 定时器 复位定时器 (当前计数器可以是 0 至 255 之间的数字,例如 R T 32) RLD RLD 移位/循环 双字循环左移(32 位) RLDA RLDA 移位/循环 通过 CC 1 (32 位)左循环 ACCU 1 RND RND 转换 取整 RND- RND- 转换 向下取整长整型 S7-300 和 S7-400 编程的语句表(STL) 258 参考手册, 05/2017, A5E41525031-AA 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 RND+ RND+ 转换 向上取整长整型 RRD RRD 移位/循环 双字循环右移(32 位) RRDA RRDA 移位/循环 经过 CC 1 (32 位)右循环 ACCU 1 S S 位逻辑指令 置位 S S 计数器 设置计数器预设值 (当前计数器可以是 0 至 255 之间的数字,例 如 S C 15) SAVE SAVE 位逻辑指令 将 ROL 保存在 BR 寄存器中 SD SE 定时器 接通延时定时器 SE SV 定时器 扩展脉冲定时器 SET SET 位逻辑指令 置位 SF SA 定时器 断开延时定时器 SIN SIN 浮点型指令 以浮点数(32 位)形式生成角的正弦 SLD SLD 移位/循环 双字左移(32 位) SLW SLW 移位/循环 字左移(16 位) SP SI 定时器 脉冲定时器 SQR SQR 浮点型指令 生成浮点数(32 位)的平方 SQRT SQRT 浮点型指令 生成浮点数(32 位)的平方根 SRD SRD 移位/循环 双字右移(32 位) SRW SRW 移位/循环 单字右移(16 位) SS SS 定时器 带保持的接通延时定时器 SSD SSD 移位/循环 移位有符号长整数(32 位) SSI SSI 移位/循环 移位有符号长整型数(16 位) T T 装载/传送 传送 T STW T STW 装载/传送 将 ACCU 1 传送到状态字 TAK TAK 累加器 切换 ACCU 1 与 ACCU 2 TAN TAN 浮点型指令 以浮点数(32 位)形式生成角的正切 TAR1 TAR1 装载/传送 将地址寄存器 1 传送到 ACCU 1 TAR1 TAR1 装载/传送 将地址寄存器 1 传送到目标地址(32 位指针) TAR1 TAR1 装载/传送 将地址寄存器 1 传送到地址寄存器 2 TAR2 TAR2 装载/传送 将地址寄存器 2 传送到地址寄存器 1 TAR2 TAR2 装载/传送 将地址寄存器 2 传送到目标地址(32 位指针) TRUNC TRUNC 转换 截尾 UC UC 程序控制 无条件调用 X X 位逻辑指令 异或运算 X( X( 位逻辑指令 异或运算嵌套开始 XN XN 位逻辑指令 同或运算 XN( XN( 位逻辑指令 同或运算嵌套开始 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 259 所有 STL 指令概述 A.2 按英语助记符(国际)排序的 STL 指令 英语助记符 德语 助记符 程序 元素 目录 描述 XOD XOD 字逻辑指令 双字异或运算(32 位) XOW XOW 字逻辑指令 单字异或运算(16 位) S7-300 和 S7-400 编程的语句表(STL) 260 参考手册, 05/2017, A5E41525031-AA B 编程实例 B.1 编程实例总览 实际应用 每个语句表指令触发一项指定操作。将这些指令组合到一个程序中时,便可完成多种自动化任务。本 章提供了语句表指令实际应用的下列实例: • 使用位逻辑指令控制传送带 • 使用为逻辑指令检测传送带上的移动方向 • 使用定时器指令生成一个时钟脉冲 • 使用计数器和比较指令跟踪存储空间 • 使用整数数学指令解决问题 • 设置加热烘炉的时间长度 使用的指令 助记符 程序元素目录 描述 AW 字逻辑指令 单字与运算 OW 字逻辑指令 单字或运算 CD,CU 计数器 向下计数,向上计数 S,R 位逻辑指令 置位,复位 NOT 位逻辑指令 取反 RLO FP 位逻辑指令 上升沿 +I 浮点指令 将累加器 1 和 2 作为整数相加 /I 浮点指令 以整数形式用累加器 1 除累加器 2 *I 浮点指令 将累加器 1 和 2 作为整数相乘 >=I,<=I 比较 比较整数 A,AN 位逻辑指令 与运算,与非运算 O,ON 位逻辑指令 或运算,或非运算 = 位逻辑指令 赋值 INC 累加器 累加器加 1 BE,BEC 程序控制 块结束和块条件结束 L,T 装载/传送 装载和传送 SE 定时器 扩展脉冲定时器 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 261 编程实例 B.2 实例:位逻辑指令 B.2 实例:位逻辑指令 实例 1:控制传送带 下图显示可用电动方式激活的传送带。在传送带的开始位置有两个按钮开关:用于启动的 S1 和用于 停止的 S2。在传送带末端也有两个按钮开关:用于启动的 S3 和用于停止的 S4。可从任何一端启动 或停止传送带。此外,当传送带上的部件到达终点时,传感器 S5 将停止传送带。 MOTOR_ON S1 S2 O Start O Stop S3 S4 O Start O Stop Sensor S5 绝对地址和符号编程 您可编写程序使用绝对地址或代表传送带系统各种组件的符号来控制传送带。 需要制定一个符号表,以建立所选择的符号与绝对地址的联系(参见 STEP 7 在线帮助)。 系统组件 绝对地址 符号 符号表 按钮启动开关 I 1.1 S1 I 1.1 S1 按钮停止开关 I 1.2 S2 I 1.2 S2 按钮启动开关 I 1.3 S3 I 1.3 S3 按钮停止开关 I 1.4 S4 I 1.4 S4 传感器 I 1.5 S5 I 1.5 S5 马达 Q 4.0 MOTOR_ON Q 4.0 MOTOR_ON S7-300 和 S7-400 编程的语句表(STL) 262 参考手册, 05/2017, A5E41525031-AA 编程实例 B.2 实例:位逻辑指令 绝对地址编写的程序 符号编写的程序 O I 1.1 O I 1.3 S Q 4.0 O I 1.2 O I 1.4 ON I 1.5 R Q 4.0 O S1 O S3 S MOTOR_ON O S2 O S4 ON S5 R MOTOR_ON 控制传送带的语句表 STL 解释 O I 1.1 //按任一启动开关可接通电机。 O I 1.3 S Q 4.0 O I 1.2 //按任一停止开关或打开传送带末端的常闭触点均可关闭电机。 O I 1.4 ON I 1.5 R Q 4.0 实例 2:检测传送带方向 下图显示配备有两个光电屏障(PEB1 和 PEB2)的传送带,这两个光电屏障用于检测包裹在传送带上的 移动方向。每个光电屏障的功能类似常开触点。 PEB1 PEB2 Q 4.1 Q 4.0 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 263 编程实例 B.2 实例:位逻辑指令 绝对地址和符号编程 您可编写程序以使用绝对地址或代表传送带系统各种组件的符号来激活传送带系统的方向显示。 需要制定一个符号表,以建立所选择的符号与绝对地址的联系(参见 STEP 7 在线帮助)。 系统组件 绝对地址 符号 符号表 光电屏障 1 I 0.0 PEB1 I 0.0 PEB1 光电屏障 2 I 0.1 PEB2 I 0.1 PEB2 显示向右移动 Q 4.0 RIGHT Q 4.0 RIGHT 显示向左移动 Q 4.1 LEFT Q 4.1 LEFT 脉冲存储器位 1 M 0.0 PMB1 M 0.0 PMB1 脉冲存储器位 2 M 0.1 PMB2 M 0.1 PMB2 绝对地址编写的程序 符号编写的程序 A I 0.0 FP M 0.0 AN I 0.1 S Q 4.1 A I 0.1 FP M 0.1 AN I 0.0 S Q 4.0 AN I 0.0 AN I 0.1 R Q 4.0 R Q 4.1 A PEB1 FP PMB1 AN PEB 2 S LEFT A PEB 2 FP PMB 2 AN PEB 1 S RIGHT AN PEB 1 AN PEB 2 R RIGHT R LEFT S7-300 和 S7-400 编程的语句表(STL) 264 参考手册, 05/2017, A5E41525031-AA 编程实例 B.2 实例:位逻辑指令 语句表 STL 解释 A I 0.0 //如果输入 I 0.0 有从 0 到 1(上升沿)的转变,同时输入 I 0.1 处的信号状态为 0, //则传送带上的包裹会向左移动。 FP M 0.0 AN I 0.1 S Q 4.1 A I 0.1 //如果输入 I 0.1 处有从 0 到 1(上升沿)的转变,同时输入 I 0.0 处的信号状态为 0, //则传送带上的包裹会向右移动。 //如果其中一个光电屏障断开, //则说明光电屏障之间有包裹。 FP M 0.1 AN I 0.0 S Q 4.0 AN I 0.0 //如果两个光电屏障都未断开,则说明光电屏障之间无包裹。方向指针关闭。 AN I 0.1 R Q 4.0 R Q 4.1 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 265 编程实例 B.3 实例:定时器指令 B.3 实例:定时器指令 时钟脉冲发生器 当需要生成定期重复的信号时,可使用时钟脉冲发生器或闪烁继电器。时钟脉冲发生器在控制指示灯 闪烁的信号系统中很常见。 当使用 S7-300 时,您可用特殊组织块中的时间处理功能来执行时钟脉冲发生器功能。而下列语句表 中显示的实例说明了使用定时器函数生成时钟脉冲的相关内容。实例程序显示如何通过使用定时器实 现任意的时钟脉冲发生器。 生成时钟脉冲的语句表(脉冲占空比 1:1) STL 解释 AN T1 //如果定时器 T 1 的定时时间到, L S5T#250ms //将时间值 250 毫秒装载到 T 1 并 SV T1 //启动 T 1 作为扩展脉冲定时器。 NOT //对逻辑运算结果求反(取反)。 BEB //如果定时器正在运行,请结束当前块。 L MB100 //如果定时器的定时时间到,请装载存储器字节 MB100 的内容, INC 1 //并加 1, T MB100 //然后将结果传送到存储器字节 MB100。 S7-300 和 S7-400 编程的语句表(STL) 266 参考手册, 05/2017, A5E41525031-AA 编程实例 B.3 实例:定时器指令 信号检测 检测定时器 T1 的信号,逻辑运算结果(RLO)如下。 0 1 250 ms 一旦定时时间到,就会重新启动定时器。因此,信号检测使语句 AN T1 只会瞬间产生信号状态 1。 RLO 取反(反向): 0 1 250 ms 每隔 250 ms,RLO 位变为 0。因而 BEC 语句不会结束块处理。相反,会将存储器字节 MB100 的内 容加 1。 存储器字节 MB100 的内容每 250 毫秒会以如下方式发生改变: 0 -> 1 -> 2 -> 3 -> ... -> 254 -> 255 -> 0 -> 1 ... 获得指定频率 可从存储器字节 MB100 的各个位中获得下列频率: MB100 的位 频率(单位:赫兹) 持续时间 M 100.0 2.0 0.5 s (250ms 开/ 250ms 关) M 100.1 1.0 1 s (0.5s 开/0.5s 关) M 100.2 0.5 2 s (1s 开/1s 关) M 100.3 0.25 4 s (2s 开/2s 关) M 100.4 0.125 8 s (4s 开/4s 关) M 100.5 0.0625 16 s (8s 开/8s 关) M 100.6 0.03125 32 s (16s 开/16s 关) M 100.7 0.015625 64 s (32s 开/32s 关) S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 267 编程实例 B.3 实例:定时器指令 语句表 STL 解释 A M10.0 //当发生错误时,M 10.0 = 1。 //当发生错误时,错误指示灯以 1 赫兹的频率闪烁。 A M100.1 = Q 4.0 存储器 MB 101 的位信号状态 扫描 周期 第 7 位 第 6 位 第 5 位 第 4 位 第 3 位 第 2 位 第 1 位 第 0 位 时间值 (单位:毫秒) 0 0 0 0 0 0 0 0 0 250 1 0 0 0 0 0 0 0 1 250 2 0 0 0 0 0 0 1 0 250 3 0 0 0 0 0 0 1 1 250 4 0 0 0 0 0 1 0 0 250 5 0 0 0 0 0 1 0 1 250 6 0 0 0 0 0 1 1 0 250 7 0 0 0 0 0 1 1 1 250 8 0 0 0 0 1 0 0 0 250 9 0 0 0 0 1 0 0 1 250 10 0 0 0 0 1 0 1 0 250 11 0 0 0 0 1 0 1 1 250 12 0 0 0 0 1 1 0 0 250 MB 101 (M 101.1)第 1 位的信号状态 频率 = 1/T = 1/1 s = 1 赫兹 M 101.1 250 ms 0.5 s 0.75 s 1 s 1.25 s 1.5 s T Time 0 1 0 S7-300 和 S7-400 编程的语句表(STL) 268 参考手册, 05/2017, A5E41525031-AA 编程实例 B.4 实例:计数器和比较指令 B.4 实例:计数器和比较指令 带计数器和比较器的存储区域 下图显示了具有两个传送带且在传送带之间有临时存储区域的系统。传送带 1 将包裹传送到存储区域。 存储区域附近的传送带 1 末端的光电屏障确定向存储区域传送的包裹数量。传送带 2 会将包裹从临时 存储区域传输到装载码头,而卡车在此将包裹发送给客户。存储区域附近的传送带 2 末端的光电屏障 确定离开存储区域而转向装载码头的包裹数量。带五个指示灯的显示面板将指示临时存储区域的填充 量。 Display Panel Storage area empty (Q 12.0) Storage area not empty (Q 12.1) Storage area 50% full (Q 15.2) Storage area 90% full (Q 15.3) Storage area Filled to capacity (Q 15.4) Temporary storage area for 100 packages Packages in Packages out Conveyor belt 2 Conveyor belt 1 Photoelectric barrier 1 Photoelectric barrier 2 I 12.0 I 12.1 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 269 编程实例 B.4 实例:计数器和比较指令 激活显示面板上指示灯的语句表 STL 解释 A I 0.0 //由光电屏障 1 生成的各个脉冲 CU C1 //将计数器 C 1 的计数值增加 1,借此计算进入存储区域的包裹数量。 // A I 0.1 //由光电屏障 2 生成的各个脉冲 CD C1 //将计数器 C 1 的计数值减少 1,借此计算离开存储区域的包裹数量。 // AN C1 //如果计数值为 0, = Q 4.0 //则"存储区域已空"的指示灯亮起。 // A C1 //如果计数值不为零, = A 4.1 //则"存储区域非空"的指示灯亮起。 // L 50 L C1 <= I //如果计数值大余等于 50, = Q 4.2 //则"50%存储区域已满"的指示灯亮起。 // L 90 >= I //如果计数值大于等于 90, = Q 4.3 //则"90%存储区域已满"的指示灯亮起。 // L Z1 L 100 >= I //如果计数值大于等于 100, = Q 4.4 //则"存储区域已填满"的指示灯亮起。 //(您也可使用输出 Q 4.4 来锁定传送带 1。) S7-300 和 S7-400 编程的语句表(STL) 270 参考手册, 05/2017, A5E41525031-AA 编程实例 B.5 实例:整型数学运算指令 B.5 实例:整型数学运算指令 解决数学问题 实例程序显示了如何使用三个整数数学运算指令来产生与下列方程式相同的结果: MD4 = ((IW0 + DBW3) x 15) / MW2 语句表 STL 解释 L EW0 //将输入字 IWO 的值装载到累加器 1。 L DB5.DBW3 //将 DB5 的共享数据字 DBW3 中的值装载到累加器 1。 //累加器 1 的旧内容被传送到累加器 2 中。 +I I 0.1 //将累加器 1 和 2 的低位字内容相加。 //其结果存储在累加器 1 的低位字中。 //累加器 2 的内容和累加器 1 的高位字保持不变。 L +15 //将常数值 +15 装载到累加器 1。 //累加器 1 的旧内容被传送到累加器 2 中。 *I //用累加器 1 低位字的内容乘以累加器 2 低位字的内容 结果存储在 //累加器 1 中。累加器 2 的内容保持不变。 L MW2 //将存储器字 MW2 的值装载到累加器 1。 //累加器 1 的旧内容被传送到累加器 2 中。 /I //用累加器 1 低位字的内容除累加器 2 低位字的内容。 //结果存储在 //累加器 1 中。累加器 2 的内容保持不变。 T MD4 //将最终结果传送到存储器双字 MD4。 //两个累加器的内容都保持不变。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 271 编程实例 B.6 实例:字逻辑指令 B.6 实例:字逻辑指令 加热烘炉 烘炉操作员通过按启动按钮来启动烘炉加热。操作员可用图中所示的码盘开关来设置加热的时间。操 作员设置的值以二进制编码的十进制(BCD)格式显示,单位为秒。 系统组件 绝对地址 启动按钮 I 0.7 个位码盘 I 1.0 到 I 1.3 十位码盘 I 1.4 到 I 1.7 百位码盘 I 0.0 到 I 0.3 加热启动 Q 4.0 S7-300 和 S7-400 编程的语句表(STL) 272 参考手册, 05/2017, A5E41525031-AA 编程实例 B.6 实例:字逻辑指令 语句表 STL 解释 A T1 //如果定时器正在运行, = Q 4.0 //则打开加热装置。 BEC //如果定时器正在运行,则在此结束进程。 //这可防止在按下按钮时重新启动定时器 T1。 L IW0 AW W#16#0FFF //屏蔽输入位 I 0.4 到 I 0.7(即,将它们复位到 0)。 //以秒为单位的时间值位于累加器 1 的低位字中, //并以二进制编码的十进制格式(BCD 码)显示。 OW W#16#2000 在累加器 1 低位字中的第 12 位和 13 位中将时间基准指定为秒。 A I 0.7 SE T1 //如果按下按钮,则启动定时器 T1 作为扩展脉冲定时器。 //已按下。 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 273 编程实例 B.6 实例:字逻辑指令 S7-300 和 S7-400 编程的语句表(STL) 274 参考手册, 05/2017, A5E41525031-AA C 参数传送 块的参数作为数值传送。对于功能块,在被调用块中使用背景数据块中的实际参数值副本。对于功能, 实际值的副本存在于本地数据堆栈中。不复制指针。调用前,将 INPUT 数值复制到背景 DB 或 L 堆 栈中。调用后,将 OUTPUT 数值复制回变量中。在被调用块中,只能使用副本。所需的 STL 指令位 于调用块中,并且对于用户来说是不可见。 注意 如果存储位、输入、输出或外围设备 I/O 作为功能的实际地址使用,那么它们以与其它地址不同的 方式进行处理。在此,直接执行更新,而不是通过 L 堆栈执行更新。 ! 当心 在编程调用块时,请确保写入声明为 OUTPUT 的参数。否则,输出值为随机值!对于功能块,该值为由最后 一个调用指定的背景 DB 中的数值;对于功能,该值为位于 L 堆栈的数值。 请注意以下几点: • 尽可能初始化所有 OUTPUT 参数。 • 尽量不要使用任何置位和复位指令。这些指令取决于 RLO。如果 RLO 具有 0 值,则将保留随机值。 • 如果在块内跳转,请确保不要跳过任何编写了 OUTPUT 参数的位置。请勿忘记 BEC 和 MCR 指令的作用。 S7-300 和 S7-400 编程的语句表(STL) 参考手册, 05/2017, A5E41525031-AA 275 参数传送 C 参数传送 S7-300 和 S7-400 编程的语句表(STL) 276 参考手册, 05/2017, A5E41525031-AA 索引 字母数字 ) ), 25 )MCR, 175 * *D, 112 *I, 105 *R, 123 / /D, 113, 114 /I, 106, 107 /R, 125 ? ? D, 41 ? I, 40 + +, 109 +AR1, 245 +AR2, 246 +D, 110 +I, 103 +R, 119, 120 = =, 27 A, 15 A(, 22 ABS, 127 ACCU 1 中的位组态, 201 ACOS, 136, 137 AD, 228, 229 AN, 16 AN(, 23 ASIN, 135 ATAN, 137, 138 AW, 222, 223 BE, 154 BEC, 155 BEU, 156 BLD, 247 BTD, 46 BTI, 44 CAD, 56 CALL, 157, 158, 159 CAR, 149 CAW, 55 CC, 168 CD, 69 CDB, 73 CLR, 32 COS, 133 CU, 68 -D, 111 DEC, 244 DTB, 48 DTR, 49 ENT, 241 EXP, 130 FN, 34 FP, 36 FR, 62, 203 – I, 104 INC, 242, 243 INVD, 51 INVI, 50 ITB, 45 ITD, 47 JBI, 86 JC, 82 JCB, 84 JCN, 83 JL, 80, 81 JM, 94 JMZ, 96 JN, 92 JNB, 85 JNBI, 87 JO, 88 JOS, 89, 90 JP, 93 JPZ, 95 JU, 79 JUO, 97, 98 JZ, 91 L, 140, 205 L DBLG, 73 L DBNO, 74 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 277 索引 L DILG, 74 L DINO, 75 L STW, 142 LAR1, 143 LAR1 用长整型(32 位指针)装载地址寄存器 1, 144 LAR1 AR2, 145 LAR2, 145 LAR2 , 146 LC, 207, 208 LEAVE, 242 LN, 131 LOOP, 99 MCR, 176, 177 MCR (主控继电器), 170 MCR(, 173, 174 MCRA, 176 MCRD, 177 MCR 区域, 174, 175, 176 MOD, 115, 116 NEGD, 53 NEGI, 52 NEGR, 54 NOP 0, 247 NOP 1, 248 NOT, 30 O, 17, 21 O(, 23 OD, 230, 231 ON, 18 ON(, 24 OPN, 72 OW, 224, 225 POP, 237, 238 具有两个 ACCU 的 CPU, 237 具有四个 ACCU 的 CPU, 238 PUSH, 239, 240 具有两个 ACCU 的 CPU, 239 具有四个 ACCU 的 CPU, 240 R, 28, 66, 209 – R, 121 – R, 122 RLD, 193, 194 RLDA, 197 RND, 57 RND– , 60 RND– , 60 RND– , 60 RND– , 60 RND– , 60 RND+, 59 RRD, 195, 196 RRDA, 198 S, 29, 67 SAVE, 33 SD, 214, 215 SE, 212, 213 SET, 30 SF, 218, 219 SIN, 132 SLD, 188, 189 SLW, 184, 185 SP, 210, 211 SQR, 128 SQRT, 129 SRD, 190, 191 SRW, 186, 187 SS, 216, 217 SSD, 182, 183 SSI, 180 T, 147 T STW, 148 TAK, 236 TAN, 134 TAR1, 149 TAR1 , 150 TAR1 AR2, 151 TAR2, 151 TAR2 , 152 TRUNC, 58 UC, 169 X, 19 X(, 24 XN, 20 XN(, 25 XOD, 232, 233 XOW, 226, 227 B 比较浮点数(32 位), 42 比较长整数(32 位), 41 比较整数(16 位), 40 比较指令概述, 39 编程实例总览, 261 C 长整型(32 位)转换为 BCD 码, 48 程序控制指令总览, 153 程序显示指令, 247 S7-300 和 S7-400 编程的语句表(STL) 278 参考手册, 05/2017, A5E41525031-AA 索引 重置计数器, 66 除法余数为长整型(32 位), 115 传送, 147 从 ACCU 1 中装载地址寄存器, 143 从 ACCU 1 中装载地址寄存器 2, 145 从地址寄存器 2 装载地址寄存器 1, 145 存储器中的区域, 61, 200 D 打开数据块, 72 带保持的接通延时定时器, 216 单字或运算(16 位), 224 单字异或运算(16 位), 226 单字右移(16 位), 186 单字与运算(16 位), 222 调用 FB, 160 调用 FC, 162 调用 SFB, 164 调用 SFC, 166 调用多重背景, 167 调用来自库的块, 167 定时器在存储器中的位置, 199, 200 定时器指令概述, 199 定时器组件, 199, 200 断开延时定时器, 218 对整数求补码(16 位), 52 对整数求反码(16 位), 50 E 二进制补码双精度整数(32 位), 53 二进制反码双精度整数(32 位), 51 F 浮点数(32 位, IEEE 754)取反, 54 浮点数(32 位,IEEE 754)取反, 54 浮点数的(32 位 IEEE 754)绝对值, 127 浮点运算指令概述, 117 复位, 28 复位定时器, 209 赋值, 27 G 改变 ACCU 1 (32 位)中的字节顺序, 56 改变 ACCU 1-L (16 位)中的字节顺序, 55 功能块调用, 161 功能调用, 162 关于使用 MCR 功能的重要注意事项, 172 H 回路, 99 或, 17 或非运算, 18 或非运算嵌套开始, 24 或运算嵌套开始, 23 J 激活 MCR 区域, 176 计数器指令概述, 61 计数值, 61 加整型常数(16、32 位), 108 减量 ACCU 1-L-L, 244 将 ACCU 1 传送到状态字, 148 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754) 相乘, 123 将 ACCU 1 和 ACCU 2 作为浮点数(32 位 IEEE 754) 相加, 119 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相乘, 112 将 ACCU 1 和 ACCU 2 作为长整型(32 位)数相加, 110 将 ACCU 1 和 ACCU 2 作为整型(16 位)相加, 103 将 ACCU 1 和 ACCU 2 作为整型数(16 位)相乘, 105 将 ACCU 1 加到地址寄存器 1, 245 将 ACCU 1 加到地址寄存器 2, 246 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754) 相除, 125 将 ACCU 2 与 ACCU 1 作为浮点数(32 位 IEEE 754) 相减, 121 将 BCD 码转换为整型(16 位), 44 将 BCD 码转换为整型(32 位), 46 将 RLO 保存到 MCR 堆栈中 开始 MCR, 173 将 ROL 保存在 BR 寄存器中, 33 将当前定时器值作为 BCD 载入 ACCU 1, 207 将当前定时器值作为整数载入 ACCU 1, 205 将地址寄存器 1 传送到 ACCU 1, 149 将地址寄存器 1 传送到地址寄存器 2, 151 将地址寄存器 1 传送到目标地址(32 位指针), 150 将地址寄存器 1 与地址寄存器 2 进行交换, 149 将地址寄存器 2 传送到地址寄存器 1, 151 将地址寄存器 2 传送到目标地址(32 位指针), 152 将长整型(32 位)转换为浮点数(32 位,IEEE 754), 49 将状态字装载到 ACCU 1 中, 142 交换共享 DB 和背景 DB, 73 接通延时定时器, 214 结束 MCR, 175 截尾, 58 进入 ACCU 堆栈, 241 经过 CC 1 (32 位)右循环 ACCU 1, 198 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 279 索引 K 空指令, 247, 248 块结束, 154 块调用, 157 扩展脉冲定时器, 212 L 累加器运算和地址寄存器指令, 235 离开 ACCU 堆栈, 242 逻辑控制指令概述, 77 M 脉冲定时器, 210 Q 启用定时器(自由), 203 启用计数器(释放), 62 嵌套结束, 25 切换 ACCU 1 与 ACCU 2, 236 清除 RLO (=0), 32 取反 RLO, 30 取消激活 MCR 区域, 177 取整, 57 R 如果 BR = 0,则跳转, 87 如果 BR = 1,则跳转, 86 如果 OS = 1,则跳转, 89 如果 OV = 1,则跳转, 88 如果 RLO = 0,则跳转, 83 如果 RLO = 1,则跳转, 82 如果非零,则跳转, 92 如果具有 BR 的 RLO = 0,则跳转, 85 如果具有 BR 的 RLO = 1,则跳转, 84 如果为负,则跳转, 94 如果为负或零,则跳转, 96 如果为零,则跳转, 91 如果为正,则跳转, 93 如果为正或零,则跳转, 95 如果无序,则跳转, 97 S 上升沿, 36 设置计数器预设值, 67 生成浮点数(32 位)的反余弦, 136 生成浮点数(32 位)的反正切, 137 生成浮点数(32 位)的反正弦, 135 生成浮点数(32 位)的平方, 128 生成浮点数(32 位)的平方根, 129 生成浮点数(32 位)的指数值, 130 生成浮点数(32 位)的自然对数, 131 时间基准, 200, 201 时间值, 200, 201, 202 实际应用, 261 实例, 261 定时器指令, 266 计数器和比较指令, 269 位逻辑指令, 262 整型数学运算指令, 271 字逻辑指令, 272 使用浮点运算指令时得出状态字的位数值, 118 使用整数算术指令时得出状态字的位数值, 102 数据块指令概述, 71 双字或运算(32 位), 230 双字循环右移(32 位), 195 双字循环左移(32 位), 193 双字异或运算(32 位), 232 双字右移(32 位), 190 双字与运算(32 位), 228 双字左移(32 位), 188 T 条件调用, 168 跳转到标签, 80 通过 CC 1 (32 位)左循环 ACCU 1, 197 同或运算, 20 同或运算嵌套开始, 25 W 位逻辑指令概述, 13 无条件的块结束, 156 无条件调用, 169 无条件跳转, 79 X 系统功能块调用, 165 系统功能调用, 166 下降沿, 34 先与运算后或运算, 21 向上计数器, 68 向上取整长整型, 59 向下计数器, 69 向下取整长整型, 60 选择正确的定时器, 202 循环移位指令概述, 192 S7-300 和 S7-400 编程的语句表(STL) 280 参考手册, 05/2017, A5E41525031-AA 索引 Y 移位有符号长整数(32 位), 182 移位有符号长整型数(16 位), 180 移位指令概述, 179 以浮点数(32 位)形式生成角的余弦, 133 以浮点数(32 位)形式生成角的正切, 134 以浮点数(32 位)形式生成角的正弦, 132 以长整型(32 位)数的形式从 ACCU 2 中减去 ACCU 1, 111 以长整型(32 位)数的形式用 ACCU 1 除 ACCU 2, 113 以整型(16 位)的形式从 ACCU 2 中减去 ACCU 1, 104 以整型数(16 位)的形式用 ACCU 1 除 ACCU 2, 106 异或运算, 19 异或运算嵌套开始, 24 用长整型(32 位指针)装载地址寄存器 2, 146 有条件的块结束, 155 与非运算, 16 与非运算嵌套开始, 23 与运算, 15 与运算嵌套开始, 22 Z 在 ACCU 1 中装载背景 DB 的编号, 75 在 ACCU 1 中装载背景 DB 的长度, 74 在 ACCU 1 中装载共享 DB 的编号, 74 在 ACCU 1 中装载共享 DB 的长度, 73 增量 ACCU 1-L-L, 242 整数算术指令概述, 101 整型(16 位)转换为 BCD 码, 45 整型(16 位)转换为长整型(32 位), 47 置位, 29 置位 RLO (=1), 30 助记符 英语, 255 转换指令概述, 43 装载, 141 装载和传送指令概述, 139 字逻辑指令概述, 221 字左移(16 位), 184 S7-300 和 S7-400 编程的语句表(STL) 参考手册,05/2017,A5E41525031-AA 281 索引 S7-300 和 S7-400 编程的语句表(STL) 282 参考手册, 05/2017, A5E41525031-AA

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。