1. 项目需求解析与方案选型
去年接了个溢流水循环系统的控制柜改造,客户拿来的需求很简单:一套冷却水池的溢流回收装置,两三个液位信号,两台循环泵,要求实现自动补水、溢流报警和泵的自动轮换,顺带要一块触摸屏做监控和手动操作。控制规模不大,但对可靠性和安全性要求不低——毕竟水处理设备常年运行,一旦液位失控,轻则泵空转烧毁,重则水池溢流泡了设备间。当时选了西门子S7-1200系列PLC搭配TP1200精智面板,组态编程全部在博图V15里完成。这套组合在中小型水处理、暖通空调、小型市政配套项目里非常常见,今天就把这个项目的完整思路、组态细节和调试踩坑记录整理出来,给准备上手同类项目的朋友做个参考。
1.1 溢流水循环系统到底控制什么
所谓溢流水循环,字面上看是“水满了溢出来再回收循环利用”的一套装置。实际项目里,它的典型拓扑这样理解:生产设备或水池有补水入口和溢流出口,水位过高时水流到回收池,回收池里的水再由循环泵打回水箱或用水点,形成一个闭环。这套系统里有几个核心控制对象——水池液位、回收池液位、循环泵启停、补水管路阀门。控制需求拆开就三条:水位到达下限时及时补水,水位到上限时停止补水防止持续溢流;回收池液位过高说明回收水量大于用水量,需要启动循环泵把水打走;泵不能长期单台运行,要自动轮换平均使用寿命。看似简单,但涉及模拟量采集、泵组逻辑互锁、手自动切换、故障报警、触摸屏监控等一整套内容,属于PLC控制里很典型的“麻雀虽小五脏俱全”项目。
1.2 为什么选S7-1200配TP1200
客户最初问过能不能用200 SMART加个国产触摸屏,价格确实便宜不少。但这个项目有几个客观条件决定了1200更合适。其一,现场已经有以太网组网需求,后续要把数据传给中控室,S7-1200的PROFINET接口是标配,一个网口既能做编程下载又能连触摸屏还能将来做上位机通讯,省了通讯模块的钱。其二,系统里要处理液位变送器的4-20mA模拟量信号,200 SMART虽然也有模拟量模块,但精度、量程标定和抗干扰能力弱一些,1200的模拟量模块配合博图的标定功能更顺手。其三,TP1200属于西门子精智面板,和1200是同家族产品,博图V15里拖拽组态非常顺畅,做多画面、动画、报警归档都不吃力。当然,S7-1500也能做这个项目,但15xx的算力和价格对这个规模的项目是浪费,1200的性能余量足够支撑未来扩展几十个点位和简单的PID控制,性价比刚好卡在这个位置。
2. 硬件选型、I/O分配与电气细节
硬件选型这一步看似枯燥,但后面程序好不好写、现场好不好调试,很大程度取决于这一步有没有想清楚。电机回路怎么接、模拟量进哪个通道、手自动切换开关放哪里,这些必须在画图之前定下来。很多初学者喜欢拿到项目就开博图建项目,等程序写得差不多了发现I/O点数不够、模拟量通道被占用,再回头改图纸,那是痛苦加倍的过程。
2.1 CPU型号和信号模块搭配
这个项目的控制规模撑死也就是二三十个点位,属于S7-1200家族里的小项目。我选的CPU是CPU 1214C DC/DC/DC,订货号6ES7 214-1AG40-0XB0。1214C这个型号自带14点数字量输入和10点数字量输出,板载两个模拟量输入通道,对这个小系统来说I/O能力直接用掉大半,后续再扩几张信号板就够了,不用一上来就上大机架扩展模块。
按系统需求,数字量输入用到以下几类:水池浮球开关(高、低液位各一个,干接点输入)、回收池浮球开关(高、低液位各一个)、两台泵的断路器/热继电器辅助触点(用于监视泵是否跳闸)、柜门上的手自动切换旋钮、复位按钮。这样DI点数需求大约是10个。数字量输出比较固定:两台循环泵接触器线圈控制各占一个,电铃或蜂鸣器报警输出占一个,绿色/红色运行指示灯各占几个,DO总需求7个左右。1214C自带14DI/10DO,点数刚好覆盖,余量不大,但如果担心后期增加点位,可以把裕量留到扩展模块上。
模拟量方面,回收池液位我用了标准两线制4-20mA液位变送器,输出对应0到5米量程,这个信号进1214C板载的AI0通道。水池液位本来也应该用模拟量,但客户现场原来就有两个浮球开关,改造不想动水池内部结构,所以水池部分就用开关量处理——上限浮球断开、下限浮球闭合来判断液位状态。这样可以少用一路模拟量通道,AI1就留作备用,万一回收池液位变送器故障,也能临时改接调试。信号模块不需要额外扩展,但考虑到后期可能增加压力变送器或温度变送器,我在端子排和安装空间上预留了一个8路模拟量模块的位置。
2.2 泵回路和电气设计要点
泵的控制回路是这类项目里安全等级最高的部分。两台循环泵我用的都是直接启动方式,接触器线圈AC220V控制,PLC输出点接DC24V中间继电器,再用中间继电器触点驱动接触器线圈。别笑,这一步是真有人为了省一个继电器直接把PLC晶体管输出并到220V接触器回路里的,运气好没事,运气不好就是烧输出点、烧PLC模块、甚至打火伤人的事。晶体管输出只能带DC24V负载,必须隔离,这个钱和空间省不得。
对于变频器配置需求,如果泵的功率大或者系统要求恒压供水,就得用模拟量或通讯给定频率。这个项目客户原先就有一台ABB ACS310变频器用来控制补水泵,变频器本身支持面板启停和外部端子启停两种模式,我选择用端子启停+Modbus RTU通讯给定频率的方式。1200的CM1241 RS485通讯模块做Modbus RTU主站,轮询读变频器电流、频率、运行状态,写启停命令和频率给定值。频率给定的换算关系是0到50Hz对应0到16384(16位Modbus寄存器),程序里用标准缩放块完成工程值转换。
电气设计上还有几个细节值得提一下:一是所有DI/DO回路都加了保险丝,特别是24V回路一定要有保护,不然现场哪根线短路,整个模块可能直接报废;二是模拟量信号线采用屏蔽双绞线,屏蔽层单端接地,信号线走独立线槽,远离动力电缆——这条后面调试时救了我好几次;三是泵的电气联锁回路,接触器辅助触点串入对侧启动回路里,防止正反转控制类的误动作,虽然泵是单向的,但这个习惯我一直保留着。
2.3 I/O地址分配表
程序里用了符号寻址,但物理地址还是得提前规划。我习惯在符号表里把所有I/O点都列全,名字用拼音或英文缩写都可以,关键是统一风格,中文注释写清楚对应位置。
这台项目的核心I/O分配是这样的:
| 地址 | 符号名 | 功能说明 | 信号类型 |
|---|---|---|---|
| I0.0 | POOL_LOW | 水池低液位开关 | DI干接点 |
| I0.1 | POOL_HIGH | 水池高液位开关 | DI干接点 |
| I0.2 | TANK_LOW | 回收池低液位开关 | DI干接点 |
| I0.3 | TANK_HIGH | 回收池高液位开关 | DI干接点 |
| I0.4 | PUMP1_FAULT | 泵1热继电器故障 | DI干接点 |
| I0.5 | PUMP2_FAULT | 泵2热继电器故障 | DI干接点 |
| I0.6 | AUTO_MODE | 手自动切换(ON=自动) | DI干接点 |
| I0.7 | RESET_BTN | 故障复位按钮 | DI干接点 |
| Q0.0 | PUMP1_RUN | 泵1接触器控制 | DO晶体管/继电器 |
| Q0.1 | PUMP2_RUN | 泵2接触器控制 | DO晶体管/继电器 |
| Q0.2 | ALARM_BELL | 蜂鸣器报警输出 | DO晶体管/继电器 |
| Q0.3 | RUN_LAMP | 运行指示灯 | DO晶体管/继电器 |
| Q0.4 | FAULT_LAMP | 故障指示灯 | DO晶体管/继电器 |
| AI 0 | TANK_LEVEL | 回收池液位4-20mA | AI模拟量输入 |
这个表看着简单,但它是整个程序的地基。写符号表的时候我就顺手备注了每个信号在电气图纸上的端子号,后面做触摸屏变量连接时直接引用符号名而不是绝对地址,程序可读性高很多,客户后来自己找人维护也能看得懂。
3. 程序架构与控制逻辑实现
博图V15对S7-1200的编程支持很好,梯形图、SCL、STL都能用。我的习惯是:主逻辑用梯形图,方便现场维护工程师看懂;复杂的算法类功能块用SCL写,比如模拟量滤波、泵轮换计数器这些,SCL写起来更紧凑。项目程序规划了几个关键块:OB1主循环、OB100初始化、FC_Pump_Control(泵控制)、FB_Level_Filter(液位滤波)、DB_SystemData(系统数据)、DB_AlarmData(报警数据)、FC_Modbus_Master(变频器通讯)。
3.1 程序块规划和调用逻辑
博图里面程序块的规划直接影响后期维护。我习惯把逻辑按功能拆成独立块,而不是一大坨全写在OB1里。这个项目的块规划如下:
| 块名称 | 类型 | 功能说明 |
|---|---|---|
| OB1 | 组织块 | 主循环,按节拍调用各功能块 |
| OB100 | 组织块 | 上电初始化,设置默认参数 |
| FC100_PumpCtrl | 函数 | 泵的自动/手动启停互锁逻辑 |
| FC101_Alarm | 函数 | 报警条件判断和蜂鸣器输出 |
| FB10_LevelFilter | 函数块 | 模拟量采样、滤波及工程量转换 |
| FB20_PumpCycle | 函数块 | 泵轮换计时和切换逻辑 |
| DB10_System | 全局DB | 系统运行参数,如启停阈值 |
| DB20_Alarm | 全局DB | 报警状态字和记录 |
OB1里的调用顺序也有讲究。每个循环周期,先刷新模拟量输入(调用FB10_LevelFilter),再去跑泵控制逻辑(FC100_PumpCtrl),最后扫一遍报警条件(FC101_Alarm)。这样保证HMI看到的液位值、泵状态、报警信息都是一个扫描周期内的一致快照,不会出现在触摸屏上液位都报警了,泵却还在继续运行的逻辑错乱。
3.2 模拟量采集与滤波实现
回收池液位信号是4-20mA进AI0,量程0到5米。博图里V15的模拟量输入不用像200那样手动算数字量转换关系,直接用“NORM_X”和“SCALE_X”两个指令就行。NORM_X把原始整数值(0到27648)归一化到0.0到1.0的实数,SCALE_X再映射到0.0到5.0的工程单位。这样精度是够的,显示到触摸屏上两位小数,用于控制阈值判断绰绰有余。
但现场模拟量信号不会那么干净——变频器一启动,泵电机一动作,瞬间电流变化会产生电磁干扰,液位显示数值会上下跳个一两厘米。这种跳变如果不处理,液位卡在临界阈值附近时泵会频繁启停,那问题就从干扰升级到了设备损坏。所以我在FB10_LevelFilter里写了数字滤波:连续采样4次取平均值,每次采样间隔一个扫描周期(默认10ms级别),再把前后两次的平均值做低通处理,公式是当前显示值 = 上次显示值 × 0.7 + 本次平均值 × 0.3。这个系数可以根据现场响应速度需求调整,液位变化缓慢,0.7/0.3的权重完全够用,而且计算量小,不会拖慢扫描周期。
模拟量处理最关键的一点是判断信号是否断线。4-20mA变送器有个好处,断线时电流归零,PLC读到数值接近0,而不是一个不确定的毛刺。我在SCL里写了个判断:如果液位数值低于量程下限的5%(也就是0.25米以下)且持续时间超过3秒,就判定为“液位信号异常”,置一个报警位。这样变送器坏了能在触摸屏上明确报警,而不是让操作工对着错误的液位数满脑子问号。
3.3 泵启停控制的核心逻辑
泵控制是整个系统的核心,逻辑不复杂,但必须把各种工况都考虑全。我的控制逻辑是这样的:
自动模式下,回收池液位高于2.0米时启动当前运行泵,液位低于0.8米时停泵。水池浮球开关作为干节点接入,低液位(I0.0=1表示水池缺水)时闭锁泵的启动,防止把回收池抽干后继续空转。水池高液位(I0.1=1)时启动一台泵,高液位解除后延时10秒停泵,用泵把多余的溢流打走。
这里有个经验:启停阈值之间一定要有滞回区间。比如启动值是2.0米,停止值是0.8米,那液位在0.9米到2.0米之间泵的状态保持不动作,避免液位在启动值附近波动时泵反复吸合断开。滞回区间的大小和泵的启停频率要求直接相关,一般建议启动阈值高于停止阈值至少0.5米,具体看水池容积和水泵流量。如果液位波动大,甚至可以拉开到1米以上。
还有个容易被忽略的部分:手自动模式切换。旋钮在手动位置时,泵由触摸屏上的手动按钮直接控制,但热继电器故障保护和紧急停止逻辑仍然生效。也就是说,手动模式只是跳过液位自动判断,不等于把所有保护都关了。这个细节很重要——实操中见过不少项目,切换手动模式后泵故障了还硬要启动,最后烧了电机。我在程序里把故障信号和泵输出做了串接,只要泵保护动作(PUMP1_FAULT=1),不管手动还是自动,Q0.0输出一律拉断。
3.4 泵轮流运行与累计时间均衡
两台泵长期只运行一台,磨损会非常不均匀,而且不常开的泵容易锈住,一用就出问题。所以我加了泵轮换逻辑:每台泵运行累计满8小时后,自动切换到另一台泵。实现方式是用FB20_PumpCycle块,里面用两个定时器分别累计泵1和泵2的运行时间。注意S7-1200的定时器有两种,IEC定时器(TON、TOF等)和传统计数器方式的定时器,博图V15推荐用IEC定时器,直接在FB里声明TON实例就行。
切换逻辑是:当当前运行泵的累计运行时间≥480分钟时,将其运行状态请求复位,置位另一台泵的运行请求。为避免切换瞬间两台泵同时启动造成管道水锤冲击,我在切换时加了5秒延时——先停当前泵,5秒后启动另一台泵。对于小功率泵,5秒间隔不会导致系统压力明显波动。另外,当某一台泵处于故障状态时,轮换逻辑自动跳过故障泵,全部负荷由健康泵承担,并在故障恢复后才恢复轮换。这个判断放在FC100_PumpCtrl里,因为涉及泵的启停状态,不宜放在独立计时块里。
3.5 报警体系和安全联锁
报警分两级处理。一级报警是瞬时提示性报警:回收池液位高于4.5米(高高位)、低于0.3米(低低位)。这类报警只在触摸屏上显示,不触发泵动作。二级报警是联锁动作报警:泵热继电器故障、模拟量信号异常、水池低低液位三重保护。这些报警除了显示在报警画面里,还要点亮故障灯、触发蜂鸣器,并切断相关泵输出。
蜂鸣器的控制逻辑我花了不少心思:报警触发时蜂鸣器响,操作工确认故障后在触摸屏上点“确认消音”按钮,蜂鸣器停止响,但故障灯继续保持红色闪烁,故障排除且按下复位按钮后,故障灯才熄灭。这样既不会让蜂鸣器吵得人焦虑,又保证了故障状态没有被忽略。这个“报警-确认-复位”的三态模式是工控系统的标准做法,TP1200的画面里我用了一个报警变量加闪烁属性来做。
还有一层安全联锁必须说:紧急停止。这个项目因为涉及水泵和流体,紧急停止按钮直接走硬接线切断接触器线圈电源,不经过PLC——这是安全回路设计的基本要求。PLC程序里做的急停只是软件层面的联锁,不能替代硬件急停回路。我在图纸上单独画了一个急停继电器,按下急停按钮后切断两台泵接触器的电源,同时给PLC送入一个急停状态信号,程序检测到这个信号后禁止任何泵启动输出。这样双重保险,就算PLC程序出问题,泵也能被随时停下来。
4. 触摸屏组态与画面设计
TP1200触摸屏是西门子精智面板里非常成熟的一款,7寸宽屏,分辨率够用,支持以太网直连S7-1200。博图V15里组态TP1200比较顺手,变量连接直接走S7通讯(实际是S7-1200集成接口),不需要额外配置通讯驱动。这一节聊聊画面结构、变量连接和几个容易踩的坑。
4.1 画面框架和导航逻辑
TP1200的组态,我坚持的原则是——画面层级不超过三层,操作工在任意画面都能一键回到主画面。整个HMI我设计了6个画面:主画面(系统总览)、自动运行画面、手动操作画面、参数设置画面、报警画面、历史趋势画面。主画面放系统拓扑简图和最核心的运行数据显示,比如回收池液位、泵1/泵2运行状态、报警汇总条。自动运行画面详细展示液位曲线、泵启停状态、当前运行模式。手动操作画面只允许在手动模式下操作,画面上加了一个清晰的“手动模式”红色提示框,防止操作工误以为处于自动状态。
画面之间的导航用按钮实现,每个按钮关联“切换画面”函数。这个在博图里非常基础,但要注意:按钮的属性里有一个“权限”设置,参数设置和手动操作画面我设置了操作员权限,只有登录管理员账户才能操作,避免现场人员不小心改了阈值。用户管理在TP1200上的配置很灵活,博图V15的“用户管理”编辑器里可以设置用户组和权限等级,编译下载到屏里就能生效。
4.2 变量连接和画面动画
TP1200连接S7-1200使用内置的S7通讯协议,博图里组态时直接把PLC程序里的符号变量拖拽到画面变量表里就行。这里有个大坑必须提醒:S7-1200的PLC变量如果直接在HMI里引用,默认是“绝对寻址+符号”混合模式,一旦PLC程序里删除了某个DB块或变量名称改变,触摸屏这边对应的连接会断,编译时会报错或运行时在画面上显示一堆###。
所以我一般给HMI专门建一个全局DB——HMI_Data——里面放着所有需要屏上显示的数据结构,包括系统状态字、液位值、泵状态、报警字、参数设定值等。PLC程序每个周期往这个DB里刷新数据,HMI只连接这个DB里的变量,不直接连I/O地址或程序块里的内部变量。这种“数据区解耦”的做法,能让HMI组态和PLC程序维护彼此独立,改程序时不会连累画面变量。
画面动画方面,泵运行状态我用了一个圆形指示灯,颜色属性关联泵运行布尔变量,绿色表示运行,灰色表示停止,故障时红色。液位值实时显示在数字域里,旁边加了一个柱状填充图,填充高度关联液位值变量。TP1200支持图形I/O域的属性动态设置,柱状图的“填充水平”属性可以直接绑定液位数值,换算关系在属性里配置成0-100%对应0-5米。这样操作工一眼就能看到回收池水位状态,不用盯数字。
4.3 报警记录和趋势曲线
报警这一块,TP1200的组态比小触摸屏强很多。博图V15里可以配置报警文本、报警类别(故障/警告/信息)、报警优先级、触发变量、确认方式等。我把PLC里预设的报警位变量全部映射到HMI报警组态里,报警触发时,触摸屏会自动弹出报警条,同时写入报警缓冲区。TP1200有内置的报警缓冲存储,可以在报警画面上查看历史报警记录,最多存500条,掉电不丢失,这是精智面板相比简化版触摸屏的一个重要优势。
趋势曲线也是TP1200的强项。我在自动运行画面里放了一个趋势视图控件,横轴时间,纵轴液位值,采样周期设为1秒,环形缓冲区循环记录。组态时需要在趋势视图里声明数据源——关联HMI_Data里的液位变量,并设定上下限。TP1200的归档功能支持把趋势数据写到面板的存储介质里(SD卡或内部存储器),可以保存几天的数据,方便事后追溯故障前后的液位变化过程。这个功能在做设备验收和问题分析时特别有用,有一次客户的泵莫名其妙频繁启动,后来就是靠趋势曲线发现是液位变送器偶发干扰毛刺,而不是机械故障。
4.4 博图V15组态下载注意事项
TP1200和S7-1200在网络里通讯时,有好几个细节容易卡住新手。一是IP地址规划,PLC和HMI的IP要在同一网段,比如PLC设192.168.0.1,HMI设192.168.0.2,子网掩码一致。二是博图组态时,HMI的“连接”设置里要选择正确的PLC连接目标,并且协议选S7,通讯方向设为“HMI是客户端”。三是HMI下载时需要电脑和HMI在同一网段,如果使用PN/IE接口直连HMI网口,IP要临时改到同一网段才能找到设备。
还有一个小坑是TP1200运行系统的版本。博图V15编译HMI程序时会检查运行系统版本是否兼容,如果屏的固件版本太老,下载后会提示版本不匹配、画面无法加载。解决方法是在博图的“设备视图”里对TP1200做固件更新,用SD卡或在线更新工具把运行系统刷到和V15配套的版本。这个操作不难,但得提前做好,不然到了现场程序传不进去会很尴尬。
5. 现场调试实录与常见问题排查
程序组态都在办公室里写好了,真正见真章的是现场调试。这个项目在调试阶段遇到的问题还挺典型,单独拉出来写一段,很多坑是通用性的,换成其他品牌的PLC也一样会遇到。
5.1 模拟量干扰问题:换了屏蔽线才根治
第一次上电试运行,自动模式下回收池液位显示就异常跳变。触摸屏上液位数在2.3米到3.8米之间毫无规律地跳动,但用万用表量变送器输出电流,数值稳定在12.8mA左右,按照量程换算应该是2.5米。这说明变送器出来的信号没问题,是信号传输或PLC采集环节出了问题。
排查思路从信号路径入手:先用博图的在线监视功能看AI通道原始数值,发现确实在跳;然后把变送器信号直接从端子短接,用信号发生器替代变送器发送定值,PLC采到的数值稳定——这说明PLC的AI通道本身没问题,问题出在变送器到PLC的线路上。检查现场布线后发现,信号线虽然用了屏蔽双绞线,但屏蔽层在PLC端和变送器端都接了地,而且这根线在桥架里和几根动力电缆并排走了十几米。变频器一启动,动力电缆上的高频谐波耦合进信号线,形成共模干扰。
解决办法有两步:第一步,屏蔽层改成PLC端单点接地,变送器端用绝缘胶带包裹悬空,这是标准的信号单端接地做法;第二步,把信号线从动力电缆桥架上挪开,走旁边的独立线槽,距离拉开30厘米以上。改完后再试运行,液位数值稳如老狗,再也没跳过。这个案例让我养成了习惯——所有模拟量信号线必须和动力线分离布置,哪怕绕远路也要分离,省下的干扰排查时间绝对值得。
5.2 泵频繁启停:滞回区间不够宽
带载运行两天后,客户反馈泵启动特别频繁,有时候一小时启停七八次。我从趋势曲线上看,回收池液位在1.9米到2.1米之间往复波动,而泵的启动阈值正好是2.0米,停止阈值1.5米。液位在阈值附近小幅波动时,泵就会跟着频繁吸合断开。
原因很清楚:液位变送器虽然加了滤波,但生产工艺本身有波动,水流量不均匀导致液位小幅振荡。解决方式不是把滤波加大——滤波调太重会让液位响应变迟钝,真正有效的办法是重新整定启停阈值。我把启动阈值从2.0米提高到2.5米,停止阈值保持在0.8米,启动间隔明显拉长。这样虽然回收池要多存一点水才启动泵,但泵每次运行时间更长,启停频率大幅下降。这个调整对泵的寿命有直接好处,毕竟频繁启动对电机和接触器的冲击是最大的损耗源。
实践中需要注意的是:阈值调整后要同步确认高高位报警(4.5米)还有足够的裕量,防止液位冲到报警值才启泵。我当时核算过,2.5米启动,泵流量大于来水流量,液位最多再涨0.3米到2.8米就会回落,和4.5米的高高位之间有1.7米的安全距离,足够了。
5.3 变频器Modbus通讯不稳定:超时和重试机制不能省
补水泵变频器的Modbus RTU通讯调试也折腾了一阵。第一次测试时,PLC能读到变频器电流,但偶发通讯失败,频率给定值有时候写不进去。用博图的监控表反复看通讯状态字,发现错误码是“CRC校验错误”和“从站无响应”交替出现。
排查步骤:第一步换通讯电缆,把普通屏蔽线换成标准的RS485屏蔽双绞线,终端电阻按说明书接上——ABB变频器的RS485端口要求终端电阻设置正确,这个经常被忽略。第二步检查接线极性,A/B接反是通讯失败的常见原因,确认后重启。改完后通讯成功率明显提升,但仍有偶发失败。第三步给通讯程序加上超时和自动重试机制:发送请求后等待从站响应的超时时间设为200ms,超时后重发三次,连续三次失败才报通讯故障。重试期间不中断控制流程,保持上一次的输出状态。这样即使偶尔通讯掉帧,系统也照常运行,不会造成泵停机或频率跳变。
这个经验后来我用在了好几个带变频器通讯的项目里。Modbus RTU本来就是一种不完美的现场总线,掉帧是常态,关键是程序要容忍掉帧、自动恢复,而不是一出错就停机报警。
5.4 博图V15编译下载的几个典型报错
博图V15版本比较新,第一次用的人多多少少会遇到几个报错。总结几个这个项目里最常见的:
编译时提示“功能块实例的DB参数与接口不一致”——多半是修改了FB块的接口后,没有更新调用处的背景DB。解决方法是右键背景DB,选择“更新块”,或者在FB属性里重新生成背景DB。注意更新背景DB可能导致原有保持值丢失,所以修改参数前最好先备份。
下载时提示“设备组态和实际设备不匹配”——如果PLC实际固件版本和组态版本不一致就会出现这个提示。S7-1200的固件版本有好几个大版本,V4.x和V3.x之间差别很大。处理方法是查看实际PLC固件版本,在博图设备视图里修改CPU属性中的固件版本到对应号,再重新编译下载。或者用内存卡/博图在线更新功能升级PLC固件,保证两侧一致。
HMI下载后画面显示乱码或编译警告图标——通常是组态变量有未连接的部分,或者字体类型缺失。TP1200自带的字体里中文支持有限,如果画面上用了特殊字体,编译时会有警告,下载到屏上显示不全。解决方法是画面上全部使用系统字体“宋体”或者“MS Gothic”这类常用中文字体,别用太花哨的字体。
5.5 关于安全程序的一点建议
这个项目没有涉及安全PLC,急停用硬接线处理了。但如果你的项目里有安全光栅、门锁开关这类安全相关输入,强烈建议用西门子安全集成方案,比如带F的S7-1200系列(如CPU 1214FC),组态安全程序和标准程序分离。同样,如果系统里要接入多台变频器,并且要求高速同步,S7-1200的带宽和刷新时间会有点紧张,那种场合直接考虑S7-1500,不要在这个级别硬撑。
另外,程序下载和备份的习惯要养成:每次到现场调试前,先用U盘或SD卡把PLC里的当前程序上传备份,防止下载新程序关键时刻失败导致现场设备“裸奔”。上传功能块只读的问题在S7-1200里也存在,如果程序里加密了功能块,上传回来只是空数据。所以每个工程结束,必须把完整项目源文件归档保存,最好再导出一份PDF格式的注释版程序图,方便后续维护时快速查阅。
6. 一点切身的项目体会
这套溢流水循环系统从设计到调试完成,大概花了两周时间。真正耗时间的其实不在写程序,而是在现场调试和问题排查——信号干扰、通讯稳定性、阈值整定,这些都是没有标准答案的,必须结合实际工况慢慢调。S7-1200+TP1200这个组合,对于这种规模的控制系统,效率和可靠性都很有保障。博图V15的工程环境比V14更顺畅,特别是HMI和PLC的联合调试、在线诊断功能,能省下不少往返现场的时间。
我个人的建议是,做这类项目别急着动手写程序,先把工艺流程搞清楚,把液位控制的安全边界定清楚,把保护逻辑一条条列全,才能真正做出一套客户用得放心、维护起来不费劲的系统。程序是水到渠成的事,功夫都在程序之外。