系统学习plc 基础指令上篇,官方资料课程笔记整 理

西门子 S7-1200 基础指令学习笔记

整理人 :元歌(学习笔记,自用备课) 课程来源 :西门子官方培训视频 整理日期 :2026-04-09 学习心得:边学边记,方便下次讲课时照着讲,练习分享用,也怕自己忘了


第一讲:指令概述------先搞清楚博图里的指令家族

1.1 我看到的界面

打开 TIA Portal,左边"指令"任务卡里有四大块,我用截图里的颜色记:

课程截图

表格

颜色 指令家族 里面有什么 我现在学到哪了
🟡 黄色 基本指令 位逻辑、定时器、计数器、比较、数学函数、移动、转换、移位循环 正在学这个
🟢 绿色 扩展指令 日期时间、字符串、分布式 I/O、PROFIenergy、中断、报警、诊断、脉冲、配方、数据块控制、寻址 还没学到,标记一下
🔵 蓝色(通信) 通信 S7 通信、开放式用户通信、WEB 服务器、其它、通信处理器、远程服务 后面专门学通信
🔵 蓝色(工艺) 工艺 计数、PID 控制、Motion Control 高速计数和运动控制是高级内容

1.2 我的理解

老师说基本指令占日常编程 80% 以上,所以我先把黄色这块啃透。其他颜色先知道有这些东西,以后用到再查。


第二讲:位逻辑运算------最基础,但必须搞扎实

2.1 常开触点、常闭触点、线圈、NOT

我理解的逻辑

  • 常开触点 ---| |---:地址为 1 时通,为 0 时断。像家里的灯开关,按下去才通电。

  • 常闭触点 ---|/|---:地址为 0 时通,为 1 时断。像冰箱门开关,门开着灯亮,门关着灯灭。

  • 线圈 ---( )---:前面能流过来了,就把这个地址置 1;没流过来就置 0。

  • NOT 取反 ---|NOT|---:把前面的能流状态反过来。前面通了,后面就断;前面断了,后面就通。

截图里的例子

plain

复制代码
%M2.0 常开触点 ---| |---+
                         +---|NOT|---( %M2.2 线圈输出 )
%M2.1 常闭触点 ---|/|---+

我画个真值表自己验证一下:

我注意到:%M2.1 是常闭触点,所以 %M2.1=1 时触点反而断开。

我的疑问:%M 是存储区,掉电后会不会保持?老师好像说默认不保持,要保存值得用 DB 块或者保持型 M 区。


2.2 SET_BF 和 RESET_BF------批量置位/复位

我第一次见这个指令,以前以为只能一个一个位操作,原来可以批量。

截图里的例子

plain

复制代码
%M2.0 ---| |---( SET_BF    %Q0.0  10 )
%M2.0 ---| |---( RESET_BF  "DB25_Array".Static_1[0]  16 )

表格

参数 我的理解
%Q0.0 从 Q0.0 开始
10 连续 10 个位(Q0.0 ~ Q0.9)全部置 1
"DB25_Array".Static_1[0] 从 DB25 数组的第 0 位开始
16 连续 16 个位全部清零

我想到的应用场景

  • 初始化时把一组输出全部置 1

  • 报警复位时把一组标志位全部清零

  • 比写 16 个 ---(R)--- 省事多了

我记下的注意事项

  • SET_BF 一旦置位,不会自动清零,必须用 RESET_BF 或者单独复位

  • 不能跨存储区操作,比如不能从 Q 区批量到 M 区


第三讲:置位复位优先------SR 和 RS 触发器

3.1 我一开始的困惑

为什么要有 SR 和 RS?两个条件控制一个输出,同时满足时听谁的?

3.2 我整理的区别

表格

类型 名字 谁优先 我记的方法
SR 置位复位触发器 复位优先(R1 端) "S 在前,R 在后,R 说了算"
RS 复位置位触发器 置位优先(S 端) "R 在前,S 在后,S 说了算"

注意:SR 的复位端写的是 R1,带个 1,说明它是优先的。

3.3 截图里的 SR 例子

plain

复制代码
%M3.1 ---| |---( S 端,置位条件 )
%M3.2 ---| |---( R1 端,复位条件 )
            |
           [SR]
            |
           Q ---( %M3.4 )

真值表(我跟着老师画的):

表格

S R1 SR 内部状态 Q 输出
1 0 1 1
0 1 0 0
0 0 不变 不变
1 1 0 0

我的结论 :当 S 和 R1 同时为 1 时,复位优先,输出为 0。

