Associação Múltipla via Script

Bom Dia;
Estou criando Associação via script e estou tendo um problema…
Conforme KB: http://kb.elipse.com.br/pt-br/questions/1611/KB-31793%3A+Criando+associações+via+script.

Fiz a Associação com Function

Utilizo esta função com o Evento OnStartRunning

Fiz por Script, pois tenho uma variavel no XO que permite alterar o Bit do Acionamento…

O Que está acontecendo é o Seguinte:

  • Tenho uma linha de referencia e outra linha de saída…
  • O Objetivo é que se a Peneira esteja Desligada, a cor na linha de saída fique desligada…
    - E se a peneira estiver ligada, fique com a cor que está na referência…
  • Mas, fazendo algumas simulações acontece o seguinte:
    • Altero a linha de Referencia para Cor Ligado, e depois ligo a peneira… a linha de saída fica ligada também…
    • Porém, se eu alterar a cor da linha de referencia para desligado depois de ter ligado a peneira, a cor da linha de saída fica ligada!

Para Teste, criei a associação diretamente na linha de saída… Funcionou bem…

Olá Saimond,

Poderia enviar uma aplicação de teste que reproduza o problema?

Segue Link com Exemplo do Problema

http://ge.tt/7kZiein2

Saimond,

Identificamos um problema no comportamento da associação múltipla quando ela é criada por script. Enquanto isso não é corrigido, o workaround é desabilitar a propriedade ‘AdviseAll’ da associação (equivalente à opção “Manter todas associações ativas”) e habilitar novamente no final. O seu script ficaria assim:

Set Link = Objeto.Links.CreateLink(Source, Link , 6)
Link.AdviseAll = False
Link.InsertRow()
Link.Item(1).Source = CorOff
Link.Item(1).Min = 0
Link.Item(1).Max = 0
Link.InsertRow()
Link.Item(2).Source = CorOn
Link.Item(2).Min = -1
Link.Item(2).Max = -1
Link.InsertRow()
Link.Item(3).Source = CorAlarme
Link.Item(3).Min = -32767
Link.Item(3).Max = -2
Link.AdviseAll = True

Ok, Funcionou…
Obrigado.

1 Like

Boa tarde, estou desenvolvendo uma aplicação cuja à qual necessita de “linkar” valores do XC com as TAGs de comunicação, queria saber se essa falha ainda persiste ? Poderia me ajudar por favor.

Osvaldo,

O problema identificado neste tópico referente ao comportamento de associações múltiplas criadas por script foi corrigido na versão 5.0 do E3. A partir dessa versão não é mais necessário aplicar o workaround sugerido acima.

@pgustavo estou com dificuldade em criar um link em runtime, peguei as informações desse link no kb https://kb.elipse.com.br/kb31793-criando-associacoes-via-script/, porém só me reporta associação simples, e por fim não consigo realmente associar as propriedades dos dois objetos, há mais algum detalhe além dos códigos exemplos?

Osvaldo,

Como ficou o seu script?

@pgustavo estou usando o modelo exemplo que tem no Manual E3 de Referência, ó código ficou assim:
On Error Resume Next
Dim Bind
Set Bind = Screen.Item(“D2”).Links.Item(“Value”)
If Bind Is Nothing Then
MsgBox “D2 não está associado a nenhum objeto.”
Dim Source
Source = “Screen.Item(”“D1"”).Value"
MsgBox “Criando uma conexão em '” & Source & “’.”
Set Bind = Screen.Item(“D2”).Links.CreateLink(“Value”, Source, 1)
MsgBox “Screen.Item(”“D2"”).Value"
Screen.Item(“D1”).Links.CreateLink “Value”, “TESTE.Item(”“D2"”).Value", 1
Bind.BiDirectional = Screen.Item(“BiDirectional”).Value
Bind.Reverse = Screen.Item(“Reverse”).Value
MsgBox "Tipo: " & TypeName(Bind)
Else
MsgBox "D1 já está ligado à " & Bind.Source & “.”
End If

Na verdade, tentei associar como não consegui, parti para tentar ao menos testar o método com dois displays, porém sem sucesso, poderia me dizer onde estou cometendo o equivoco.

Osvaldo,

O script está cheio de caracteres inválidos. Tem que substituir as aspas curvas (“”) por aspas verticais (""). Vamos corrigir os exemplos do KB.

@pgustavo foi questão de formatação de texto no ato de copiar e colar aqui, no código dentro do E3 está normal, sem erros.

Tem mais alguns erros como aspas dobradas. Sugiro copiar o script do exemplo novamente.

Estava com dúvida em como referenciar o objeto a ser linkado, pensei que tivesse que passar todo o PathName, porém só necessitei endereçar o Nome do objeto e a propriedade a qual desejava criar o vínculo, isso é válido porque os displays estão na mesma tela ou é regra geral, independentemente de os objetos a serem associados estarem no servidor e/ou no viewer?

Sim, porque estão na mesma tela. Mas deve funcionar também com o pathname completo. Por exemplo:

Source = “Screen.D1.Value”

@pgustavo estou dando os primeiros passos em programação no Elipse E3, disso discorre minhas dúvidas básicas quanto a programação, estou na tentativa de implementação de um código no qual crio um XC em runtime, em seguida verifico a existência de um XO, caso não exista já crio ele e vinculo ao XC, porém, ainda necessito linkar as propriedades do XO aos TAGs de comunicação, e exatamente nessa parte estou tendo muitas dificuldades, não consegui deixar isso de forma iterativa. Criei todas as TAGs previamente e estou tentando associá-las as propriedades do XO, porém sem sucesso. Peguei o exemplo acima, que lhe enviara, e tentei adaptar para o display escrever e receber os dados de um Bit de uma TAG de comunicação, porém quando crio o link me retorna ter criado um “tipo : Object” e não um link, e por fim não consigo atualizar o Bit do Tag, ja mudei o formato do display para Boolean, mas sem sucesso. Poderia me indicar como proceder, pois não sei mais o que fazer, desde já grato.

Teria que revisar o script.

Olá,
Estou usando associação multipla via script. Ele trabalha bem ate quarta linha da tabela. Na quinta linha ele não altera a propriedade desejada. Tentei a sugetão anterior, mas não funcionou. Versão E3 4.6.

Segue exemplo do script:

If ValvulaTipo4.Dados.Alarme Then
valor = 5
msgbox"2"
elseif ValvulaTipo4.Dados.OLeitura Then
valor = 2
msgbox"3"
ElseIf ValvulaTipo4.Dados.CLeitura Then
valor = 1
msgbox"4"
Else
valor = 4
msgbox"5"
End If
msgbox"6"
Set bind = Links.CreateLink(“OverrideFillColor”, valor, 4)
Link.AdviseAll = False
msgbox"7"
bind.InsertRow()
bind.Item(1).Value = RGB(255, 0, 0)
bind.Item(1).Min = 1
bind.Item(1).Max = 1
bind.Item(1).Blink = False
msgbox"8"
bind.InsertRow()
bind.Item(2).Value = RGB(0, 192, 0)
bind.Item(2).Min = 2
bind.Item(2).Max = 2
bind.Item(2).Blink = False
msgbox"9"
bind.InsertRow()
bind.Item(3).Value = RGB(0, 0, 0)
bind.Item(3).Min = 3
bind.Item(3).Max = 3
bind.Item(3).Blink = False
msgbox"10"
bind.InsertRow()
bind.Item(4).Value = RGB(240, 240, 240)
bind.Item(4).Min = 4
bind.Item(4).Max = 4
bind.Item(4).Blink = False
msgbox"11"
bind.InsertRow()
bind.Item(5).Value = RGB(255,255, 0)
bind.Item(5).Min = 5
bind.Item(5).Max = 5
bind.Item(5).Blink = false
msgbox"12"
Link.AdviseAll = True
msgbox"valor é="&valor

Obs: Meu objeto é um XControl. Esse script esta nele.

msgbox foram usados para tentar debug o codigo.

obrigado pela atenção

Bom dia Galera,

Meu código funcionou. Estava usando o “workaround” ERRADO.

No meu caso não era “Link.AdviseAll=…” e sim “bind.AdviseAll=…”

VALEUUUU

1 Like