Bueno asi esta la cosa.
Código Delphi
[-]
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CPort, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ComPort: TComPort;
Button1: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
ProgressBar1: TProgressBar;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure ComPortRxChar(Sender: TObject; Count: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Cuantos, CuentaB : Integer;
implementation
{$R *.dfm}
type
TBuffer = array[$0000..$FFFF] of Byte;
function Insertar(Str: String; var Buffer: TBuffer): String;
var
i,j,k: Integer;
begin
Result:= EmptyStr;
Str:= Trim(Str);
if Copy(Str,1,1) = ':' then
if TryStrToInt('$' + Copy(Str,2,2),i) then
if Length(Str) = ((2*i) + 11) then
if TryStrToInt('$' + Copy(Str,4,4),j) then
if TryStrToInt('$' + Copy(Str,8,2),k) then
if k = 0 then
begin
Str:= Copy(Str,10,2*i);
for k:= j to (j + i - 1) do
begin
Buffer[k]:= StrToInt('$' + Copy(Str,1,2));
Delete(Str,1,2);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#2#0);
end;
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
ComPort.ReadStr(Str, Count);
if length(Str)>= 8 then
ShowMessage('OK')
else if Str = #1 then begin
case Cuantos of
1: begin ComPort.WriteStr(#2#2);
Cuantos := 2;
end;
2: begin ComPort.WriteStr(#2#3);
Cuantos := 3;
end;
3: begin showmessage('Chip Borrado.. OK!')
end;
4: begin ComPort.WriteStr(#2#2);
Cuantos := 5;
end;
5: begin ComPort.WriteStr(#6#4#0#0#16#0);
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#4#1#0#1);
Cuantos := 1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#4#1#0#1);
Cuantos := 4;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,j: Integer;
Str: String;
Buffer: TBuffer;
begin
if OpenDialog1.Execute then
Label1.caption:=OpenDialog1.FileName;
Memo1.Clear;
with TStringList.Create do
try
LoadFromFile(Label1.Caption);
FillChar(Buffer,Sizeof(Buffer),#0);
for i:= 0 to Count - 1 do
Insertar(Strings[i],Buffer);
j:= StrToInt(Label2.caption);
Str:= EmptyStr;
for i:= 0 to j -1 do
begin
Str:= Str + #32 + IntToHex(Buffer[i],2);
if ((i+1) mod 16 = 0) then
begin
Memo1.Lines.Add(Str);
Str:= EmptyStr;
end;
end;
if Str <> EmptyStr then
Memo1.Lines.Add(Str);
finally
Free;
end;
end;
end.
Esto copila bien y trabaja bien.
Ahora la cosa esta que despues que mando el comando (06 04 00 00 10 00) entonces esperando un tiempo corto tengo que mandar el primer byte del buffer y esperare por cada uno de estos bytes un 53 y asi hasta el final del buffer.
Un Saludo.