传送带突然加速?PLC程序员的翻车现场
基于PLC1200与Factory IO设计的模拟工厂设计 TIA Portal V15.1与Factory IO联机仿真运行系统(不用实物PLC)入下图: 1、有设计程序和仿真环境; 2、有演示视频。
前两天在调试Factory IO的立体仓库模型时,传送带突然像脱缰野马般狂奔,料框直接飞出工作台。监控PLC1200变量表才发现,速度设定值被某个脚本改成了250%——这得从我们的联机架构说起。
TIA Portal里建了个名为"速度过山车"的DB块:
DATA_BLOCK "Convoy_Control" VAR ActualSpeed : Real := 0.0; // 实时转速 TargetSpeed : Real := 60.0; // 默认转速 EmergencyStop : Bool := False; END_VARFactory IO的Lua脚本里有个骚操作:
function onSensorTrigger() if plc.getBit("EmergencyStop") then conveyor.setSpeed(0) else -- 这里原本该用TargetSpeed,结果手滑... conveyor.setSpeed(plc.getReal("ActualSpeed") * 2.5) end end当光电传感器触发时,脚本误将实际转速当作目标转速读取,还擅自加了增益。这种跨平台变量映射的坑,比忘记喝咖啡还提神。
基于PLC1200与Factory IO设计的模拟工厂设计 TIA Portal V15.1与Factory IO联机仿真运行系统(不用实物PLC)入下图: 1、有设计程序和仿真环境; 2、有演示视频。
主程序OB1里的速度控制段更有意思:
Network 1: A "急停按钮" // 来自HMI的IO映射 = "EmergencyStop" Network 2: A "自动模式" JNB _005 L "TargetSpeed" T "ActualSpeed" _005: NOP 0 Network 3: A "ActualSpeed" L 55.0 <R JC _007 // 超速报警处理 _007: ...当TargetSpeed突然飙到150%时,比较指令
联机配置的魔法在于PLCSIM Advanced的虚拟网卡设置。记得那次IP地址冲突,Factory IO的通信接口显示连接成功,但变量死活不同步。最后用这条PowerShell命令才揪出元凶:
Get-NetIPConfiguration | Where-Object {$_.InterfaceDescription -like "*PLCSIM*"}现在的联机方案里,我们给虚拟PLC单独划了192.168.5.x网段,脚本里增加了速度渐变缓冲:
local SPEED_RAMP = 0.3 -- 秒每百分比 function setGradualSpeed(target) local current = conveyor.getSpeed() local steps = math.abs(target - current)/0.1 for i=1, steps do conveyor.setSpeed(current + (target-current)*(i/steps)) coroutine.yield() end end这法子治好了传送带的"癫痫发作",虽然让响应时间多了300ms,但总比现场表演天女散花强。下次试试用PID整定加速曲线,或许能找到更优雅的解法。
