工控编程吧

标题: 如何实现最佳答案的做法 [打印本页]

作者: baikhgmv    时间: 2016-9-8 11:19
标题: 如何实现最佳答案的做法
如何实现最佳答案的做法因为本人属初学者,具体不知如何具体实现最佳答案的做法;或是有其更简便的方法,请大家多多指教!


--------同一个运转设备的状态,运行/停止是一个外部二进制变量,故障是一个外部二进制变量。假设画面中有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程序?

扯的吧.


我的想法是, 建立一个画面中设备名称的列表, 然后脚本来搜索查询这些设备图标的运行状态,恐怕更直接些。







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4