西门子PLC1200博途V16程序画面例程,具体项目工艺为制药厂生物发酵系统,程序内有报警,模拟量标定处理,温度PID,称重仪表USS通讯和基本的各种数字量控制,硬件组成包含称重仪表通讯及和ET200SP模块通讯组态。 项目方案性能稳定,经济合理,是一个学习的好案例。 另冗电气控制原理图辅助参考。 博图版本V15.1及以上打开。
刚拿到某药厂发酵系统PLC1200项目源码时,说实话有点懵——工艺段设备清单二十多个,光称重罐就带八个温控点。但拆开程序结构后发现,老司机们的工程化思维确实值得学。
硬件组态藏着门道。ET200SP分布式IO用IM155-6 PN组态时,注意PROFINET节点地址别跟本地模块冲突。特别是称重仪表的USS通讯,在设备配置里得手动添加USS_Comm模块,波特率设9600时遇到过CRC校验失败,后来发现是电缆屏蔽层没接实(别问我怎么查出来的,都是泪)。
发酵罐温控用到了PID_Compact,这个FB功能块确实方便。但现场调试时发现个细节:PID自整定前务必确认温度变送器的4-20mA信号线性度。贴一段SCL写的温度转换:
#Temp_Raw := NORM_X(MIN := 6400, MAX := 27648, VALUE := "AI_Input"); #Temp_Real := SCALE_X(MIN := 0.0, MAX := 150.0, VALUE := #Temp_Raw); IF #Temp_Real > 130.0 THEN "Alarm_OverTemp" := 1; END_IF;这段代码亮点在量程转换和报警联锁一气呵成,注意NORM_X的原始值范围根据传感器型号调整,之前有次把MAX设成27649导致量程溢出,现场温度显示直接乱跳。
称重仪表通讯最折腾,USS协议每次最多读四个字。用轮询方式读六个罐体时,得做分时处理:
CASE #USS_Step OF 0: USS_RPM(REQ:=TRUE, DRIVE:=1, Param:=3, INDEX:=0, DB_Ptr:=#Weight1_DB); #USS_Step := 1; 1: IF NOT #USS_RPM.BUSY THEN #Tank[1].Weight := DINT_TO_REAL(#Weight1_DB.DWORD_VALUE)/1000.0; #USS_Step := 2; END_IF; //...后续类似处理其他罐体这个状态机结构有效避免通讯阻塞,实测每秒能更新全部数据。记得USS库要手动添加,V16开始支持同时多端口通讯,但老版本建议单独配置CM1241模块。
西门子PLC1200博途V16程序画面例程,具体项目工艺为制药厂生物发酵系统,程序内有报警,模拟量标定处理,温度PID,称重仪表USS通讯和基本的各种数字量控制,硬件组成包含称重仪表通讯及和ET200SP模块通讯组态。 项目方案性能稳定,经济合理,是一个学习的好案例。 另冗电气控制原理图辅助参考。 博图版本V15.1及以上打开。
报警处理模块用梯形图实现更直观,重点说下报警死区防抖:
--| 模拟量超限 |----(OSR)----[TON 3s]----|置位报警|这个经典组合拳能过滤掉瞬时干扰,TON时间根据工艺特性调整。发酵过程报警要求快速响应,所以没像水处理项目那样设10秒延迟。
项目里最惊艳的是模拟量标定的模块化设计,封装了量程转换、断线检测、移动平均滤波:
FUNCTION "AnalogScaling" : Real VAR_INPUT RawValue : INT; MinEng : Real; MaxEng : Real; END_VAR VAR FilterBuffer : ARRAY[0..4] OF INT := [0,0,0,0,0]; END_VAR //...加权平均计算部分五次滑动滤波有效消除信号毛刺,比单纯取平均响应更快。制药行业对测量精度要求变态,这个函数被二十多个AI点调用。
硬件图纸里发现个小技巧:称重传感器供电单独走了隔离变压器,PLC的M端子与仪表端做了等电位连接。这种细节处理保证通讯稳定,毕竟发酵车间湿度经常爆表。
建议跑这个案例时重点关注OB35中断里的PID计算时序,当初在V15.1上遇到扫描周期不匹配导致温控震荡。后来把PID采样时间设为OB35循环的两倍,效果立竿见影。