工作任务2:自动售货机的PLC控制

官方工学老师·30 页·深入(追求细节与边界)·0 次浏览·2 天前
PLC控制自动售货机梯形图编程电气控制

自动售货机的PLC控制

从I/O分配到梯形图编程,吃透售货机控制系统的完整设计流程

按 空格/→ 演示下一步

1 / 30 页

全部页面点击任意一页,跳回舞台从这页播放

PLC控制自动售货机梯形图编程电气控制

自动售货机的PLC控制

从I/O分配到梯形图编程,吃透售货机控制系统的完整设计流程

1第 1 页 · 自动售货机的PLC控制

自动售货机工作原理

想象你在地铁站买了一瓶水——投币、按键、'咚'的一声,饮料掉下来。这一两秒里,机器内部走完了'认钱→比价→出货→找零'的完整流程,而PLC(可编程逻辑控制器)就是这场流程的'大脑'。

货币识别
硬币靠电磁感应识别材质尺寸,纸币靠光电与磁性传感器识别面额
价格判断
PLC比较累计金额与所选商品价,不足则提示退币等待
出货驱动
PLC驱动对应商品道的电机,弹簧螺旋旋转将货物推出出货口
找零反馈
计算差额驱动退币器吐硬币,并刷新显示与状态指示
餐厅点餐结账对应 →自动售货机交易

看菜单选菜↔按键选品;报价够不够↔PLC比价;出餐↔出货;退钱↔找零

2第 2 页 · 自动售货机工作原理

PLC控制系统的组成

从左到右读这张图:现场信号→输入单元→CPU→输出单元→执行器,CPU 还连着程序存储器。

图解渲染中…
in输入映像寄存器:CPU 眼中现场的快照mem存放用户程序,掉电不丢失out输出映像寄存器:CPU 给现场的最终指令cpu周期性扫描:读输入→算逻辑→写输出
3第 3 页 · PLC控制系统的组成

高速计数器的引入

上一节我们认识了 PLC 控制系统由 CPU 循环扫描完成。自动售货机的投币器、编码器送来的不是稳定电平,而是一连串极快的电脉冲——普通计数器在这个速度下靠得住吗?

受限于扫描周期
CPU 每个扫描周期才采样一次输入,典型为 10~20 ms 一轮
高频脉冲会漏检
脉冲周期小于扫描周期时,CPU 还没轮到这个点,脉冲就已消失
计数必然出错
售货机漏一个投币脉冲就少收一角钱,结果不可信
改用高速计数器
由硬件中断直接捕获每个脉冲,绕开扫描节拍
眨眼数飞过的鸟群对应 →用扫描周期数高速脉冲

眨眼太慢、鸟已经飞走;扫描间隔太长、脉冲就漏掉

Tpulse<Tscan    必然漏检T_{pulse} < T_{scan} \;\Rightarrow\; \text{必然漏检}
4第 4 页 · 高速计数器的引入

编码器测速原理

从物理转动到数字脉冲,编码器如何把连续运动切成 PLC 能数的方波。

图解渲染中…
a3栅格每过一格就遮一次光,对应一次电平跳变a5A/B 相正交脉冲,频率正比于转速a7单位时间脉冲数÷编码器线数=转速
5第 5 页 · 编码器测速原理

HSC指令详解

上一页我们看到编码器一转就甩出几百上千个脉冲——普通计数器(CTU)每个扫描周期才数一次,根本追不上。PLC里专门留了一条「快速通道」处理高频信号,这就是高速计数器HSC。

HSC模式号
S7-200共12种模式(0~11),按计数方向、单/双路、内部/外部时钟组合挑选
控制字节配置
SMB37/47/57等8位字节:使能位、计数方向、预设值改写等开关
输入端子绑死
每个HSC号绑死特定输入点(如HSC4→I0.0/I0.1/I0.2),硬件不可改
当前值HC寄存器
HC0/HC1等只读双字存当前计数值,与预设值PV比较触发动作
中断事件号
通过ATCH指令将HSC事件(12/27/28等)与中断程序挂钩,CV=PV等条件触发
高速公路ETC通道对应 →HSC模式与端子绑定

通道类型(模式)一选定,识别天线(输入点)就固定了;车速(脉冲频率)不能超过通道上限

6第 6 页 · HSC指令详解

HSC编程示例

plaintext

把 HSC 落到完整代码:从 OB100 初始化,到 OB1 用增量法测传送带线速度,含异常值剔除。

