Protocolo de Comunicação PC - HCS 2010
Última atualização: 07.01.2010
Comando Descrição Pergunta do PC (sequência de bytes - hexadecimal) Resposta do Módulo Guarita (sequência de bytes - hexadecimal)
1 Escrever identificação (Linha 2 - Display) 00 + 01 + <20 caracteres ASCII> + <cs> 00 + 01 + 01
2 Escrever identificação (Linha 3 - Display) 00 + 02 + <20 caracteres ASCII> + <cs> 00 + 02 + 02
3 Ler identificação (Linha 3 e 4 - Display) 00 + 03 + 03 00 + 03 + <40 caracteres ASCII> + <cs>
4 Envio automático de evento - 00 + 04 + <cont_at> + <frame de evt. (16 bytes)> + <cs>
5 Ler evt. mais atual, c/ apagamento automático 00 + 05 + 05 00 + 05 + <frame de evt. (16 bytes)> + <cs>
6 Ler número de evts. na memória 00 + 06 + <marca> + <cs> 00 + 06 + <marca> + <quant. parte alta> + <quant. parte baixa> + <cs>
7 Ler número de dispositivos na memória 00 + 07 + 07 00 + 07 + <quant. parte alta> + <quant. parte baixa> + <cs>
8 Apagar todos os eventos 00 + 08 + 08 00 + 08 + 08
9 Programar Módulo Guarita 00 + 09 + <flag setup0> + <vago> + <vago> + <tempo teclas> + <flag setup1> + 00 + 09 + 09
<num_logs> + <tempo_logs> + <cont_at (*)> +
<tempo desp. port> + <hora inicio desp. port> + <hora fim desp. port> + <tempo rele desp. port> + <tempo rele panico> + <função porta serial> +
<tc1-tipo_disp> + <tc1-num_disp> + <tc1-num_saida> + <tc2-tipo_disp> + <tc2-num_disp> + <tc2-num_saida> + <tc3-tipo_disp> + <tc3-num_disp> + <tc3-num_saida> + <tc4-tipo_disp> + <tc4-num_disp> + <tc4-num_saida> + <tc5-tipo_disp> + <tc5-num_disp> + <tc5-num_saida> + <tc6-tipo_disp> + <tc6-num_disp> + <tc6-num_saida> + <cs>
10 Ler programação do Módulo Guarita 00 + 0A + 0A 00 + 0A + <flag setup0> + <vago> + <vago> + <tempo teclas> + <flag setup1> +
<num_logs> + <tempo_logs> + <cont_at (*)> +
<tempo desp. port> + <hora inicio desp. port> + <hora fim desp. port> + <tempo rele desp. port> + <tempo rele panico> + <função porta serial> +
<tc1-tipo_disp> + <tc1-num_disp> + <tc1-num_saida> + <tc2-tipo_disp> + <tc2-num_disp> + <tc2-num_saida> + <tc3-tipo_disp> + <tc3-num_disp> + <tc3-num_saida> + <tc4-tipo_disp> + <tc4-num_disp> + <tc4-num_saida> + <tc5-tipo_disp> + <tc5-num_disp> + <tc5-num_saida> + <tc6-tipo_disp> + <tc6-num_disp> + <tc6-num_saida> + <cs>
11 Escrever data e hora 00 + 0B + <dia> + <mês> + <ano> + <hora> + <min.> + <seg.> + <cs> 00 + 0B + 0B
12 Ler data e hora 00 + 0C + 0C 00 + 0C + <dia> + <mês> + <ano> + <hora> + <min.> + <seg.> + <cs>
13 Acionar saída 00 + 0D + <tipo_disp> + <num_disp> + <rele> + <gera_evt> + <cs>
-<gera_evt> = 00 --> Não gera evento / 01 --> Gera evento
<rele> = bit 7 --> 0 = Principal / 1 = Auxiliar // bits 3..0 --> 1 a 4 = Relés
14 Ler dispositivos (PROGRESSIVO) 00 + 0E + 0E 00 + 0E + <frame de disp. (32 bytes)> + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 5s de time-out): 00 --> OK, enviar próximo frame, se houver
FF --> Erro, repita o envio do frame atual
15 Restaurar do PC ao M.Guarita (Dispositivos) 00 + 0F + <frame de disp. (32 bytes)> + <cs> 00 --> OK, enviar próximo frame, se houver
Obs.: após envio do último frame válido, enviar 1 frame de 32 bytes iguais a "FFh", para finalizar operação. Se for realizado um restore de 12.000 dispositivos, NÃO enviar frame de finalização.
16 Marcar evento automático como lido 00 + 10 + 10 00 + 10 + 10
17 Ler eventos (PROGRESSIVO) 00 + 11 + <marca> + <cs> 00 + 11 + <marca> + <frame de evt. (16 bytes)> + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 5s time-out): 00 --> OK, enviar próximo frame, se houver
FF --> Erro, repita o envio do evt. atual
18 Cadastrar dispositivo 00 + 12 + <frame de disp. (32 bytes)> + <cs> 00 + 12 + <resposta> + <cs>
<resposta> = 00 --> OK / 01 --> mem. cheia / 02 --> disp. já aprendido
19 Apagar dispositivo (todos na unidade) 00 + 13 + <unid_h> + <unid_l> + <bloco> + <tipo_disp> + <cs> 00 + 13 + <resposta> + <cs>
<resposta> = 00 --> OK / 01 --> não encontrado
20 Apagar dispositivo específico 00 + 14 + <tipo_disp> + 00 + <serial_0> + <serial_1> + <serial_2> + <serial_3> + <cs> 00 + 14 + <resposta> + <cs>
<resposta> = 00 --> OK / 01 --> não encontrado
21 Escrever labels (186 labels) 00 + 15 + <8 caracteres> + <cs> 00 --> OK, enviar próximo frame, se houver
22 Ler labels (186 labels) 00 + 16 + 16 00 + 16 + <8 caracteres> + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 5s time-out): 00 --> OK, enviar próximo frame, se houver
FF --> Erro, repita o envio do label atual
23 Apagar evento mais recente 00 + 17 + 17 00 + 17 + 17
24 RESET remoto 00 + 18 + 18 00 + 18 + 18
25 Envio automático de dados do Teclado de Acesso - 00 + 19 + <num. teclado (0..7)> + <unidade (4 bytes)> + <senha (6 bytes)> +
<dia> + <mês> + <ano> + <hora> + <min.> + <seg.> + <cs>
26 *RESERVADO*
27 Ler dispositivo específico 00 + 1B + <tipo_disp> + 00 + <serial_0> + <serial_1> + <serial_2> + <serial_3> + <cs> 00 + 1B + <frame de disp. (32 bytes)> + <cs>
Se não encontrado, envia no lugar do frame apenas um byte: FF
28 Editar dispositivo específico 00 + 1C + 00 + <frame de disp. (32 bytes)>+ <cs> 00 + 1C + <resposta> + <cs>
<resposta> = 00 --> OK / 01 --> disp. não encontrado
29 Atualizar Receptores 00 + 1D + 1D 00 + 1D + <resposta> + <cs>
<resposta> = 00 --> OK / FF --> Erro
30 *VAGO*
31 Ler eventos (PACOTES) 00 + 1F + 1F 00 + 1F + [67 x <frame de evt. (16 bytes)>] + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 15s time-out): 00 --> OK, enviar próximo pacote
FF --> Erro, repita o envio do pacote atual
32 Ler dispositivos (PACOTES) 00 + 20 + 20 00 + 20 + [33 x <frame de disp. (32 bytes)>] + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 15s time-out): 00 --> OK, enviar próximo pacote
33 Envio automático de eventos (PACOTES) - 00 + 21 + [Y x <frame de evt. (16 byte)>] + <cs> Onde Y depende da configuração de envio do guarita: # Máximo número de logs: 67
# Máximo tempo: 99 minutos
34 Ler labels (PACOTES) 00 + 22 + 22 00 + 22 + [134 x <8 caracteres>] + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 15s time-out): 00 --> OK, enviar próximo pacote
FF --> Erro, repita o envio do pacote atual
35 Ativar modo remoto (Receptores) - 90 segundos 00 + 23 + <tipo_disp> + <num_disp> + <cs> 00 + 23 + 23
Para ativar TODOS ao mesmo tempo, <tipo_dip> = FF e <num_disp> = FF
36 *RESERVAOD*
[37] Atualizar Biometria 00 + 25 + 25 00 + 25 + <resposta> + <cs>
<resposta> = 00 --> OK / FF --> Erro
38 Ler versão do Módulo Guarita 00 + 26 + 26 00 + 26 + <versao1> + <versao2> + <release> + <build> + <build2> + <cs>
<versao1>, <versao2>, <release>, <build> e <build2> em ASCII
[39] Inicio/Fim Biometria 00 + 27 + <inicio_fim> + <cs> 00 + 27 + <cs>
40 Bytes dados 00 + 28 + <contador high> + <contador low> + <<frame>> + <cs> 00 + 28 + <cs>
41 Sistema Modular 00 + 29 + <endereço> + <comando> + <dado> + <N> + <cs> 00 + 29 + <endereço> + <comando> + <dado> + <N> + <cs>
<endereço> = 0~255
<comando> <comando>
0x00 = leitura de I/O <N> 0x00 = estado da I/O lida
0x01 = SET Out <N> 0x01 =
---0x02 = CLEAR Out <N> 0x02 =
---0x03 = SET Temp Out <N> 0x03 =
---0x04 = Config modo (<dado>) saída <N> 0x04 =
---0x05 = Config nº (<dado>) saída <N> 0x05 =
---0x06 = Config end (<dado>) saída <N> 0x06 =
---0x07 = Lê config modo saída <N> 0x07 = modo (<dado>) da saída <N>
0x08 = Lê config nº saída <N> 0x08 = nº (<dado>) da saída <N>
0x09 = Lê config end saída <N> 0x09 = end (<dado>) da saída <N>
0x0A = leitura das 8 entradas do slave <endereço> 0x0A = estado bit a bit das saídas do slave <endereço>
- 0x0B = estado da saída <N> do slave <endereo> (envio automático)
<N> = número da saída
42 Dispositivo não cadastrado Chave do Guarita na posição Prog. 00 + 2A + <tipo_disp> + <serial_0> + <serial_1> + <serial_2> + <serial_3> + <conta_hi> +
<conta_lo> + <flag> + <cs>
<flag> = bit 3 --> bateria / bits 2..0 --> botão
43 Interromper time-out dos comandos 00 + 2B + 2B
-[44] Digital não cadastrada - 00 + 2C + <tipo_disp> +<num_disp> + <num_saida> + <tipoBio> + <template (256/384 bytes)> + <cs>
45 Ler arquivos do Cartão SD 00 + 2D + <index> + <ano> + <mês> + <dia> + <hora> + <min> + <seg> + <cs> 00 + 2D + <index> + <linha_arq> + <cs>
46 Disp. não cadastrado - RECEPTOR (CT, TA e TP) - 00 + 2E + <tipo_disp> + <num_disp> + <serial_0> + <serial_1> + <serial_2> + <serial_3> + <flags> + <cs> <flags> = bits 6,5,4,3 --> sensor (4..1) - 0 = Aberto e 1 = Fechado / bits 2,1,0 --> número leitora (1..4)
[47] Cadastrar template biometria 00 + 2F + <tipoBio> + <idH> + <idL> + <template (384 bytes) + <cs> 00 + 2F + 2F
[48] Apagar template biometria 00 + 30 + <n485> + <tipoBio> + <idH> + <idL> + <cs> 00 + 30 + 30
[49] Apagar todos os templates 00 + 31 + <n485> + <tipoBio> + <cs> 00 + 31 + 31
[50] Ler número de templates na DataFlash 00 + 32 + 32 00 + 32 + <quant. parte alta> + <quant. parte baixa> + <cs>
Sem DataFlash --> <quant. parte alta> = FF e <quant. parte baixa> = FF
[51] Fazer backup da DataFlash ao PC (templates) 00 + 33 + 33 00 + 33 + <idH> + <idL> + <template (384 bytes) + <cs>
Após o envio, o guarita aguarda duas respostas possíveis (c/ 5s time-out): 00 --> OK, enviar próximo template, se houver
FF --> Erro, repita o envio do template atual
[52] Cadastrar/Restaurar do PC à DataFlash (templates) 00 + 34 + <idH> + <idL> + <template (384 bytes)> + <cs> 00 + 34 + <resposta> + <cs>
<resposta> = 00 --> OK / FF --> Sem DataFlash ou DataFlash cheia
53 Leu cartão? 00 + 35 + <n485> + <cs> Não --> 00 + 35 + <n485> + 00 + <cs>
Sim --> 00 + 35 + <n485> + 01 + <serial_0> + <serial_1> + <serial_2> + <serial_3> + <cs>
54 Leu biometria? 00 + 36 + <n485> + <tipoBio> + <cs> Não --> 00 + 36 + <n485> + <tipoBio> + 00 + <cs>
Sim, cad. --> 00 + 36 + <n485> + <tipoBio> + 4x [ ID ] + <cs>
Sim, não cad. --> 00 + 36 + <n485> + <tipoBio> + Nx [ bytesTemplate ] + <cs>
55 Leu teclado? 00 + 37 + <n485> + <cs> Não --> 00 + 37 + <n485> + 00 + <cs>
Sim --> 00 + 37 + <n485> + 01 + <unid_h> + <unid_l> + + <senha_0> + <senha_1> + <senha_2> + <cs>
[56] Aprender biometria 00 + 38 + <n485> + <tipoBio> + <comandoCadastro> + <cs> 00 + 38 + <n485> + <tipoBio> + <comandoCadastro> + <status> + <idH> + <idL> + <cs>
<comandoCadastro> = 00 --> 1º template / 01 --> 2º template / 02 --> cancela <status> = 00 –-> OK / 01 --> Erro
[57] Ler template biometria 00 + 39 + <n485> + <tipoBio> + <idH> + <idL> + <cs> 00 + 39 + <n485> + <tipoBio> + <idH> + <idL> + <template (256/384 bytes)> + <cs>
[58] Identificar template biometria 00 + 3A + <n485> + <tipoBio> + <template (256/384 bytes)> + <cs> Não = 00 + 3A + <n485> + <tipoBio> + 00 + 00 + 00 + <cs>
Sim = 00 + 3A + <n485> + <tipoBio> + 01 + <idH> + <idL> + <cs>
[59] Solicitar ID Digital vago 00 + 3B + 3B 00 + 3B + <idH> + <idL> + <cs>
[60] Cadastrar Biometria pelo PC (c/ Mód. Biométrico) 00 + 3C + <frame de disp. (32 bytes)>+ <cs> 00 + 3C + 3C
61 Ler versão do Receptor 00 + 3D + <tipo_disp> + <num_disp> + <cs> 00 + 3D + <tipo_disp> + <num_disp> + <versao1> + <versao2> + <release> + <build> + <build2> + <cs>
<versao1>, <versao2>, <release>, <build> e <build2> em ASCII
[62] Envio autom. do ID gerado (Mód. Biométrico) Chave do Guarita na posição Prog. 00 + 3E + <idH> + <idL> + <cs>
64 Entrar em Modo Bootloader (Atualização Firmware) 00 + 40 + 40 00 + 40 + 40
<tipo_disp> = 01 --> RF / 02 --> TA / 03 --> CT / 04 --> CA / 05 --> BM / 06 --> TP / 07 --> TC Limite Dispositivos (Guarita e Receptor Multifunção) = 12.000
<num_disp> = 0 .. 7 --> 1 a 8 Limite Dispositivos (Receptor Mini) = 4.090
<num_saida> = 00 --> Nenhum / 01 . .04 --> 1 a 4 Limite Eventos = 8.192
<tipoBio> = 00 --> Suprema (384 bytes válidos) / 01 --> Miaxis (256 bytes válidos + 128 bytes "00h") <n485> = 0..255
<marca> = 00 --> não lidos / 01 --> lidos / 02 --> todos <bio_ct> = 00 --> busca por ID digital / 01 --> busca por Cartão <cs> = Checksum (soma dos bytes anteriores)
(*) - Byte <cont_at> - Contador de atualizações - não deve ser modificado
Comandos em vermelho --> Não implementados
Comandos em azul --> Não testados
Frame de evento (log): <frame de evt. (16 bytes)>
Byte 1 (Alta) Tipo de evento: 0 = Dispositivo acionado
1 = Passagem 2 = Equipamento ligado 3 = Evento desperta-porteiro
4 = Mudança da programação pelo usuário 5 = Acionamento de saídas pelas teclas do módulo 6 = Acionamento pelo PC (Ver comando 13) 7 = Receptores não atualizados
8 = Tentativa de clonagem 9 = Evento de pânico 10 = *VAGO* 11 = Efetuado restore 12 = TAG sem vaga
13 = Backup automático realizado 14 = Backup manual realizado
Byte 1 (Baixa) Número serial - ser_0 se <tipo_disp> = BM ou CA então ser_0 = 0 Byte 2 Número serial - ser_1 se <tipo_disp> = BM ou CA então ser_1 = 00 Byte 3 Número serial - ser_2 se <tipo_disp> = BM ou CA então ser_2 = idH Byte 4 Número serial - ser_3 se <tipo_disp> = BM ou CA então ser_3 = idL
Byte 5 Hora Byte 6 Minuto Byte 7 Segundo Byte 8 Dia Byte 9 Mês Byte 10 Ano
Byte 11 (Alta) Tipo de dispositivo 1 -->RF / 2 --> TA / 3 --> CT / 4 --> CA / 5 --> BM / 6 --> TP Byte 11 (Baixa) Número do dispositivo 0..7
Byte 12 Unid_H BCD
Byte 13 Unid_L BCD
Byte 14 Bloco A~Z
Byte 15 Flags (bits 7654 3210) (*) bit 7 --> bateria / bit6 --> <marca> / bit 5..4 --> saída / bit 3 --> digital / bits 2,1,0 --> tecla do guarita (0~5)
Byte 16 Tipo = 3 e Tipo 9 FF = Pânico / D. Porteiro não atendido
(*) Byte 15 - Flags
Para evento Tipo 1 - bits 2,1,0: Para evento Tipo 0 e Disp. igual a BM - bit 3: Para evento Tipo 0 e Disp. Igual a TA, CT ou TP:
0 = E1A / 1 = S1A / 2 = E2A / 3 = S2A / 4 = E1B / 5 = S1B / 6 = E2B / 7 = S2B 0 = Digital (Serial = ID) bit 0 = Sensor 1 = 0 --> Aberto / 1 --> Fechado
E = Entrada (ou Fechado - caso Passagem não CA) 1 = Cartão (Serial = Serial CT) bit 1 = Sensor 2 = 0 --> Aberto / 1 --> Fechado
S = Saída (ou Aberto - caso Passagem não CA) bit 2 = Sensor 3 = 0 --> Aberto / 1 --> Fechado
bit 3 = Sensor 4 = 0 --> Aberto / 1 --> Fechado bit 3 = 0 --> Pass. / 1 --> Dupla Pass.
Bits 2, 1 e 0 do Byte 15 (Flags) do Frame de Evento (log)
E1
E2
E3
E4
0
2
4
6
1
3
5
7
ENTRA
0
2
4
6
SAI
1
3
5
7
E1 (E3) >> E2 (E4)
E2 (E4) >> E1 (E3)
Modo (Multifunção/Mini)
0
2
4
6
ENTRA
SAI
BORDA
PASSA
Frame de dispositivo: <frame de disp. (32 bytes)>
Byte 1 (Alta) tipo dispositivo 1 --> RF / 2 --> TA / 3 --> CT / 4 --> CA / 5 --> BM / 6 --> TP / E --> Apagado Byte 1 (Baixa) ser_0
Byte 2 ser_1
Byte 3 ser_2
Byte 4 ser_3
Byte 5 cnt_h se <tipo_disp> = BM ou CA então cnt_h = idH
Byte 6 cnt_l se <tipo_disp> = BM ou CA então cnt_l = idL
Byte 7 unid_h BCD
Unidade
unid_h
unid_l
Byte 8 unid_l BCD
1
00h
01h
Byte 9 bloco A~Z
10
00h
0Ah
Byte 10 *RESERVADO* Sempre "FFh"
923
09h
17h
Byte 11 bits dos Receptores
1285
0Ch
55h
Byte 12 a 31 identificação (20 caracteres)
Byte 32 (Alta) tipo (para BM ou CA) / último acionamento bit7 = 0 --> Normal ou 1 --> Pânico / bit6..4 = 1 a 4 (saídas)
Byte 32 (Baixa) status bateria 0 a F --> Boa a Ruim
Bytes Guarita (comandos 9 e 10)
bit7..6 --> filtro de evts. externo 00 --> Nível 1 / 01 --> Nível 2 / 10 --> Nível 3
bit5 --> pânico B4 0 --> OFF / 1 --> ON
bit4 --> pânico B3 0 --> OFF / 1 --> ON
bit3 --> pânico B2 0 --> OFF / 1 --> ON
bit2 --> pânico B1 0 --> OFF / 1 --> ON
bit1 --> desperta porteiro silencioso 0 --> OFF / 1 --> ON
bit0 --> pânico silencioso 0 --> OFF / 1 --> ON
bit 5 = bip dupla passagem = 0 --> OFF/ 1 --> ON
bit 4,3,2 = baudrate CAN = 000 --> 250 kbps / 001 --> 125 kbps (padrão) / 010 --> 50 kbps / 011 --> 20 kbps
bit 0 = modo ônibus = 0 --> OFF / 1 --> ON
Quantidade de eventos a acumular - 00 --> OFF / 01 a 43 --> 1 a 67
Tempo em minutos para enviar acumulados - 00 --> OFF / 01 a 63 --> 1 a 99 min. 0--> OFF / 1..99 --> segundos
0 --> 9.600 bps / 1 --> 19.200 bps / 2 --> 115.200 bps
Exemplos de Unidade
<função porta serial> <flag setup1>
<num_logs> <tempo_logs> <tempo teclas>