Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
En el memo lo que hay es hex 00 01 FE 12 0A puro hex .

Este es el programita.

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
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  Cuantos, CuentaB : Integer;
  Contador  : 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     //poner el chip en prog..
ComPort.WriteStr(#2#2);
   Cuantos := 2;
 end;
   2: begin //comando para borrar.
     ComPort.WriteStr(#2#3);
       Cuantos := 3;
   end;
    3: begin //Modo Borrar
    showmessage('Chip Borrado.. OK!')
 end;
    4: begin //poner el chip en prog..
         ComPort.WriteStr(#2#2);
          Cuantos := 5;
      end;
    5: begin // Comando para escribir el chip(06 04 00 00 10 00)
         ComPort.WriteStr(#6#4#0#0#16#0);
            sleep(100);
            ComPort.WriteStr(Memo1.Text[1]);
           Contador := 2;
     end;
     end;
     end
         else if Str = #2 then begin
         end
           else if Str = #53 then begin
                   if contador <= 4096 then begin
                       sleep(100);
                      ComPort.WriteStr(Memo1.Text[Contador]);
                      Inc(Contador);
     end;
     end;
     end;
 //Aqui comienza el procedimiento para borrar el chip
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not ComPort.Connected then
  ComPort.Open;
 comport.WriteStr(#4#1#0#1);
   Cuantos := 1;
    end;
 //Aqui comienza el procedimiento para escribir el chip
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.

Algo le pasa a la rutina que se detiene y no continua mandando nada mas.( lo del 20 es otra cosa, el programa no debe detenerce por eso y cuando llega el primer 53 debe mandar otro byte. A no ser que el memo no lo leemos como debe ser.

Si te fijas en ese programita yo llamo un fila, intelhex lo limpiamos y se queda puro hex nada mas.

Un Saludo.
Responder Con Cita
  #2  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
En el memo lo que hay es hex 00 01 FE 12 0A puro hex .

Algo le pasa a la rutina que se detiene y no continua mandando nada mas.( lo del 20 es otra cosa, el programa no debe detenerce por eso y cuando llega el primer 53 debe mandar otro byte. A no ser que el memo no lo leemos como debe ser.

Si te fijas en ese programita yo llamo un fila, intelhex lo limpiamos y se queda puro hex nada mas.

Un Saludo.
Pues ahi esta la cosa, estamos enviando caracteres y no los valores

por ejemplo en esa linea

00 01 FE 12 0A

Estamos mandando

0
0

0
1

F
E

1
2

0
A

y deberiamos enviar

$00
$01
$FE
$12
$0A

Voy a ver como le hacemos.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Esto es lo que esta en el memo:

00 12 00 72 12 00 7E B4 80 04 80 34 80 F6 75 A0
FE 12 00 AF 75 A0 FD 12 00 AF 75 A0 FB 12 00 AF
75 A0 F7 12 00 AF 75 A0 EF 12 00 AF 75 A0 DF 12
00 AF 75 A0 BF 12 00 AF 75 A0 7F 12 00 AF 80 C4
75 A0 7F 12 00 AF 75 A0 BF 12 00 AF 75 A0 DF 12
00 AF 75 A0 EF 12 00 AF 75 A0 F7 12 00 AF 75 A0
FB 12 00 AF 75 A0 FD 12 00 AF 75 A0 FE 12 00 AF
80 92 75 98 52 75 89 20 75 8D F3 D2 8E 22 30 98
FD C2 98 E5 99 22 C2 B5 89 A0 D2 B4 12 00 AF C2
B4 22 D2 B5 89 A0 D2 B4 12 00 AF C2 B4 22 79 01
11 86 79 38 11 86 79 0C 11 86 79 06 11 86 22 7F
00 7E 00 7D 00 0D BD 50 FC 0E BE 50 F6 0F BF 50

y sigue con 00 hasta completar 4096 bytes.
Responder Con Cita
  #4  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Creo que la cosa es mas complicadita todavia.

Por ejemplo si te fijas en el codigo del programita.Yo para que por el serial port me mande un 10 tengo que escribir un #16 .

A mi me recomendaron usar el buffer, para no tener que convertir otra vez el file.creo que eso me lo dijo seoane, en otro hilo.Pero la rutina con el buffer se complico.

Un Saludo.
Responder Con Cita
  #5  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola egostar.

Resuelto el problema de que no mandara el file del memo completo:
jajajajajajaja yo solo estaba recibiendo 01 del chip y comparando.
Entonces si yo estoy recibiendo 53 y me pongo a leer 53 estoy perdido por eso se detenia la rutina. cambie y lo puse a esperar 83 Dec = a 53 hex.
Ese era el problema, ahora hay que ver lo de mandar lo que esta en el memo que lo cambia todo.

Un Saludo.
Responder Con Cita
  #6  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Hola egostar.

Resuelto el problema de que no mandara el file del memo completo:
jajajajajajaja yo solo estaba recibiendo 01 del chip y comparando.
Entonces si yo estoy recibiendo 53 y me pongo a leer 53 estoy perdido por eso se detenia la rutina. cambie y lo puse a esperar 83 Dec = a 53 hex.
Ese era el problema, ahora hay que ver lo de mandar lo que esta en el memo que lo cambia todo.

Un Saludo.
Pues si, pequeño detalle, checa lo que te puse en el post anterior que es para enviar lo que tienes en el Memo1, espero que funcione como lo soñe,

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Ok declare lineaMemo y la otra declaracion.Pero me esta pidiendo declarar esta linea.

Código Delphi [-]
    ComPort.WriteStr(strtoint('$'+Copy(Linea,1,2)));

Me dice que no esta declarada Linea ?
Responder Con Cita
  #8  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Ya corregí el post, checalo, debe ser LineaMemo, habia varios detalles

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 01-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Eso esta resuelto.

Ahora me da un error:
Código Delphi [-]
  ComPort.WriteStr(strtoint('$'+Copy(LineaMemo,1,2))));

Incompatible Types: " String " and " Integer" ???
Responder Con Cita
  #10  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Vamos a hacer una chapuza

Código Delphi [-]
    5: begin // Comando para escribir el chip(06 04 00 00 10 00)
           ComPort.WriteStr(#6#4#0#0#16#0);
           sleep(100);
           Count := 0; //Agregar esta variable Integer
           LineaMemo := Memo1.Lines[Count]; //Agregar esta variable String (LineaMemo)
           ComPort.WriteStr(Char(strtoint('$'+Copy(LineaMemo,1,2))));
           Delete(LineaMemo,1,3);
           Contador := 2;
     end;
//........
     else if Str = #83 then begin //83 decimal
              sleep(100);
              ComPort.WriteStr(Char(strtoint('$'+Copy(LineaMemo,1,2))));
              Delete(LineaMemo,1,3);
              if LineaMemo = '' then begin
                 LineaMemo := Memo1.Lines[Count+1];
              end;
              Inc(Contador);
           end;

Espero te funcione como espero

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

Última edición por egostar fecha: 01-04-2008 a las 04:53:37. Razón: EL ComPort.WriteStr no puede enviar enteros, lo cambie a Caracter :)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cuantos Querys? Nomad Conexión con bases de datos 13 24-01-2008 18:41:51
Contar cuantos edits hay lbidi Varios 4 04-10-2007 21:23:36
cuantos querys???? kryna Conexión con bases de datos 5 09-05-2005 20:50:13
Cuantos son Colombianos???? sercornejov Humor 7 28-12-2004 16:49:56
Cuantos Campos eduarcol Tablas planas 4 23-02-2004 17:07:02


La franja horaria es GMT +2. Ahora son las 23:30:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi