![]() |
necesito experto en comport !!
Estoy tratando de comunicarme a travez de COM1 con una pesa-scaner PSC magellan con readstring y writestrng y no lo he logrado. Alguien sabe como hacerlo ?
|
¡Hola a todos!
Elbert: Para comunicación por puertos COM y cuestiones similares, te recomiendo los componentes TurboPower Async Professional. Dinos, ¿qué es una «pesa-scaner PSC magellan»? Un abrazo escaneado. Al González. :) |
comunicacion serial
Saludos , gracias por contestar . La pesa magellan es un lector de codigos de barra con pesa ( para medir peso ) usada en los supermercados . Tengo un programa de punto de venta ( caja registradora ) y necesito leer el puerto serial para saber el codigo de barra y el peso de el producto . Trate con readstring pero no lograba enteder lo que leia , estoy tratando con un componente Asinc pro , puedo leer pero no se como detectar cuando hay algo en el buffer , ni cuantos caracteres tengo que leer .
Voy a tratar el componente que me recomiendas. Gracias |
Bueno, en primer lugar seria interesante saber el Baud Rate empleado y que cantidad de informacion estas enviando por segundo.
Pero por lo pronto el comport es una buena solucion a tu problema el siguiente codio te puede ayudar a detectar la cantidad de datos recibidos y cuantos datos debes leer. Hay dos formas de leer el buffer de estrada, en realidad son dos eventos el que yo he utilizado es el evento OnRxChar, en est evento insertas el siguiente codigo void __fastcall TForm1::ComPortRxChar(TObject *Sender) { int x; unsigned char buf; x=ComPort->InputCount(); //en x esta el numero de bytes recibidos while(ComPort->InputCount()) { buf=ComPort->ReadByte(); ComPort->WaitForReadCompletion(); //en buf esta cada uno de los bytes recibidos } } Esta forma de leer tiene 2 inconvenientes y es que si envias muchos datos a un baud rate bajo puedes perder parte de la informacion para esto en el momento en que abres el puerto incrementas el valor del bufer de entrada con ComPort->BufferSize->Inpout=10000, por ejemplo. el otro problema es que la lectura del puerto podria tornarse lenta en cuanto a que estas analizando la informacion byte a byte, en este punto puedes utilizar los otros componentes de lectura tales como el ReadString o el Read o cualquier otro, pero estos tienen un fin de cadena especifico y debes tener cuidado con eso, el la ayuda del comport especifican algunos de estos fines de cadena pero esta algo incompleto. En este momento estoy probando con el componente Read que te permite leer una cantidad de datos determinada del buffer de entrada pero aun no se como funciona bien y lo estoy probando haci que te reboto la pregunta, si encuentras alguna informacion al respecto de la directiva read del comport me la podrias facilitar? Espero que esto te ayude. |
necesito experto en comport!!
Bueno, en primer lugar seria interesante saber el Baud Rate empleado y que cantidad de informacion estas enviando por segundo.
Pero por lo pronto el comport es una buena solucion a tu problema el siguiente codio te puede ayudar a detectar la cantidad de datos recibidos y cuantos datos debes leer. Hay dos formas de leer el buffer de estrada, en realidad son dos eventos el que yo he utilizado es el evento OnRxChar, en est evento insertas el siguiente codigo void __fastcall TForm1::ComPortRxChar(TObject *Sender) { int x; unsigned char buf; x=ComPort->InputCount(); //en x esta el numero de bytes recibidos while(ComPort->InputCount()) { buf=ComPort->ReadByte(); ComPort->WaitForReadCompletion(); //en buf esta cada uno de los bytes recibidos } } Esta forma de leer tiene 2 inconvenientes y es que si envias muchos datos a un baud rate bajo puedes perder parte de la informacion para esto en el momento en que abres el puerto incrementas el valor del bufer de entrada con ComPort->BufferSize->Inpout=10000, por ejemplo. el otro problema es que la lectura del puerto podria tornarse lenta en cuanto a que estas analizando la informacion byte a byte, en este punto puedes utilizar los otros componentes de lectura tales como el ReadString o el Read o cualquier otro, pero estos tienen un fin de cadena especifico y debes tener cuidado con eso, el la ayuda del comport especifican algunos de estos fines de cadena pero esta algo incompleto. En este momento estoy probando con el componente Read que te permite leer una cantidad de datos determinada del buffer de entrada pero aun no se como funciona bien y lo estoy probando haci que te reboto la pregunta, si encuentras alguna informacion al respecto de la directiva read del comport me la podrias facilitar? Espero que esto te ayude. |
Primero que todo el utilizar los componentes TurboPower Async Professional Para comunicacion serial RS232 es un punto en el cual no hay discusion ya que son el estandard en este area.
Una vez dicho esto y asumiendo que ya instalaste los componentes vamos a utilizar el componente TApdComPort. Para recibir informacion desde el dispositivo En TApdComPort debes utilizar el evento OnTriggerAvail . Ej : Código Delphi [-] procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var i : integer; c : Char ; begin for i := 1 to Count do begin c:= ApdComPort1.GetChar; //Aqui puedes consultar por el caracter retornado //segun la documentacion del dispositivo Case c of 'A' :Proc1; '$' :Proc2: '%':Proc3; End; //o puedes acumular en un buffer (String) los caracteres Cadena:=Cadena+c; end; end; No olvides declarar lo siguiente al inicializar la rutina Código Delphi [-] ApdComport1.AddDataTrigger('Prueba',True) Para enviar Datos utiliza Código Delphi [-] ApdComport1.PutChar('A'); // o bien ApdComport1.PutString('Esta es una prueba'); Saludos. |
Siguiendo con el asunto del Apro, la forma mas fácil de recibir paquetes es usando el componente ApdDataPacket, solo requieres conocer el inicio de la cadena y el final de la cadena o al menos uno de ellos.
En protocolos normales se inicia con STX (02h) y termina con ETX (03h), algunos protocolos no tienen un caracter fijo de inicio pero si tienen LF+CR (10h,13h). Con este componente te olvidas de buscar dentro de los caracteres recibidos el paquete que deseas. Aqui un ejemplo:
Saludos. Edito: Por cierto, este componente APro me lo recomendó Al Gonzalez hace mucho tiempo, gracias Al me ha servido increiblemente. |
ayuda egostar o rruz
disciulpen que me meta en el hilo, pero tengo un problema en el archivo tpapro docs tpapro407a3 viene una descripción de cómo se instalan los paquetes o componentes del archivo tpapro407a3 pero no funciona, quisiera que me orientaran paso a paso en la instalación de estos paquetes si no es mucha molestia. gracias
|
de acuerdo...
bueno, en primer lugar les doy las gracias por ayudarme a resolver este inconveniente, yo programo basicamente en builder 6, sin embargo comprendi el mensaje que me enviaron y ya he logrado solucionar el problema que tenia.
|
Freeware para puertos seriales
Hola a todos, yo he hecho algo parecido con basculas y todo lo he resuelto con un componente freeware para delphi: TSerialNG. Espero que con esto resuelvas tus problemas. Byee.:)
|
La franja horaria es GMT +2. Ahora son las 07:47:50. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi