frente

Terminais Sem Fios X64




Ligação Restaurantes





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.





Mapa das posições:


0 a 9

Reservadas


11 a 13

NAO USADO


14

"Mesa"


15

"Prato Qtd"


16

"Enviando"


17

NAO USADO


18

NAO USADO


19

"Nº Pessoas" ou "LUGAR"


20

"Outras"


21 a 27

Nome das Funções "Outras"


28 a 29

"Reservados"


30

Metodos de Pagamento


31

"Imprime s/n"


32

Prompt "?" ( Por defeito )


33 a 3071

Descritivos de artigos de 1 a 3039


3072

1 - Pedido


3073

2 - Anulação


3074

3 - Subtotal


3075

4 - Conta


3076

5 - Transferencias


3077

6 - Pagamento Parcial


3078

7 - Outros


3079

8 - Desconto


9
9 - Configuracao


3080

1 - Comando


3081

2 - Licenca


3082

3 - Config.A


3083

4 - Config.B


3084

5 – Config.C


3085

6 - Receber PLUs


3086

7 - Apagar PLUs


10
8 - Envia PLUs+C


3087

Desistir [Enter]




3088
Array de páginas
(tipo de)
bytes 0 a 15

(...)
(...)

3103
bytes 240 a 255




3104
Array de páginas
(apontador para)
inteiros de 32 bits 0 a 3

(...)
(...)

3167
inteiros de 32 bits 252 a 255




3168
Indice no array de páginas para cada artigo
bytes 0 a 15

(...)
(..)

3358
bytes 1024 a 1039




3999
4 bytes c/ o nº de descritivos a receber











    
Página principal

Contactos

Download

Manual de interligação






Restaurantes