西门子 S7-300 PLC 的指令系统是其编程的核心,涵盖逻辑控制、数据处理、通信、定时计数等功能,遵循 IEC 61131-3 标准,支持梯形图(LAD)、语句表(STL)和功能块图(FBD)等编程语言。以下是 S7-300 常用指令的分类及核心说明,可作为快速参考手册:
用于 BOOL 类型变量(如输入 I、输出 Q、中间继电器 M)的逻辑运算,是控制逻辑的基础。
| 指令(LAD/STL) | 功能描述 | 示例(STL) | 说明 |
|---|
| A / 与 | 逻辑 “与” 运算 | A I0.0 | 当 I0.0 为 1 时,结果为 1 |
| AN / 与非 | 逻辑 “与非” 运算 | AN I0.1 | 当 I0.1 为 0 时,结果为 1 |
| O / 或 | 逻辑 “或” 运算 | O M0.0 | 当 M0.0 为 1 时,结果为 1 |
| ON / 或非 | 逻辑 “或非” 运算 | ON M0.1 | 当 M0.1 为 0 时,结果为 1 |
| NOT / 非 | 逻辑取反 | NOT | 将当前逻辑结果取反 |
| = / 输出赋值 | 将逻辑结果赋值给输出变量 | = Q0.0 | 逻辑结果为 1 时,Q0.0 置 1 |
S7-300 定时器按工作方式分为 3 类,均需占用一个定时器编号(如 T0~T255)和背景数据块。
| 定时器类型 | 指令(LAD) | 功能描述 | 输入参数 | 输出参数 |
|---|
| S_PULSE | 脉冲定时器 | 线圈通电后,输出 Q 在预设时间(PT)内保持 1 | S:启动信号 | Q:输出(BOOL) |
|
|
| PT:时间值(S5T#) | ET:已计时时间 |
| S_PEXT | 扩展脉冲定时器 | 启动信号上升沿触发,输出 Q 保持 PT 时间后复位 | S:启动信号 | 同上 |
| S_ODT | 接通延时定时器 | 启动信号保持 1 状态,延迟 PT 时间后 Q 置 1 | S:启动信号 | 同上 |
| S_ODTS | 保持型接通延时 | 启动信号上升沿触发,延迟 PT 后 Q 置 1 并保持 | S:启动信号 | 同上 |
用于计数脉冲信号,需占用计数器编号(C0~C255)和背景数据块。
| 计数器类型 | 指令(LAD) | 功能描述 | 输入参数 | 输出参数 |
|---|
| S_CUD | 加 / 减计数器 | 对 CU(加计数)和 CD(减计数)脉冲计数 | CU:加计数脉冲 | Q:计数达标(BOOL) |
|
| 计数范围:-32768~32767 | CD:减计数脉冲 | CV:当前计数值(INT) |
|
|
| S:复位(置 0) |
|
|
|
| PV:预设值(INT) |
|
| S_CU | 加计数器 | 仅对 CU 脉冲计数,达到 PV 时 Q 置 1 | 同上(无 CD) | 同上 |
| S_CD | 减计数器 | 仅对 CD 脉冲计数,减至 PV 时 Q 置 1 | 同上(无 CU) | 同上 |
用于整数、浮点数、字符串等数据类型的运算和转换。
| 指令(STL) | 功能 | 示例(STL) | 说明 |
|---|
| L | 加载数据到累加器 1 | L MW10 | 将 MW10(INT)加载到累加器 1 |
| T | 传输数据到存储区 | T MW20 | 将累加器 1 数据传输到 MW20 |
| +I | 整数加法 | L MW10; +I MW12; T MW14 | MW10 + MW12 → MW14 |
| -I | 整数减法 | L MW10; -I MW12; T MW14 | MW10 - MW12 → MW14 |
| *I | 整数乘法 | L MW10; *I MW12; T MD14 | MW10 × MW12 → MD14(结果为 DINT) |
| /I | 整数除法 | L MD10; /I MW14; T MW16 | MD10(DINT) ÷ MW14(INT)→ MW16(商) |
| 指令(STL) | 功能 | 示例(STL) | 说明 |
|---|
| L | 加载浮点数 | L MD20 | 加载 MD20(REAL)到累加器 1 |
| +R | 浮点数加法 | L MD20; +R MD24; T MD28 | MD20 + MD24 → MD28 |
| -R | 浮点数减法 | L MD20; -R MD24; T MD28 | MD20 - MD24 → MD28 |
| *R | 浮点数乘法 | L MD20; *R MD24; T MD28 | MD20 × MD24 → MD28 |
| /R | 浮点数除法 | L MD20; /R MD24; T MD28 | MD20 ÷ MD24 → MD28 |
| 指令(STL) | 功能 | 示例(STL) | 说明 |
|---|
| ITD | INT→DINT | L MW10; ITD; T MD12 | 16 位整数转 32 位整数 |
| DTI | DINT→INT | L MD10; DTI; T MW14 | 32 位整数转 16 位整数(超出范围报错) |
| ITB | INT→BCD | L MW10; ITB; T MW12 | 整数转 BCD 码(用于七段显示) |
| BTI | BCD→INT | L MW10; BTI; T MW12 | BCD 码转整数 |
| ITR | INT→REAL | L MW10; ITR; T MD12 | 整数转浮点数 |
| RTI | REAL→INT | L MD10; RTI; T MW14 | 浮点数转整数(四舍五入) |
用于比较两个数据的大小,结果为 BOOL 类型(1 = 真,0 = 假)。
| 指令(LAD/STL) | 功能 | 示例(LAD) | 说明 |
|---|
| ==I | 整数等于 | IW10 == IW12 → M0.0 | 若 IW10 = IW12,则 M0.0 置 1 |
| >I | 整数大于 | IW10 > IW12 → M0.1 | 若 IW10 > IW12,则 M0.1 置 1 |
| <I | 整数小于 | IW10 < IW12 → M0.2 | 若 IW10 < IW12,则 M0.2 置 1 |
| ==R | 浮点数等于 | MD20 == MD24 → M0.3 | 若 MD20 = MD24,则 M0.3 置 1 |
| >R | 浮点数大于 | MD20 > MD24 → M0.4 | 若 MD20 > MD24,则 M0.4 置 1 |
| <R | 浮点数小于 | MD20 < MD24 → M0.5 | 若 MD20 < MD24,则 M0.5 置 1 |
用于控制程序执行流程(分支、循环、跳转等)。
| 指令(STL) | 功能 | 示例(STL) | 说明 |
|---|
| JMP LABEL | 无条件跳转 | JMP L1 | 跳转到标签 L1 处执行 |
| LABEL | 跳转标签 | L1: | 定义跳转目标位置 |
| JC LABEL | 若逻辑结果为 1 则跳转 | A I0.0; JC L2 | 当 I0.0 为 1 时,跳转到 L2 |
| JNC LABEL | 若逻辑结果为 0 则跳转 | AN I0.0; JNC L3 | 当 I0.0 为 0 时,跳转到 L3 |
| CALL | 调用子程序 | CALL FC1 | 调用功能 FC1 |
| CALL FB | 调用功能块 | CALL FB1, DB1 | 调用功能块 FB1,背景数据块为 DB1 |
| RET | 子程序返回 | RET | 从 FC/FB 返回主程序 |
用于 S7-300 与其他设备(如 HMI、其他 PLC、传感器)的通信。
| 指令 | 功能描述 | 适用场景 |
|---|
| SFC67(X_GET) | 从远程 CPU 读取数据 | S7 协议通信(如 S7-300 与 S7-1200) |
| SFC68(X_PUT) | 向远程 CPU 写入数据 | 同上 |
| SFC14(DPRD_DAT) | 读取过程数据对象(DP 从站) | Profibus DP 通信 |
| SFC15(DPWR_DAT) | 向 DP 从站写入过程数据 | 同上 |
| SFC58(WR_REC) | 写入数据记录(Modbus 等协议) | 通用通信 |
| SFC59(RD_REC) | 读取数据记录 | 同上 |
西门子提供的标准化系统功能,用于设备诊断、时钟控制等。
| SFC 编号 | 功能描述 | 关键参数 |
|---|
| SFC0 | 设定系统时钟 | 年、月、日、时、分、秒 |
| SFC1 | 读取系统时钟 | 返回当前时间(DT 类型) |
| SFC46 | 复制数据块 | 源 DB 号、目标 DB 号 |
| SFC48 | 读取诊断缓冲区 | 诊断信息输出 |
| SFC103 | 解锁数据块 | DB 号 |
| SFC104 | 锁定数据块 | DB 号 |
官方手册:
编程软件帮助:在 STEP 7 中,选中指令后按 F1 可查看详细说明及示例。
核心技巧: