plc - plc结构化文本循环延迟
问题描述
我试图有一个循环,它将从 100 开始并下降,直到它达到 while 条件不再成立的点。
我从
While Solar_Power_House_W_Solar_PER <= OneHundred AND BatChargePercent < OneHundred DO
State_Dis_Charge := false
FOR PLC_SetLoopChargeValue:= 100 TO 0 By -1 DO
ConvertoReal := INT_TO_LREAL(PLC_SetLoopChargeValue);
Divide := ConvertoReal DIV(100);
PLC_SetCharge := Divide;
PLC_Charge := 1500 * PLC_SetCharge;
RB_Charge := PLC_Charge;
Visual_RBPower := 1500 * PLC_SetCharge; (*Charge *)
END_FOR;
我认为我遇到的问题是它循环太快,所以条件永远不会退出 while 循环,因为系统更新需要一段时间,所以我想添加一个延迟部分:
While Solar_Power_House_W_Solar_PER <= OneHundred AND BatChargePercent < OneHundred DO
State_Dis_Charge := false;
wait(IN:=not wait.Q , PT:=T#50ms);
if Wait.Q Then
FOR PLC_SetLoopChargeValue:= 100 TO 0 By -1 DO
ConvertoReal := INT_TO_LREAL(PLC_SetLoopChargeValue);
Divide := ConvertoReal DIV(100);
PLC_SetCharge := Divide;
PLC_Charge := 1500 * PLC_SetCharge;
RB_Charge := PLC_Charge;
Visual_RBPower := 1500 * PLC_SetCharge; (*Charge *)
END_FOR;
END_IF;
END_WHILE;
我认为它应该如何工作是每 50 毫秒 1 个 for 循环应该运行。目前,每 50 毫秒没有任何事情发生。
解决方案
有了这个答案,我只能解决您的问题,即 for 循环不是每 50 毫秒执行一次。Solar_Power_House_W_Solar_PER
除非变量并且BatChargePercent
未在并行线程中更改,否则为什么无法退出 while 循环的其他答案是正确的。
我建议wait
是一个 TON 功能块。请注意,FB 的名称区分大小写:wait.Q
可能是不相等Wait.Q
的。我认为这是您的 for 循环未执行的主要原因,因为您检查了另一个 FB 的输出。也许检查您的声明列表中是否有大写或小写的双打。
另一种可能性是,您的 while 循环条件根本没有得到满足,您也没有注意到。在这种情况下,for 循环当然也不会被执行。
推荐阅读
- linux - 从声明性 Jenkinsfile 执行时找不到 Curl 命令
- bash - 在 tmux 配置文件中获取 tmux.conf 的绝对路径
- python - 返回 html 而不是 Json 对象 - python rest api
- javascript - jQuery 淡入淡出消息列表
- oracle - oracle集合和临时表有什么区别?
- python - 使用python导出时是否可以将下拉过滤器添加到excel
- environment-variables - 在 Mybatis 属性文件中使用环境变量
- bitcoin - 比特币核心命令 RPC 语法问题
- c++ - OpenGL C++抽象和顶点绘制问题
- android - 在 Kotlin 中不推荐使用 ActiveNetworkInfo 和 isConnected