系统学习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.11 时触点反而断开。我的疑问%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全部置 1DB25_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 )真值表我跟着老师画的表格SR1SR 内部状态Q 输出1011010000不变不变1100我的结论当 S 和 R1 同时为 1 时复位优先输出为 0。3.4 我想到的实际例子——传送带急停plain启动按钮 —| |—( S 端 ) 急停按钮 —|/|—( R1 端 ) // 急停是常闭正常时通按下时断 [SR] Q —( 传送带运行 )正常启动按启动按钮Q1传送带运行急停急停按钮被按下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)—线圈型要指定地址像线圈输出脉冲3R_TRIG/F_TRIG功能块型不要自动用背景 DB最规范推荐4P_TRIG/N_TRIG旧版功能块不要和 R_TRIG 类似4.4 截图里的详细对比写法 1触点型plain%M2.5 沿条件 —| |— —|P|—( %M2.3 置位线圈 ) %M2.6 上周期结果 —| |—%M2.6存的是上一个周期%M2.5的状态当前 %M2.51上周期 %M2.60 → 上升沿触发P 触点通一个周期写法 2线圈型plain%M2.5 沿条件 —| |—( %M2.9 线圈输出 ) %M2.6 上周期结果 —| |—写法 3R_TRIG 功能块plain%M2.5 —| |—[ R_TRIG ]—( %M2.2 输出 )自动在背景 DB 里存上周期状态我不用管写法 4P_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、TP5.1 五种定时器我整理的对照表表格指令中文名我理解的特征TP脉冲定时器触发后输出固定时间期间再触发没用TON通电延时得电后等一段时间再输出最常用TOF断电延时失电后等一段时间再断开TONR保持型通电延时能累计时间有记忆要手动复位RT复位定时器专门给 TONR 复位用的5.2 TON 通电延时截图例子引脚表格引脚我的理解IN输入信号接通后开始计时PT我要延时多久比如T#5S是 5 秒Q延时到了输出 1没到时输出 0ET现在已经计了多久可以监控截图里的梯形图plain%I0.0 —| |—[ TON ]—( %M4.1 输出 ) PT T#5S ET → 显示我的理解按下 I0.0等 5 秒后 M4.1 变 1。松开 I0.0M4.1 立刻变 0ET 清零。应用场景我想到的星三角启动按启动后等 5 秒再切换润滑系统开机 10 秒后再启动油泵防误触按钮按住 2 秒才确认5.3 TONR 保持型通电延时截图例子plain%I0.1 —| |—[ TONR ]—( %M4.2 输出 ) PT T#1M 背景 DB DB27.Static_1和 TON 的区别TON中途断开 INET 清零下次重新计TONR中途断开 INET保持下次从上次继续累加应用场景设备累计运行时间风机累计运行满 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#5S5秒、T#1M1分钟、T#500MS500毫秒TON 的 ET 在 IN 断开时自动清零TONR不会自动清零必须手动复位定时器到达 PT 后Q 保持 1ET 也保持直到 IN 断开第六讲计数器——CTU 增计数器6.1 截图里的例子plain%I0.2 —| |—[ CTU ]— Q → %I0.3 —| |— CU | R | PV 10 CV → DB27.Static_2引脚表格引脚我的理解CU计数输入上升沿来一次 1R复位一接通 CV 清零Q 变 0PV目标值我要计到多少QCV ≥ PV 时输出 1CV当前计了多少实时看6.2 我的理解I0.2 接 CU每按一次上升沿内部计数 1I0.3 接 R按下清零按 10 次后Q 输出 1CV 的值存在DB27.Static_2里可以监控6.3 应用场景产品计数传送带传感器每过一个产品 1满 100 个打包密码错误次数输错 3 次锁定步序控制做完一步 1进入下一步6.4 我的注意事项CU 必须是上升沿传感器一直通着不会连续加这是好事如果需要连续高速计数用高速计数器 HSCCTU 跟不上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执行完没出错输出 1IN1/IN2/IN3输入可以多个OUT结果6.2 我整理的常用指令表格指令功能例子ADD加OUT IN1 IN2 IN3SUB减OUT IN1 - IN2MUL乘OUT IN1 * IN2DIV除OUT IN1 / IN2MOD取余OUT IN1 % IN2ABS绝对值OUT IN1SQRT平方根OUT √IN1SIN/COS/TAN三角函数注意输入是弧度6.3 应用场景模拟量换算0~27648 转成 0.0~10.0V产量累加每周期产量加到总产量PID 前置传感器值做滤波、线性化6.4 我的注意事项数据类型必须一致截图里是 Real如果输入 Int 输出 Real要先转换除零错误IN20 时 ENO0程序不会崩但 OUT 保持原值建议后面判断 ENO 或 IN2浮点精度Real 有效数字约 6~7 位大量累加可能有微小误差高精度用 LRealENO 的用法运算出错 ENO0可以触发报警我的学习总结核心口诀我编的方便记SR 复位优先急停接 R1安全有保障沿指令 4 选 1小项目用—|P|—大项目用R_TRIG定时器 5 兄弟TON 最常用TONR 有记忆TOF 断后延TP 固定宽计数器看 CU上升沿才加 1R 端一来全清零数学函数看类型Real 对 RealInt 对 Int除零 ENO 会报警我常犯的错误记下来提醒自己表格错误原因我下次注意定时器不计时PT 格式写错或背景 DB 丢了检查T#5S格式确认 DB 存在沿指令不触发上周期状态地址被别的程序改了用 R_TRIG自动管理 DB计数器只加一次传感器一直通没有跳变检查传感器是不是脉冲信号SR 输出不对搞混了 SR 和 RS记住SR 是复位优先RS 是置位优先数学结果不对类型不匹配或者除零统一类型判断 ENO由于笔记太长这个基础指令我分成二篇来记录附录我计划的讲课思路如果我要给别人讲第一课时45分钟开场5分钟展示指令地图说今天学黄色区域位逻辑15分钟现场画常开/常闭/NOT演示 SET_BF 批量操作SR 触发器10分钟重点讲复位优先用急停做例子背真值表沿指令15分钟画时序图对比 4 种写法演示单按钮启停灯第二课时45分钟复习5分钟快速提问SR 谁优先沿指令有几种定时器20分钟讲 TON 时序再讲 TONR 记忆用星三角和累计时间举例计数器10分钟模拟传送带计数演示 CU 和 R数学函数10分钟演示 ADD 做模拟量换算强调类型和除零我的备注这份笔记是我边学边整理的可能有理解不到位的地方后续学到新内容再补充。如果有讲错的地方欢迎大家指正。