possuo 3 bombas , sendo uma reserva e 2 que ficam em funcionamento.
Bomba 1 - Bomba 2 - Bomba 3
Na indisponibilidade de uma das bombas devo gerar um alarme com a finalidade do operador inspecionar o local, e manualmente ligar a bomba 3.
Bomba 1 - Bomba 2 - Bomba 3 -> alarme
Bomba 1 - Bomba 2 - Bomba 3 -> normal
As bombas são aquisitadas por tag de comunicação modbus:
ed_modbuus_1
ed_modbuus_2
ed_modbuus_3
e realizados links com ponto de dados que configurei apenas como eventos.
DigitalDataRed1
DigitalDataRed2
DigitalDataRed3
Foi criada uma tag interna BEP com a finalidade de armazenar o valor digital correspondente a combinação das bombas ligadas.
BEP
Para realizar a lógica escrevi um script para fazer o reconhecimento dos pontos e avaliação do número das bombas ligadas. O problema está no valor digital escrito na tag interna BEP, que não corresponde com a combinação das bombas.
Sub Label1_Evento2()
Dim Var 'recebe a condição da bomba 3
Dim BEP 'recebe a tag interna para armazenar a combinação bombas ligadas
Dim avalia
'TELAS_SA.Tela1.Texto5
Set Texto50 = Screen.Item("Label2")
'aquisita o coil 3
set Var = Application.GetObject("Dados_SA.EDF_BT_MB.DigitalDataRed3")
'aquisita Value da tag interna para avaliação do valor ref. as 3 coils (1,2,3)
set BEP_int = Application.GetObject("Dados_SA.BEP")
'transforma para booleano o valor e retira sinal
BEP = Abs( CBool(Var.Saida) )
'separa bit a bit
bit0 = Bep_int.Value AND 1
bit1 = BEP AND 2
bit2 = Bep_int.Value AND 4
BEP_int.Value = bit0 + bit1 + bit2
'MsgBox( BEP_int.Value )
texto50.caption = BEP_int.Value
End Sub
O