PDA

Ver la Versión Completa : Componente Tcomport


IVAND
14-05-2005, 20:58:49
Hola a todos

Estoy empezando un sistema para comisariatos estos tienen unas balanzas electronicas con salida rs232, pues bien me he bajado el Tcomport y funciona perfecto su componente Tmonitor ase exactamente lo que deseo , pero la pregunta es la siguiente

1.- Alguien tiene experiencia en este componente , como tomo el dato que produce el Tmonitor , hay un evento que lanza el valor pero me gustaria es saber la forma en que tmonitor trata los datos que recibe la balanza lanza el dato por demanda es decir que siempre lo esta enviando y eso produce un efecto de parpadeo en la ventana cuando un lo asigna en este caso a un Tedit, que me aconsejan



De antemano
Gracias

marcoszorrilla
14-05-2005, 22:15:13
Para el parpadeo mírate la propiedad DoubleBuffer.

Un Saludo.

IVAND
15-05-2005, 01:45:05
Gracias Marcos , Probare y avisare

IVAND
19-05-2005, 01:38:20
Te comento que he probado lo que me indicas pero sigue el parpadeo ya no c que hacer que alguien me de una luz ... Gracias

José Arce
19-05-2005, 23:29:05
Hola ivand, prueba a subir la propiedad PollingDelay, si la has dejado por defecto la tendrás a 50 milisegundos, súbela a 150 o 200, yo lo solucione así.

Un saludo José Arce

IVAND
20-05-2005, 16:25:42
Hola Jose, probare lo que comentas aunque me estoy dando cuenta el envio de informacion esta bien pues la actualizacion debe ser inmediata el problema me parece es en mantener estatico el valor enviado por el puerto a un campo en este caso lo estoy enviando a un Tedit. cuando se actualiza se produce el parpadeo propio de la entrada contunia del dato

El 2do, problema es manejar la cadena que se envia al puerto si te as fijado el componente Tmonitor ase lo que yo quiero exactamente pero como lo hace es la gran pregunta ;)

Nota : Si hubiera una manera de tomar el dato tal como lo muestra el componente Tmonitor estaria mi problema solucionado



Gracias por tu respuesta , probare y comentare

José Arce
22-05-2005, 21:55:54
Hola ivand, quizás el problema sea que va mostrando caracteres según los vas recibiendo, lo que yo hago es ir metiendo los caracteres recibidos en una variable string, y cuando me llega el carácter de fin de transmisión entonces la muestro, el componente que usas no lo conozco, pues por Tcomport hay varios con el mismo nombre, pero todos son muy parecidos, si te da lo mismo cambiar de componente te puedo enviar el que uso junto con una rutina de lectura hecha para delphi5(no creo que te de problemas en una versión superior), ya comentaras.

Un saludo José Arce

marcoszorrilla
22-05-2005, 22:58:47
Hola José Arce:

Convendría que esa rutina la pusieras en este hilo así todos podrán ver el código probarlo y comentarlo, naturalmente eres muy libre de no hacerlo pero como el Foro es un lugar para compartir conocimientos, sería de agradecer si así lo hicieres.

Un Saludo.

IVAND
26-05-2005, 15:23:23
Hola José

Primero gracias por tu consejo, es gratificante para los miembros de este foro saber que siempre puede contar con alguien que te de la mano , te agradeceria si me envias la rutina :) pues eso ayudaria mucho en mi labor

Nota : No me interesa utilizar uno o otro componete lo que me interesa son los resultados , ademas como se cuando se acaba el fin de transmicion de la cadena




De antemano Gracias

José Arce
26-05-2005, 17:20:50
Hola ivand, estoy de viaje y no tengo la rutina a mano, pero en cuanto este por casa la expondre en el foro, el caracter de fin de transmision lo tienes en el protocolo de comunicaciones en el manual de la bascula (normalmente suele ser el 3 o el 13), el componente tambien lo expondre.

Un saludo Jose Arce

Mosis2k2
01-03-2007, 05:39:11
Hola, lo que puedes hacer es tomar la cadena de caracteres recibidos y guardarlos en una variable, y cada vez que recibes la cadena del puerto serial, compararla con la cadena anterior, y si son diferentes mostrarla de lo contrario no mostrar nada.

hugobenitez
13-06-2011, 13:00:18
Hola marcoszorrilla: te hago una consulta, y de te agradezco de antemano si me puedes ayudar. Hice un programa donde utilizo el componente TComPort, el mismo lo agregue a mi paleta de componentes compilando el DPK y luego la instalacion, hasta ahi todo bien, anda en el programa siempre y cuando tenga delphi instalado. Mi problema empieza cuando le llevo a mi cliente el exe y me da errores como: "Win32 Error. Code 6. Controlador no Valido". Podrias decirme que me falta o que tengo que hacer, entiendo que el componente no llego al EXE, apesar de que desctive la casilla "Build with runtime packages" en Project-Options.

Mil gracias.

Mosis2k2
14-06-2011, 01:44:46
Hola marcoszorrilla: te hago una consulta, y de te agradezco de antemano si me puedes ayudar. Hice un programa donde utilizo el componente TComPort, el mismo lo agregue a mi paleta de componentes compilando el DPK y luego la instalacion, hasta ahi todo bien, anda en el programa siempre y cuando tenga delphi instalado. Mi problema empieza cuando le llevo a mi cliente el exe y me da errores como: "Win32 Error. Code 6. Controlador no Valido". Podrias decirme que me falta o que tengo que hacer, entiendo que el componente no llego al EXE, apesar de que desctive la casilla "Build with runtime packages" en Project-Options.

Mil gracias.

Hola hugobenitez.

Yo tengo un componente TComport, que no estoy seguro de si sera el mismo, pero ese componente lo he usado con WinXP, WinVista, Win7, sin problema alguno, si te interesa, ponte en contacto conmigo: jcmr1976@hotmail.com

newtron
14-06-2011, 09:34:58
Hola.

Aquí te envío un ejemplo de la captura del evento "Receivedata" del componente por si te sirve.



procedure TFormularioVentasTactil.PesoReceiveData(Sender: TObject;
DataPtr: Pointer; DataSize: Cardinal);
var
iLastLine, i: integer;
s, ss: string;
begin
//
//Convertimos los datos recibidos en una cadena
s := StringOfChar(' ', DataSize);
Move(DataPtr^, pchar(s)^, DataSize);

//Salimos si recibimos el caracter nulo
while Pos(#0, s) > 0 do
Delete(s, pos( #0, s ), 1);

//Comprobamos que la cadena recibida no este vacia o que el valor que esta recibiendo sea '0000000'(que no hay nada en el peso)
if (s = '') then begin
Exit;
end;
if (Pos('0000000',s) = 1) and (Not Pesamos) then exit;

if Pos('0000000',s)=1 then
Pesamos:=False
else
Pesamos:=True;

// Remove line feeds
i := pos( #10, s );
while i <> 0 do begin
delete( s, i, 1 );
i := pos( #10, s );
end;

// Don't redraw the rich edit control until we finished updating it
//IncomingRichEdit.Lines.BeginUpdate;
// Get last line index
iLastLine := NTMemo1.Lines.Count-1;
// If the rich edit is empty...
if iLastLine = -1 then begin
// Remove line feeds from the string
i := pos( #10, s );
while i <> 0 do begin
delete( s, i, 1 );
i := pos( #10, s );
end;
// Remove carriage returns from the string (break lines)
i := pos( #13, s );
while i <> 0 do begin
ss := copy( s, 1, i-1 );
delete( s, 1, i );
NTMemo1.Lines.Append( ss );
i := pos( #13, s );
end;
NTMemo1.Lines.Append( s );

end else begin
// String to add is : last line added + new one
s := NTMemo1.Lines[iLastLine] + s;
// Remove carriage returns (break lines)
i := pos( #13, s );
while i <> 0 do begin
ss := copy( s, 1, i-1 );
delete( s, 1, i );
if iLastLine <> -1 then begin
NTMemo1.Lines[iLastLine] := ss;
iLastLine := -1;
end else begin
//introducimos cantidad en el grid de ventas
NTMemo1.Lines.Append( ss );
end;
if ss<>'0000000' then begin
MiVenta.CambiaModoEdit(tEntradaDatos);
NtEditTotal.TomaValor(ss);
end else begin
Miventa.CambiaModoEdit(tPresentaTotal);
end;
i := pos( #13, s );
end;

if iLastLine <> -1 then
NTMemo1.Lines[iLastLine] := s
else
NTMemo1.Lines.Append( s );
end;

end;



Saludos

hugobenitez
15-06-2011, 13:55:41
Hola Newtron, te agradezco enormemente tu aporte!! te cuento tengo el TComPort 3.0, el tema fue que el puerto que habia programado para la balanza era el COM1 y el puerto en mi cliente era COM3 y claro, al intentar acceder al componente me daba ese error. El tema no termino ahi, despues de haberme dado cuenta de mi gran error, puse a imprimir una TM88IV (epson termica USB), que al enviar el comando de impresion se me colgaba el programa. La solucion fue el sagrado TRY EXCEPT en un evento del TComPort porque al enviar la impresion "no se porque" leia otros numeros que generaban un error en el TComPort. El codigo para arreglarlo fue:

procedure TCustomComPort.DoRxChar(Count: Integer);
begin
try
if Assigned(FOnRxChar) then
FOnRxChar(Self, Count);
except
end;
end;

El TComPort que tengo me lee los datos de la balanza desde este evento, y aqui se generaba el error mas grave.

Espero sirva mi pequeñito aporte. Un Abrazo a ti Newtron y a todos los del club que me ayudaron a aprender un monton de cosas!!!!