9bits por software PC, funciona?

Para "abobrinhas" use o " Boteco"

Moderadores: andre_luis, 51, guest2003, Renie

9bits por software PC, funciona?

Mensagempor RobL » 16 Jun 2008 19:21

Nunca usei 9 bits, para endereço, gerado pelo PC, através do bit de paridade, por softwre em runtime.
Uso sempre hardware para tal. Penso que para algo lento deve funcionar bem, pois a precisão da temporização no PC não é garantida.
Já ví programas em C para tal e um mais simples que seria algo como setar paridade com Mark/Space (Mark/Space só no Windows no Linux é possível simulando).
Considerar serial assyncrona (Windows).
Exemplo:

1-Setar em runtime 8 bits + paridade ( mark/space) usar space.
2-Enviar o byte de endereço.
3-Voltar para 8 bits , sem paridade.
4-Enviar demais bytes.

lí que a setagem, paridade com mark / space não funciona sempre para todos os bytes!!! (não sei, estranho então porque paridade mark/space?).

Outra forma:
O objetivo aqui é forçar sempre um bit alto no 9 bit de paridade:

1-Verifica paridade do byte de endereço a ser enviado.
2- Conforme a paridade, escolher ao setar, em run time, paridade par ou impar, a fim de resultar 1L (bit alto na paridade).
3-Setar para 8 bits + paridade (par ou impar) conforme resultado do ítem (2).
4- Enviar byte de endereço.
5- Setar para 8bits sem paridade
6- Transmitir demais bytes de dados.
Aparentemente esse método tem que funcionar.

Enquanto aguardo as críticas, vou tentar fazer rodar algo por aquí.
Grato.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor guest2003 » 16 Jun 2008 19:29

Porque não cria um pequeno protocolo e utiliza um frame simples ?

Sei la, tipo:

STX | ADD | NDATA | DATA ... | CRC | ETX

STX - inicio de transmissao
ADD - endereco
NDATA - numero de bytes de dados
DATA - dados
CRC - check de crc
ETX - fim de transmissao

Ai faz uma maquina de estados na recepção e pronto... se quiser coloca ACK / timeout / etc.

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor RobL » 16 Jun 2008 20:37

Qualquer protocolo com endereçamento com 8bits, acarreta uma carga de processamento desnecessário, em todos os servos, em uma rede de servos, devido as constantes interrupções pela uart, a cada byte que transite pela rede.
Não vejo como resolver isso com endereço com byte com 8bits.
Uma possível forma seria:
Um servo recebe um byte. Não sendo endereço válido, retira a uart por certo tempo. Mas se tivermos, número de bytes variável, que é quase sempre o que acontece, teremos tempo variável. A uart teria que sair do ar pelo maior tempo estimado, o que tornaria a rede muito lenta e ainda causaria uma complicação com sincronismo com novas chamadas.
Grato por sua sugestão.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor RobL » 23 Jun 2008 23:00

Fiz o teste para transmitir endereços com 9 bits gerado pela uart do PC com paridade Mark/Space. Funciona.
No LINUX, seria um trabalho maior, mas através do SYNASER , MARK/SPACE é simulado com perfeição.
Concluindo, o velho CS9 para redes RS485 é plenamente possível através da uart do PC sem hardware adicional.
Não levantei como seria o comportamento com MODBUS RTU visto que usa timeout e a uart para simular os 9bits transmite o endereço com um intervalo diferente do restante do bloco. O problema deve dar com alta velocidade.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para Assuntos Gerais

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x