在仿真的时候楼层计数还是好好的,但是在设备上跑的时候。继电器触点接通,在监控里也看到有上升沿了,但是后面的楼层依旧没有变化

在仿真的时候楼层计数还是好好的,但是在设备上跑的时候。继电器触点接通,在监控里也看到有上升沿了,但是后面的楼层依旧没有变化

上午好☀️☀️☀️️
本答案参考通义千问
这是一个典型的PLC程序与实际硬件之间不一致的问题,尤其是在仿真环境中一切正常,但实际运行中出现异常。你提到“继电器触点接通,在监控里也看到有上升沿了,但是后面的楼层依旧没有变化”,这说明信号已经传到PLC,但程序逻辑未正确处理该信号。
重点: 确认信号是否真正被PLC读取,而不是仅仅在监控中显示。
EU或FP)来捕获信号。// 假设输入点是 I0.0
IF I0.0 = TRUE THEN
EU(I0.0, M10.0); // 上升沿检测
END_IF;
IF M10.0 = TRUE THEN
// 执行楼层加一操作
ADD(1, MW100, MW100);
END_IF;
重点: 如果没有使用上升沿检测,可能会因为信号持续而多次触发,造成逻辑错误。
MW100)进行正确的加减操作。| 步骤 | 内容 | |------|------| | 1 | 检查输入信号是否被PLC正确读取 | | 2 | 确保使用上升沿检测指令(如EU) | | 3 | 验证计数器或寄存器是否被正确更新 | | 4 | 检查程序逻辑是否存在冲突或覆盖 | | 5 | 检查硬件连接和信号稳定性 | | 6 | 优化程序扫描周期或添加延时机制 |
// 定义输入点和中间变量
VAR
InputSignal: BOOL := FALSE; // 输入信号
EdgeDetect: BOOL := FALSE; // 上升沿检测标志
FloorCounter: INT := 0; // 楼层计数器
END_VAR
// 上升沿检测
InputSignal := I0.0; // 假设I0.0是你的输入点
EdgeDetect := EU(InputSignal);
// 检测到上升沿后更新楼层计数器
IF EdgeDetect THEN
FloorCounter := FloorCounter + 1;
END_IF;
// 输出楼层计数器到输出点(可选)
Q0.0 := FloorCounter MOD 10; // 假设Q0.0用于显示楼层
重点: 通过上升沿检测和计数器更新,可以有效避免重复触发问题。
如果你能提供具体的PLC型号、编程语言(如LAD、FBD、STL、SCL等)以及相关程序片段,我可以进一步帮你定位问题。