Como criar bloco de comunicação

Boa tarde

Como eu crio o bloco de comunicação em runtime?

Eu tentei criar dessa forma, mas não foi:

     	Set dvr = Application.GetObject("" & Drive)
     	Set bloco_tag = dvr.AddObject("IOBlock", True, Application.GetObject("Dados.DadosCadPonto.spNomeTag").Value)
     	For i = 1 To 5
     		bloco_tag = bloco_tag.AddObject("IOBlockElement", True, Application.GetObject("Dados.DadosCadPonto.spNomeTag").Value)
     	next
     	dvr.Save

Agradeço desde já

Oi Wagner, boa tarde!

O script possui um pequeno erro no seguinte ponto:

bloco_tag = bloco_tag.AddObject(“IOBlockElement”, True, Application.GetObject(“Dados.DadosCadPonto.spNomeTag”).Value)

Neste trecho, além de estar faltando o comando SET, quando o “For” é executado pela segunda vez, a variável bloco_tag deixa de ser o “TagBloco” e se torna um “Elemento do Bloco”, não sendo possível adicionar um elementro dentro de outro.

Para corrigir, existe duas opções:

  1. Utilizar um nome de variável diferente;
    Set TagElemento = TagBloco.AddObject(“IOBlockElement”, True, “Element”)

  2. Não utilizar o retorno do objeto.
    Call TagBloco.AddObject(“IOBlockElement”, True, “Element”)

Exemplo script:

Set Driver = Application.GetObject(“Driver”)

Set TagBloco = Driver.AddObject(“IOBlock”, True, “Bloco”)

For i = 1 to 5
Call TagBloco.AddObject(“IOBlockElement”, True, “Element”)
Next

Pode me informar a necessidade de criar o bloco em runtime? Dependendo da sua necessidade, podemos ver opções diferentes para atende-la.

Qualquer dúvida por favor me avise.

Atenciosamente,
Marco Antonio

1 Like

Legal, e eu queri adicionar as informações nos elementos, tipo assim:

tag.N3 = Application.GetObject("Dados.DadosCadPonto.spN3").Value

Ficaria assim?

set tag =  TagBloco.AddObject("IOBlockElement", True, "Element")
set tag.N3 = 1

Outra coisa, aproveitando a mensagem. Como eu faço para deletar um bloco de comunicação inteiro em runtime?

Oi Wagner,

A configuração da parametrização do tag bloco deve ser feita no bloco e não no elemento. Pegando o seu exemplo, seria assim:

set tag = TagBloco.AddObject(“IOBlockElement”, True, “Element”)
TagBloco.N3 = 1

Obs.: Recomendo fazer isso fora do laço “FOR” e não esquecer de configurar o tamanho do bloco (propriedade “Size”) com o número de elementos que será utilizado.

CUIDADO: Ao criar tags e/ou blocos com configurações diferentes em runtime, o número de tags consumidas na hardkey também seja acrescido. O uso não consciente deste tipo de funcionalidade pode “estourar” o número de licenças de tags disponíveis na chave, fazendo com que as excedentes parem de comunicar.

Sobre a segunda pergunta: “Outra coisa, aproveitando a mensagem. Como eu faço para deletar um bloco de comunicação inteiro em runtime?”

Para deletar um bloco deve-se fazer o seguinte script:

Set Driver = Application.GetObject(“Driver”)
Driver.DeleteObject(“Nome do Tag Bloco”)

Qualquer dúvida me avise.

Atenciosamente,
Marco Antonio

1 Like

Bom dia

		Set dvr = Application.GetObject("Driver1")
		
		if dvr.DeleteObject("ERE101") then
			
			msgBox "Apagou!!"
			
		else
			msgBox "Não foi possível apagar!"
		end if

Estou tentando este código, mas não apaga.

1 Like

Oi @wagner.dracha,

Para deletar o bloco e depois exibir uma mensagem para o operador que o objeto foi apagado, foi tomado como base sua estrutura de script, conforme abaixo:

'Local do driver
set dvr = Application.GetObject(“Driver”)

'Apaga o bloco
dvr.DeleteObject(“ERE101”)

'Continua o script mesmo se o objeto não existir
on error resume next

'procura o bloco para saber se realmente apagou
set testObj = dvr.Item(“ERE101”)

'se ocorreu um erro, o objeto foi apagado
If Err.Number <> 0 then

MsgBox “Apagou!!”

Else
MsgBox “Não foi possível apagar!”

End If
'Anula o “On Error Resume Next”.
on error goto 0

Para mais detalhes sobre o método On Error Resume Next, consulte o artigo do kb-4243: Tratamento de erros de script (link: http://kb.elipse.com.br/pt-br/questions/4243/Tratamento+de+erros+de+script.)

Qualquer dúvida, estou à disposição.

Atenciosamente,
Lucas Angelo