PDA

Ver la Versión Completa : como leer datos enviados por COM3 ( TurboPower Async Professional.)


Racso2006
31-10-2018, 18:36:33
Buenas tardes.

llevo ya un tiempo investigando pero se me esta complicando mas de lo que pensaba.

simplemente tengo un scaner de DNI que envia los datos leidos por el COM3 y simplemente los tendria que poder leer y hacer lo que quisiera con ellos.

he estado utilizando el TurboPower Async Professional pero no soy capaz de hacerlo funcionar, teoricamente en el ApdComPort1TriggerAvail poniendo el ApdComPort1.GetChar tendria que tener dichos datos pero se que me faltan muchas cosas antes, porque en ningun momento le estoy diciendo en que puerto tiene que buscar y cuando tiene que buscar si se mandan datos.

es la primera vez que hago algo asi y estoy un poco perdido.

muchas gracias de antemano.

Casimiro Notevi
31-10-2018, 20:13:20
Ve mirando los enlaces de final de página, abajo del todo, a ver si te sirve alguno.

Racso2006
01-11-2018, 14:03:48
antes de postear esto, busque por todo sin exito (incluido esos posts que me indicas)

egostar
01-11-2018, 16:45:35
antes de postear esto, busque por todo sin exito (incluido esos posts que me indicas)

Yo he utilizado por muchos años estos componentes sin problema, si no te urge para ahora mismo, llegando a casa por la noche (GMT-6) veo el código y subo un ejemplo de uso.

Saludos

Racso2006
01-11-2018, 18:51:46
no me urge mucho.

muchas gracias

egostar
02-11-2018, 04:48:19
Lo prometido.



var
CRTrig: Word;
Linea: String;

