Dúvida Escrita Tag - Driver ASCII Generic

Bom dia,

Estou utilizando o Elipse E3 para realizar a comunicação com um laser da marca Datalogic.

O laser está rodando no modo servidor tcp, e estou enviando comandos para o mesmo utilizando o driver ASCII Generic v2.0.3.

Seguindo a documentação do fabricante do laser, pretendo realizar o seguinte comando:

Eu consegui enviar esse comando, apenas de forma “pré-programada”, inserindo o mesmo na lista de comandos ASCII do driver.

TX: /h1B/h0C/h00/hF3/h92/h78/h78/h0A/hCF/h88/hC3/hA6/h0D/h0A
RX:%s

E é nesse ponto que surge meu problema… eu gostaria de enviar esse campo TX de uma forma que o usuário pudesse digitar o conteúdo a ser enviado ao laser.

image

Eu tentei alterar o valor de TX utilizando o comando WriteEx de diversas maneiras, porém não obtive sucesso em nenhuma delas :sweat_smile:

segue algumas configurações de TX que tentei:

TX: %Nx
Script WriteEx “/h1B/h0C/h00/hF3/h92/h78/h78/h0A/hCF/h88/hC3/hA6/h0D/h0A”

TX: /h1B/h0C/h00/hF3/h92/h78/h78/h0A%Nx/hA6/h0D/0A
Script WriteEx “/hCF/h88/hC3/hA6” e também: Script WriteEx “CF 88 C3 A6”, tentei até mesmo enviar apenas a letra A e não consegui.

entre outras tentativas frustradas rs.

Existe alguma forma de eu realizar essa ação?

Segue log para análise.

Testei cada Tx pelo menos 1 vez em cada comando N1 ( de 0 a 8) e 1 vez para cada tipo de TX criado na lista de comandos ASCII (5, 6 e 7)

Atenciosamente.

De acordo com o print da documentação, o segundo e o terceiro byte do comando devem informar o “msg length”, ou seja, esses bytes não podem ser fixos, eles devem ser calculados por script para indicar corretamente o comprimento da mensagem a ser enviada ao equipamento. Sendo assim, eles também devem ser parametrizados, usando o tipo de dado “binário” (%b). O comando ficaria assim:

ID = 0
TX = /h1B%b%b/hF3/h92%s/h0A%s/h0D/h0A
RX = %b)0D*1

Antes de enviar o TX, é necessário preencher as 4 variáveis (%b %b %s %s) da mensagem de comando. Para isso, pode-se usar o método WriteEx do Driver de Comunicação com os parâmetros ‘N1=1’ e ‘N3=índice da variável’.

A variável %b do RX vai representar o valor decimal 6 (“OK”) ou 21 (“KO”). O RX pode ser tratado via Tag de Comunicação com ‘N1=0’ e ‘N4=3’ (offset para pular os 3 primeiros bytes da resposta do equipamento). Sugiro deixar essa Tag com a leitura desabilitada (AllowRead=False) e só habilitar no final do script que escreve as variáveis do TX.

Para reproduzir o exemplo da documentação, podemos atribuir o valor “ψæ” através da função Chr() do VBScript.

Por exemplo:

Dim txFieldName
Dim txValue
Dim nSize

txFieldName = "xx"
txValue = Chr(&HCF) + Chr(&H88) + Chr(&HC3) + Chr(&HA6) 'representação do valor "ψæ"
nSize = 5 + Len(txFieldName) + 1 + Len(txValue) 'comprimento da mensagem
    
Application.GetObject("Driver1").WriteEx 1, 0, 0, 0, nSize and &H00FF, 'Lo-byte
Application.GetObject("Driver1").WriteEx 1, 0, 1, 0, nSize / 256 'Hi-byte
Application.GetObject("Driver1").WriteEx 1, 0, 2, 0, txFieldName
Application.GetObject("Driver1").WriteEx 1, 0, 3, 0, txValue
Application.GetObject("Driver1.ReadRX").AllowRead = True

A propriedade AllowRead do Tag “ReadRX” pode ser desabilitada novamente no evento “OnRead” do Tag.

Muito obrigado pela resposta!

Como as strings que precisava enviar para o laser eram todas conhecidas, criei diversos comandos (cada um com seu tamanho) e consegui envia-los ao laser através de botões e o comando WriteEx.

Assim que surgir um tempinho vou realizar o teste de envio com esse comando que você me passou!.

Muito obrigado mesmo!

1 Like