Delphi - ayuda sobre string y puerto serial....

   
Vista:

ayuda sobre string y puerto serial....

Publicado por richard sandi (4 intervenciones) el 27/03/2012 23:31:54
Buenas Tardes Amigos...

Verán estoy con un proyecto de la universidad sobre la comunicación serial y me conseguí un componente con el código que realiza esta función, así que me ha sido muy útil, he aprendido mucho del código he podido realizar muchas mas cosas con el... Pero necesito hacer lo siguiente y pues no he podido.

Resulta que cuando viene algo por el puerto de comunicación se genera un string el cual se añade a un memo para mostrar el string de comunicación o trama..

En el string vienen caracteres específicos de comunicación y deseo poder leer estos caracteres y agregarles un texto por ejemplo ,

ejemplo original

richard sandi 23 /12 / 2012 aula numero 15


ejemplo que deseo hacer

richard sandi <RS><GS> 23/ 12/ 2012 aula numero 15 <EOT>

El caracter ascii 04 corresponde a <EOT>
30 corresponde a <RS>
29 corresponde a <GS>

estos caracteres vienen en código ascii la trama de comunicación, pero cada vez que los identifico no me salen dentro del nuevo string que deseo generar..

Les adjunto el código.... a ver si alguien me puede echar una mano y así pues aprendo sobre strings...

saludos y muchas gracias de antemano...




// Codigo Original
// Se define el tamaño del String

procedure AddHexString(S : String; Lines : TStrings );
var AddS, CopyS : String;

i : Integer;
const SLen = 200;

begin

while Length(S) > 0 do
begin
AddS := Copy(S,1,SLen);
Delete(S,1,SLen);

while Length(AddS) < SLen do
AddS := AddS + ' ';

for i := 1 to SLen do

case AddS[i] of

#02 : begin
form1.MemoRecepcion.Text:='<STX>';
end;

#03 : begin
form1.MemoRecepcion.Text:='<ETX>';
end;

#04 : begin
form1.MemoRecepcion.Text :='<EOT>';
form1.MemoRecepcion.Text :='<EOT>';
AddS:= Adds + '<EOT>';
end;

#05 : begin
form1.MemoRecepcion.Text :='<ENQ>';
envioACK; // se envia un Ack
end;

#06 : begin
form1.MemoRecepcion.Lines.Add(Adds);
form1.MemoRecepcion.Text :='<ACK>';
AddS:= Adds + '<ACK>';
end;

#29 : begin
form1.MemoRecepcion.Text:='<GS>';
envioACK; // se envia un Ack
end;
end;
Lines.Add(AddS);
end;
end;


procedure TForm1.AdvSettingsBtnClick(Sender: TObject);
begin
SerialNGAdvDLG.SetDLGData(SerialPortNG1);
if SerialNGAdvDLG.ShowModal = mrOK then
SerialNGAdvDLG.GetDLGData(SerialPortNG1);
if SerialPortNG1.Active then
SetLeds
else
ResetLeds;
end;



Aquí se recibe lo que viene en el puerto.....................



procedure TForm1.SerialPortNG1RxClusterEvent(Sender: TObject);
begin
if SerialPortNG1.NextClusterSize >= 0 then // Data available?
begin
if SerialPortNG1.NextClusterCCError = 0 then // Error during receiveing?

begin
memo1.Lines.Add(FormatDateTime('"Rec <--"hh:mm:ss" :"', Now));
end

else
memo1.Lines.Add(FormatDateTime('"RecX "hh:mm:ss" :"', Now));
// Read the data and patch them into the editfield
AddHexString(SerialPortNG1.ReadNextClusterAsString,memo1.Lines);
end;
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda sobre string y puerto serial....

Publicado por E.T. (1106 intervenciones) el 28/03/2012 22:09:41
Le hice unas correccioes a tu procedimiento, haber si funciona correctamente

yo obtengo como resultado lo siguiente

richard sandi <RS><GS> 23 /12 / 2012 aula numero 15<EOT>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
procedure AddHexString(S : String; Lines : TStrings );
var AddS, CopyS : String;
i : Integer;
sSalida: string;
const SLen = 200;
 
begin
 
  while Length(S) > 0 do begin
    AddS := Copy(S,1,SLen);
    Delete(S,1,SLen);
    sSalida := '';
 
    while Length(AddS) < SLen do
      AddS := AddS + ' ';
 
    for i := 1 to SLen do
 
      case AddS[i] of
 
        #02 : begin
        //form1.MemoRecepcion.Text:='<STX>';
        sSalida := sSalida + '<STX>';
        end;
 
        #03 : begin
        //form1.MemoRecepcion.Text:='<ETX>';
        sSalida := sSalida + '<ETX>'
        end;
 
        #04 : begin
        //form1.MemoRecepcion.Text :='<EOT>';
        //form1.MemoRecepcion.Text :='<EOT>';
        sSalida := sSalida + '<EOT>';
        AddS:= Adds + '<EOT>';
        end;
 
        #05 : begin
        //form1.MemoRecepcion.Text :='<ENQ>';
        sSalida := sSalida + '<ENQ>'
        //envioACK; // se envia un Ack
        end;
 
        #06 : begin
        //form1.MemoRecepcion.Lines.Add(Adds);
        //form1.MemoRecepcion.Text :='<ACK>';
        sSalida := sSalida + '<ACK>';
        AddS:= Adds + '<ACK>';
        end;
 
        #29 : begin
        //form1.MemoRecepcion.Text:='<GS>';
        sSalida := sSalida + '<GS>'
        //envioACK; // se envia un Ack
        end;
 
        #30 : begin
        //form1.MemoRecepcion.Text:='<RS>';
        sSalida := sSalida + '<RS>'
        //envioACK; // se envia un Ack
        end;
        else
          sSalida := sSalida + AddS[i];
      end;
    Lines.Add(sSalida);
    Form1.MemoRecepcion.Lines.Add(sSalida);
  end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda sobre string y puerto serial....

Publicado por richard sandi (4 intervenciones) el 29/03/2012 15:56:13
Buenos Dias...

Muchísimas gracias por la ayuda. funciona a la perfección.... estos estudiándolo y aprendo del código..

Muy amable de tu parte..

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar