Autor Tema: Componente puerto serie  (Leído 8450 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Componente puerto serie
« en: 24 de Febrero de 2009, 16:57:28 »
Hola a todos.

Necesito un componente para manejar el puerto serie que sea bueno, bonito y barato como se suele decir. Fuera de bromas, necesito un componente para manejar el puerto serie que sea lo más sencillo posible y que utilice el sistema de multihilos para controlar la entrada de datos y por supuesto que sea de domino público. He probado varios pero o son muy complicados y no cubren mis necesidades o se pierden datos.

¿Conocéis alguno que cumpla estas condiciones?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 499
    • Software Electronica Microncontroladores
Re: Componente puerto serie
« Respuesta #1 en: 24 de Febrero de 2009, 17:54:47 »


   Hola que tal este: comport
   que bueno que te guste delphi  :-/

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #2 en: 24 de Febrero de 2009, 18:24:26 »


   Hola que tal este: comport
   que bueno que te guste delphi  :-/

Gracias Mariano por el componente, pero no puedo instalarlo, me da unos errores y no me lo instala.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *****
  • Mensajes: 5552
    • Picmania by Redraven
Re: Componente puerto serie
« Respuesta #3 en: 24 de Febrero de 2009, 18:41:48 »
Yo utilizo los Turbo Power Async Pro (Tpapro para los amigos) que son SourceForge y me han ido de lujo desde hace años.

http://sourceforge.net/projects/tpapro/

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #4 en: 24 de Febrero de 2009, 18:47:55 »
Gracias Diego por el componente, por lo menos tiene documentación. Por cierto utiliza  ¿Tthread para controlar la recepción de los datos?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *****
  • Mensajes: 5552
    • Picmania by Redraven
Re: Componente puerto serie
« Respuesta #5 en: 24 de Febrero de 2009, 19:02:55 »
El básico que yo uso (TapdPortCom) no.  O al menos creo que no.

Me corrijo yo solo. Si y bien que si usa threads, sacado del Developer's Guide ...


« Última modificación: 24 de Febrero de 2009, 19:11:11 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #6 en: 24 de Febrero de 2009, 19:05:21 »
Por lo que veo no lleva instalación, ni componentes visuales, ¿solo hay que enlazar con los fuentes de la librería?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *****
  • Mensajes: 5552
    • Picmania by Redraven
Re: Componente puerto serie
« Respuesta #7 en: 24 de Febrero de 2009, 19:12:17 »
Si, es mas fácil que hacer un niño.  :mrgreen:

Un momento que busco un ejemplo tonto .... (al descomprimir tiene "cienes" de ejemplos) ...

Código: Pascal
  1. procedure TFrmMain.BtnConectarSerieClick(Sender: TObject);
  2. begin
  3.      ApdComPort.Open      := false;
  4.      ApdComPort.ComNumber := Puerto.ItemIndex;
  5.      ApdComPort.Open      := true;
  6. end;
  7.  
  8. procedure TFrmMain.BtnDesConectarSerieClick(Sender: TObject);
  9. begin
  10.      ApdComPort.Open := false;
  11. end;
  12.  
  13. procedure TFrmMain.ApdComPortTriggerAvail(CP: TObject; Count: Word);
  14. var
  15.    i: Word;
  16.    c: Char;
  17.    s: String;
  18. begin
  19.      s := '';
  20.      for i := 1 to Count do
  21.      begin
  22.           c := ApdComPort.GetChar;
  23.           s := s + c;
  24.      end;
  25.  
  26.      // Aqui, en s tienes lo recibido
  27.  
  28. end;
« Última modificación: 24 de Febrero de 2009, 19:19:04 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 499
    • Software Electronica Microncontroladores
Re: Componente puerto serie
« Respuesta #8 en: 24 de Febrero de 2009, 19:36:42 »


   Hola que tal este: comport
   que bueno que te guste delphi  :-/

Gracias Mariano por el componente, pero no puedo instalarlo, me da unos errores y no me lo instala.

Un saludo

Hola yo tengo delphi7 y siempre lo e instalado de hecho baje esa vercion y la instale perfectamente, que vercion de delphi usas?

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #9 en: 24 de Febrero de 2009, 20:10:53 »
Yo también tengo el Delphi 7.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #10 en: 24 de Febrero de 2009, 20:27:39 »
He instalado el paquete de los Turbo Power Async Pro y me da un error en una redefinición del comando "AssignFile", vaya que al perro flaco todas son pulgas

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Componente puerto serie
« Respuesta #11 en: 24 de Febrero de 2009, 20:31:14 »
Este es el procedimiento que recibe los datos y los procesa:

Código: Pascal
  1. procedure TForm1.CommPortDriver1ReceiveData(Sender: TObject;
  2.   DataPtr: Pointer; DataSize: Cardinal);
  3. Var
  4.   PosA: PChar;
  5.   cTimer: String;
  6.   nByte: Shortint;
  7. //  StructTime: TStructTime;
  8.   TickCount: DWORD;
  9.   pArray: ^nArray;
  10. begin
  11.    PosA := AnsiStrScan(DataPtr, 'A');
  12.    if (PosA <> nil )
  13.    Then Begin
  14.           If Not((PosA+27)^='Z')
  15.           Then Exit;
  16.           //StatusBar1.Panels[0].Text := 'Recibiendo datos';
  17.  
  18.           Trama.Pitch_Rate_Out := Ord((PosA+1)^)*256+Ord((PosA+2)^);
  19.           Trama.Pitch_Volt := Ord((PosA+3)^)*256+Ord((PosA+4)^);
  20.           Trama.Pitch_Temperature := Ord((PosA+5)^)*256+Ord((PosA+6)^);
  21.           if CheckBox2.Checked
  22.           Then Begin
  23.                  StaticText1.Caption := IntToStr(Trama.Pitch_Rate_Out);
  24.                  ProgressBar1.Position := Trama.Pitch_Rate_Out;
  25.                  StaticText15.Caption := IntToStr(Trama.Pitch_Volt);
  26.                  StaticText18.Caption := IntToStr(Trama.Pitch_Temperature);
  27.           End;
  28.  
  29.           Trama.Roll_Rate_Out := Ord((PosA+7)^)*256+Ord((PosA+8)^);
  30.           Trama.Roll_Volt := Ord((PosA+9)^)*256+Ord((PosA+10)^);
  31.           Trama.Roll_Temperature := Ord((PosA+11)^)*256+Ord((PosA+12)^);
  32.           if CheckBox2.Checked
  33.           Then Begin
  34.                  StaticText2.Caption := IntToStr(Trama.Roll_Rate_Out);
  35.                  ProgressBar2.Position := Trama.Roll_Rate_Out;
  36.                  StaticText16.Caption := IntToStr(Trama.Roll_Volt);
  37.                  StaticText19.Caption := IntToStr(Trama.Roll_Temperature);
  38.           End;
  39.  
  40.           Trama.Yaw_Rate_Out := Ord((PosA+13)^)*256+Ord((PosA+14)^);
  41.           Trama.Yaw_Volt := Ord((PosA+15)^)*256+Ord((PosA+16)^);
  42.           Trama.Yaw_Temperature := Ord((PosA+17)^)*256+Ord((PosA+18)^);
  43.           if CheckBox2.Checked
  44.           Then Begin
  45.                  StaticText3.Caption := IntToStr(Trama.Yaw_Rate_Out);
  46.                  ProgressBar3.Position := Trama.Yaw_Rate_Out;
  47.                  StaticText17.Caption := IntToStr(Trama.Yaw_Volt);
  48.                  StaticText20.Caption := IntToStr(Trama.Yaw_Temperature);
  49.           End;
  50.  
  51.           Trama.X_acceleration := Ord((PosA+19)^)*256+Ord((PosA+20)^);
  52.           Trama.Y_acceleration := Ord((PosA+21)^)*256+Ord((PosA+22)^);
  53.           Trama.Z_acceleration := Ord((PosA+23)^)*256+Ord((PosA+24)^);
  54.  
  55.           if CheckBox2.Checked
  56.           Then Begin
  57.                  StaticText7.Caption := IntToStr(Trama.X_acceleration);
  58.                  ProgressBar4.Position := Trama.X_acceleration;
  59.                  StaticText8.Caption := IntToStr(Trama.Y_acceleration);
  60.                  ProgressBar5.Position := Trama.Y_acceleration;
  61.                  StaticText9.Caption := IntToStr(Trama.Z_acceleration);
  62.                  ProgressBar6.Position := Trama.Z_acceleration;
  63.           End;
  64.  
  65.           Trama.Battery_Reference := Ord((PosA+25)^)*256+Ord((PosA+26)^);
  66.           if CheckBox2.Checked
  67.           Then StaticText13.Caption := IntToStr(Trama.Battery_Reference);
  68.  
  69.           // ¿DataLogger Activo?
  70.           If CheckBox1.Checked
  71.           Then Begin
  72.                  // ¿Fichero Ascii?
  73.                  If RadioButton1.Checked
  74.                  Then Begin
  75.                         // ¿Sacar control de tiempo?
  76.                         if CheckBox3.Checked
  77.                         Then cTimer := FormatCurr( '0000000000', GetTickCount )
  78.                         Else cTimer := '';
  79.                         Writeln(hFileT, 'A'+
  80.                                       cTimer +
  81.                                       FormatCurr('0000',Trama.Pitch_Rate_Out)+
  82.                                       FormatCurr('0000',Trama.Pitch_Volt)+
  83.                                       FormatCurr('0000',Trama.Pitch_Temperature)+
  84.                                       FormatCurr('0000',Trama.Roll_Rate_Out)+
  85.                                       FormatCurr('0000',Trama.Roll_Volt)+
  86.                                       FormatCurr('0000',Trama.Roll_Temperature)+
  87.                                       FormatCurr('0000',Trama.Yaw_Rate_Out)+
  88.                                       FormatCurr('0000',Trama.Yaw_Volt)+
  89.                                       FormatCurr('0000',Trama.Yaw_Temperature)+
  90.                                       FormatCurr('0000',Trama.X_acceleration)+
  91.                                       FormatCurr('0000',Trama.Y_acceleration)+
  92.                                       FormatCurr('0000',Trama.Z_acceleration)+
  93.                                       FormatCurr('0000',Trama.Battery_Reference)+
  94.                                       'Z');
  95.                       End;
  96.                  // ¿Fichero Binario?
  97.                  If RadioButton2.Checked
  98.                  Then Begin
  99.                         // Sacar marcador "A"
  100.                         nByte := Ord('A');
  101.                         Write(hFileB, nByte);
  102.                         // ¿Sacar control de tiempo?
  103.                         if CheckBox3.Checked
  104.                         Then Begin
  105.                                TickCount := GetTickCount;
  106.                                pArray := @TickCount;
  107.                                nByte := (pArray^)[3];
  108.                                Write(hFileB, nByte);
  109.                                nByte := (pArray^)[2];
  110.                                Write(hFileB, nByte);
  111.                                nByte := (pArray^)[1];
  112.                                Write(hFileB, nByte);
  113.                                nByte := (pArray^)[0];
  114.                                Write(hFileB, nByte);
  115.                         End;
  116.  
  117.                         // Pitch_Rate_Out
  118.                         nByte := Ord((PosA+1)^);
  119.                         Write(hFileB, nByte);
  120.                         nByte := Ord((PosA+2)^);
  121.                         Write(hFileB, nByte);
  122.                         // Pitch_Volt
  123.                         nByte := Ord((PosA+3)^);
  124.                         Write(hFileB, nByte);
  125.                         nByte := Ord((PosA+4)^);
  126.                         Write(hFileB, nByte);
  127.                         // Pitch_Temperature
  128.                         nByte := Ord((PosA+5)^);
  129.                         Write(hFileB, nByte);
  130.                         nByte := Ord((PosA+6)^);
  131.                         Write(hFileB, nByte);
  132.  
  133.                         // Roll_Rate_Out
  134.                         nByte := Ord((PosA+7)^);
  135.                         Write(hFileB, nByte);
  136.                         nByte := Ord((PosA+8)^);
  137.                         Write(hFileB, nByte);
  138.                         // Roll_Volt
  139.                         nByte := Ord((PosA+9)^);
  140.                         Write(hFileB, nByte);
  141.                         nByte := Ord((PosA+10)^);
  142.                         Write(hFileB, nByte);
  143.                         // Roll_Temperature
  144.                         nByte := Ord((PosA+11)^);
  145.                         Write(hFileB, nByte);
  146.                         nByte := Ord((PosA+12)^);
  147.                         Write(hFileB, nByte);
  148.  
  149.                         // Yaw_Rate_Out
  150.                         nByte := Ord((PosA+13)^);
  151.                         Write(hFileB, nByte);
  152.                         nByte := Ord((PosA+14)^);
  153.                         Write(hFileB, nByte);
  154.                         // Yaw_Volt
  155.                         nByte := Ord((PosA+15)^);
  156.                         Write(hFileB, nByte);
  157.                         nByte := Ord((PosA+16)^);
  158.                         Write(hFileB, nByte);
  159.                         // Yaw_Temperature
  160.                         nByte := Ord((PosA+17)^);
  161.                         Write(hFileB, nByte);
  162.                         nByte := Ord((PosA+18)^);
  163.                         Write(hFileB, nByte);
  164.  
  165.                         // X_acceleration
  166.                         nByte := Ord((PosA+19)^);
  167.                         Write(hFileB, nByte);
  168.                         nByte := Ord((PosA+20)^);
  169.                         Write(hFileB, nByte);
  170.                         // Y_acceleration
  171.                         nByte := Ord((PosA+21)^);
  172.                         Write(hFileB, nByte);
  173.                         nByte := Ord((PosA+22)^);
  174.                         Write(hFileB, nByte);
  175.                         // Z_acceleration
  176.                         nByte := Ord((PosA+23)^);
  177.                         Write(hFileB, nByte);
  178.                         nByte := Ord((PosA+24)^);
  179.                         Write(hFileB, nByte);
  180.  
  181.                         // Battery_Reference
  182.                         nByte := Ord((PosA+25)^);
  183.                         Write(hFileB, nByte);
  184.                         nByte := Ord((PosA+26)^);
  185.                         Write(hFileB, nByte);
  186.  
  187.                         // Sacar marcador "Z"
  188.                         nByte := Ord('Z');
  189.                         Write(hFileB, nByte);
  190.                       End;
  191.                End;
  192.    End;
  193. end;

¿Alguna idea para que no pierda datos?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús