Ver Mensaje Individual
  #11  
Antiguo 25-10-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Reputación: 25
egostar Va camino a la fama
Cita:
Empezado por djemix Ver Mensaje
El primer char es el STX (0x02) y el ultimo es el ETX(0x03). Esto esta muy bien pero el problema lo tengo dentro...

Luego viene el numero de argumentos y luego los argumentos... tantos como decia el numero de antes.

Despues viene un CRC que es la suma de los argumentos... y final el ETX.

Con esto te kiero hacer ver que el tamaño de la cadena es variable segun lo que me kieran mandar y claro... cuando me mandan 2 o 3 argumentos... el campo del numero de argumentos ya me coincide o con el ETX o STX.

¿Cual es el problemaaaaa? Pues que cuando recibo una cadena, por ejemplo, de 10 caracteres... Primero recibo los 8 primeros y luego los 2 siguientes...

Cuando digo que recibo me refiero al evento OnTriggerAvail del componente que me salta 2 veces. Siempre me saca los ocho primeros y luego el resto...

Nunca he comprobado en recibir por ejemplo 20 caracteres... para ver si me los divide en paquete de 8... Eso es algo de la configuración del puerto??

Ufff... vaya tocho que te soltado... a ver si te puedes aclarar un poco en todo eso..

Gracias por tu ayuda....
Esto se resuelve perfectamente con el componente que te comenté, además están usando el protocolo más efectivo para saber donde comienza y donde termina una cadena

Cita:
STX = Start of Text
ETX = End of Text
Dificilmente verás esos caracteres repetidos dentro de la cadena, si es así entonces no solo recibes una trama sino varias y siempre, repito siempre habrá un STX con su respectivo ETX.

El CRC como dices, es un digito verificador, comúnmente es un XOR de los caracteres dentro de la cadena, no uses el trigger avail, como te digo, usa el componente adpDataPacket, configuralo de esta forma

Cita:
EndCon = ecString
EndString = #3 --> [^C]
StartCond = scString
StartString = #2 --> [^B]
En el evento OnStringPacket del componente podrás usar esto:

Código Delphi [-]
procedure TForm1.ApdDataPacket1StringPacket(Sender: TObject; Data: String);
begin
  Memo1.Lines.Add(Data);
end;


Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 25-10-2007 a las 19:26:10.
Responder Con Cita