药片装瓶机在制药生产线里属于那种“看着不起眼,实际上一堆细节”的设备。外行觉得不就是数数药片、往瓶子里装嘛,等真正开始做控制系统设计,才发现从计数精度、节拍配合到GMP合规,每一环都在给你挖坑。我这次要拆解的项目,就是一套基于PLC的自动药片装瓶机控制系统,包含完整的设计思路和仿真验证过程。这套系统解决的核心问题,是如何在每分钟几十瓶的节拍下,稳定可靠地完成“空瓶供给 — 药片计数 — 装瓶 — 满瓶输出”的全自动流程,并且把计数误差控制在极小的范围内。适合做制药设备开发、产线电气设计的朋友参考,也适合正在折腾相关课程设计或毕业设计的同学抄作业。
1. 需求拆解与总体方案设计
1.1 先把工艺参数逼问清楚
这类项目拿到手,最容易犯的错就是直接打开选型手册挑PLC。我的习惯是先把甲方需求里的每一项参数都砸实,做成一张参数表。所谓药片装瓶机,工艺流程本身不复杂,但每个动作都有对应的控制要求。
下面是我在这个项目里整理的关键参数(基于某模拟项目X,参数做了合理设定):
| 参数名称 | 设定值 | 对控制系统的影响 |
|---|---|---|
| 目标产能 | 30瓶/分钟,约1800瓶/小时 | 决定整机节拍必须控制在2秒/瓶以内 |
| 每瓶装填量 | 30片/瓶 | 决定计数程序的目标值设定与比较逻辑 |
| 药片规格 | 直径约8mm,白色素片 | 影响光电传感器的选型和安装方式 |
| 计数误差要求 | 不允许缺片,允许±1片 | 决定计数逻辑必须带补偿措施 |
| 操作模式 | 手动/自动双模式 | 控制系统必须支持两种运行模式切换 |
| 电源与气源 | AC220V / 0.6MPa压缩空气 | 影响电气元件选型和气动回路设计 |
为什么说不允许缺片但允许多一片?从实际生产角度看,缺片属于严重质量事故,到了患者手里就是投诉甚至法律问题;而多装一片在药品重量偏差范围内,通常能通过后续的称重复检。所以控制策略上要“宁多勿缺”,这直接决定了后面计数补偿逻辑的方向。
1.2 三种数片方案怎么选
药片计数的技术方案,市面上主流的有三种。别急着拍板,先做一轮对比。
| 方案类型 | 数片原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 光电计数方案 | 药片从通道滑落,遮断光电对射信号产生脉冲 | 速度快、成本低、结构简单 | 对药片透明度、叠片情况敏感 | 中小瓶装、产量适中 |
| 称重计数方案 | 通过重量变化换算药片数量 | 精度高、不受光电干扰 | 速度较慢、受药片重量一致性影响 | 大粒药丸、异形片 |
| 模板数片方案 | 用带孔模板定量分离药片 | 一次可取固定数量,精度高 | 换品种需更换模具、机构复杂 | 高速产线、大批量单一品种 |
这个项目我选了光电计数方案。理由很直接:产能要求30瓶/分钟,速度是第一位的,称重方案在2秒节拍内很难完成一次稳定的称量;模板方案精度好,但换药片规格就要换模具,甲方明确表示后面会生产好几种片型,维护成本不划算。光电计数配合良好的机械导向,完全够用。
1.3 系统总体架构
整个控制系统可以分成三个层级来看:
- 检测层:负责感知设备的“状态”——空瓶是否到位、药片是否经过、气缸是否运动到位、输送带是否堵塞。核心元件是接近开关和对射型光电传感器。
- 执行层:负责执行“动作”——输送带电机带动瓶子前进、电磁振动器把药片从料仓送到计数通道、气缸把空瓶顶到装瓶位并夹紧、挡片机构在计满后截断药片流。
- 控制层:PLC作为整台设备的大脑,读取检测层的信号,按预定的顺序逻辑输出控制指令,同时触摸屏负责显示状态、设定参数和记录数据。
拿生活里的餐厅来类比:检测层是服务员,负责看哪桌客人吃完了;执行层是传菜员和厨师,负责上菜;PLC就是后厨的调度台,所有信息汇总到这里,统一发指令。这个比喻虽然粗,但能帮助理解系统的层次关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件选型与电气设计要点
2.1 PLC选型:别贪大,也别抠门
很多设计报告一上来就放一个大型PLC的选型结果,但实际点数算下来根本不匹配。选PLC的标准就三条:I/O点数够用且留有余量、具备高速计数功能、能和触摸屏方便通讯。
我大致统计了本系统的信号需求:开关量输入大约需要18点,开关量输出大约需要10点,不需要模拟量通道。考虑到传感器信号的快速性(药片下落速度很快,光电脉冲频率可能达到每秒几十个),PLC必须至少有一个高频计数输入通道。最终选定了一款主流品牌的小型一体机,顺便说一句,大家熟悉的200系列在这个场合就非常够用,完全不浪费。这类PLC梯形图编程方便,现场电工容易上手维护,而且后续要加网络通讯模块也很灵活。
2.2 传感器选型与安装位置
这套系统里传感器种类不多,但位置和选型都直接影响系统可靠性。
空瓶到位检测:用的是电容式接近开关,装在输送带侧面。选电容式而不是电感式,是因为玻璃瓶和塑料瓶都可能用,电感式只对金属有效。安装位置要让传感器检测瓶身的中部,避免瓶口瓶底的曲线特征影响检测。
药片计数检测:对射型光电传感器,发射端和接收端分别装在数片通道两侧。这里有个重要细节:通道宽度要略大于药片直径,保证药片以单列方式通过,否则两片叠加就会漏计数。药片如果是透明的,要选择对透明物体有响应的光电传感器,普通漫反射型的容易漏检。
2.3 电气原理设计:I/O分配与安全回路
电气设计里最忌讳的是I/O分配随意排,导致后续布线混乱、程序调试困难。我习惯按功能分区块排点位。
| 信号类型 | 地址 | 功能说明 | 备注 |
|---|---|---|---|
| 输入 | I0.0 | 启动按钮 | 常开 |
| 输入 | I0.1 | 停止按钮 | 常开 |
| 输入 | I0.2 | 急停按钮 | 常闭,硬接线进安全回路 |
| 输入 | I0.3 | 手动/自动切换 | 旋钮开关 |
| 输入 | I0.4 | 空瓶到位检测 | 接近开关 |
| 输入 | I0.5 | 药片光电计数信号 | 接高速计数输入端 |
| 输入 | I0.6 | 顶瓶气缸伸出到位 | 磁性开关 |
| 输入 | I0.7 | 顶瓶气缸缩回到位 | 磁性开关 |
| 输入 | I1.0 | 出料口堵塞检测 | 光电传感器 |
| 输出 | Q0.0 | 输送带电机接触器 | 带过载保护 |
| 输出 | Q0.1 | 电磁振动给料器 | 高速启停 |
| 输出 | Q0.2 | 顶瓶气缸电磁阀 | 单控电磁阀 |
| 输出 | Q0.3 | 计数通道挡片电磁阀 | 截断药片流 |
| 输出 | Q0.4 | 绿色指示灯 | 正常运行 |
| 输出 | Q0.5 | 红色报警灯 | 故障报警 |
| 输出 | Q0.6 | 蜂鸣器 | 报警提示 |
电气设计中有两条红线必须在图纸阶段就明确:一是急停回路绝对不能只靠PLC程序实现,必须用硬接线把急停按钮串在电源回路里,哪怕PLC程序死机了,急停也能切断主回路电源;二是PLC的开关电源、变频器、传感器电源要分开走线,动力线和信号线不能走在同一个线槽里,否则变频器的高频干扰会让高速计数信号乱跳。
3. 程序框架设计与计数逻辑优化
3.1 顺序控制流程设计
这套系统的程序写得不复杂,重点是顺序控制必须严格。整机流程可以划分成7个状态:
- 待机状态:设备上电,所有执行机构复位,等待启动。
- 启动自检:检测各传感器状态是否正常,气缸是否在初始位。
- 等待空瓶到位:输送带启动,空瓶输送至装瓶位,接近开关给出信号后输送带停止。
- 顶瓶定位:顶瓶气缸伸出,把空瓶顶紧在装瓶口下方,同时磁性开关确认到位。
- 振动给料与计数:电磁振动器启动,药片沿通道滑落,光电传感器把脉冲送入PLC高速计数器。
- 计满停止与装瓶:当计数值等于目标值时,先停振动器,延时后伸出挡片截断残余药片流,药片落入瓶中。
- 满瓶输出:顶瓶气缸缩回,输送带重新启动,将满瓶送走。
状态转移用顺序功能图来设计最直观,每一步都有明确的转移条件。比如从状态5到状态6,转移条件就是“当前计数 = 设定目标值 - 提前量”。这样每个环节都清晰可查,调试时也能精确定位卡在哪个状态。
3.2 核心计数逻辑:提前量补偿
整个程序里最关键的逻辑在于提前量补偿。光电传感器检测到药片后,PLC要发停止信号给振动器,但振动器停止后,通道里已经振动起来的药片并不会立刻停住,还会惯性滑落几粒。如果等计数值完全达到30片才停振动,实际装瓶数就会变成33片甚至更多。
我的处理方式是在程序里引入一个“提前量”参数,结构文本风格的伪代码如下:
code复制IF 计数完成标志 = FALSE THEN
当前计数值 := 当前计数值 + 1;
END_IF
IF 当前计数值 >= (目标值 - 提前量) THEN
停振动器输出 := TRUE; // 提前停振
END_IF
IF 停振动器输出 = TRUE THEN
延时 0.2秒; // 等待通道中余料滑落完毕
输出挡片命令 := TRUE; // 挡片截断
当前瓶实际计数 := 当前计数值; // 记录本瓶实际粒数
END_IF
提前量到底取多少?没有公式可以算,必须在现场试。我的标定方法是:设定初步提前量为3片,连续空跑5瓶并记录每瓶实际装入量,统计平均偏差;如果每瓶多3片,就把提前量加到6;如果出现少片,就回调。最终在这套设备上把提前量标定为5片,同时把“延时时长”设为0.3秒。这个小参数做成触摸屏上可调的值,而不是写死在程序里,后面换药片规格或者机械磨损后还能再调。
3.3 计数信号消抖处理
光电计数信号在高速状态下的最大问题是抖动。药片不是规规矩矩一个接一个滑过去的,偶尔会在通道里弹跳、侧翻,造成一个药片被检测到两次或者两个药片叠在一起只检测到一次。
处理方法分硬件和软件两层:
- 硬件层:PLC的输入端对高速计数通道设置输入滤波器参数,一般是10ms~20ms。但要注意,滤波时间设置太长会把真实的药片脉冲也滤掉,导致漏计数。我最终选择了一个折中的20ms滤波时间。
- 软件层:在计数程序中加判定条件,要求信号持续超过某阈值的下降沿才计入一次,相当于对脉冲宽度做了合法性校验。这样即便通道里出现弹跳信号,也不会被重复计数。
3.4 报警与不合格品剔除逻辑
系统需要记录每一瓶的实际装填数,并和标准值比较。如果发现偏差超出允许范围(本项目设定为 ±2片),控制程序就把该瓶标记为“异常瓶”,在满瓶输出后由后续工位剔除,同时在触摸屏上记录一条报警。这个功能不是甲方硬性要求的,但制药行业审厂时对数据追溯非常看重,有这个记录逻辑能在验收时省下不少口舌。
3.5 触摸屏界面设计
触摸屏界面我分了四个页面:
- 主画面:显示流程动画示意、当前运行状态、当前瓶号、目标片数与已完成瓶数。
- 参数设置画面:目标片数、提前量、延时时间、每批目标产量。
- 报警记录画面:历史报警信息,包括报警时间、报警内容、处理状态。
- 产量统计画面:每班次累计产量、合格数、不合格数。
界面的核心逻辑是分级权限:操作员只能启动停止和看数据,参数修改需要切换管理员账号。别小看这个设计,GMP审厂的时候,没有权限管理的设备是会被记缺陷项的。
4. 仿真分析与验证过程记录
4.1 仿真平台搭建思路
这个项目的仿真分析分两个层面做:第一是程序逻辑仿真,在PLC编程软件的仿真环境里跑梯形图,验证顺序控制逻辑是否正确;第二是信号级仿真,也就是用虚拟IO面板模拟现场传感器的输入信号,观察PLC输出的响应是否符合设计预期。第二层仿真,很多朋友会忽略,但它对顺序控制类的程序调试至关重要。
我用到的仿真资源很简单:编程软件自带的仿真器,以及一个Excel表格来记录虚拟IO信号的时序。在仿真器里把I0.0到I1.0的所有输入点的状态手动翻转,模拟一个完整的生产循环。
4.2 仿真步骤与信号时序验证
整个仿真我按下面的步骤走:
- 在仿真软件里上传程序,开启虚拟IO面板。
- 模拟按下启动按钮(I0.0=1),观察输出Q0.0(输送带)是否得电。
- 模拟空瓶到位信号(I0.4=1),观察Q0.0是否失电、Q0.2(顶瓶气缸)是否得电。
- 模拟气缸伸出到位(I0.6=1),观察Q0.1(振动给料器)是否得电。
- 手动给I0.5(计数信号)不停发脉冲,观察计数器寄存器数值变化。
- 当计数器到达“目标值-提前量”时,观察Q0.1是否失电。
- 延时过后,观察Q0.3(挡片电磁阀)是否得电。
- 模拟装瓶完成后的动作,观察整个流程能否回到初始状态并进入下一循环。
仿真结果我用一张表记录了关键环节的响应时间:
| 触发信号 | 预期动作 | 仿真响应情况 | 实际响应时间 |
|---|---|---|---|
| I0.0 启动 | Q0.0输送带启动 | 正常得电 | 即时 |
| I0.4 空瓶到位 | 输送带停止、气缸伸出 | 正确执行 | 约0.05秒 |
| I0.6 气缸到位 | 振动给料启动 | 正确执行 | 即时 |
| 计数达到32(目标35-提前量3) | 振动器停机 | 正确执行 | 即时 |
| 停机后0.3秒延时 | 挡片动作 | 正确执行 | 0.3秒 |
仿真过程中发现了一个问题:我最初设计的流程里,气缸伸出到位后立刻启动振动给料,但实际上瓶子还需要0.2秒的稳定时间,否则瓶子还没完全对准瓶口,药片就撒出来了。这个问题在仿真时序图里一眼就能看出来——传感器信号给出后,气缸动作还没完成,振动就已经开始。后来在程序里插入了一个0.3秒的延时,让气缸完全到位、瓶子夹紧后再启动振动。这个细节如果不仿真,到了现场就是一批碎瓶事故。
4.3 报警场景的仿真验证
仿真不能只跑正常流程,异常场景更要跑。我做了几个典型的异常模拟:
- 急停测试:在自动运行过程中按下I0.2(急停),验证所有输出是否立即复位,设备是否进入报警状态。仿真结果显示所有输出瞬间失电,但再启动时必须先复位急停按钮再按启动键,这个互锁逻辑在程序里已经写好了。
- 出料堵塞测试:模拟I1.0堵塞信号触发,验证系统能否停止振动给料,并触发红色报警灯和蜂鸣器。仿真结果与设计一致。
- 空瓶长期未到位测试:输送带运行15秒后仍未收到空瓶到位信号,系统自动停止输送带并报警,这是防止空转磨损的附加保护逻辑。
4.4 仿真的局限性和价值总结
仿真不是万能的,这点必须清醒认识到。传感器本身的响应时延、药片在通道内的真实滑动特性、气缸动作的实际耗气量,这些在仿真环境里都是理想化的。但仿真能把程序层面的逻辑漏洞、时序冲突、状态死锁这些问题提前消灭掉。我个人的经验是,一套顺序控制程序如果能在仿真阶段把状态转移全部理清,到现场调试至少能省掉70%的时间。实际到这个项目里,唯一摔过的跟头是计数提前量没有在现场重新标定,但这是机械层面的问题,已经在第5章里处理掉了。
5. 现场调试中的典型问题速查
仿真做得再充分,到了现场还是会遇到一堆真问题。这套装瓶机在现场调试阶段踩过的坑,我整理成了一份速查表,做同类设备的朋友可以直接拿去参考。
| 故障现象 | 可能原因 | 排查顺序 | 解决对策 |
|---|---|---|---|
| 计数偏多,每瓶多3~5片 | 停振后仍有惯性药片滑落 | 1. 检查振动器断电响应时间 2. 检查通道长度 |
增加提前量参数,现场重新标定 |
| 计数偏少,出现缺片 | 1. 光电传感器灵敏度下降 2. 药片叠片遮挡信号 |
1. 清洁光电探头发射面 2. 检查通道导向板 |
通道加装单列强制导向板 |
| 光电计数不稳定乱跳 | 1. 变频器干扰 2. 电源波动 |
1. 检查信号线屏蔽层接地 2. 信号线与动力线分开走线槽 |
改用屏蔽双绞线,输入端加滤波器 |
| 气缸到位信号时有时无 | 接近开关安装松动 | 1. 检查机械支架 2. 检查接线端子 |
加装防振支架,更换带锁紧结构的传感器支架 |
| 瓶子未能准确定位 | 输送带惯性大,停止位置不准 | 1. 检查变频器减速时间 2. 检查输送带机械张紧度 |
变频器减速时间调至0.3秒,增加停止前的低速爬行段 |
| 运行一段时间后报警 | 出料口粉尘积累触发堵塞光电 | 1. 检查粉尘防护罩 2. 检查光电探头积粉情况 |
增加气源吹扫装置,每班清洁一次 |
最典型的案例是第一台样机调试时,计数误差大得离谱。我一开始以为是程序逻辑写错了,排查了一上午,最后才发现是振动给料器的安装角度有一条小小的缝隙,导致药片在通道入口处挤成了两列,叠片通过时传感器只识别到一半信号。所以说装瓶机这种设备,60%的可靠性在机械结构,只有40%在程序控制。做控制系统设计的时候,千万不能只盯着梯形图,机械执行和传感器安装位置给控制系统带来的影响一样致命。
另一个很有价值的经验是:千万不要指望“理论提前量”直接套用。一套设备一个值,换了振动器或者调整了通道长度,这个参数就得重新标定。我在触摸屏参数页面上专门做了个“提前量自学习辅助”功能,操作员在手动模式下让设备空跑10瓶,系统自动统计每瓶的实际偏差平均值,并给出建议的提前量修正值。后来甲方反馈说这个功能帮了大忙,换药片规格时能快速将设备调回最佳状态。
6. 设计复盘与扩展建议
这套控制系统做完,回过头来梳理整个设计流程,我最深的体会是:控制系统的设计顺序应当是先工艺、再电气、最后程序。很多设计报告的开头是PLC选型型号和规格参数,仿佛选一台高配PLC就能解决问题。实际上,真正决定系统成败的是对工艺需求的理解深度——计数允许偏差是多少、节拍余量是多少、报警互锁有哪些,这些参数每一个都会影响程序架构和硬件选型。
程序结构方面,尽量把不同功能做成独立的程序块,比如计数模块、气缸控制模块、报警处理模块。不要把所有逻辑堆在一个主程序里。这样做的直接好处是,现场调试时发现问题能立刻定位到具体某个块,而不用在一长段梯形图里反复翻页找逻辑。
我建议做同类设备的朋友把以下两点作为后续扩展方向:
一是多通道并行结构。现在单通道计数能到约20片/秒,30瓶/分钟已经是瓶颈了。如果产能要求提升到60瓶/分钟,可以考虑双通道结构——两个通道交替装填同一瓶或者两瓶并行,PLC需要增加一路高速计数输入,程序上增加通道切换逻辑。
二是数据追溯与系统对接。现在这套系统的产量、报警记录都存在触摸屏本地。如果甲方要求接入工厂的上位管理系统,只需要给PLC加一个通讯模块,把每瓶的计数结果、设备运行时长、故障记录定时上传即可,实现真正的批次追溯。做这种扩展时,建议在PLC程序里把数据记录写成结构化寄存器块,后续对接时能少做很多转换工作。
最后再分享一个小技巧:给系统加一个“离线试机模式”。在触摸屏上按下这个按钮,PLC只执行逻辑控制流程,但不输出任何实际动作信号(或者输出全部被旁路)。这样在设备维护时,工人可以在不送电、不启振动、不动作气缸的情况下,手动给传感器信号来完整演示整个流程,检查程序逻辑是否完好。这个模式在药厂验收演示时特别好用,也方便培训操作员。设计控制系统时顺手加这样一个模式,成本几乎为零,但实用性拉满。
