- Ligação directa sem DLL c/ Antenas Vers. 6
- Na Antena versão
6 , a comunicação entre o PC e a antena é feita nos 2 sentidos. O
protocolo utilizado é o mesmo mas por pacotes.
-
- A comunicação
entre o PC e a antena passa a ser por pacotes e não por bytes.
Depois de inicializada a Antena está sempre em recepção. Para configurar
a antena para trabalhar com pacotes deve-se enviar:
-
Estando a antena em 'Menu'
-
- chr('-') + chr('<') +chr('P')+chr(2)
- Para desactivar
deve-se enviar
- chr('-') +
chr('<') +chr('P')+chr(0)
- De notar que esta string deve ser enviada como um pacote.
- A partir deste
momento
a antena não volta a 'Menu'
Os pacotes são constituidos da seguinte forma:
chr('-')+chr('>')+chr(tamanho)(byte)+DADOS(byte)+chr(Numero da
mensagem)(byte) +chr(checksum)(byte)
tamanho : Tamanho dos DADOS
checksum : Inclui tamanho , dados e o numero da mensagem.
A resposta a cada pacote é sempre '->OK'+chr(Numero da mensagem)
Os pacotes são numerados ,a antena fica sempre á espera da resposta do
PC, não recebendo novas mensagens enquanto o PC não responder. Este
efeito é desejado para o caso de o cabo série sair os comandos pararem
de funcionar.
Os dados são os mesmos que são usados nas versões anteriores.
Exemplo: Para enviar uma mensagem para o comando devo enviar:
chr('-')
chr('>')
chr(36) Tamanho da mensagem
chr ( Num. Comando a enviar mensagem Low Byte )
- chr ( Num. Comando a enviar mensagem High
Byte )
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
- 32 Bytes ( Texto da mensagem )
- chr(Numero da mensagem) por exempo 1
chr( checksum ) 1 Byte com a soma de todos os bytes da mensagem
incluido o tamanho e o numero da mensagem.
A Antena vai responder com :
chr('-')
chr('>')
chr('O')
chr('K')
- chr(Numero da mensagem)
Em seguida vai enviar a mensagem por radio.
No Sentido inverso passa-se o mesmo.
A unica situação a ter em conta é que se a antena enviar um pedido
para o PC e o PC estiver á espera de uma resposta a uma mensagem, o
pedido deve ser interpretado como um pedido.
O Exemplo em VB mostra bem esta situação.
Receber por RS232:
- Chr('-')+Chr('>')+Chr(Size)+
- ·Chr(®)+Chr(®)
-
- ·Chr ( Função)
- P Pedir Num. Pessoas
- A anular
- S subtotal Tipo Pagamento
- C conta Tipo Pagamento+ Factura (S/n)
- T transf Mesa2
- G pag_parc
- D desconto % Desconto
- R Resposta de Confirmação da mensagem.
- ·Chr ( Num. Comando Low Byte )
- ·Chr ( Num. Comando High Byte )
- ·Chr ( Num. Licença Low Byte )
- ·Chr ( Num. Licença High Byte )
- ·Chr ( Num. Mensagem Low Byte)
- ·Chr ( Num. Mensagem High Byte)
- ·Chr ( Num. Pratos Low Byte)
- ·Chr ( Num. Pratos High Byte)
- ·Chr ( Num. Mesa Low Byte)
- ·Chr ( Num. Mesa High Byte)
- ·Chr ( Auxiliar Low Byte )
- ·Chr ( Auxiliar High Byte)
.Chr (Lugar 1 Low Byte) SÓ NO PROTOCOLO_DADOS 2
.Chr (Lugar 1 High Byte) SÓ NO PROTOCOLO_DADOS
2
.Chr (Lugar 2 Low Byte) SÓ NO PROTOCOLO_DADOS 2
.Chr (Lugar 2 High Byte) SÓ NO PROTOCOLO_DADOS
2
-
- For n=1 to Num.Pratos
- ·Chr ( Prato Low Byte)
- ·Chr ( Prato High Byte )
- ·Chr ( Quantidade Low Byte )
- ·Chr ( Quantidade High Byte )
- next
- +Chr(Numero Mensagem)
- +Chr(Checksum)
PC DEVE RESPONDER COM '->OK'+chr(Numero da mensagem)
-
- Codigo de C
Equivalente
-
*Funcao=msg[0]; *terminal=msg[1]+msg[2]*256; *licenca=msg[3]+msg[4]*256; *msg_number=msg[5]+msg[6]*256; *pratos=msg[7]+msg[8]*256; *mesa1=msg[9]+msg[10]*256; *AuxData=msg[11]+msg[12]*256; ct=13; if(ActiveProtocolo==2) { *lugar1=msg[13]+msg[14]*256; *lugar2=msg[15]+msg[16]*256; ct+=4; } if(ActiveProtocolo>=3) { *mesa1=*((int *)&(msg[13])); *mesa2=*((int *)&(msg[17])); *lugar1=*((int *)&(msg[21])); *lugar2=*((int *)&(msg[25])); ct+=16; }
if(ActiveProtocolo>=4) { memcpy(st_mesa1,&(msg[ct]),13); memcpy(st_mesa2,&(msg[ct+13]),13); ct+=26; }
Comandos Antena Versão 6
- "-<S"+chr(1)
Protocolo_dados 1
- "-<S"+chr(2)
Protocolo_dados 2
-
"-<P"+chr(0) Sem Pacotes de dados, Sem Header
"-<P"+chr(1)
Sem Pacotes de dados, Com Header "-->"
"-<P"+chr(2)
Pacotes de dados, activo
"-<?" Pergunta Versão da antena. A reposta é um byte. Nas
versões antigas a Resposta é "Menu.."
-
- Enviar plu
para o comando
- chr(1)
- chr ( Num. Bloco
a programar Low byte)
- chr ( Num. Bloco a programar High byte)
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
- 16 Bytes (
texto)
(Se os ultimos 4 bytes forem digitos simbiliza uma familia exp. "CARNE
0100")
Em modo de pacotes de dados para enviar um segundo plu deve-se repetir
o comando.
- Enviar uma mensagem
chr (3)
- chr ( Num. Comando a enviar mensagem Low
Byte
)
- chr ( Num. Comando a enviar mensagem High
Byte )
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
- 32 Bytes ( Texto da mensagem )
Enviar uma mensagem especial para por em modo upload
plus
(Dentro da mensagem)
- chr(1)
chr(6)
Enviar uma
mensagem especial para por em modo upload plus e limpar todos os PLUS
( versão >
6.918 )
(Dentro da mensagem)
- chr(1)
chr(8)
-
Enviar uma mensagem especial para configurar byte hardware
A
(Dentro da mensagem)
chr(1)
chr(3)
chr(byte de hardware)
Descrição dos bits do byte de hardware
+1 Ligar a luz
- +2 Receptor (bit 1)
- +4 Pede Lugar (bit 2)
- +8 Nao faz Reset ( Nao actualiza os blocos
reservados )
- +16 Pede Dinheiro Visa Multibanco
- +32 Imprimir (S/N)
- +64 Pede desperdicios (S/N)
- +128 0-Anulação parcial; 1-Anulação
completa
-
Enviar uma mensagem especial para configurar byte hardware
B
(Dentro da mensagem)
chr(1)
chr(7)
chr(byte de hardware)
Descrição dos bits do byte de hardware
+ Numero de Retransmissores 0 Defeito
+8 Nao protege teclado
+16 Nao permite editar directamente os plus
+32 Quantidade por defeito a 0
+64 Envia mensagem sempre que acorda
+128 Pede Lugar
-
Enviar os limites da base, Nº Licenciamento e Comando
chr(8)
- chr(Low Byte ( Limite inferior Licenca ))
- chr(High Byte ( Limite inferior Licenca ))
- chr(Low Byte ( Limite superior Licenca )
- chr(High Byte ( Limite superior Licenca ))
- chr(Low Byte ( Limite inferior N. Comando
))
- chr(High Byte ( Limite inferior N. Comando
))
- chr(Low Byte ( Limite superior N. Comando
))
- chr(High Byte ( Limite superior N. Comando
))
-
- Enviar dados de uma mesa para um comando
chr(10)
chr ( Num. Comando a configurar Low Byte )
- chr ( Num. Comando a configurar High Byte )
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
-
- chr( Num.Pratos)
- chr( Mesa Low byte)
- chr( Mesa High Byte)
if(ActiveProtocolo<2)
{
memcpy(BackMessage[BackMessageWrite &
0xff].message+8,&AuxData,1);
memcpy(BackMessage[BackMessageWrite & 0xff].message+9,&MsgCt,1);
}
if(ActiveProtocolo==2)
{
memcpy(BackMessage[BackMessageWrite &
0xff].message+8,&AuxData,2);
memcpy(BackMessage[BackMessageWrite &
0xff].message+10,&Lugar1,2);
memcpy(BackMessage[BackMessageWrite &
0xff].message+12,&Lugar2,2);
memcpy(BackMessage[BackMessageWrite &
0xff].message+14,&MsgCt,1);
}
if(ActiveProtocolo==3)
{
memcpy(BackMessage[BackMessageWrite &
0xff].message+8,&AuxData,2);
memcpy(BackMessage[BackMessageWrite & 0xff].message+10,&mesa,4);
memcpy(BackMessage[BackMessageWrite & 0xff].message+14,&mesa,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+18,&Lugar1,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+22,&Lugar2,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+26,&MsgCt,1);
}
if(ActiveProtocolo==4)
{
memcpy(BackMessage[BackMessageWrite &
0xff].message+8,&AuxData,2);
memcpy(BackMessage[BackMessageWrite & 0xff].message+10,&mesa,4);
memcpy(BackMessage[BackMessageWrite & 0xff].message+14,&mesa,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+18,&Lugar1,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+22,&Lugar2,4);
memcpy(BackMessage[BackMessageWrite &
0xff].message+26,&MsgCt,1);
memcpy(BackMessage[BackMessageWrite & 0xff].message+27,st_mesa1,13);
memcpy(BackMessage[BackMessageWrite & 0xff].message+40,st_mesa2,13);
}
for N = 1 to Num. Pratos
- chr( Prato Low Byte)
- chr( Prato High Byte)
- chr( Qt Low Byte)
- chr( Qt High Byte)
- next
-
-
- Ligação directa sem DLL Antenas Vers. <6
-
Instalação:
-
- Ligar a base ao PC utilizando a porta
série.
-
- Comunicar com a base a “19200,N,8,2”
-
-
- Base:
-
- Depois de Ligada arranca em modo de
recepcao.
- Para sair do modo de recepcao basta enviar
um caracter pelo RS232.
-
- Entra em modo "Menu"
- Sempre que a base entra em modo Menu envia
"Menu" para o PC
-
- Configuracao da base:
-
- Enviar por RS232:
-
- Chr(‘-‘)+Chr(‘-‘)+Chr(‘>’) (Bytes de
sincronismo)
-
-
- ·Chr (1)
- Entra em mode de Upload
- LOOP1
- chr ( Num. Bloco a programar Low byte)
- chr ( Num. Bloco a programar High byte)
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
- 16 Bytes ( texto) (So sao visiveis os
primeiros 13)
- PAUSA
- Para sair do modo de Upload deve-se enviar
Chr(2)
- em qualquer posicao do texto.
- GOTO LOOP1
-
- ·Chr (2)
- Entra em mode de Recepcao
- ·Chr (3)
- Enviar uma Mensagem
- chr ( Num. Comando a enviar mensagem Low
Byte
)
- chr ( Num. Comando a enviar mensagem High
Byte )
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
- 32 Bytes ( Texto da mensagem )
-
- A base automaticamente entra em Recepcao,
recebendo
- a confirmacao da mensagem.
-
- ·Chr ( 1 ) MENSAGEM ESPECIAL (1ª
caracter do texto da mensagem)
-
- ·Chr ( 3 )
- Conf. Hardware à Chr (
+1 Luz (bit 0)
- +2 Receptor (bit 1)
- +4 Pede N. Pessoas (bit 2)
- +8 Nao faz Reset ( Nao actualiza os blocos
reservados )
- +16 Pede Dinheiro Visa Multibanco
- +32 Imprimir (S/N)
- +64 Pede desperdicios (S/N)
- +128 0-Anulação parcial; 1-Anulação
completa
- )
- ·Chr ( 6 )
- Entra em Download
- + Lixo para completar os 32 bytes
- ---
- A base automaticamente entra em Recepcao,
recebendo
- a confirmacao da configuracao.
- ·Chr (4)
- Enviar dados de uma mesa
- chr ( Num. Comando a configurar Low Byte )
- chr ( Num. Comando a configurar High Byte )
- chr ( Num. Licenciamento Low byte)
- chr ( Num. Licenciamento High byte)
-
- chr( Num.Pratos)
- chr( Mesa Low byte)
- chr( Mesa High Byte)
- chr( Num. Pessoas)
-
- for N = 1 to Num. Pratos
- chr( Prato Low Byte)
- chr( Prato High Byte)
- chr( Qt Low Byte)
- chr( Qt High Byte)
- next
-
- ·Chr (8)
- Enviar Limites
- Formato 8 bytes:
-
- Low Byte ( Limite inferior Licenca )
- High Byte ( Limite inferior Licenca )
- Low Byte ( Limite superior Licenca )
- High Byte ( Limite superior Licenca )
-
- Low Byte ( Limite inferior N. Comando )
- High Byte ( Limite inferior N. Comando )
- Low Byte ( Limite superior N. Comando )
- High Byte ( Limite superior N. Comando )
-
- A base automaticamente entra em Recepcao
-
- Receber por RS232:
-
- ·Chr(®)+Chr(®)
-
- ·Chr ( Função)
- P Pedir Num. Pessoas
- A anular
- S subtotal Tipo Pagamento
- C conta Tipo Pagamento+ Factura (S/n)
- T transf Mesa2
- G pag_parc
- D desconto % Desconto
- R Resposta de Confirmação da mensagem.
- ·Chr ( Num. Comando Low Byte )
- ·Chr ( Num. Comando High Byte )
- ·Chr ( Num. Licença Low Byte )
- ·Chr ( Num. Licença High Byte )
- ·Chr ( Num. Mensagem Low Byte)
- ·Chr ( Num. Mensagem High Byte)
- ·Chr ( Num. Pratos Low Byte)
- ·Chr ( Num. Pratos High Byte)
- ·Chr ( Num. Mesa Low Byte)
- ·Chr ( Num. Mesa High Byte)
- ·Chr ( Auxiliar Low Byte )
- ·Chr ( Auxiliar High Byte )
-
- For n=1 to Num.Pratos
- ·Chr ( Prato Low Byte)
- ·Chr ( Prato High Byte )
- ·Chr ( Quantidade Low Byte )
- ·Chr ( Quantidade High Byte )
- next
-
Importante
-
- Quando um comando envia uma mensagem para
uma base, se o comando não receber uma confirmação da base ,
automaticamente o comando volta a enviar o pedido.
-
- Em relação ao contrário é um pouco mais
complicado.
-
- 1.O comando só aceita mensagens nos
segundos a seguir a ter enviado um pedido
- 2.Se o comando receber uma mensagem envia
para a base uma confirmação (Função ‘R’)
- 3.Se o comando não receber a mensagem nada
acontece. Esto implica que o programa do PC se não receber mensagens de
confirmação para cada mensagem enviada deve repetir o envio com
intervalos razoaveis.
- 4.Ter em conta que não se deve saturar o
ambiente
ficando sempre a enviar.
-
|