Pergunta

Estou escrevendo um protocolo RS485 de várias gotas para comunicações seriais dentro de um sistema distribuído. Estou usando um modelo endereçável onde os dispositivos escravos recebem uma janela de 20 ms para responder. O Master UC pesquisa os dispositivos conectados para atualizações e eles respondem de acordo. Empreguei somas de cheques e tomo as precauções de excesso necessárias para garantir que os dispositivos conectados não respondam a mensagens malformadas. Esse método se mostrou efetivo em aproximadamente 99% das situações, mas perco o pacote se um novo dispositivo for introduzido durante uma sessão de comunicação. A conexão de um novo dispositivo "quente" terá efeitos negativos no sinal monitorado pelos dispositivos escravos, mesmo que por um tempo extremamente curto. Estou do lado do software da engenharia, mas como posso mitigar essa situação sem tentar recriar o TCP? Usamos um modelo de votação porque é rápido e faz o trabalho bem para nossa aplicação, sem necessidade de funcionalidade RTOS. Eu tenho uma abundância de ciclos em cada CPU, pense em termos básicos.

Foi útil?

Solução

O envio de pacotes sobre o RS485 não é uma comunicação confiável. Você terá que lidar com os pacotes perdidos de qualquer maneira. Claro, você não terá que reinventar o TCP. Mas você terá que detectar pacotes perdidos por meio de monitoramento de tempo limite e números de sequência. Em aplicativos simples, isso pode ser feito no nível do aplicativo, o que o mantém afastado da complexidade do TCP. Quando o modelo de votação descarta todos os pacotes com soma de verificação inválida, isso pode ser integrado com menos esforço.

Se você deseja verificar se há colisões, isso pode ser causado por plugues quentes ou dispositivos de comportamento incorreto, provavelmente existem algumas melhorias. Algum hardware permite ler de volta a própria transmissão. Se você encontrar uma diferença entre os dados enviados e os dados de receber, poderá assumir uma colisão e repetir o pacote. Isso também exigirá um tipo de numeração de sequência.

Outras dicas

Talvez eu tenha perdido algo em sua pergunta, mas você não pode simplesmente escrever o mestre para que, se uma resposta não for vista de um dispositivo dentro do tempo permitido, ele novamente pola esse dispositivo?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top