Pular para o conteúdo principal

Arquitetura

O SDBalanca separa opções, transporte, driver e parser.

Consumidor


BalancaFactory.Create(BalancaOptions)
├── ComunicacaoFactory.Criar → IComunicacao (Serial | TCP)
└── Driver (ToledoDriver) → BalancaBase : IBalanca
└── ToledoParser.Parse(resposta) → PesoCapturado

Camadas

Pasta / tipoResponsabilidade
InterfacesContratos IBalanca e IComunicacao
ModelsBalancaOptions e PesoCapturado
EnumTipoConexao e ProtocoloBalanca
ComunicacaoTransporte serial (SerialPortComunicacao) e TCP (TcpComunicacao)
DriverComandos e fluxo por protocolo (ToledoDriver)
ParserInterpretação da resposta (ToledoParser)
BalancaBaseConexão, eventos e ciclo de vida comum
BalancaFactoryPonto de entrada público

Fluxo de uma leitura

  1. O consumidor monta BalancaOptions (tipo de conexão + protocolo).
  2. BalancaFactory valida o protocolo e cria IComunicacao + driver.
  3. ConectarAsync abre o canal (serial ou TCP).
  4. LerPesoAsync lê uma linha via IComunicacao.ReadAsync.
  5. O parser transforma o texto em PesoCapturado.
  6. BalancaBase.AtualizarPeso dispara PesoAlterado e, se estável, PesoEstavel.
  7. Dispose / DesconectarAsync libera o recurso de comunicação.

Observações de desenho

  • Não há polling em background: eventos só ocorrem quando LerPesoAsync é chamado.
  • Falha na criação do driver faz o factory descartar a comunicação criada.
  • Encoding do transporte: ASCII, com delimitador configurável em NewLine (padrão \r\n).