Integração E3 - Sensor Sick

Prezados,

Preciso fazer a integração do E3 com o sensor SICK Lector63x.
Os protocolos Ethernet suportados pelo equipamento são: TCP/IP,EtherNet/IP e PROFINET.
Qual o driver Elipse recomendado?

Ola @dgautomacao,

Pode utilizar o Driver ASCII Generic, disponível para download em nosso site.

@Gabriel
O ASCII não consta na lista de protocolos suportados pelo sensor. Será que funciona mesmo?

Funciona sim,
Basta saber como é os comandos e estrutura das mensagens que o equipamento envia e recebe, para montar as operações em ASCII,

@Gabriel
Vocês tem alguma aplicação exemplo de integração de equipamento com o Elipse E3 via ASCII?

Olá @dgautomacao,

Temos sim, usando o Elipse SCADA e o Elipse E3:

@Gabriel
Então, o driver slave seria o sensor, correto?

Olá @dgautomacao ,

Isso mesmo o Slave o sensor e o E3 o Master.

@Gabriel
Estou testando o Elipse E3 com um sensor de visão Sick Lector654.
O objetivo é receber o código de barras na tela do Elipse E3 via Ethernet por meio do protocolo ASCII.
Estou utilizando a aplicação exemplo ASCII master e consigo receber o valor do RX no log do driver em formato hexadecimal que representa exatamente o código decimal de leitura do sensor (73919870005470).

20/11/2016 16:43:39.547 (2104) RX: TIMEOUT
20/11/2016 16:43:39.547 (2748) [DRIVER] Receive Error!
20/11/2016 16:43:39.547 (2748) [DRIVER] <== (1.008) ReadBlock(3.0.0.0[2]) = ERROR (hr=80004005)
20/11/2016 16:43:39.547 (2748) [DRIVER] <== (0.000) ReadValue(1.0.0.0) = (16:43:39.548) 0
20/11/2016 16:43:39.547 (2748) [DRIVER] IsValidTXIndex() Error: TX index=1 does not exist! (ID=0)
20/11/2016 16:43:39.547 (2748) [DRIVER] <== (0.000) ReadValue(1.0.1.0) = ERROR (hr=80004005)
20/11/2016 16:43:39.547 (2748) [DRIVER] <== (0.000) ReadValue(2.0.0.0) = (16:43:39.548) 0
20/11/2016 16:43:39.548 (2748) [DRIVER] IsValidRXIndex() Error: RX index=1 does not exist! (ID=0)
20/11/2016 16:43:39.548 (2748) [DRIVER] <== (0.000) ReadValue(2.0.1.0) = ERROR (hr=80004005)
20/11/2016 16:43:39.727 (2104) [SOCKET] BUFFER: new chunk created
20/11/2016 16:43:39.727 (2104) RX: 02 37 33 39 31 39 38 37 30 30 30 35 34 37 30 03
20/11/2016 16:43:40.730 (2104) RX: TIMEOUT
20/11/2016 16:43:40.730 (2748) [DRIVER] Receive Error!
20/11/2016 16:43:40.730 (2748) [DRIVER] <== (1.183) ReadBlock(3.0.0.0[2]) = ERROR (hr=80004005)
20/11/2016 16:43:40.731 (2748) [DRIVER] <== (0.000) ReadValue(1.0.0.0) = (16:43:40.730) 0
20/11/2016 16:43:40.731 (2748) [DRIVER] IsValidTXIndex() Error: TX index=1 does not exist! (ID=0)

O IP e porta do sensor estão configurados no driver ASCII Generic.
O valor do código de leitura é composto por 14 dígitos e estou utilizando o seguintes comandos pra RX como para TX no driver Elipse: /h02%f/h03.
Percebi que, independente da configuração dos comandos, o valor de leitura RX é sempre registrado no log do driver.
Se a leitura está aparecendo no log, então a comunicação entre o E3 e o sensor está funcionando, porém resta tratar a informação recebida para exibi-la em tela.
Como faço para receber esse valor em tag do driver? Utilizei os tags da aplicação exemplo master e slave no mesmo projeto e nenhum valor é atualizado. Será que o problema está na formação dos comandos?
Desde já, agradeço a ajuda.

