Endereço de objeto


(Paulo) #1

É possível endereçar um objeto com mais de um endereço de memoria .
Att


(Luiz Fernando Freire dos Reis) #2

@Paulo_Oliveira, bom dia.

Se estiver se tratando de tag de comunicação, não. Cada tag representa apenas um endereço.

É possível modificar o endereço em Runtime, mas cada novo endereço configurado representará um novo tag e não o mesmo.

Sds.


(Paulo) #3

Obrigado

Att…


(Paulo) #4

Bom dia

Então eu quero que um botão tenha 5 endereços nele para acionar 5 dispositivos diferente é possível ?

Att


(Luiz Fernando Freire dos Reis) #5

@Paulo_Oliveira, bom dia.

Sim, é possível.

Sds.


(Paulo) #6

Como eu faço ?

Att;…


(Luiz Fernando Freire dos Reis) #7

@Paulo_Oliveira,

Supondo:

  • 1 driver para cada equipamento;
  • 1 tag de comunicação digital para cada driver.

Pode fazer este comando utilizando um CommandButton:

Sub CommandButton1_Click()
Application.GetObject("Driver1.Tag1").WriteEx 1
Application.GetObject("Driver2.Tag1").WriteEx 1
Application.GetObject("Driver3.Tag1").WriteEx 1
Application.GetObject("Driver4.Tag1").WriteEx 1
Application.GetObject("Driver5.Tag1").WriteEx 1

' Ou
' For i=1 to 5
'	 Application.GetObject("Driver"&i&".Tag1").WriteEx 1
' Next
End Sub

Sds.

Obs.: Sempre que possível, passa mais detalhes como nome dos tags, nome dos drivers, tipo, etc.


(Paulo) #8

Então eu tenho que fazer um teste em 10 dispositivos acionando um botão , vou fazer comunicação modbus rtu onde configuro a porta COM na tela de Viewer a chances de dar problema ??


(Luiz Fernando Freire dos Reis) #9

@Paulo_Oliveira,

Sugiro assistir a estes dois vídeos:

Sds.


(Paulo) #10

Agradeço pelos videos e informação .

Att


(Paulo) #11

Boa tarde segue exemplo

Então fiz o código que você mandou só que ele só faz o acionamento como faço pra desacionar .

Att


(Luiz Fernando Freire dos Reis) #12

@Paulo_Oliveira, boa tarde.

Semelhante ao anterior, mas trocando o 1 por 0.

Pode fazer este comando utilizando um CommandButton:

Sub CommandButton1_Click()
Application.GetObject("Driver1.Tag1").WriteEx 0
Application.GetObject("Driver2.Tag1").WriteEx 0
Application.GetObject("Driver3.Tag1").WriteEx 0
Application.GetObject("Driver4.Tag1").WriteEx 0
Application.GetObject("Driver5.Tag1").WriteEx 0

' Ou
' For i=1 to 5
'	 Application.GetObject("Driver"&i&".Tag1").WriteEx 0
' Next
End Sub

Sds.


(Paulo) #14


Então neste exemplo quando aperta o botão é pra fica visível ,só que não está funcionando.


(Luiz Fernando Freire dos Reis) #15

@Paulo_Oliveira,

Faz da seguinte forma:

  1. Cria dois botões sendo um para ligar (visível) e outro para desligar (invisível);
  2. Desmembra o script entre esses botões;
  3. Na associação do objeto retângulo, ao invés de conexão bidirecional, utiliza conexão simples.

Sds.


(Paulo) #16

Desculpe incomodar novamente mas é possível fazer só com um botão?
Se não agradeço enormemente pela ajudar .

Att


(Luiz Fernando Freire dos Reis) #17

Sim, é possível. Mas se quer manter o retângulo visível, precisa inverter a ordem: primeiro passa o zero e depois o 1.

Ou, na associação, utiliza o NOT para inverter o valor recebido pela tag, posto que o último comando está sendo False (0) e para ficar visível precisa receber True (1).

Exemplo: NOT(CBool(Dados.saida2.Value))

Mais informações:

Sds.


(Paulo) #18

Agradeço pela Atenção .

Attt