代码高亮加载中…

程序两段:OB100 用 CTRL_HSC 把 HSC1 清零;OB1 每周期读取 HSC 当前值,用增量法(当前值−上次值)求 Δ脉冲,再除以 PPR 和采样时间得到真实线速度,最后对异常值做限幅。

7第 7 页 · HSC编程示例

高速计数vs普通计数

编码器每秒发上千脉冲,普通CTU根本数不过来——必须分清两者的频率边界。

普通计数
  • 计数频率受扫描周期限制
  • 每个扫描周期才采样一次
  • 适合按钮、限位开关等低速信号
  • 用普通CTU/CTD指令即可实现
高速计数
  • 频率可达数十kHz,与扫描周期脱钩
  • 由硬件中断实时捕获每个脉冲
  • 适合编码器等高频脉冲测量场景
  • 需用HSC指令配合高速输入端子
编码器等高频脉冲必须用HSC;按钮、限位等低速信号用普通计数器即可。
8第 8 页 · 高速计数vs普通计数

高速计数的边界条件

复位/门控/中断触发时机

高速计数的边界条件
复位/门控/中断触发时机
9第 9 页 · 高速计数的边界条件

脉冲输出基础

前页我们解决了PLC'接收'脉冲的边界问题,那反过来——PLC要主动'发出'脉冲呢?比如让弹簧精确转N圈推出饮料。

PTO脉冲串输出
指定脉冲数+频率,发完自动停,用于精确定位(如步进电机走多少步)
PWM脉宽调制
连续输出脉冲,占空比可调,用于调速、调亮度等连续控制
核心区别
PTO关心'发几个',PWM关心'高电平占多久'
应用场景
PTO配步进/伺服走位移,PWM调直流电机转速或加热功率
出货弹簧旋转对应 →PTO与PWM

转N圈停=PTO数脉冲,持续转调快慢=PWM调占空比

D=ThighT×100%D = \frac{T_{high}}{T} \times 100\%
10第 10 页 · 脉冲输出基础

PTO脉冲串输出时序

PTO输出按时间分三段推进,从上往下读时序:装载→启动→加速→恒速→减速→完成。

图解渲染中…
GPTO硬件通道,按配置自动产生三段式脉冲N硬件计数器累加,到目标值触发完成中断F频率随时间变化:上升→持平→下降三段
11第 11 页 · PTO脉冲串输出时序

PTO编程指令

st

三菱FX的PLSY/PLSR两段真实梯形代码,看清频率、脉冲数、加减速参数如何落到寄存器。

代码高亮加载中…

PLSY 三参数(频率/个数/端子);PLSR 多出 S3 加减速时间。参数必须先 MOV 进寄存器;M8029 是脉冲完成标志。

12第 12 页 · PTO编程指令

步进电机的速度控制

上一页已经能按节拍发出脉冲:脉冲数管路程,频率管快慢。真正驱动步进电机时,关键不是“能不能转”,而是怎样安全地改变频率,又不丢位置。

脉冲频率
步距固定时,频率越高,稳态速度越快;调速本质是规划频率随时间的变化
加减速曲线
梯形曲线易实现;S曲线平滑加加速度,减振更好,但参数段更多
动态转矩边界
升频过陡会因转矩不足而失步;可用频率还受负载、转速和供电影响
定位精度边界
开环不会自动发现或补偿失步;误差还受传动间隙、回差、变形和细分误差影响
开汽车进车库对应 →步进电机加减速

起步缓踩油门、中段巡航、到位前松油门;升频太急就像急加速,负载下会失步并冲过目标位

$$f_p=\frac{v}{s},\qquad N=\frac{\theta}{s}$$;\(s\)为每个脉冲对应的位移量,\(v\)、\(\theta\)须采用同一运动维度。
13第 13 页 · 步进电机的速度控制

多段脉冲组合

text

展示 PLC 多段 PTO 流水线程序,用「加速—恒速—减速」三段组合实现完整运动轨迹。

代码高亮加载中…

多段 PTO 把复杂轨迹翻译成一张参数流水线表——每段 12 字节,填入起止频率与脉冲数。PLS 一次触发,CPU 硬件在段间无缝衔接,无需程序干预。

14第 14 页 · 多段脉冲组合

中断机制概述

前面用高速计数器抓住了编码器脉冲,可如果PLC正忙着跑主程序,扫描到输入点的那一瞬间信号已经消失——中断,就是给PLC装上的'紧急插队'机制。

