PDA

Ver la Versión Completa : Recibir data por el serial port.


JoseFco
13-04-2008, 03:38:45
Hola amigos.

Estoy tratando de recibir una cadena de data (4096 bytes de data por el serial port.) La tendre que alojar temporalmente en un buffer imagino y despues usando un procedimiento modificado como este:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type buffer=array of byte; //assign as Dynamic array
var HexBufOut:buffer;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function writeline(ADDR,RECLEN,RECTYPE:integer;
var buf:buffer):string;
var i:integer;
CHKSUM:byte;
begin
CHKSUM:=0;
result:=':'+inttohex(RECLEN,2)+ inttohex(ADDR,4)+inttohex(RECTYPE,2);
CHKSUM:=RECLEN+lo(ADDR)+hi(ADDR);
for i:=0 to RECLEN-1 do begin
result:=result+inttohex(buf[ADDR+i],2);
CHKSUM:=CHKSUM+buf[ADDR+i];
end;
result:=result+inttohex(256-CHKSUM,2);
end;
function write_eof:string;
begin
result:=':00'+'0000'+'01'+'FF'; // :00000001FF
end;


procedure TForm1.Button1Click(Sender: TObject);
var Fname,line:string;
Fp : textfile;
ErrorCode,StartAddr,ByteCnt:integer;
A_Line,EOF_HEX:string;
begin
StartAddr:=$0000; // start address
ByteCnt:=16; // 16 bytes
SetLength(HexBufOut,ByteCnt);
HexBufOut[0]:=$00;
HexBufOut[1]:=$12;
HexBufOut[2]:=$00;
HexBufOut[3]:=$72;
HexBufOut[4]:=$12;
HexBufOut[5]:=$00;
HexBufOut[6]:=$7E;
HexBufOut[7]:=$B4;
HexBufOut[8]:=$80;
HexBufOut[9]:=$04;
HexBufOut[10]:=$80;
HexBufOut[11]:=$34;
HexBufOut[12]:=$80;
HexBufOut[13]:=$F6;
HexBufOut[14]:=$75;
HexBufOut[15]:=$A0;
Fname:='C:\Documents and Settings\XP\My Documents\test1.hex';
AssignFile(Fp,Fname); { File selected in dialog }
Rewrite(Fp);
// write 16 bytes in HexBuf
A_Line:=writeline(StartAddr,ByteCnt,$00,HexBufOut);
EOF_HEX:=':00'+'0000'+'01'+'FF';// write end of HEX file
writeln(Fp,A_Line);
writeln(Fp,EOF_HEX);
closefile(Fp);
end;

end.


Guardarla en un fichero dentro de la PC.(en formato intel hex)
Este codigo que mostre esta trabajando y crea bien el intelhex.
Esta data que llegara desde el serial port, es leida de un chip y mandada al serial port por utro chip master(esta parte esta funcionando bien,la puedo ver en un monitor.)

Me hace falta una orientacion para poder alojarla en un buffer y posteriormente guardarla en un fichero.

Un Saludo.

jachguate
13-04-2008, 06:11:15
Hola. Si te fijas, en las recomendaciones que salen abajo como "Temas similares" se habla de componentes que te permitirán leer desde el puerto.

Si no te fuera útil dicha información, probá buscando por Serial Port, SerialPort, o Puerto Serie

Hasta luego.

;)

JoseFco
13-04-2008, 15:00:36
Hola. Si te fijas, en las recomendaciones que salen abajo como "Temas similares" se habla de componentes que te permitirán leer desde el puerto.

Si no te fuera útil dicha información, probá buscando por Serial Port, SerialPort, o Puerto Serie

Hasta luego.

;)

Hola jachguate.

En realidad no estoy buscando un componente.Tengo el ComPort y algo aprendi en este foro a usarlo, con la ayuda de algunos colegas.
Aprendi tambien en este foro a mirar primero la ayuda y los temas similares.
Antes de escribir un hilo pidiendo orientacion para una funcion, agoto todos los recursos que estan a mi alcance. San Google, buscar, temas similares,etc.
Cuando entre a Club Delphi, no tenia ni idea de como salvar un .exe:D
prueba de ello mis primeros hilos y las preguntas en ellos.Hoy las miro y me da pena algunas tonterias que preguntaba.

Retomando el entorno de este hilo, el problema es que usare este procedimiento dentro de un programita que ya estoy usando la funcion ComPortRxChar y tengo la duda de si puedo usar esta funcion para recibir una cadena de bytes donde tendre desde 00 asta FF hex de todo tipo y como en la misma comparo y tomo decisiones.No se si esto me pueda causar problemas.Tengo que leer 4096 bytes y estan llegando en cadena sin interrupcion, despues que yo le diga al chip que los mande.
Puedo usar ComPortRxChar para esto teniendo en cuenta que tambien lo estoy usando ya dentro de mi programa.?

Un Saludo.