Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Protocolo Astm (https://www.clubdelphi.com/foros/showthread.php?t=77664)

lbidi 16-02-2012 19:23:30

Protocolo Astm
 
Estimados foristas :

¿alguien conoce el protocolo ASTM de un equpo medico ? En particular , un analizador de sangre. ( PENTRA 80 ).

Tengo la necesidad de acceder a la base de datos de este aparato e introducir los datos en mi base de datos. Por lo que vi, tiene solo un puerto serial para comunicar.

He buscado información sobre el protocolo en varios lados de internet en vano.

¿Alguien ha trabajado con este protocolo en delphi?

(Low-Level Protocol to Transfer Messages Between Clinical Laboratory Instruments and Computer Systems)

Mil gracias por cualquier informacion.

Saludos.

egostar 16-02-2012 19:51:19

Cita:

Empezado por lbidi (Mensaje 425292)
Estimados foristas :

¿alguien conoce el protocolo ASTM de un equpo medico ? En particular , un analizador de sangre. ( PENTRA 80 ).

Tengo la necesidad de acceder a la base de datos de este aparato e introducir los datos en mi base de datos. Por lo que vi, tiene solo un puerto serial para comunicar.

He buscado información sobre el protocolo en varios lados de internet en vano.

¿Alguien ha trabajado con este protocolo en delphi?

(Low-Level Protocol to Transfer Messages Between Clinical Laboratory Instruments and Computer Systems)

Mil gracias por cualquier informacion.

Saludos.


Yo no he trabajado con ese protocolo, pero en este docuemento te dice como funciona.

http://www.hedonics.ch/EN/Contents/A...nformation.pdf

El protocolo genérico es mas o menos así

Se envia el caracter ENQ (#5)
Se espera confirmacion caracter ACK (#6)
Se envia el primer paquete de datos STX[DATOS]ETX[BCC][CR+LF] (imagino que es para firmarse al equipo)
Se espera confirmacion caracter ACK (#6)
Se envia el segundo paquete de datos STX[DATOS]ETX[BCC][CR+LF] (imagino que es para firmarse al equipo)
Se espera confirmacion caracter ACK (#6)
......
Se envia el caracter EOT (#4) termina la transmisión

Dado que no conozco el formato de los paquertes de datos, requieres el manual del equipo para saber que necesitas, deberías acudir al proveedor del equipo para obtenerlo.

Saludos

lbidi 17-02-2012 13:41:47

Muchas gracias egostar por la info.

Saludos.

gobarrio 25-07-2012 03:08:31

re astm pentra 80
 
Hola ibidi resolviste tu problema, recien entro al foro y veo tu pregunta, decime si todavia lo necesitas yo te puedo ayudar

lbidi 23-08-2012 19:46:47

Hola gobarrio.

Si al final se contrato a alguien mas porque ya tenia la interfase hecha, pero si tu tienes algo
igual me gustaria saber algo mas sobre este tema..

Muchas gracias

Saludos

gobarrio 28-08-2012 05:21:24

pentra 80 astm
 
hola ibidi, primero te cuento que soy bioquimico y no un profesional de computacion, solo amateur y programo para mi uso, esto lo aclaro porque mis programas no son muy limpios ni tampoco versatiles, en nuestro laboratorio pusimos un pentra 80 y como el sistema es propio buscamos hacerle la interface, solo la hice unidireccional pues como trabajamos con codigo de barras ponemos los hemogramas en los racket y luego trasmitimos los resultados a una interface que luego de validar mandamos al sistema, en la base de datos usamos mysql. bueno te voy a copiar las rutinas, como soy nuevo en este foro no se cuanto puedo subir directamente.
Código Delphi [-]
procedure TForm3.FormCreate(Sender: TObject);
begin

  inicia(edit1.Text);

end;

{ahora abre el puerto y pone los parametros}

procedure Tform3.Inicia(baud: string);
 var
     CommTimeouts : TCommTimeouts;
     CommConfig: TCommConfig;
     sizeConfig :  Cardinal;
begin
   salidapentra := tstringlist.Create; // inicia la variable
   sPuerto := 'COM1';
   hCommFile := CreateFile(PChar(sPuerto),
     GENERIC_READ or GENERIC_WRITE, 0, nil,
       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  if hCommFile=INVALID_HANDLE_VALUE then begin
      ShowMessage('Unable to open for write '+ sPuerto);
  end;
   with CommTimeouts do
   begin
     ReadIntervalTimeout := 0;
     ReadTotalTimeoutMultiplier := 0;
     ReadTotalTimeoutConstant := 300;
     WriteTotalTimeoutMultiplier := 0;
     WriteTotalTimeoutConstant := 200;
   end;
     if not SetCommTimeouts(hCommFile, CommTimeouts) then
       raise Exception.Create('Problemas estableciendo CommTimeouts');
 
     GetCommConfig(hCommFile, CommConfig, sizeConfig);
     with CommConfig do
     begin
         dcb.BaudRate := strtoint(baud);    //9600;//38400;// <-- Se comunica a esa velocidad ????
         dcb.ByteSize := 8; //8;
         dcb.Parity   := 0;  //NOPARITY; //EVENPARITY;
         dcb.StopBits := 0;
     end;
     if not SetCommConfig(hCommFile, CommConfig, sizeConfig) then
     raise Exception.Create('Problemas al querer establecer la configuracion');
end;

// escritura de ACK para que responda el pentra ( el manda un ENQ)

procedure TForm3.Button1Click(Sender: TObject);
begin
  EscribirBuffer(chr(06));

end;


procedure Tform3.EscribirBuffer(lsMensaje: string);
 var
   NumberWritten:dword;
 begin
   if hCommFile = INVALID_HANDLE_VALUE then
     raise Exception.Create('No se puede enviar los datos');
   WriteFile(hCommFile, PChar(lsMensaje)^,
     Length(lsMensaje), NumberWritten, nil);
 end;
 

 function Tform3.LeerBuffer: string;
 var
   sTmp: string;
     c1: integer;
     chBuffer: array[0..255] of char;
     NumberOfBytesRead: dword;
 begin
   if hCommFile=INVALID_HANDLE_VALUE then
     Exit;
   if not ReadFile(hCommFile, chBuffer,
     sizeof(chBuffer), NumberOfBytesRead, nil) then
         raise Exception.Create('Imposible leer datos desde el puerto');
   for c1:= 0 to NumberOfBytesRead - 1 do
     sTmp:= sTmp+chBuffer[c1];
   result:=sTmp;
 end;

procedure TForm3.Timer1Timer(Sender: TObject);
var
resultado, practica : string;
lineas : integer;
contador : integer;
begin
  resultado := LeerBuffer;
  contador := strtoint(edit2.Text);
 if resultado <> '' then
   begin
     lineas := salidapentra.Count;
        practica := resultado[11]+resultado[12]+resultado[13];
        //((resultado = chr(4)) and (lineas > 10)) or (resultado[3] = 'L') or ((resultado[3] = 'P') and (lineas > 10))
        if practica = 'MPV' then
         begin
           CopiaRenglon(resultado);
           PasaaTabla;
           contador := contador + 1;
           edit2.Text := inttostr(contador);
           EscribirBuffer(chr(06));
         end
         else
         begin
           if resultado = chr(05) then
              begin
               EscribirBuffer(chr(06));
              // Leer;
              end
             else if resultado = chr(4) then
              begin
              EscribirBuffer(chr(06));
              salidapentra.Clear;
             //  timer1.Enabled := false;
            //   spblee.Caption := 'Presionar para leer el Puerto';
              end
              else
              begin
               CopiaRenglon(resultado);
               EscribirBuffer(chr(06));
             //  Leer;
              end;
         end;
   end; // del if resultado
end;

procedure Tform3.Leer;
var
resultado : string;
begin
 resultado := LeerBuffer;
 if resultado = '' then
   begin

     Leer;
   end
   else
   begin
    if resultado = chr(4) then
     begin
       PasaaTabla;
       Leer;

     end
     else
     begin
       if resultado = chr(05) then
          begin
           EscribirBuffer(chr(06));
           Leer;
          end
          else
          begin
           CopiaRenglon(resultado);
           EscribirBuffer(chr(06));
           Leer;
          end;
     end;
   end;

end;

procedure Tform3.CopiaRenglon(renglon: string);
begin
 // salida.Lines.Add(renglon);
  salidapentra.Add(renglon);
end;

como veras utilizo un timer para ir leyendo, y un campo memo (salidapentra) para ir cargando la lectura solo porque fue mas facil

espero te sirva, ahora compramos un mindray bs400 y estamos tratando de hacer la interface esta es por tcp/ip pero tambien en el protocolo ASTM
asi que estoy estudiando el manejo de socket en delphi de lo qque no se nada.

espero te sirva, no te paso la interface pues esta muy orientada a mi base de datos y no sirve para ninguna mas.

saludos

gobarrio 28-08-2012 05:22:53

aclaracion
 
el campo memo lo use en una version anterior en esta es un tstringlis

lbidi 05-10-2012 22:09:47

Muchisimas gracias gobarrio.

Saludos


La franja horaria es GMT +2. Ahora son las 05:37:05.

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