恒压供水程序:西门子224xp与威纶tk6070ip的完美结合
恒压供水程序,使用西门子224xp十威纶tk6070ip, 主要功能: 1、2-4台泵、箱式、无负压式供14种组合一键切换,一套程序适配多种供水模式。 2、手动模式支持工频、变频软启,可选超压停机保护和启动间隔保护,防止过电流。 3、实时报警和历史报警功能。 4、多种传感器支持,支持线性修正,彻底解决和机械式压力表的显示误差。 5、多种保护功能:缺水保护、超压保护、相序保护、缺相保护、爆管保护等。 6、增减泵和休眠辅泵调度策略高度灵活,可根据实际需求灵活设置,满足多种场景。 7、动态PID设置,通过压差动态选择PID参数进行控制,同时实现快速调节和精确调节的自适应。 8、定时永久锁机功能,调整时间日期也无法解除。 9、变频器保护设置,最小频率、加速时间等均可通过触摸屏自定义。 10、大多故障自动复位,个别故障需手动复位,水泵热继电器故障2次(可设置次数)可自动屏蔽。 11、水泵智能调度,最大程度实现水泵累计使用时间的一致性。 12、自动轮泵功能,间隔可设。 13、提供PDF图纸
最近搞了个恒压供水程序,用的是西门子224xp搭配威纶tk6070ip,还挺有意思的,跟大家分享分享。
强大的功能集
1. 多种供水模式一键切换
这个程序牛就牛在,能在2 - 4台泵的箱式、无负压式供水的14种组合之间一键切换,一套程序适配多种供水模式。想象一下,不同的场景,不同的需求,都能通过这一套程序满足,简直不要太方便。
2. 灵活的手动模式
手动模式下,既支持工频,又支持变频软启。还能选择超压停机保护和启动间隔保护,这就防止了过电流情况的发生。比如说,启动间隔保护这块,代码里可能会有类似这样的逻辑:
// 定义启动间隔时间变量 VAR StartIntervalTime : TIME; END_VAR // 启动间隔保护逻辑 IF PumpStartRequest AND NOT PumpIsRunning AND T#0s < StartIntervalTime THEN // 允许启动泵 PumpStart := TRUE; // 重置启动间隔时间 StartIntervalTime := T#0s; ELSE // 不允许启动泵 PumpStart := FALSE; END_IF这里就是说,只有在泵没有运行,并且启动间隔时间达到设定值(这里先设为0秒方便理解,实际会根据需求设定)的时候,才允许启动泵,从而避免短时间内频繁启动造成过电流。
3. 报警功能
实时报警和历史报警功能,能让我们随时掌握系统状态。一旦有异常,马上就能知道,历史报警记录还方便我们事后分析问题。这个报警功能实现起来,代码大概是这样:
// 定义报警标志位 VAR AlarmFlag : BOOL; AlarmType : INT; END_VAR // 检测到故障,设置报警标志位和报警类型 IF FaultDetected THEN AlarmFlag := TRUE; AlarmType := FaultCode; // 将报警信息记录到历史报警存储区 AddToAlarmHistory(AlarmType); END_IF当检测到故障(FaultDetected为真),就设置报警标志,记录报警类型,并且把信息添加到历史报警存储区。
4. 多种传感器支持及线性修正
支持多种传感器,还能线性修正,完美解决了和机械式压力表的显示误差。这部分代码涉及到传感器数据采集和处理,比如:
// 采集传感器数据 VAR SensorValue : REAL; END_VAR SensorValue := ReadSensor(); // 线性修正函数,这里简单示例一个线性公式 VAR CorrectedValue : REAL; BEGIN CorrectedValue := SensorValue * CorrectionFactor + Offset; END通过读取传感器值,再根据修正因子(CorrectionFactor)和偏移量(Offset)进行线性修正,得到更准确的数值。
5. 全面的保护功能
缺水保护、超压保护、相序保护、缺相保护、爆管保护等等,全方位保障系统安全。以超压保护为例,代码可能是这样:
// 定义压力上限值 VAR PressureUpperLimit : REAL; END_VAR // 超压保护逻辑 IF PressureSensorValue > PressureUpperLimit THEN // 停止水泵运行 PumpStop := TRUE; // 触发超压报警 AlarmFlag := TRUE; AlarmType := OverPressureAlarmCode; END_IF当压力传感器值超过设定的压力上限,就停止水泵并触发报警。
6. 灵活的调度策略
增减泵和休眠辅泵调度策略高度灵活,可根据实际需求灵活设置,满足多种场景。比如说,根据用水需求动态增减泵的运行,代码逻辑可能如下:
// 根据用水需求计算需要运行的泵数量 VAR RequiredPumpCount : INT; BEGIN RequiredPumpCount := CalculateRequiredPumpCount(WaterDemand); // 对比当前运行泵数量,进行增减泵操作 IF RequiredPumpCount > CurrentRunningPumpCount THEN // 启动新泵 StartNewPump(); ELSIF RequiredPumpCount < CurrentRunningPumpCount THEN // 停止多余泵 StopExtraPump(); END_IF END根据计算出的所需泵数量,和当前运行泵数量对比,进行相应的增减泵操作。
7. 动态PID设置
通过压差动态选择PID参数进行控制,同时实现快速调节和精确调节的自适应。这部分代码涉及到PID算法的动态调整:
// 定义PID参数结构体 TYPE PID_PARAMS : STRUCT Kp : REAL; Ki : REAL; Kd : REAL; END_STRUCT END_TYPE VAR PidParams : PID_PARAMS; BEGIN // 根据压差选择PID参数 IF PressureDifference > HighDifferenceThreshold THEN PidParams.Kp := HighKp; PidParams.Ki := HighKi; PidParams.Kd := HighKd; ELSE PidParams.Kp := LowKp; PidParams.Ki := LowKi; PidParams.Kd := LowKd; END_IF // 应用PID参数进行控制 ApplyPID(PidParams); END根据压差的大小,选择不同的PID参数(高差值和低差值分别对应不同的Kp、Ki、Kd值),然后应用到PID控制中。
8. 定时永久锁机功能
定时永久锁机功能,调整时间日期也无法解除。这个功能实现起来需要一些特殊的机制,比如:
// 定义锁机时间和标志位 VAR LockTime : DATE_AND_TIME; IsLocked : BOOL; BEGIN // 检测是否到达锁机时间 IF CurrentTime >= LockTime THEN IsLocked := TRUE; // 停止所有水泵运行 StopAllPumps(); END_IF END当当前时间达到设定的锁机时间,就设置锁机标志,停止所有水泵运行,而且即使修改时间也无法解除,保障了系统的安全性。
9. 变频器保护设置
最小频率、加速时间等均可通过触摸屏自定义。这部分和触摸屏交互的代码大概如下:
// 从触摸屏读取变频器最小频率设置 VAR MinFrequency : REAL; BEGIN MinFrequency := ReadFromHMI(MinFrequencyAddress); // 设置变频器最小频率 SetFrequency(MinFrequency, Minimum); END通过从触摸屏指定地址读取设置值,然后设置变频器的最小频率。
10. 故障复位功能
大多故障自动复位,个别故障需手动复位,水泵热继电器故障2次(可设置次数)可自动屏蔽。代码逻辑大概是这样:
// 定义故障计数变量 VAR ThermalRelayFaultCount : INT; BEGIN // 检测到水泵热继电器故障 IF ThermalRelayFault THEN ThermalRelayFaultCount := ThermalRelayFaultCount + 1; // 达到设定次数,自动屏蔽故障 IF ThermalRelayFaultCount >= FaultShieldCount THEN ThermalRelayFault := FALSE; ThermalRelayFaultCount := 0; END_IF END_IF // 其他故障自动复位逻辑 IF AutoResetFault AND FaultDetected THEN // 自动复位故障 ClearFault(); END_IF END当检测到水泵热继电器故障,就增加故障计数,达到设定次数就屏蔽故障。对于其他可自动复位的故障,根据标志位进行自动复位。
11. 水泵智能调度
最大程度实现水泵累计使用时间的一致性。实现代码可能类似这样:
// 定义水泵运行时间变量数组 VAR PumpRunningTime : ARRAY[0..3] OF TIME; BEGIN // 每次水泵启动,记录启动时间 IF PumpStart THEN PumpRunningTime[PumpIndex] := T#0s; END_IF // 水泵运行过程中,累计运行时间 IF PumpIsRunning THEN PumpRunningTime[PumpIndex] := PumpRunningTime[PumpIndex] + TimeIncrement; END_IF // 调度逻辑,优先选择运行时间短的泵 SelectPumpWithShortestRunningTime(); END通过记录每个水泵的运行时间,在调度时优先选择运行时间短的泵,让水泵累计使用时间尽量一致,延长水泵寿命。
12. 自动轮泵功能
间隔可设。这个功能实现起来相对简单,代码示例:
// 定义轮泵间隔时间变量 VAR RotationInterval : TIME; BEGIN // 检测轮泵间隔时间到达 IF T#0s >= RotationInterval THEN // 切换到下一台泵运行 RotateToNextPump(); // 重置轮泵间隔时间 RotationInterval := SetRotationInterval; END_IF END当达到设定的轮泵间隔时间,就切换到下一台泵运行,并重置间隔时间。
13. 提供PDF图纸
最后,还提供PDF图纸,方便大家更好地理解系统架构和布线等等,这对于安装和维护都非常有帮助。
恒压供水程序,使用西门子224xp十威纶tk6070ip, 主要功能: 1、2-4台泵、箱式、无负压式供14种组合一键切换,一套程序适配多种供水模式。 2、手动模式支持工频、变频软启,可选超压停机保护和启动间隔保护,防止过电流。 3、实时报警和历史报警功能。 4、多种传感器支持,支持线性修正,彻底解决和机械式压力表的显示误差。 5、多种保护功能:缺水保护、超压保护、相序保护、缺相保护、爆管保护等。 6、增减泵和休眠辅泵调度策略高度灵活,可根据实际需求灵活设置,满足多种场景。 7、动态PID设置,通过压差动态选择PID参数进行控制,同时实现快速调节和精确调节的自适应。 8、定时永久锁机功能,调整时间日期也无法解除。 9、变频器保护设置,最小频率、加速时间等均可通过触摸屏自定义。 10、大多故障自动复位,个别故障需手动复位,水泵热继电器故障2次(可设置次数)可自动屏蔽。 11、水泵智能调度,最大程度实现水泵累计使用时间的一致性。 12、自动轮泵功能,间隔可设。 13、提供PDF图纸
总的来说,这个恒压供水程序把西门子224xp和威纶tk6070ip的优势发挥得淋漓尽致,实现了这么多功能,希望对搞相关项目的朋友有所启发。
