FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Escribir datos en el puerto serial en windows XP
Buenas tardes, como puedo escribir un dato en el puerto serial de XP utilizando delphi 6.0, tengo un circuito electrónico que se conecta al puerto serial de la computadora y al recibir el número "1" como dato de entrada genera un pulso de corriente electrica para abrir una puerta.
|
#2
|
||||
|
||||
Si solo quieres mandar un byte puede que esta funcion te resulte util:
Para usarla, por ejemplo, para mandar un 1:
Como sugerencia: Puedes usar los pines DTR y RTS para mandar señales sin necesidad de un circuito muy complicado, pero si ya tienes el circuito montado, da lo mismo. |
#3
|
||||
|
||||
Hola,
Seoane, disculpa que me meta en el código de la función que has escrito: no soy yo quién, pero, en fin. Me llamó la atención que la variable "Escritos" no se inicializa en ningún momento. Lo mismo da exactamente igual, pero, como me llamó la atención... ahí queda dicho, por si acaso. |
#4
|
||||
|
||||
La variable "Escritos" se pasa por referencia a la funcion, es la propia funcion la que le asigna un valor. No hay necesidad de inicializarla.
|
#5
|
||||
|
||||
Hola,
Bueno, es lo que yo decía, ¿no? |
#6
|
|||
|
|||
cambiar la configuracion del flags
Amigo antetodo muchas gracias por la fuente, el codigo compila sin errores pero el circuito no recibe el dato.
Realicé pruebas en hyperterminal fijando la configuración del puerto en 9600 Bits por seg, 8 Bits de datos, paridad: ninguna, 1 Bits de parada y en control de flujo: ninguno, y funciona... Ahora voy a la configuración de la fuente que enviaste que es la siguiente: BaudRate := CBR_9600; ByteSize := 8; Parity := NOPARITY; StopBits := ONESTOPBIT; Flags := $01; Aqui en el Flags, es donde debo especificar la opcion NINGUNO, ya probe con $00, $02, $03 y nada. CUAL SERA EL PARAMETRO??? Ahhhh, me cambiaron el parametro 1 por A es decir, tu me enviaste la función MandarByte('COM1',1); pero debo cambiarla a MandarByte('COM1','A'); te lo comento por si tiene algo que ver, y porsupueto cambien el BYTE por STRING en el parametro B Última edición por bill_mg fecha: 08-07-2006 a las 17:57:07. |
#7
|
||||
|
||||
Para mandar el carácter 'A' (ASCII 65) no hace falta que cambies nada en la función, dejándola tal cual estaba antes utiliza esto:
Si cambias el tipo de parámetro de Byte por un string y dejas el resto de la función igual, no estas mandando un 'A' si no otra cosa. Mejor utiliza el método que te explico arriba. |
#8
|
|||
|
|||
no lee el dato
El código corre y no genera error pero no manda el dato. Para que sirve la variable Escritos, el valor de esta en la linea donde aparece
Result := WriteFile(hPort, B, 1, Escritos, nil); es un poco de numeros algo así como 1489274260 porque crees que no manda el dato. Pruebo el circuito con hyperterminal y funciona bien. Que puede estar pasando? |
#9
|
||||
|
||||
Supongo que como te aconseje mas arriba volviste a dejar el código de la función como estaba, y utilizas la función Ord para convertir un carácter en un Byte. Si no es así corrígeme. Si estas haciendo esto, no se porque no te funciona, solo puedo adivinar.
Comprueba lo siguiente: - No es lo mismo una 'A' que una 'a' - Que el circuito no necesite de alguna señal en los pines DTR y RTS - Comprueba que otro programa no esta usando el puerto serie - Comprueba que el puerto es el correcto - Comprueba los parámetros del puerto serie En cuanto a la variable "Escritos" no le deis mas vueltas, solo la incluyo porque es necesaria para llamar a la función pero su valor antes de llamar a la función no es importante, en cambio su valor después de la función no indica el numero de bytes que realmente se han escrito. Tienes que pensar que esta misma función se utiliza para escribir en muchos lugares (ficheros, discos, pipes, sockets, etc) y en algunos tiene sentido que no se puedan escribir todos los bytes que se quiera, en esos caso la variable nos devuelve el numero de bytes que han sido escritos realmente. En este caso no tiene mucho sentido, solo mando escribir un byte y el puerto serie no tiene porque rehusar mandarlo así que tampoco compruebo su valor después de llamar a la función WriteFile, es una variable inútil en este caso. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como recibir datos en un puerto serial | JULIPO | PHP | 1 | 17-06-2006 20:54:36 |
Capturar Ventana Windows y escribir datos | nachoporcar | API de Windows | 2 | 01-06-2006 19:57:31 |
Puerto serial CLX | bismarck_sierra | Lazarus, FreePascal, Kylix, etc. | 0 | 06-07-2004 21:55:22 |
Puerto serial | fled | Varios | 2 | 28-04-2004 22:27:47 |
Puerto serial. | danytorres | Impresión | 1 | 29-01-2004 16:51:42 |
|