3.4 我想到的实际例子------传送带急停

plain

复制代码
启动按钮 ---| |---( S 端 )
急停按钮 ---|/|---( R1 端 )    // 急停是常闭,正常时通,按下时断
                      [SR]
                       Q ---( 传送带运行 )
  • 正常启动:按启动按钮,Q=1,传送带运行

  • 急停:急停按钮被按下,R1 得电(因为常闭变常开,前面能流过来了?不对,我再想想...)

等等,我重新理一下:急停按钮如果是常闭触点,正常状态下它是通的,R1 不得电(因为常闭触点通的时候,能流过去,但 R1 是输入端...)

哦,我搞混了 。老师说的是急停信号应该接在优先端 ,这样不管启动信号是什么状态,急停一动作就优先断开。具体接线要看硬件是常开还是常闭,但逻辑上停止信号必须优先

3.5 我的笔记

  • SR 用于"停止优先"的场合,比如急停、安全门

  • RS 用于"启动优先"的场合,比如故障恢复后优先启动

  • 搞反了会有安全隐患,这个必须记牢


第四讲:沿指令------脉冲检测,这节我有点绕

4.1 什么是"沿"

我理解"沿"就是信号跳变的那个瞬间

  • 上升沿:从 0 变到 1 的那一下

  • 下降沿:从 1 变到 0 的那一下

4.2 为什么必须用沿指令

我遇到的真实问题:做单按钮控制灯(按一下亮,再按一下灭)。

如果不加沿检测:我按住按钮 1 秒钟,PLC 扫描了 100 次,灯就亮了灭、灭了亮,最后状态不确定。

加了上升沿:只在我按下去的那一瞬间执行一次,灯稳定切换。

4.3 老师讲了 4 种写法,我逐个整理

表格

| 写法 | 指令 | 形态 | 要不要手动存上周期状态 | 我的理解 |
|----|---------------------------|-------|-----------------|-------------|-------|------------|----------------|-----------------|
| 1 | `--- | P | ---/--- | N | ---` | 触点型,串联在逻辑里 | 要,指定一个地址存上周期结果 | 像普通触点,但只通一个扫描周期 |
| 2 | ---(P)--- / ---(N)--- | 线圈型 | 要,指定地址 | 像线圈,输出脉冲 |
| 3 | R_TRIG / F_TRIG | 功能块型 | 不要,自动用背景 DB | 最规范,推荐 |
| 4 | P_TRIG / N_TRIG | 旧版功能块 | 不要 | 和 R_TRIG 类似 |

4.4 截图里的详细对比

写法 1:触点型

plain

复制代码
%M2.5 沿条件 ---| |---+
                  +---|P|---( %M2.3 置位线圈 )
%M2.6 上周期结果 ---| |---+
  • %M2.6 存的是上一个周期 %M2.5 的状态

  • 当前 %M2.5=1,上周期 %M2.6=0 → 上升沿触发,P 触点通一个周期

写法 2:线圈型

plain

复制代码
%M2.5 沿条件 ---| |---( %M2.9 线圈输出 )
%M2.6 上周期结果 ---| |---

写法 3:R_TRIG 功能块

plain

复制代码
%M2.5 ---| |---[ R_TRIG ]---( %M2.2 输出 )
  • 自动在背景 DB 里存上周期状态,我不用管

写法 4:P_TRIG(旧版)

plain

复制代码
%M2.5 ---| |---[ P_TRIG ]--- CLK
                      Q ---( %M2.4 复位线圈 )

4.5 时序图(我跟着老师画的)

plain

复制代码
沿条件(当前)     0 0 0 1 1 1 1 1 0 0 0
上周期结果        0 0 0 0 1 1 1 1 1 0 0
沿输出(P)       0 0 0 1 0 0 0 0 0 0 0

我的理解

  • 第 4 个扫描周期:当前变 1,上周期是 0 → 输出 1

  • 第 5 个周期:当前是 1,上周期也是 1 → 输出 0

  • 所以只输出 1 个扫描周期,很短!

4.6 我的笔记和疑问

  • 沿指令后面通常跟置位/复位,或者触发一个功能块,不能直接驱动电机(时间太短电机没反应)

  • 手动指定"上周期结果"地址时,这个地址不能在其他地方用,否则会被覆盖

  • 推荐用 R_TRIG / F_TRIG,因为背景 DB 自动管理,不容易出错

  • 扫描周期如果太长(比如 200ms),而按钮只按 100ms,可能检测不到沿


第五讲:定时器------TON、TONR、TOF、TP

5.1 五种定时器我整理的对照表

表格

指令 中文名 我理解的特征
TP 脉冲定时器 触发后输出固定时间,期间再触发没用
TON 通电延时 得电后等一段时间再输出,最常用
TOF 断电延时 失电后等一段时间再断开
TONR 保持型通电延时 能累计时间,有记忆,要手动复位
RT 复位定时器 专门给 TONR 复位用的

5.2 TON 通电延时(截图例子)

引脚

表格

引脚 我的理解
IN 输入信号,接通后开始计时
PT 我要延时多久,比如 T#5S 是 5 秒
Q 延时到了输出 1,没到时输出 0
ET 现在已经计了多久,可以监控

截图里的梯形图

plain

复制代码
%I0.0 ---| |---[ TON ]---( %M4.1 输出 )
              PT = T#5S
              ET → 显示

我的理解:按下 I0.0,等 5 秒后 M4.1 变 1。松开 I0.0,M4.1 立刻变 0,ET 清零。

应用场景我想到的

  • 星三角启动:按启动后等 5 秒再切换

  • 润滑系统:开机 10 秒后再启动油泵

  • 防误触:按钮按住 2 秒才确认

5.3 TONR 保持型通电延时(截图例子)

plain

复制代码
%I0.1 ---| |---[ TONR ]---( %M4.2 输出 )
              PT = T#1M
              背景 DB = "DB27".Static_1

和 TON 的区别

  • TON:中途断开 IN,ET 清零,下次重新计

  • TONR:中途断开 IN,ET 保持,下次从上次继续累加

应用场景

  • 设备累计运行时间:风机累计运行满 100 小时提示保养

  • 间歇工作:每次启动工作 10 秒,累计满 1 小时报警

怎么复位? 必须用 ---(RT)--- 指令,或者给 TONR 的 R 端信号。

5.4 定时器时序我画的图

plain

复制代码
信号 IN:    0───1───0───1───0───1───0
TON 的 Q:   0───0───0───0───1───1───0   (每次重新延时)
TONR 的 Q:  0───0───0───0───0───0───1   (累计,最终到达)
TOF 的 Q:   0───1───1───1───0───0───0   (失电后延时断开)

5.5 我的注意事项

  • 定时器必须配背景 DB (如 IEC_Timer_0_DB),存 ET 和状态

  • PT 格式:T#5S(5秒)、T#1M(1分钟)、T#500MS(500毫秒)

  • TON 的 ET 在 IN 断开时自动清零 ;TONR 不会自动清零,必须手动复位

  • 定时器到达 PT 后,Q 保持 1,ET 也保持,直到 IN 断开


第六讲:计数器------CTU 增计数器

6.1 截图里的例子

plain

复制代码
%I0.2 ---| |---[ CTU ]--- Q →
%I0.3 ---| |---      CU    |
              R     |
              PV = 10
              CV → "DB27".Static_2

引脚

表格

引脚 我的理解
CU 计数输入,上升沿来一次 +1
R 复位,一接通 CV 清零,Q 变 0
PV 目标值,我要计到多少
Q CV ≥ PV 时输出 1
CV 当前计了多少,实时看

6.2 我的理解

  • I0.2 接 CU,每按一次(上升沿),内部计数 +1

  • I0.3 接 R,按下清零

  • 按 10 次后,Q 输出 1

  • CV 的值存在 "DB27".Static_2 里,可以监控

6.3 应用场景

  • 产品计数:传送带传感器每过一个产品 +1,满 100 个打包

  • 密码错误次数:输错 3 次锁定

  • 步序控制:做完一步 +1,进入下一步

6.4 我的注意事项

  • CU 必须是上升沿,传感器一直通着不会连续加(这是好事)

  • 如果需要连续高速计数,用高速计数器 HSC,CTU 跟不上

  • R 端优先级最高,一接通立刻清零,不管 CU 是什么状态

  • CV 是 Int 类型(-32768~32767),超范围要换 DInt 或 UDInt


第七讲:数学函数------ADD 等

6.1 截图里的 ADD 例子

plain

复制代码
[ ADD_Real ]
EN  ------  ENO
IN1 ------  "DB2_Cal".Static_1
IN2 ------  "DB2_Cal".Static_2
IN3 ------  "DB2_Cal".Static_3
OUT ------  "DB2_Cal".Static_4

引脚

表格

引脚 我的理解
EN 使能,1 才执行
ENO 执行完没出错输出 1
IN1/IN2/IN3 输入,可以多个
OUT 结果

