• Welcome to LusoRobótica - Robótica em Português.
 

Leitura de dados por Porta Serie

Started by filjoa, 18 de January de 2024, 16:59

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

filjoa

Viva

Precisava de ajuda para interagir com um equipamento eletrónico que tem porta serie...

Trata-se de uma central de incêndio, e por porta serie, sempre que faço uma operação, ela é reportada por na porta, mas certos inventos, não sei lá porquê, não aparecem.

Então precisava de programar, um comando num terminal que fosse capaz de saber o estado do painel de x em x tempo, mas já não faço isto à tanto tempo, que não faço ideia do que escrever no terminal para que me seja devolvido um comando.

Já agora que programa usam para testar comunicação serie? Eu estou a usar o Putty.

Obrigado



KammutierSpule

A minha sugestão, para a funcionalidade pretendida, o mais fácil nos dias de hoje, é usar o chatGPT e pedir que ele faça um script em Python.
Costuma dar bons resultados. (correr o script Python em Linux ou perceber como endereçar a porta serie)

jm_araujo

#2
Costumo usar o realterm, não que goste muito dele, mas porque não consegui encontrar melhor. Gostava muito do Bray++ Terminal (péssimo nome) até descobrir que perdia dados, as dores de cabeça que me deu.
Quando ao comando, isso é específico do painel, tens de ter o manual do mesmo para saber a que mensagens é que responde. Depois a recomendação de usar Python é boa, presta-se bem a esses trabalhos, e nem precisas de ChatGPT, é fácil de usar. Linux ou Windows tanto faz, corre bem nos dois, só muda o nome da porta série

dropes

Realterm faz o serviço bem.

Além de ser fácil a configuração da porta, também captura para um ficheiro qualquer dado que receba (caso se pretenda).

filjoa

#4
desde já obrigado malta...

mas por agora apenas queria ter no terminal os dados do painel.

Imagino que algo neste manual o faça, tipo o envio de um Hexadecimal ou String, mas eu neste momento nao estou a dar com o principio básico do "olá mundo" que é saber o que enviar no terminal para obter uma resposta da central...

Por exemplo, quando no manual está isto "PACKET_TYPE_QUERY_MONITORING", como é suporto enviar isto para obter uma resposta?

obrigado

jm_araujo

#5
A minha bola de cristal está com problemas, não encontro a versão do manual dum equipamento que não indicaste marca nem modelo... ;D

Há-de estar indicado em algum outro lado do manual, ou numa referencia ao protocolo.
É impossível qualquer um de nós saber sem partilhares mais informação, no mínimo uma versão do manual, nem que seja no site do fabricante...

Isso que mostras é o mesmo que eu te disser para falar comigo só tens de ligar para o contacto "JOSE ARAUJO" guardado no telefone. Se não te indicar qual o meu número para poderes primeiro criar o contacto, ficas na mesma, né?

filjoa

Viva,

Desculpa amigo, mas pensei que tinha referido lolol

Trata-se de uma central de incendio kentec SyncroAS.

No manual nao fala sobre como retirar informação da central, apenas no ficheiro que coloquei em anexo no primeiro tópico, é que refere os comandos...

Eles no site tem um sistema para interligação com o equipamento que se chama Vizulinx, que se liga por porta serie e reporta num terminal "alguma" informação, tenho aqui comigo, mas nao consigo ter toda a informação que esta no painel, por exemplo, sub-enderecos, ativação e desactivação de equipamentos.

Entretanto decidi ligar um cabo de serie direto a porta de programação da central de incêndio e abrindo um terminal, verifico "quase" tudo... alarmes, desativacoes, etc...

No entanto, quando desativo um equipamento, aparece no terminal, dispositivo X desativado,  mas quando o volto a ativar, nao aparece a informação dessa desactivação,  tal como falhas que aparecem e é notificado na porta, mas a reposição, já nao aparece..

Isto tudo, porque querem que estas informações apareçam num quadro sinotico, controlado por um automato, que espera que eu lhe dê o estado "em tempo real" da central.

Como esse ficheiro que coloquei em anexo foi fornecido por o fabricante,  como sendo os comandos serie que o Vizulinx utiliza, penso eu que eu enviando algum desses comandos, a central me devolva alguma informação.

A minha questão é que nao sei o que enviar para a central... envio alguma coisa do tipo 0x01? Mando uma string?

Será que consegui explicar a minha problemática?  :P

Obrigado

Entr

