1. 项目概述与方案选型思考
1.1 核心需求解析
水箱液位控制在工业现场太常见了——水处理、锅炉补水、化工配料、楼宇供水,到处都有它的影子。无论是维持一个恒定液位,还是按需完成自动补水和停泵,背后都是一个典型的闭环控制问题:检测当前液位,和设定值比较,决定水泵或阀门的开关动作。
这次我做的这个项目,核心诉求并不复杂:利用西门子S7-200 PLC作为下位机,负责采集液位信号、执行控制逻辑;上位机用组态王完成画面监控、数据记录和远程操作。说白了,就是把一套“传感器+控制器+执行器+人机界面”的完整链条跑通,并且能稳定运行。
我选S7-200而不是S7-1200或S7-1500,原因很实际:项目预算有限,S7-200虽然老,但二手市场货源充足、价格便宜,配套的编程软件Micro/WIN也容易找到;更重要的是,S7-200的指令系统和存储器结构相对简单,非常适合用来教学、做毕业设计或者小型工程项目验证。组态王这边,6.55和6.60版本我都用过,运行稳定,驱动库里自带S7-200的TCP驱动,省去自己写OPC服务器的麻烦。
1.2 整体架构设计
整个系统的数据流向是这样的:液位变送器把水箱里的水位高度换成4-20mA电流信号,接到S7-200的模拟量输入模块(EM231或者CPU224XP自带的模拟量输入);PLC内部经过量程换算,得到实际的液位数值;然后PLC运行控制程序,根据液位高低和设定值之间的偏差,决定是否启动或停止水泵;同时,PLC通过以太网模块(CP243-1)或者串口方式与上位机组态王通信,把实时液位、泵状态上传,组态王画面上的液位数字、柱状图、指示灯同步刷新;操作员也可以在组态王上点击按钮,切换手自动模式或者修改设定值,指令下发到PLC。
为什么要把控制逻辑全部放在PLC里,而不是让组态王直接参与控制?这是我的一个原则:上位机可以死机、可以断线,但现场设备不能停。组态王只是“监”和“控”的窗口,真正保证安全运行的是PLC里那套独立的逻辑。哪怕通信中断,PLC依然按照自己的程序维持液位在允许范围内,这才是工业控制设计的底线。
系统架构简表
| 层级 | 设备 | 作用 |
|---|---|---|
| 感知层 | 液位变送器(4-20mA/0-10V) | 把水位变成标准电信号 |
| 控制层 | S7-200 PLC + EM231模拟量模块 | 数据采集、逻辑运算、输出控制 |
| 执行层 | 水泵/电磁阀 + 接触器/继电器 | 执行补水或排水动作 |
| 监控层 | 组态王 + 通信模块/PC | 显示、记录、参数设定与报警 |
2. 硬件选型与I/O分配
2.1 关键元器件选择
PLC主机:西门子S7-200 CPU226 CN。选CPU226是因为它有两个通信口,一个口接编程或者触摸屏,另一个口接上位机或者扩展模块,灵活性好。而且CPU226支持EM231、EM232等扩展模块,后续想加温度、压力通道也留了余地。如果预算特别紧,CPU224XP也可以,它自带两路模拟量输入,足够这个项目用。
液位变送器:超声波及静压式都可以。我最终用的是静压式液位变送器,量程0-5米,输出4-20mA两线制。选它的原因在于结构简单、价格便宜、抗干扰能力强,而且在水箱这种常温常压场景下足够可靠。超声波液位计非接触、不怕腐蚀,但是成本高一些,而且有盲区,水箱顶部安装空间不足的话容易出问题。
执行机构:我用了小型水泵(交流220V,功率约370W)作为补水执行器。水泵的启停通过中间继电器控制交流接触器完成,PLC的数字量输出点只驱动中间继电器线圈,不直接带水泵主回路,这样既保护了PLC输出点,也方便后续增大水泵功率。
通信模块:CP243-1以太网模块。这是S7-200上以太网通信的标准配置,组态王通过TCP/IP直接访问,通信速度快、稳定性好。如果没有以太网模块,也可以用PC/PPI电缆走串口,组态王通过PPI协议访问,但对于现代电脑没有串口的情况比较麻烦,USB转串口又容易出兼容性问题,所以我优先推荐以太网方案。
上位机软件:组态王6.60 SP4。组态王在国内中小型工控项目里的占有率很高,上手快、图库丰富、驱动全。尤其是它自带的S7-200 TCP驱动,不需要额外安装OPC服务器,省了很多事。
2.2 I/O点分配表
在写程序之前,先把I/O点规划清楚,这一步看似简单,但直接决定了接线和编程的顺畅程度。
| 地址 | 功能 | 信号类型 | 说明 |
|---|---|---|---|
| AIW0 | 液位变送器4-20mA输入 | 模拟量输入 | 接EM231通道0 |
| I0.0 | 水泵热继电器常闭触点 | 数字量输入 | 用于过载报警 |
| I0.1 | 手动/自动切换开关 | 数字量输入 | 0=手动 1=自动 |
| Q0.0 | 水泵启动 | 数字量输出 | 驱动中间继电器KA1 |
| Q0.1 | 蜂鸣器报警 | 数字量输出 | 液位超高/超低时鸣叫 |
| VW100 | 液位设定值(cm) | 变量存储区 | 组态王可写 |
| VD200 | 实际液位(cm) | 变量存储区 | PLC计算后上传 |
实际液位值我用VD200而不是VW200,是因为计算过程中涉及浮点运算,PID或者线性换算会产生小数,用32位浮点存储更精确。组态王里建变量时也要对应设置为FLOAT类型。
2.3 接线注意事项
模拟量接线有个特别容易踩的坑:4-20mA两线制变送器,正极接EM231的A+,负极接A-,同时一定要把EM231模块上的“24V DC电源”端子接好。很多新手忘了给变送器供电,结果读到的数据一直是0,排查半天发现是供电没接。
还要注意EM231模块的拨码开关。模块侧面有六个拨码,用来设置模拟量输入范围(0-20mA还是0-5V等)和滤波时间。实际使用前要确认拨码位置正确,否则即使接线对了,数据也可能满量程跳变或者精度偏差。
中间继电器线圈是感性负载,断电时会产生反向电动势,一定要在继电器线圈两端并联续流二极管(1N4007),否则时间长了可能击穿PLC输出点的晶体管。这个细节我在多个项目里都遇到过,炸过输出点后才会长记性。
3. PLC程序设计详解
3.1 程序结构规划
S7-200的程序分为主程序(OB1)、子程序(SBR)和中断程序(INT)。这个项目我按照模块化的思路拆成了几个部分:
- 主程序OB1:完成整体调度,调用各个子程序。
- 子程序SBR_0(模拟量处理):将AIW0原始值换算成实际液位厘米数。
- 子程序SBR_1(控制逻辑):手自动切换、液位比较、水泵启停判断。
- 子程序SBR_2(报警处理):超限报警、蜂鸣器驱动。
为什么要分开写子程序?好处很明显:调试的时候可以单独测试每个环节,模拟量不准先查SBR_0,水泵不动作查SBR_1,不会互相牵扯。而且以后项目复用,把控制逻辑子程序改一下就能用在于别的场合。
主程序调用关系
LD SM0.0 // 每次扫描都调用 CALL SBR_0 // 模拟量处理 CALL SBR_1 // 控制逻辑 CALL SBR_2 // 报警处理SM0.0是S7-200里的特殊继电器,常为ON,保证每个扫描周期这些子程序都被执行。PLC扫描周期大约是几毫秒到十几毫秒,对这个液位控制场景完全够用。
3.2 模拟量工程量换算
S7-200模拟量模块的原始值范围是0-32000(对应0-20mA)。4-20mA对应的数值范围是6400-32000。液位变送器量程0-5米,那么4mA对应液位0米,20mA对应液位5米,线性关系。
换算公式:
液位(cm) = (AIW原始值 - 6400) / (32000 - 6400) × 量程(cm)代码里我用浮点运算来实现:
LD SM0.0 MOVW AIW0, AC0 // 把AIW0原始值送入AC0 ITD AC0, AC0 // 整数转双整数 DTR AC0, AC0 // 双整数转浮点数 MOVR AC0, VD300 // 暂存原始值 SUBR 6400.0, AC0 // 减去零点偏移 MOVR AC0, VD304 MOVR 25600.0, AC0 DIVR AC0, VD304 // VD304 = (AIW-6400)/25600 MOVR VD304, AC0 MOVR 500.0, AC0 MULR AC0, VD304 // VD304 = 换算后的液位(cm)这段程序就是把原始数值逐级缩小到0-1之间,再乘以量程500cm。结果存放于VD304,组态王直接读这个变量显示液位。
注意一个细节:S7-200的浮点运算指令是MULR、DIVR、SUBR、ADDR,和整数运算是完全不同的指令,不能用错。如果用整数运算指令处理浮点数,程序会直接报错或者得到错误结果。
3.3 控制逻辑实现
控制方式分为手动和自动两种:
手动模式:由组态王上的手动启动/停止按钮直接控制水泵。这个模式用于调试、检修或者特殊工况。程序里用置位/复位指令实现,按钮信号是脉冲,PLC内部用保持线圈维持输出状态。
自动模式:采用双限位控制(也叫滞回控制),而不是简单的单点比较。比如设定水位为100cm,我设定上限为105cm、下限为95cm。当液位低于95cm时启动水泵,液位达到105cm时停止水泵。
这种“滞回”方式比单点频繁启停要好得多:如果只设一个100cm点,液位刚到100就停泵,停泵后水会继续滴落或者波动,很快又低于100又启动,水泵会频繁启停,对电机和接触器都是伤害。
代码片段如下:
// SBR_1 控制逻辑 Network 1 自动模式判断 LD I0.1 // 手动/自动开关 AN Q0.0 // 水泵未运行 LD VW100 // 设定值 AW< VD304 // 实际液位低于设定值-5cm = M0.0 // 启动条件 Network 2 自动启动 LD I0.1 A M0.0 S Q0.0, 1 Network 3 自动停止 LD I0.1 AW>= VD304 // 实际液位达到设定值+5cm R Q0.0, 1这里我用了浮点数比较指令AW>=和AW<,注意S7-200的符号是AW和AW,不是常见的>和<。另外M0.0是内部中间继电器标志位,不占用物理输出。
3.4 PID调节方案(进阶可选)
如果只做双限位控制,系统结构已经完整,但对于要求液位严格稳定的场合,双限位就不够了。我在实验过程中也测试过PID方案。
S7-200 CPU自带PID指令,核心参数在PID回路表中定义。用PID向导(Micro/WIN里的PID Wizard)可以快速生成PID子程序,配置过程大概分四步:
一是定义回路编号,S7-200最多支持8个PID回路,我用的是回路0。
二是设置输入输出参数:输入是液位过程变量PV,输出是控制量,通过模拟量输出模块(EM232)输出0-10V或者4-20mA信号,接到变频器或者电动调节阀上。
三是设置PID参数:比例增益Kc、积分时间Ti、微分时间Td。初始值可以设Kc=0.5,Ti=10秒,Td=0,然后通过现场整定调整。
四是设定输出上下限:防止PID输出饱和失控,我建议输出上限设为90%,下限设为10%,留出安全余量。
实际调试中最关键的是整定PID参数。我常用的方法是“临界比例度法”:先把积分时间放到最大、微分关掉,从小到大逐步增加比例增益,直到系统开始等幅振荡,记下此时的增益Kc和振荡周期Tc,然后用经验公式算出PID参数(P=0.6Kc,Ti=0.5Tc,Td=0.125Tc)。这个方法是经典的Ziegler-Nichols法,在液位大惯性系统里效果不错。
不过对于这个项目,最终我选择双限位控制作为主方案,因为液位控制对稳态精度不是极端敏感,双限位简单、可靠、易于调试,足够满足要求。PID方案写出来是为了提供一个提升路径——如果后面要把这个系统改造为连续调节的流量配比控制,PID就是必然选择了。
3.5 报警与保护逻辑
安全设计是不可忽视的一环。我加了以下几种保护逻辑:
下限报警:液位低于20cm时,蜂鸣器鸣叫,组态王报警窗口弹出“低液位报警”并闪烁。这个逻辑为了防止水泵空转——水泵空转会损坏密封圈和叶轮。
上限报警:液位高于480cm时(量程500cm),蜂鸣器鸣叫,同时强制停止水泵。这是双保险,即使自动控制失灵,上限保护也能防止水箱溢流。
水泵过载:热继电器常闭触点接入I0.0,正常情况I0.0为ON;一旦过载,热继电器动作,触点断开,I0.0变OFF,程序立即停止Q0.0输出,并在组态王上显示“水泵过载故障”。这个故障必须手动复位热继电器后,才能重新启动水泵。
报警逻辑的程序设计还有一个细节:报警信号要自锁,就是报警条件消失后报警状态仍然保持,直到操作员在组态王上点击“确认”按钮才复位。这样可以防止报警频繁闪烁干扰操作员注意力,也符合工业报警管理的习惯做法。
4. 组态王画面设计与通信连接
4.1 组态王与S7-200通信配置
组态王连接S7-200的步骤如下,我踩过几次坑,按这个顺序来做最稳妥:
第一步:安装组态王驱动。
组态王安装目录下有个“驱动”文件夹,里面涵盖各品牌PLC的通信驱动。确保安装了“西门子_S7-200(TCP)”驱动,如果用串口则选择“西门子_S7-200(PPI)”。安装驱动时最好先关闭杀毒软件,否则某些动态库文件会被误删,导致驱动加载失败。
第二步:新建工程,定义设备。
在组态王工程浏览器的“设备”节点下,选择“新建”,设备类型选择“PLC” -> “西门子” -> “S7-200” -> “TCP”。
关键参数:IP地址为S7-200侧CP243-1模块的IP地址,比如192.168.0.10,端口号默认是102。采集周期我设为1000ms,太快也没必要,液位本身是大惯性过程。
第三步:定义变量。
需要定义几个关键变量,变量的寄存器类型和地址必须和PLC里的V区对应:
| 变量名 | 类型 | 连接设备 | 寄存器 | 读写属性 |
|---|---|---|---|---|
| 液位实际值 | FLOAT | S7-200 | VD304 | 只读 |
| 液位设定值 | INT | S7-200 | VW100 | 读写 |
| 水泵运行 | BIT | S7-200 | Q0.0 | 只读 |
| 水泵启动按钮 | BIT | S7-200 | M0.1 | 读写 |
| 水泵停止按钮 | BIT | S7-200 | M0.2 | 读写 |
| 报警确认 | BIT | S7-200 | M0.3 | 读写 |
注意一个要点:PLC里的VD304是一个32位浮点数变量,占了VW304、VW306四个字节。组态王里定义变量时,寄存器地址就写VD304,数据类型选FLOAT,不能选INT,否则数据读出来会乱码或者完全不对。
第四步:测试通信。
组态王菜单栏有“设备调试”功能,打开后可以看到通信状态和报文数据。设备正常连接时显示“通讯成功”,收发帧计数会不停增加。如果通信失败,首先ping一下PLC的IP地址,确认网络通不通;再看端口号是否正确;最后看PLC侧的以太网模块是否配置了正确的IP地址和站地址。
4.2 监控画面布局设计
画面设计要以操作人员的视角来思考,而不是以程序员视角。布局我分成四个区域:
左侧是工艺流程区:画一个水箱剖面图,水箱中间用蓝色液位动画显示,液位随着实际值升降。组态王的“动画连接”功能可以做到:双击液位填充图形,在“水平/垂直填充”选项卡里设置表达式变量为“液位实际值”,填充方向和量程范围对应好。这里有一个技巧:填充方向的起点最好和水箱底部对齐,否则液位上去之后,动画填充的起始点不对,看着就别扭。
中间是数据显示区:用文本显示液位实际值、设定值、泵状态。文本变量连接“液位实际值”变量,显示格式设置为一位小数,单位cm。泵状态可以直接输出字符串,用“水泵运行”变量的值为1时显示“运行中”,为0时显示“已停止”。组态王用“字符串变量”配合条件判断可以做到,或者用两个文本图素分别设置隐藏/显示属性。
右侧是操作区:放置手动启动、手动停止、设定值输入框、报警确认按钮。这些按钮都连接到PLC的M区变量。这里要注意:按钮动作类型选“按下时置1,松开时置0”,实际上是一个脉冲信号,我习惯在PLC里用沿触发指令(EU/ED)来处理,确保一次点击只触发一次动作。
底部是报警信息区:用组态王的报警窗口控件,PLC上传的报警变量会在这个窗口实时滚动显示。报警优先级可以分级:超低/超高是一级报警(红色),液位偏差大是二级报警(黄色),信息记录是三级(白色)。操作员看颜色就知道紧急程度。
4.3 趋势曲线记录
曲线功能是组态王的强项,用“实时趋势曲线”控件可以观察液位变化过程。我把液位实际值和设定值放在同一个曲线控件里,两条曲线颜色区分,可以直观看到系统的跟踪效果。同时开启“历史趋势曲线”,数据存到组态王自带的SQL数据库里,方便事后分析。
历史趋势存储的配置要注意:数据保存间隔不要设太短,1秒一条数据一天的记录量就是86400条,对普通电脑硬盘虽然不算什么,但查询和绘图会变慢。我一般设2到3秒保存一次,对液位这种慢变量足够。
很多做项目的人忽略了一个问题:组态王运行期间如果电脑突然断电,正在写入的历史数据库文件可能损坏,导致后面打不开。解决办法是定期导出历史数据到Excel或者CSV文件,并且在组态王工程里设置自动备份策略。
5. 系统联调与运行效果
5.1 实验室模拟调试
没有真实水箱之前,我用一个模拟量信号发生器代替液位变送器,接在EM231通道上。旋转信号发生器旋钮,改变电流值,组态王画面上的液位数字和柱状动画同步变化。这个阶段主要验证三件事:
一是模拟量换算是否正确——将信号发生器电流调到12mA,对应的液位应该正好是量程的一半250cm。如果不准,检查SBR_0里的系数。
二是通信是否稳定——让信号发生器连续变化一段时间,观察组态王显示的数据是否平滑,有没有跳动或卡顿。组态王画面刷新率设置为500ms,理论上画面和数据应该跟随得很流畅。
三是控制逻辑是否正确——把液位模拟值慢慢降到设定值以下,看水泵是否会启动;继续升高到设定值以上5cm,看水泵是否停止。检查这几次动作PLC侧的Q0.0指示灯是否同步变化。
使用信号发生器调试的好处是不用真实水系统,可以快速反复验证逻辑,而且不用担心漏水等问题。这个阶段的排错效率很高。
5.2 现场试运行
调试通过后,接入真实水箱。现场试运行中发现了一个问题:启动水泵的瞬间,液位显示值会出现一个短暂的向上尖峰,然后又回落到正常值。这个现象很快定位了原因:水泵启动瞬间电流大,造成电压波动,影响了液位变送器的供电稳定性,导致输出信号产生了扰动。
解决方法是给液位变送器加一个独立的24V开关电源,不和PLC的传感器供电混用;同时在模拟量输入端并联一个100uF的电解电容和0.1uF的瓷片电容,做成简单的RC滤波。加了滤波之后,液位信号变得平滑稳定。这个经验后来我用到很多项目里。
另外,程序里我也加入了模拟量滤波功能。S7-200的模拟量滤波方式有两种:一种是用模块的硬件滤波(通过拨码设置),另一种是在程序里做平均值滤波——连续采集10次,去掉最大值和最小值,然后求平均。我采用的是第二种,效果更稳定,而且灵活调整采样次数。
5.3 运行数据记录与效果评估
系统连续运行48小时后,我导出了组态王的历史趋势曲线数据做分析。水箱液位基本稳定在设定值±3cm范围内,水泵启动频率大约每小时2到3次,每次运行时间在30秒到2分钟不等,完全满足场景需求。
对比双限位和PID两种方案的实际效果:PID方案液位波动可以控制在±1cm以内,水泵变频运行,启停次数明显减少,但对参数的整定要求高,系统结构复杂,成本也上去了。双限位方案简单直接、成本低、维护方便,在允许液位有一定波动的场合完全够用。
这个项目让我切身体会到:控制方案的选择不能追求“最好”,而要在满足需求的前提下追求“最合适”和“最可靠”。上了生产线,稳定压倒一切。
6. 常见问题与排查技巧
6.1 通信故障排查
组态王显示“通讯失败”,这是最常见的问题。排查思路我建议按照顺序来:先ping通PLC的IP,不行就查网线、查IP设置;再查组态王设备配置里的IP和端口;然后看PLC侧CP243-1模块的RUN灯是否闪烁;最后用组态王“设备调试”窗口查看收发的原始报文。
有一次我遇到奇怪现象:组态王能PING通PLC,但通信测试总失败。后来发现是组态王设备配置里的“采集方式”设成了“按需采集”,而没有勾选“周期采集”,导致数据刷新异常。这个问题不仔细看根本发现不了。
通信偶尔中断。排查发现是以太网线质量不好,抗干扰差,干扰导致丢包。换了一根工业级超五类屏蔽网线后,通信非常稳定。在工业现场,网线别省钱,屏蔽层必须可靠接地。
6.2 模拟量数据异常
数据一直显示0或者满量程32000。通常原因一:接线错误,正负极接反或没接好;原因二:EM231拨码设置和实际信号类型不匹配;原因三:变送器供电没有接或者供电电压不足。逐一排查后80%以上的问题能解决。
数据波动大。先检查是不是变频器干扰——水泵如果是变频驱动的,强烈建议模拟量信号线使用双绞屏蔽线,并且屏蔽层单端接地。另外,模拟量信号线和动力线要分开走线槽,不能绑在一起走。我见过一个项目现场,信号线和变频器输出线走同一个线槽,结果读数疯狂跳动,分开走线后立竿见影。
6.3 水泵控制异常
水泵在自动模式下不启动。常见原因有三处:一是液位确实没有低于启动阈值,检查程序里的比较逻辑和阈值设定;二是手动/自动切换开关没在自动位置,I0.1没有接通;三是Q0.0有输出但中间继电器或接触器故障,用万用表顺着线路量就能定位。
自动启动后又立刻停止。这个现象通常在现场调试初期出现,往往是滞回区间设置得太小。比如设定了上下限差值为1cm,水泵刚启动,水还没有明显上升,由于液位波动瞬间碰到上限就停了。把滞回区间加大到8-10cm后就正常了。
6.4 常见问题速查表
| 故障现象 | 可能原因 | 排查方向 |
|---|---|---|
| 通信失败 | IP、端口、网线、驱动配置 | 逐项检查,设备调试窗口看报文 |
| 液位显示不变化 | 接线、供电、拨码、量程设置 | 用信号发生器直接注入标准电流测试 |
| 液位数值偏大/偏小 | 量程换算系数不对 | 用标准电流值验证换算结果 |
| 水泵不动作 | 模式开关、阈值、接触器 | 分步骤检查PLC输出和外围电路 |
| 液位波动频繁 | 滞回区间太小、电源波动 | 加大滞回宽度、加滤波电容 |
| 组态王按钮无效 | 变量地址不对、读写属性错误 | 确认PLC侧地址类型,检查读写标志 |
| 历史曲线打不开 | 数据库文件损坏、磁盘空间不足 | 备份数据、清理磁盘、重启软件 |
6.5 运行维护建议
项目交付后不能一走了之。我在最后会给使用方留一份简短的运维手册,核心内容就几条:每季度检查一次液位变送器探头是否有结垢;每月测试一次超限报警和急停功能;保持控制柜内通风散热,避免接触器长时间吸合发热;组态王工程文件和PLC程序注意备份,放到U盘留底;遇到通信故障先重启以太网模块,不行再重启电脑。
这些看起来都是小事,但工程现场很多大故障都是从小隐患积累起来的。定时巡检能省掉后面很多麻烦。
7. 实操总结与改进方向
7.1 项目经验沉淀
做完了这套系统,我自己的体会是:S7-200和组态王的组合虽然“老”,但它代表了一种非常经典的工控架构模式,学习价值很高。通过这个项目,我对PLC的数据类型和存储区理解更透了、对模拟量信号的处理不再惧怕、对组态王各种绑定方式也熟练了。这些基本功是可以平移到任何新平台上的。
项目过程中踩过的坑也很多:模拟量拨码、浮点和整数比较指令、组态王变量类型和PLC寄存器匹配、RC滤波抗干扰……每一个坑都是宝贵的经验,这也是我坚持把过程记录下来的原因。
7.2 系统扩展方向
这套系统后续扩展的空间也不小。如果想提升控制精度,可以加变频器实现PID连续调节,水泵转速跟随液位偏差变化,节能效果明显;如果想把多个水箱或者多种设备(温度、压力、流量)都纳入监控,扩展模拟量模块和数字量模块,组态王里再建几个画面就可以;如果想实现远程移动端监控,组态王的Web发布功能可以支持网页查看,不过安全性要提前规划好;如果对数据追溯有更高要求,可以对接SQL Server或者MySQL,把历史数据和报警记录写入数据库,以后做报表分析时就能直接调用。
不管怎么扩展,底层这套“PLC负责控制、组态王负责交互”的思路都不会变。这也是我最想通过这个案例传达给刚开始接触工控的朋友们的核心理念。
7.3 给初学者的几条建议
最后再说几句实在话。刚开始学PLC和组态王的新手,最容易犯的错误就是急着写程序、画画面,忽略了最基本的项目规划。我建议每接到一个任务,先花四分之一的时间把需求理清楚、把I/O点列出来、把控制逻辑画成流程图,再动手编程。磨刀不误砍柴工,这个习惯能省很多返工的力气。
再一个就是多做实验、多接实际设备。电脑里的仿真软件再逼真,也模拟不了现场的干扰和不确定性。有条件就真刀真枪地接线调试,踩过的坑长出来的经验,比看十遍教程都管用。最后一点,也是最重要的,养成记录的习惯。每一步调试发生了什么都及时记下来,不管是成功还是失败,这些记录总有一天会成为你最有价值的资产。