中断的本质
主程序跑到一半被突发事件叫停,处理完自动回到断点继续——像被打断的对话
扫描周期的盲区
普通扫描一圈几毫秒到几十毫秒,硬币落下、编码器脉冲只持续几微秒
中断的触发源
I/O边沿、定时器到时、HSC当前值匹配、PTO完成、通信接收等
中断服务程序
每个中断源绑定一段子程序,触发时PLC自动调用它,执行完返回主程序
医院急诊插队对应 →PLC中断机制

急症来了主治医生停下问诊先处理,处理完回来接着看普通病人

15第 15 页 · 中断机制概述

中断的分类与优先级

从根节点看PLC中断的三大类型,每条分支展开触发条件与优先级。

图解渲染中…
T3定时中断优先级,常用于周期扫描E3外部中断优先级,响应急停按钮H3HSC中断优先级,编码器最快响应
16第 16 页 · 中断的分类与优先级

中断控制指令详解

上页我们看到中断有三种类型,但CPU并不会自动响应。要让中断真正起作用,需要几条指令配合——开总闸、绑事件、标入口。

ENI 全局允许
打开CPU的「耳朵」,全局允许已绑定事件触发中断
DISI 全局禁止
临时关闭所有中断响应,保护关键代码段不被干扰
ATCH 事件绑定
把指定中断事件与某个中断程序号关联起来
DTCH 解除绑定
取消事件与程序的关联,让事件回到无人响应
INT 程序入口
标记中断程序起始编号,与ATCH中的编号严格对应
家里有人按门铃对应 →中断触发与处理

门铃按钮=事件;ATCH=安排管家对应开门;DISI=拔掉门铃电源,谁按都听不见

17第 17 页 · 中断控制指令详解

定时中断实例

text

S7-200 用定时中断实现每100ms自动采样一次温度传感器

代码高亮加载中…

定时中断的标准三件套: SMB34定周期、ATCH绑例程、ENI开中断; 中断例程内完成AIW0采样、累加和按需平均的周期任务。

18第 18 页 · 定时中断实例

高速计数器中断实例

iecst

S7-200 SMART:编码器计数到 1000 时,HSC0 事件 22 进入 INT0,点亮 Q0.0。

代码高亮加载中…

HDEF 将 HSC0 设为 2 倍频正交计数;16#F8 允许装入 CV/PV 并打开相等事件中断。事件 22 接入 INT0,计数到 1000 时置位 Q0.0。

19第 19 页 · 高速计数器中断实例

中断的边界与陷阱

前页我们让中断能跑起来了——分类、优先级、指令都齐了。但你真把它丢进售货机连续跑一周,会撞上三个隐形坑:嵌套打架、响应太慢、共享变量被撕碎。

中断嵌套
新中断能否打断当前 ISR,由优先级与是否开嵌套决定;嵌套开得过深会栈溢出
响应延迟
从中断事件到 ISR 启动 = 当前指令余尾 + 排队等待,最坏可达 1 个扫描周期(10ms 级)
数据一致性
主程序与 ISR 共享变量,可能读到「半新半旧」;32 位计数器尤其危险,需关闭中断或双缓冲
银行柜台排队对应 →PLC 中断机制

主循环是普通窗口,ISR 是 VIP 通道;嵌套=两 VIP 同时办;账户中途被读=数据被撕碎

20第 20 页 · 中断的边界与陷阱

售货机控制需求分析

货币识别+商品选择+出货的控制逻辑

售货机控制需求分析
货币识别+商品选择+出货的控制逻辑
21第 21 页 · 售货机控制需求分析

货币识别与累加程序

st

S7-200 模式0把 I0.0 的投币脉冲送入 HSC0,并在 100 ms 中断中换算累计金额。

代码高亮加载中…

16#F8 选择 HSC0 模式0;先写 SMD38=0,再写 SMB47 并执行 HSC 0。定时读取 HC0,乘每脉冲10分即累计金额。

22第 22 页 · 货币识别与累加程序

出货电机控制程序

st

这段 ST 代码展示 S7-1200 怎么用 PTO1 驱动出货电机:配置频率、按商品选圈数、启动脉冲串、由 Done 信号闭环。

代码高亮加载中…

周期 500μs 决定 2kHz 频率,不同商品对应不同脉冲数(即电机圈数);CTRL_PTO_1 是西门子 PTO 控制 FB,Pulse:=TRUE 启动后硬件自动发完全部脉冲,Done 信号通知 PLC。