jm_araujo

Primeiro desculpa porque a primeira vez respondi no telemóvel e não vi o anexo, e nas resposta seguinte não voltei atrás. Erro meu.

O manual tem indicado no capitulo 12 o que tens de enviar.
Tens de fazer experiências a ver ao que responde, mas deve de ser qq coisa como
0xdb - sincroniza
0x00 - nº ordem (não sei se é obrigatório incrementar a cada mensagem enviada, dizem para o fazer mas não sei se é mandatório)
0xff - ou será 0x00? tens de testar: Each packet has a Node Address from 1 to 127 as part of the header. The fire panel uses this
to decide whether to deal with the message directly or to pass it over the network. A Node
Address of 0xff always refers to the node connected directly to the PC. A Node Address of 0
is a global address.

0x05 - "PACKET_TYPE_QUERY_PANEL_DATA" , responde com uma carrada de dados, vê se são os que queres
0x00 - sem dados
0x04 - checksum (soma dos anteriores sem a sincronização)

Ou seja, tens de enviar a mensagem "0xdb 0x00 0xff 0x05 0x00 0x04" (19200-8N1) para fazer o PACKET_TYPE_QUERY_PANEL_DATA.
Se tiveres resposta tens de ler o resto do capitulo para a descodificar :D


Depois de conseguires que o equipamento fale contigo, tens de ver quais são as mensagens que precisas enviar para teres os dados que queres.

Se isto tudo falhar, tens outra solução: inspecionar as comunicações entre o visulinx e a central, seja com um cabo com derivação para outra porta série, ou com software que permite interceptar portas série. Não encontro nenhum gratuito mas com este deves safarte: https://freeserialanalyzer.com/ (5 sessões por dia de 15 minutos cada)

filjoa

viva amigo,

não tens de forma alguma pedir desculpa... eu por vezes quando estou de volta de uma situação, acho que todas as pessoas tb estão e depois deixo metade por dizer...

Vou testar e reporto o resoltado...

filjoa

Viva,

Ontem passei muito a correr na empresa, apenas para ir testar este comando, e alguma coisa recebi vindo da central de incêndio. Mas não tive tempo de experimentar mais...

Resta perceber o que ela respondeu ali naqueles numeros...


jm_araujo

#10
Boa, quer dizer que interpretei bem o manual.
Assim de repente a resposta coincide com o pedido: a série de 08001800 são as horas de ligar/desligar para os 7 dias da semana.8h e 18h parece-me uma programação razoável, pelo que assumo que a comunicação correu bem.
Agora só tens de estudar o manual e ver quais são as mensagens que tens de enviar para te retornar os dados que precisas.
Primeiro tens de identificar o que precisas, e depois ver em que respostas é que esses dados estão presentes. Toca a estudar o manual que enviaste!


filjoa

viva

bem, cá estou eu a experimentar falar com a dita... mas ela não me liga nenhuma :D

Pag. 69
PACKET_TYPE_QUERY_LEDS_STATE
Request Panel Leds Status

0XF7

Pag. 71
PACKET_TYPE_GET_DISPLAY
Request Panel Display Data

0xF0

Pag. 71
PACKET_TYPE_GET_EVENT
Request Event Data

0xFA

Para obter estes dados, não basta enviar o hex correspondente, consegues me ajudar qual a trama que terei de enviar para receber informação? É que eu nao percebi como construíste "0xdb 0x00 0xff 0x05 0x00 0x04"

Obrigado

jm_araujo

#12
O que não percebeste? expliquei byte a byte, seguindo o que está no manual (pag 14 e 15 do pdf), e repetir sem saber o que não percebeste não leva a lado nenhum...
Para esses 3 deve ser algo do género:
PACKET_TYPE_QUERY_LEDS_STATE
0xdb 0x00 0xff 0xf7 0x00 0xf6

PACKET_TYPE_GET_DISPLAY
0xdb 0x00 0xff 0xf0 0x00 0xef

PACKET_TYPE_GET_EVENT
0xdb 0x00 0xff 0xfa 0x02 0xhh 0xll 0xXX
sendo 0xhh e 0xll os dois bytes(MSB/LSB) que compõe o numero do evento , e o 0xXX o checksum que tens de calcular
para o primeiro será
0xdb 0x00 0xff 0xfa 0x02 0x00 0x00 0xfb
segundo
0xdb 0x00 0xff 0xfa 0x02 0x00 0x01 0xfc
e por aí fora