Página 1 de 1

Protocolo STX...ETX

MensagemEnviado: 20 Mar 2012 21:34
por marcosribeirobr
Olá Pessoal,

Estou com uma missão de receber os dados de uma balança pesadora (BALMAK ELPN-10PS) por meio de comunicação RS-232C utilizando o protocolo STX...ETX, estarei utilizando um PIC18F452 com o compilador mikroC e os dados recebido no PIC será transmitido ou não para display's de 7 seg, no manual do fabricante consta as seguintes informações:

1. O envio de dados pela balança (BK, MP) ao equipamento receptor de dados é feito em modo envio continuo( cada ciclo );.
seqüência enviada na Serial :
(STX) PPPPPPpP (ETX)
Onde :
P = Caracteres em ASC II "0 -9 " ( seis dígitos formam o valor do peso); Zeros não significativos são representados por espaço ( 20h )
p = Caracteres em ASC II '.' (ponto decimal flutuante, como foi programado).
(STX) = 02 Hex da tabela ASC II
(ETX) = 03 Hex da tabela ASC II
Nesta modalidade o receptor de dados deve fazer consistência dos dados estáveis.



Pois bem, a minha maior dúvida é quanto a recepção pois nas informações acima diz: "O envio de dados pela balança (BK, MP) ao equipamento receptor de dados é feito em modo envio continuo( cada ciclo )", desta forma me parece que os dados são enviados a todo tempo, mas como armazenar uma grande quantidade de informações para poder tratá-la? Tem que ser por um tempo de amostragem? ou vai recebendo e já tratando, mas me parece que essa última o buffer vai po saco..rsrs. Bom, no que puderem me ajudar já fico agradecido.

Abraços,


Marcos R.

Re: Protocolo STX...ETX

MensagemEnviado: 20 Mar 2012 22:29
por andre_luis
Na verdade, a dinamica da pesagem é que vai determinar a sua necessidade.
Se tiver tempo suficiente para o objeto estabilizar na bandeja, uma média de valores num curto espaço de tempo atende.

Entretanto, um recurso interessante no teu sistema, seria monitorar por amostras regulares para realizar uma detecção automática da presença de peso, e a partir daí iniciar a análise de quando os valores irão convergir, para que a partir desse momento, os intervalos das amostras diminuissem.


+++

Re: Protocolo STX...ETX

MensagemEnviado: 21 Mar 2012 07:41
por FabioSom12
Sabe o período do ciclo? A balança transmite peso negativo?

andre_teprom escreveu:Na verdade, a dinamica da pesagem é que vai determinar a sua necessidade....

MensagemEnviado: 21 Mar 2012 09:47
por ze
Acho que não tem muita frescura pois a balança mastiga o dado. Uma maneira é voce aguardar o 0x02 e ir armazenando até chegar o 0x03
Código: Selecionar todos
char disp[7];//seu buffer
void recebe()
{
char i=0;
while(RCREG!=0x02); //start, acha o começo
while(RCREG!=0x03) //stop, epera o fim
   {
   RCIF=0;
   while(!RCIF);//bit chegou dado
   disp[i++]=RCREG-' ';//converte asc para dec
   }
}
ou nem precisa do fim, desde que voce saiba o tamanho da palavra ( 8 )
Código: Selecionar todos
...
while(RCREG!=0x02);
for (i=0;i<7;i++)
   {
   RCIF=0;
   disp[i]=RCREG-' ';
   while(!RCIF); //espera o dado
   }
...
a partir daqui voce pode colocar disp[7...0] nos displays 7 seg. Bole um jeito de ignorar o asc ','.
Fica travado na recepção mas isso tende a não ser problema visto que a interrupção pra varrer o display estaria ativa. Se necessário crie um timeout tipo while(!RCIF && tmout--).
boa sorte

MensagemEnviado: 21 Mar 2012 13:43
por tcpipchip
Nao esqueça dos TIME OUT para cada byte a ser recebido...

MensagemEnviado: 21 Mar 2012 15:38
por Djalma Toledo Rodrigues
Correto como Lellis colocou

02h ====> STX ====> START OF TEXT

03h ====> ETX ====> END OF TEXT


Ver Tabela ASCII

http://www.ascii-code.com/


DJ

MensagemEnviado: 21 Mar 2012 22:44
por marcosribeirobr
Lelis obrigado pela ajuda esse exemplo será mt útil, no entanto não saquei a colocação de nosso amigo tcpipchip, com relação aos "TIME OUT para cada byte a ser recebido".

MensagemEnviado: 23 Mar 2012 12:06
por Wagner de Queiroz
marcosribeirobr escreveu:Lelis obrigado pela ajuda esse exemplo será mt útil, no entanto não saquei a colocação de nosso amigo tcpipchip, com relação aos "TIME OUT para cada byte a ser recebido".



Marcos,

A balança transmite os bytes numa velocidade 4800 BPS se nao me falha a memoria, primeiro vem o caractere STX, o peso e o ETX.

se por um acaso a conexao for cortada durante a transmissao
tipo vc recebeu STX e comecou a guardar e nao recebeu o ETX por algum motivo, sua aplicacao trava esperando o ETX, vc pode contar os bytes mas mesmo assim, se a comunicacao for interrompida, vc pode ficar esperando o byte que falta pelo resto da vida. o TIMEOUT é uma ideia boa, caso vc recebeu o STX, comecou a coletar e se após 2 segundos nao receber o ETX, aborte o pacote e acuse o erro.

Acho que 2 segundos é um tempo bacana, pois como os dados sao transmitidos continuamente, nao tera problema.

MensagemEnviado: 12 Abr 2012 02:37
por marcosribeirobr
Muito obrigado Wagner, agora consegui entender o lance do timeout e realmente é essencial.

Muito obrigado a todos!