23第 23 页 · 出货电机控制程序

找零与异常处理程序

text

用S7-200定时中断实现30秒无操作自动退币——核心是ATCH+ENI建立连接,INT_0按100ms累加。

代码高亮加载中…

SMB34定100ms节拍,ATCH把INT_0挂到EVT10;INT_0每拍累加,VW100≥300即30秒,置M0.1驱动退币阀;正常出货与异常退币两处DTCH拆中断。

24第 24 页 · 找零与异常处理程序

系统程序框架

实线是主程序扫描顺序,虚线是中断触发:看清主循环与异步例程如何协作。

图解渲染中…
H高速计数器中断:编码器反馈速度给主程序I定时中断:周期刷新显示与状态JPTO完成中断:步进电机到位后通知K故障中断:异常时直接停机报警
25第 25 页 · 系统程序框架

核心知识自测

点击作答

在自动售货机中,HSC0 用于累计投币脉冲。当投入金额达到商品价格时,最合理的程序处理方式是?

26第 26 页 · 核心知识自测

程序调试步骤

程序写完后,从仿真到现场分四步走,每步都有不可替代的作用。

1
离线仿真
用PLCSIM等仿真软件跑逻辑,先排除明显的程序错误,不接真硬件。
2
在线监视
下载程序后用监控表跟踪I/O状态和中间变量,确认信号走向与设计一致。
3
参数调整
根据现场实际响应微调延时、滤波时间和预设值,让动作更稳健。
4
异常验证
人为触发投币卡死、电机堵转等边界情况,验证异常处理分支。
27第 27 页 · 程序调试步骤

常见故障与排除

程序框架搭好,仿真也跑通了,可一上实物——硬币器一抖HSC就跳值,电机一转快PTO就丢脉冲,急停按下去中断没响应——三类故障几乎是现场调试的必考题。

计数器跳变
干扰叠加或滤波时间设置不当,计数值多跳或漏跳
脉冲丢失
PTO频率超上限或电缆电容过大,方波畸变丢失上升沿
中断失灵
全局中断被关闭、扫描周期 ≥ 中断间隔,事件被错过
在线排查
监控HSC当前值、捕获中断标志位、强制I/O复现故障
演唱会扫码检票现场对应 →售货机三类故障

人多拥挤重复扫码=计数器跳变;扫码器太快漏掉一人=脉冲丢失;闸机断电刷不开=全局中断关闭

Tpulse>2tfilterT_{pulse} > 2 \cdot t_{filter}
28第 28 页 · 常见故障与排除

性能优化策略

上节排查故障时,你可能发现很多怪异现象都源于同一个根——程序跑得太慢、负载太重。这页讲三条性能优化策略,以及每条的天花板在哪。

扫描周期瘦身
主循环只留关键逻辑,把初始化/通信/统计挪到子程序
中断频率设上限
高速中断别塞太多事,触发间隔 ≥ 程序执行时间
指令选短不选全
位操作比字操作快,避免同周期重复算同一变量
分时分摊负载
累加、滤波这类慢任务分摊到 N 个扫描周期里跑
别优化过头
看门狗、滤波消抖这些慢是有意的,砍掉会出怪故障
餐厅高峰期后厨对应 →PLC 扫描+中断调度

主厨=主扫描、岗位厨师=子程序、加急单=中断;电话问个不停没人做菜=中断过频

29第 29 页 · 性能优化策略

课后思考

先合书默想30秒,再点开参考答案;每题都没有唯一正确答案。

1高速计数器与普通计数器最本质的区别是什么?为什么出货电机测速一定要用HSC?

参考答案普通计数受扫描周期拖累,HSC在硬件层独立计数,响应不受CPU节奏影响;出货电机转速快、惯性小,普通计数会大量丢脉冲,无法闭环测速。

2如果编码器在运行中突然丢失脉冲信号,HSC程序该如何检测并触发保护?

参考答案在定时窗口内比对当前计数值与上一次值,若无变化即判定断线或卡死,立即触发中断停机、报警,等待人工复位后再恢复业务。

3若售货机同一时刻触发高速计数中断和定时中断,PLC按什么规则决定先后?

参考答案PLC按优先级排队,优先级高的硬中断先抢占CPU并独占执行;同级中断按事件到达顺序排队,依次响应处理。

30第 30 页 · 课后思考