如何实现最佳答案的做法因为本人属初学者,具体不知如何具体实现最佳答案的做法;或是有其更简便的方法,请大家多多指教!
--------同一个运转设备的状态,运行/停止是一个外部二进制变量,故障是一个外部二进制变量。假设画面中有10台运转设备,都是泵,其外部变量名称是:
Pump1_Running表示1#泵运行/停止状态,Pump1_Fault表示1#泵故障 Pump2_Running表示2#泵运行/停止状态,Pump2_Fault表示2#泵故障 Pump3_Running表示3#泵运行/停止状态,Pump3_Fault表示3#泵故障 Pump4_Running表示4#泵运行/停止状态,Pump4_Fault表示4#泵故障 Pump5_Running表示5#泵运行/停止状态,Pump5_Fault表示5#泵故障 Pump6_Running表示6#泵运行/停止状态,Pump6_Fault表示6#泵故障 Pump7_Running表示7#泵运行/停止状态,Pump7_Fault表示7#泵故障 Pump8_Running表示8#泵运行/停止状态,Pump8_Fault表示8#泵故障 Pump9_Running表示9#泵运行/停止状态,Pump9_Fault表示9#泵故障 Pump10_Running表示10#泵运行/停止状态,Pump10_Fault表示10#泵故障 最佳答案建议脚本中使用一维数组,数组有3个元素,分别计算运行、停止、故障设备的台数。写VBS脚本: dim Status(3),i,Pump_Running(10),Pump_Fault(10) for i=1 to 10 set Pump_Running(i)=HMIRuntime.tags("Pump" & Cstr(i) & "_Running") set Pump_Fault(i)=HMIRuntime.tags("Pump" & Cstr(i) & "_Fault") next
for i=1 to 10 if Pump_Running(i).read then Status(1)=Status(1)+1 else Status(2)=Status(2)+1 end if if Pump_Fault(i).read then Status(3)=Status(3)+1 end if next msgbox "10台泵当中,正在运行的泵数量是" & cstr(Status(1)) msgbox "10台泵当中,停止的泵数量是" & cstr(Status(2)) msgbox "10台泵当中,故障的泵数量是" & cstr(Status(3))
----------- 其实不用脚本,直接用PLC就可以实现你的功能的!你需要建立间隔变量,SUM_RUN、SUM_STOP,SUM_Fault,三个变量分别对应运行、停止、故障的累计值。 然后在PLC里面做设备的控制块,一般的电机控制肯定要做成一个块,块的输入参数要有运行/停止、故障等状态;输出要有上面三个变量。 重点是:在每个周期的第一个网络,将三个累计值清零,然后在每哥调用的程序块里,根据状态将对应的累计值+1。 当最后一个设备块执行完成后,三个变量里的值就是整个系统的设备运行状态。注意的是,这三个累计值将在下一周期执行的时候清零,防止重复累计。因此再设备块执行完成后,要将上面三个数据锁存一下,送到另外三个变量中,用以在上位机显示。 就是这么简单。不需要脚本的哦
--------基于画面而不是基于PLC。 那么解决问题的思路, 要基于图形对象而不是基于变量。
我认为上述答案并不太好。
比如调试过程中, 突然又要把某个设备从这个画面移动到另外一个画面, 你跟我说还必须要改PLC程序? 扯的吧.
我的想法是, 建立一个画面中设备名称的列表, 然后脚本来搜索查询这些设备图标的运行状态,恐怕更直接些。
|