@Gabriel @delio
Consegui resolver o problema.
O problema estava na versão do driver ASCII que consta na aplicação exemplo.
Quando instalei a versão disponível para download no site da Elipse (v1.11), funcionou normalmente.
Dúvida: o driver envia automaticamente o comando de TX (/h05) sem precisar ficar escrevendo na tag de EnviaCmd (N=4). Esse comportamento é normal?

Daniel,
O driver deveria enviar o comando apenas quando fosse realizada uma escrita no tag N1=4.
Caso o problema persista, envie a aplicação utilizada para eu tentar simular.

@delio
Estou utilizando um sensor Sick cuja leitura é acionada por uma chave.
Ao fazer a leitura, o código é enviado automaticamente para o E3 sem necessidade de criar evento para envio do comando TX.
Pelo log do driver, percebe-se que o TX de requisição (/h05) fica sendo enviado diretamente.
Na minha aplicação não se trata de problema, inclusive é a situação ideal, pois não preciso fazer uma rotina para ficar escrevendo constantemente no tag de envio de comando. Mas preciso confirmar se o funcionamento do driver está correto dessa forma.
Enviei o projeto e log do driver para o seu email.

O problema de envio constante do TX de requisição estava no log da versão anterior do driver.
Na versão atualizada do driver, o comportamento está normal.

Delio,
Quando se coloca o comando /h05 no campo TX, o driver fica recebendo constantemente comando de RX (quando não tem leitura, retorna timeout), sem a necessidade de escrever no tag EnviaCmd.
Como seria a forma de enviar o TX somente após a mudança de algum tag? A ideia seria solicitar a leitura do código do sensor somente após o acionamento de uma chave fim de curso.
Da forma atual funciona, mas acho que está sobrecarregando o driver sem necessidade.

11/10/2017 07:25:01.261 (0448) RX: TIMEOUT
11/10/2017 07:25:01.261 (04DC) [DRIVER] Receive Error!
11/10/2017 07:25:01.261 (04DC) [DRIVER] <== (1.009) Tag(3.0.0.0).ReadValue = ERROR (hr=80004005)
11/10/2017 07:25:01.261 (04DC) [DRIVER] <== (0.000) Tag(2.0.0.0).ReadValue = (07:25:01.261) ‘356013312001103’
11/10/2017 07:25:02.268 (0448) RX: TIMEOUT
11/10/2017 07:25:02.268 (04DC) [DRIVER] Receive Error!
11/10/2017 07:25:02.268 (04DC) [DRIVER] <== (1.007) Tag(3.0.0.0).ReadValue = ERROR (hr=80004005)
11/10/2017 07:25:02.268 (04DC) [DRIVER] <== (0.000) Tag(2.0.0.0).ReadValue = (07:25:02.269) ‘356013312001103’
11/10/2017 07:25:03.274 (0448) RX: TIMEOUT

Daniel,
Este comportamento é o esperado quando a leitura estiver habilitada e o tag em atualização.
O driver utiliza leitura por polling, e enquanto não chegar nenhum novo valor este erro será gerado.

Uma alternativa seria desativar a leitura do tag (AllowRead = False) e ativar somente quando o TX for solicitado (EnviaCmd).
Application.GetObject(“ASCII.Recebe_Comando”).AllowRead = true

No tag, criar um evento de usuário que seja disparado quando a expressão “ASCII.Recebe_Comando.Value” alterar o seu valor:
Parent.AllowRead = False

Desta forma leituras desnecessárias serão evitadas.
Caso enfrente problemas, envie o log e uma aplicação reduzida que simule o problema para o e-mail delio@elipse.com.br.

1 Like