//Parametros de Comunición [COM1,1200,None,8,1]
procedure TLector.InicializaCOM;
begin
ApdComPort1.ComNumber := 1;
ApdComPort1.Baud := 1200;
ApdComPort1.DataBits := 8;
Case Parity of
1 : ApdComPort1.Parity := pNone;
2 : ApdComPort1.Parity := pOdd;
3 : ApdComPort1.Parity := pEven;
4 : ApdComPort1.Parity := pMark;
5 : ApdComPort1.Parity := pSpace;
end;
ApdComPort1.StopBits := 1;
ApdComPort1.Open := True;
CRTrig := ApdComPort1.AddDataTrigger(#13, False);
end;

procedure TLector.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I : Word;
begin
for I := 1 to Count do
Linea := Linea + ApdComPort1.GetChar;
end;

procedure TLector.ApdComPort1TriggerData(CP: TObject; TriggerHandle: Word);
begin
if TriggerHandle = CRTrig then
begin
Linea := StringReplace(Linea,#13,'',[rfReplaceAll]);
Linea := StringReplace(Linea,#10,'',[rfReplaceAll]);
try
Memo1.Lines.Add(Linea);
except
Memo1.Clear;
Memo1.Lines.Add(Linea);
end;
Linea := '';
end;
end;


Espero te ayude.

Saludos

Racso2006
02-11-2018, 08:01:58
muchas gracias, mas tarde lo probare y informo del resultado, muchisimas gracias por su ayuda

Racso2006
02-11-2018, 08:54:03
buenas, demomento me surge una duda y es sobre el procedure TLector.InicializaCOM
que es el InicializaCOM? un componente del turbo power astyc? seguramente es lo que me faltaba cuando lo intentaba hacer, pero no encuentro nada sobre el InicializaCOMm de donde lo saco?

muchas gracias de nuevo

Bolox
02-11-2018, 13:35:27
No tengo ni idea de como va ese componente, pero TLector.InicializaCOM es el procedimiento que crea egostar. No creo que te lo de el componente sino que lo inicia él.

Racso2006
02-11-2018, 14:37:19
eso lo he pensado tambien, que sea un procedure que crea el aposta, pero no veo donde llama ese mismo procedure para que se active, por lo que no me cuadra

egostar
02-11-2018, 15:12:16
buenas, demomento me surge una duda y es sobre el procedure TLector.InicializaCOM
que es el InicializaCOM? un componente del turbo power astyc? seguramente es lo que me faltaba cuando lo intentaba hacer, pero no encuentro nada sobre el InicializaCOMm de donde lo saco?

muchas gracias de nuevo

No tengo ni idea de como va ese componente, pero TLector.InicializaCOM es el procedimiento que crea egostar. No creo que te lo de el componente sino que lo inicia él.

Hola

Bueno, no pensé que provocaría confusión el procedimiento InicializaCOM, es un procedimiento que mando llamar (entre otras cosas más) cuando la forma es creada.




TLector = class(TForm)
//...
private
{ Private declarations }
procedure InicializaCOM;
public
{ Public declarations }
end;

implementation

procedure TLector.FormCreate(Sender: TObject);
begin
//..
Parity := 1;
InicializaCOM;
//..
end;


Saludos

Racso2006
02-11-2018, 16:00:08
perfecto, muchisimas gracias por su ayuda, hasta el lunes no lo podnre en practica debido a que me he ido de viaje y hoy no tenia dicho scaner de DNIs, pero el lunes lo comprobare sin falta

Racso2006
05-11-2018, 16:01:04
buenas tardes egostar, vuelvo a agradecer su ayuda, no obstante ahora que lo he probado me surje un problemilla, y es que con mi programa de lectura abierto ocupo el com3 por lo que el programa del scaner no se puede comunicar con el para mandarle escanear, ya que cuando lo tengo abierta el programa del scaner no me deja conectar al com3.

por lo que necesitaria saber como mandar ordenes a traves del COM3, he buscado mucha info pero hay algo que me lia mucho y es que casi todo lo que encuentro utilizan el comport y no el apdcomport, yo no tengo ningun componente comport por lo que creo que no interpreto bien toda la infomacion que encuentro.

no obstante me podria indicar como poder mandar una orden a traves del com3 y asi despues de dicha orden (que buscare en el manual del scaner) el mismo scaner me enviara los datos y el codigo anterior lo podra recibir (espero :P)

muchas gracias por su ayuda

egostar
05-11-2018, 22:34:56
buenas tardes egostar, vuelvo a agradecer su ayuda, no obstante ahora que lo he probado me surje un problemilla, y es que con mi programa de lectura abierto ocupo el com3 por lo que el programa del scaner no se puede comunicar con el para mandarle escanear, ya que cuando lo tengo abierta el programa del scaner no me deja conectar al com3.

por lo que necesitaria saber como mandar ordenes a traves del COM3, he buscado mucha info pero hay algo que me lia mucho y es que casi todo lo que encuentro utilizan el comport y no el apdcomport, yo no tengo ningun componente comport por lo que creo que no interpreto bien toda la infomacion que encuentro.

no obstante me podria indicar como poder mandar una orden a traves del com3 y asi despues de dicha orden (que buscare en el manual del scaner) el mismo scaner me enviara los datos y el codigo anterior lo podra recibir (espero :P)

muchas gracias por su ayuda

Hola

No puedes ejecutar dos aplicaciones leyendo el mismo puerto COM, no se que es lo que intentas hacer, pero si quieres leer con dos aplicaciones un puerto serial lo único que se puede hacer es que una interactua con el dispositivo y la otra esté monitoreando la comunicación entre ambos dispositivos conectados.

Si puedes decirnos que pretendes hacer buscaríamos alguna alternativa.

Saludos

Racso2006
06-11-2018, 08:15:11
nono, no pretendo leer con dos aplicaciones el mismo pueto com, era solo un dato, lo unico que neceshito saber es como enviar datos a traves del puerto com, anteriormente de dijiste como recibirlos, y no puedo comprobar si los recibo sin antes enviar la orden de que dicho scaner lea el DNI. por lo que necesito es muy simple yo lo se, pero no tengo narices de encontrar informacion correcta sobre este componente , perdon por molestar tanto.

egostar
06-11-2018, 15:49:28
nono, no pretendo leer con dos aplicaciones el mismo pueto com, era solo un dato, lo unico que neceshito saber es como enviar datos a traves del puerto com, anteriormente de dijiste como recibirlos, y no puedo comprobar si los recibo sin antes enviar la orden de que dicho scaner lea el DNI. por lo que necesito es muy simple yo lo se, pero no tengo narices de encontrar informacion correcta sobre este componente , perdon por molestar tanto.

Hola

No tengo a la mano mi maquina para ver el proceso de escritura, pero si no me equivoco puedes utilizar las funciones writeString(), writeChar() e incluso hay otra llamada Output().

Si no logras encontrar la forma de escribir al puerto mas tarde subo un ejemplo que he utilizado para esos menesteres.

Ya sabes (GMT-6) :)

Saludos

Racso2006
06-11-2018, 19:50:51
ok, muchas gracias por tu ayuda de nuevo, dentro de 14 horas volvere a probar, que aqui ya es muy tarde y despues de cenar no me pongo a programar, sino no duermo bien xDDD

egostar
07-11-2018, 08:17:34
Hola


procedure TForm1.Button1Click(Sender: TObject);
begin
ApdComPort1.PutString('Se puede enviar una cadena.'#13);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//SE puede enviar un caracter
ApdComPort1.PutChar('X');
ApdComPort1.PutChar(#13);
end;


Saludos

Racso2006
07-11-2018, 12:06:58
muchisimas gracias, todo perfecto