6.2 我整理的常用指令

表格

| 指令 | 功能 | 例子 |
|-------------|------|-------------------------|-----|----|
| ADD | 加 | OUT = IN1 + IN2 + IN3 |
| SUB | 减 | OUT = IN1 - IN2 |
| MUL | 乘 | OUT = IN1 * IN2 |
| DIV | 除 | OUT = IN1 / IN2 |
| MOD | 取余 | OUT = IN1 % IN2 |
| ABS | 绝对值 | `OUT = | IN1 | ` |
| SQRT | 平方根 | OUT = √IN1 |
| SIN/COS/TAN | 三角函数 | 注意输入是弧度 |

6.3 应用场景

  • 模拟量换算:0~27648 转成 0.0~10.0V

  • 产量累加:每周期产量加到总产量

  • PID 前置:传感器值做滤波、线性化

6.4 我的注意事项

  • 数据类型必须一致:截图里是 Real,如果输入 Int 输出 Real,要先转换

  • 除零错误 :IN2=0 时 ENO=0,程序不会崩,但 OUT 保持原值,建议后面判断 ENO 或 IN2

  • 浮点精度:Real 有效数字约 6~7 位,大量累加可能有微小误差,高精度用 LReal

  • ENO 的用法:运算出错 ENO=0,可以触发报警


我的学习总结

核心口诀(我编的,方便记)

  1. SR 复位优先:急停接 R1,安全有保障

  2. 沿指令 4 选 1 :小项目用 ---|P|---,大项目用 R_TRIG

  3. 定时器 5 兄弟:TON 最常用,TONR 有记忆,TOF 断后延,TP 固定宽

  4. 计数器看 CU:上升沿才加 1,R 端一来全清零

  5. 数学函数看类型:Real 对 Real,Int 对 Int,除零 ENO 会报警

我常犯的错误(记下来提醒自己)

表格

错误 原因 我下次注意
定时器不计时 PT 格式写错,或背景 DB 丢了 检查 T#5S 格式,确认 DB 存在
沿指令不触发 上周期状态地址被别的程序改了 用 R_TRIG,自动管理 DB
计数器只加一次 传感器一直通,没有跳变 检查传感器是不是脉冲信号
SR 输出不对 搞混了 SR 和 RS 记住:SR 是复位优先,RS 是置位优先
数学结果不对 类型不匹配,或者除零 统一类型,判断 ENO

由于笔记太长,这个基础指令我分成二篇来记录,

附录:我计划的讲课思路(如果我要给别人讲)

第一课时(45分钟)

  1. 开场(5分钟):展示指令地图,说今天学黄色区域

  2. 位逻辑(15分钟):现场画常开/常闭/NOT,演示 SET_BF 批量操作

  3. SR 触发器(10分钟):重点讲复位优先,用急停做例子,背真值表

  4. 沿指令(15分钟):画时序图,对比 4 种写法,演示单按钮启停灯

第二课时(45分钟)

  1. 复习(5分钟):快速提问"SR 谁优先?沿指令有几种?"

  2. 定时器(20分钟):讲 TON 时序,再讲 TONR 记忆,用星三角和累计时间举例

  3. 计数器(10分钟):模拟传送带计数,演示 CU 和 R

  4. 数学函数(10分钟):演示 ADD 做模拟量换算,强调类型和除零


我的备注:这份笔记是我边学边整理的,可能有理解不到位的地方,后续学到新内容再补充。如果有讲错的地方,欢迎大家指正。

相关推荐
疯狂打码的少年4 小时前
【程序语言与编译】正规式与有限自动机的等价转换
笔记
是上好佳佳佳呀4 小时前
【LangChain|Day03】LangChain 链式调用 Chains 笔记
笔记·langchain
H__Rick4 小时前
C51学习-DAY4
嵌入式硬件·学习·51单片机·硬件工程
red_redemption4 小时前
自由学习记录(201)
学习
一条泥憨鱼4 小时前
Java开发效率神器:Lombok从入门到精通!
java·后端·学习·开发·lombok
闪闪发亮的小星星5 小时前
轨道六根数
笔记
Niuguangshuo5 小时前
LangChain学习之旅(三):用Memory赋予模型记忆
学习·langchain
H__Rick5 小时前
C51学习-DAY8
单片机·嵌入式硬件·学习
aaaameliaaa5 小时前
C语言随机数函数使用全解析
c语言·笔记
Cloud_Shy6186 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法