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 / tipo | Responsabilidade |
|---|---|
Interfaces | Contratos IBalanca e IComunicacao |
Models | BalancaOptions e PesoCapturado |
Enum | TipoConexao e ProtocoloBalanca |
Comunicacao | Transporte serial (SerialPortComunicacao) e TCP (TcpComunicacao) |
Driver | Comandos e fluxo por protocolo (ToledoDriver) |
Parser | Interpretação da resposta (ToledoParser) |
BalancaBase | Conexão, eventos e ciclo de vida comum |
BalancaFactory | Ponto de entrada público |
Fluxo de uma leitura
- O consumidor monta
BalancaOptions(tipo de conexão + protocolo). BalancaFactoryvalida o protocolo e criaIComunicacao+ driver.ConectarAsyncabre o canal (serial ou TCP).LerPesoAsynclê uma linha viaIComunicacao.ReadAsync.- O parser transforma o texto em
PesoCapturado. BalancaBase.AtualizarPesodisparaPesoAlteradoe, se estável,PesoEstavel.Dispose/DesconectarAsynclibera 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).