Protocolo STX...ETX

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Protocolo STX...ETX

Mensagempor marcosribeirobr » 20 Mar 2012 21:34

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.
marcosribeirobr
Bit
 
Mensagens: 17
Registrado em: 27 Jul 2011 22:54
Localização: Brasil

Re: Protocolo STX...ETX

Mensagempor andre_luis » 20 Mar 2012 22:29

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.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Protocolo STX...ETX

Mensagempor FabioSom12 » 21 Mar 2012 07:41

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....
FabioSom12
Nibble
 
Mensagens: 94
Registrado em: 26 Nov 2009 14:01

Mensagempor ze » 21 Mar 2012 09:47

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
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor tcpipchip » 21 Mar 2012 13:43

Nao esqueça dos TIME OUT para cada byte a ser recebido...
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Djalma Toledo Rodrigues » 21 Mar 2012 15:38

Correto como Lellis colocou

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

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


Ver Tabela ASCII

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


DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor marcosribeirobr » 21 Mar 2012 22:44

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".
marcosribeirobr
Bit
 
Mensagens: 17
Registrado em: 27 Jul 2011 22:54
Localização: Brasil

Mensagempor Wagner de Queiroz » 23 Mar 2012 12:06

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.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor marcosribeirobr » 12 Abr 2012 02:37

Muito obrigado Wagner, agora consegui entender o lance do timeout e realmente é essencial.

Muito obrigado a todos!
marcosribeirobr
Bit
 
Mensagens: 17
Registrado em: 27 Jul 2011 22:54
Localização: Brasil


Voltar para PIC

Quem está online

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

cron

x