Serial Port
Hola Amigos.
Tengo el siguiente codigo.
Me explico. Yo quiero mandar dos hex 02 y 00 al puerto serial.Pero al correr este programita me da en el monitor que tengo de serial port eso mismo pero en ascii 30 32 30 30 y yo quiero que me de solo hex 02 00 . La pregunta. Que estoy haciendo mal? Gracias y un Saludo. |
Cita:
Salud OS |
Un Saludo Egostar.
No pues el monitor dice que eso es exactamente lo que le hacia falta al codigo. Un millon de gracias Carnal.:) |
Cita:
Salud OS |
WriteStr
No utilices WriteStr porque lo que envías es un String. Seguro que tienes otra función para enviar tus Hex.
|
Hola Canvilem.
La verdad estoy estudiando el comportamiento de un programita que me gustaria emular.Solo puedo leer la parte que corresponde a un micro que lo acompaña.La parte de la aplicacion esta escrita dice que en GUI para windows.Yo quiero hacer algo parecido pero en Delphi y es donde entra la tareita que me he puesto para comenzar con mi primer programita Delphi.(jajajaja nada facil pero esos retos me encantan).Para esto tengo algunas herramientas y todo el tiempo del mundo,(no me apura).La herramienta mas importante para esta primera etapa es esta.Serial con este programita puedo ver el protocolo entre el (target y su esclavo)Los hex esos 02 00 son los que manda el pc al micro OnCreate y espera que el micro le mande 48 69 2D 4C 4F 47 49 43 la aplicacion los compara y si son igual a lo que espera termina de habrir la aplicacion de lo contrario te daria un error " no establecio la comunicacion" algo asi. Tengo que seguir estudiando el tema y espero, ir superando las etapas una por una. Un Saludo. |
Hola Amigos.
Estoy tratando de recivir por el serial port una data y llevarla a un edit.Pero no lo logro.
Que esta mal aqui? Un Saludo. |
Cita:
Salud OS |
Leyendo un hilo en ASM donde muestras una página con el ejemplo de un code delphi vi esto que me parecio particularmente curioso
Te recomiendo que hagas un trace de tu codigo y ver que es lo que tiene el String Data. Salud OS |
Hola Egostar.
Creo entender la naturaleza del problema y a mi modo de entender.Es un problema de tiempo de ejecucion.Debo darle un tiempo entre el 02 y el 00 que mando al micro.
En la aplicacion original se maneja un timer (12 mhz). Existe alguna forma de frenar el tiempo de ejecucion de una aplicacion Delphi sin importar la velocidad del PC? Se puede crear un edit donde se pueda crear el tiempo de ejecucion de una aplicacion? Rodando este programita puedo ver que el micro no responde, esto lo veo en el monitor de serial port que utilizo.Y creo que al no tener un tiempo de retardo entre el 02 y el 00 el micro interpreta 0200 y el tiene que comparar primero 02 ejecutar una rutina luego 00 y determina que hacer en ese caso.( mandar 8 hex de retorno al serial port) Un Saludo. |
Cita:
Salud OS |
Esto es lo que me da el monitor de serial port:
Com1 Opened Baud Rate=56000 RTS Signal=False DTR Signal=False Line Control Change: None- 8- 1 Write 1 Bytes: 02 Write 1 Bytes: 00 Read 8 Bytes: 48 69 2D 4C 4F 47 49 43 Com1 Closed. Eso es lo que me da el monitor al espiar entre el programa y el micro original. El programita del micro esta configurado a interrumpir cualquier funcion y hacerle caso al serial port al recibir algo el lo compara y sigue una rutina en este caso al recibir 02 y luego de un tiempo (x) recibir el 00 el pasa a una rutina que manda al serial port de regreso esa cadena de 8 hex (que yo las puedo cambiar, todo lo que esta en el micro, lo puedo cambiar sin problemas, solo que despues de entender bien el funcionamiento de la aplicacion, cambiare algunas cosas del mismo. En el programa original del pc utilizan como decia un "Target Clock" esto en un edit para poder alterarlo. En realidad el clock del micro no se lo pueden alterar por sofware, entonces entiendo que estan frenando por asi decirlo al pc y que los hex 02 y 00 entren en un tiempo de separacion que le de tiempo al micro de manipularlos, compararlos y tomar decicion de que hacer. Un Saludo. |
Para hacer pausas entre cada envio se usa la función Sleep(), puedes ir jugando con los valores, tal vez tambien necesites hacer alguna pausa antes de leer el puerto.
Yo haría una pausa mas larga, por ejemplo 120 ms entre envio y envio y una pausa de 256 ms antes de leer el puerto.
Salud OS |
Buano ya cambie el tiempo de Sleep a diferentes parametros y nada.Yo espero que el micro mande los 8 hex y puede que los este mandando.Lo que uso para monitoriar el serial port es un programa 100% software (no usa cables para nada.Solo monitorea las actividades del serial port y no que pasa en su pin de entrada.El micro no espera que el programa lo quiera recibir o no,el solo necesita recibir dos hex 02 y 00 entonces manda al serial port los 8 hex antes mencionados.Si el programa los espera los leeara sino se los pierde,pero el micro no entiende eso.La rutina del micro para mandar algo al puerto serial no esta en dependencia de si el pc los quiere leer o no.(yo entendiendo esto esperaba leerlos en el monitor)Pero si este fuera con cables y estubiera en otra pc los estaria mirando.Ahora si quiero ver si el micro los manda y como el monitor que tengo para ello solo me dira que es lo que el serial port esta recibiendo tendre que estar en la aplicacion al final de esos dos hex 02 y 00 que la aplicacion entre a leer el serial port.
Puede que siga confundido. Un Saludo. |
Cita:
Abre hiperterminal, configura los parametros de comunicacion, envia el archivo que adjunto (Menú Transferir, Enviar Archivo de texto) y ve lo que regresa el dispositivo. El primer hexa, contiene los dos caracteres 02 y 00, los otros son por separado. Salud OS |
Una pregunta, veo que estas tratando de usar una velocidad de Baud Rate=56,000, pero.... acaso no será Baud Rate=57,600
Salud OS |
Yo nunca he usado hiperterminal, no tengo idea ni como hacerlo.Ahora bien tengo un RealTerm:Serial Capture Program y acabo de configurarlo a los parametros del micro, le puce los hex 02 00 seguidos y me dio la respuesta del micro con su cadena de 8 hex.luego los mande por separado manual en dos botones primero el 02 y luego el 00 y me dio la misma respuesta.El micro esta funcionando bien, al parecer es que el programa que uso de monitor como es por software si no mira actividad en el serial port no me lee nada.
Tengo que en la aplicacion delphi despues de mandarle esos hex estar recibiendo el serial port. Creo que por eso no miro nada en el otro monitor. |
Ya cambie la velocidad tambien.
Cita:
|
Hice un pequeño programa para capturar lo que se recibe en el puerto, ademas le he puesto las señales del puerto serial para ver cuando se envia y cuando se reciben caracteres y el estado de otras señales importantes.
Espero que esto funcione. Salud OS |
Eso esta perfecto.
Cuando lo ruedo con el micro me da los 8 hex, las luces solo son TX and RX. Dime algo que configuracion tiene el serial port en ese programita? Un Saludo. |
Cita:
Estoy usando los componentes Apro, este es el código que estoy usando en el programa
Salud OS PD. Te paso el fuente, pero requieres de los componentes que te menciono. |
Tengo que aprenderme ese componente Apro.
A este: Le falta dejar el serial port reciviendo, que es lo que no logro hacer.Me da error. Un Saludo. |
hola egostar puedes mostrar el codigo fuente de ese programa que hiciste
|
Cita:
Cita:
Salud OS |
Hola Egostar.
Si el ComPort Library version 3.10 de Dejan Crnila es el que uso y lo encontre en un hilo de aqui del foro. Yo entro a Google y aqui en en el foro a ver hilos y referencias sobre el comport.Tomo algunos codigos y trato de rodarlos, pero ya te digo me da errores algunas veces tres y tratando de repararlos cuando vengo a ver tengo 10 jajajajajajaja.Algun dia lo entendere mejor o al menos me dejara jugar con el. Un Saludo. |
Pues ya he visto tu componente, pero no veo por ningun lado el evento
Sin embargo, hice un programita y si funciona. Salud OS PD: Lo hice con Turbo Delphi, espero puedas abrir el fuente. :) |
Hola Egostar.
Si el problema es que tengo dos ComPort en mi PC y esa fue la conficion.Estaba con un comport usando procedimientos de que no tenia.
Es que existen dos comport con el mismo nombre y diferentes componentes( yo en mi pc los llamo diferentes el otro es "PuertoCom" en mi pc.Pero si miro Google encuentras codigos y hay que tener cuidado al menos yo que estoy comenzando en esto y puedo cometer el error de usar un componente que no existe en un comport aunque se llame comport. Deja correr ese programita que me mandaste a ver que hace y estudiar el codigo. PD: En ese linck que mirastes ayer del hilo asm ese es otro comport y no el comport de Dejan Crnila por ejemplo. Un Saludo. |
Bueno ya estoy recibiendo los 8 hex de retorno del micro y una de las cosas que necesitaba era poder combertir a hex.Con este codigo ya esta superado.
Un Saludo. |
Esta parte del codigo la cambie.
Para que lo recibido fuera combertido a hex. Un Saludo. |
Pues que bien que ya estes recibiendo la información, ahora como decimos por aca, a coser y cantar. :D:D:D
Salud OS |
Hola Egostar.
Cita:
Tengo que jugar mas con esos hex y poderlos manipular.El otro paso es poder contarlos, o compararlos y si es= continuar el programa de lo contrario habrir una ventana donde me diga que no establece comunicacion ( algo asi) estoy estudiando un componente de ese mismo comport "timer".Yo en asm para micros es tarea facil el compara una data y si es = hacer algo y sino es = hacer lo otro, pero en Delphi estoy ciego y a tientas como dicen en tu tierra." Bien norteado" jajajaja pero un dia con otro las cosas saldran.:) Un millon de gracias carnal de verdad que tu ayuda a sido super importante. Sin ella estaria mas perdido que un raton en una ferreteria.:D:D:D Un Saludo. |
Cita:
Salud OS |
En ese caso si funcionaria sin pasarlo a hex, pero en algunos casos el micro retornara hex 00 01 02 el ascii en esos casos es ;. iguales en los tres casos.
Por ejemplo rodando el original y con el espia en el serial port si el micro me manda un 01 el programa SwowMessage ( Communication Failure:Reception Error! Dentro del micro son 8 bits hex, ascii, decimal, binarios, como los quieras llamar pero en un final son 8 bit que estaran 1 o 0, pero ya dentro del Delphi es otra la historia y es la que me cuesta trabajo entender.( recuerda que en esto estoy a gatas todavia) Una Saludo. PD: haciendo pruebas lo mismo funciona en 56000 que en 57600 almenos en datas cortas, no se que pasaria en datas largas.pero es 56000 eso esta confirmado por la configuracion del puerto en el micro. |
Para efectos de los caracteres de control lo que yo hago es lo siguiente:
En realidad la forma en que se reciben los datos de cualquier dispositivo serial son valores de la tabla ASCII, pero los programas son los que "muestran" la informacìón como mas les place, Hexadecimal, Decimal o Binario, pero al final son caracteres. Salud OS |
Por que a mi...
Me baje el cport-3.10.zip e hice todo lo que dice... pero a la hora de compilar me da errores por un tubo... uso delphi 5 y necesito recibir y mandar caracteres por puerto serie, no se que mas intentar... solo me falta eso para acabar mi programa...:(:(
GRACIAS!!!!!:):) |
Hola Egostar.
Este codigo copila bien, no me da error alguno pero no corre del todo bien, me manda los hex 02 00 pero el micro no manda los 8 hex.
Un Saludo. |
PepePancho no te va a funcionar asi porque el RxChar es un caracter a la vez por eso debes de agruparlo en alguna variable y al terminar de capturar debes de efectuar la comparacion.
algo asi. Lo estoy haciendo de memoria. |
Hola socio.
Cita:
Un Saludo. |
Cita:
Salud OS |
Hola Egostar.
Ya lo de comparar los hex que manda el micro quedo resuelto de esta manera.
Aqui contamos la cadena y esperamos que sean 8 los caracteres, luego comparamos que sean los deceados lo cual nos dara una respuesta y de no ser iguales pues el resultado adecuado. Ya el serial port y el comport los estoy entendiendo un poco mejor gracias a tu ayuda y la del amigo FGarcia. Un Saludo. |
La franja horaria es GMT +2. Ahora son las 02:16:00. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi