fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Comunicación serie ...
 
Avisos
Vaciar todo

Comunicación serie con Borland 6.0

19 Respuestas
7 Usuarios
0 Reactions
7,144 Visitas
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

¡Hola compañeros!
Ando metido en mil proyectos diferentes, pero el que mas me importa ahora mismo esta detenido por una tonteria que se me escapa... asi que ire al grano.
Alguien sabe como mandar datos via serie (Com1) bajo Borland 6.0 en C++?
Siempre he usado VB y nunca he tenido problemas gracias a MScomm, pero aqui no solo no esta, sino que no estoy seguro de si funcionaria bajo XP... el caso es... alguien sabe como hacerlo?

Milloooooones de gracias... espero poder recompensaros pronto con un programita ameno y video guapis.

Responder
18 respuestas
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

Hola chicos, hago una pequeña aportación. Esto es parte del código de una miniaplicación que hice hará.... 3 años largos. No me acuerdo casi cómo iba. Pero basicamente era que con cada boton que pulsaba enviaba un caracter diferente y era el pic el que cargaba con las operaciones...
Se basaca en las gtk para windows
#ifdef HAVE_CONFIG_H
# include <config>
#endif

#include <gtk>

#include "callbacks.h"
#include "interface.h"
#include "support.h"
#include <windows>
#include <winbase>

HANDLE h_com;
DCB m_dcb;
COMMTIMEOUTS m_CommTimeouts;
BOOL m_bPortReady;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;
DWORD dwBytesRead;

void
on_salir1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
gtk_main_quit();
}

BOOL enviaCaracter(char c)
{
iBytesWritten=0;
if( WriteFile(h_com,&c,1,&iBytesWritten,NULL) == 0)
return FALSE;
else
return TRUE;
}

void
on_boton_avanza_clicked (GtkButton *button,
gpointer user_data)
{
if(!enviaCaracter('u')){}
// error
}

void
on_boton_izda_clicked (GtkButton *button,
gpointer user_data)
{
if(!enviaCaracter('h')){}
// error
}

void
on_boton_dcha_clicked (GtkButton *button,
gpointer user_data)
{
if(!enviaCaracter('k')){}
// error
}

void
on_boton_atras_clicked (GtkButton *button,
gpointer user_data)
{
if(!enviaCaracter('j')){}
// error
}

void
on_boton_stop_clicked (GtkButton *button,
gpointer user_data)
{
if(!enviaCaracter(' ')){}
// error
}

void
on_boton_desconectar_clicked (GtkButton *button,
gpointer user_data)
{
CloseHandle(h_com);
}

BOOL abrirPuerto() // por ahora COM1
{
h_com = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
if(h_com==INVALID_HANDLE_VALUE)
return FALSE;
else
return TRUE;
}
BOOL configurarPuerto() // por ahora xXxXxXxXxX
{
if( (m_bPortReady = GetCommState(h_com, &m_dcb) ) == 0)
{
//MessageBox("GetCommState Error","Error",MB_OK+MB_ICONERROR);
CloseHandle(h_com);
return FALSE;
}

m_dcb.BaudRate = 9600;
m_dcb.ByteSize = 8;
m_dcb.Parity = FALSE;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.fBinary= TRUE;
m_dcb.fDsrSensitivity=FALSE;
m_dcb.fParity= NOPARITY;
m_dcb.fOutX=FALSE;
m_dcb.fInX=FALSE;
m_dcb.fNull=FALSE;
m_dcb.fAbortOnError=TRUE;
m_dcb.fOutxCtsFlow=FALSE;
m_dcb.fOutxDsrFlow=FALSE;
m_dcb.fDtrControl=DTR_CONTROL_DISABLE;
m_dcb.fDsrSensitivity=FALSE;
m_dcb.fRtsControl=RTS_CONTROL_DISABLE;
m_dcb.fOutxCtsFlow=FALSE;
m_dcb.fOutxCtsFlow=FALSE;

m_bPortReady = SetCommState(h_com, &m_dcb);
if(m_bPortReady ==0)
{
//MessageBox("GetCommState Error","Error",MB_OK+MB_ICONERROR);
CloseHandle(h_com);
return FALSE;
}
}
void
on_boton_conectar_clicked (GtkButton *button,
gpointer user_data)
{
if(abrirPuerto() == FALSE)
{
// error al abrir puerto
}
if(configurarPuerto() == FALSE)
{
//error
}
}

Bueno mucha mucha utilidad no se si tendrá, Ahí queda

Un saludo

Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

¡Dios mio... no sé que haría sin vosotros!
Me he ido un rato a tomar algo, pero a la vuelta he visto estas maravillas...
He optado por la forma facil, hacer un copy-paste del codigo que ha escrito Heli, ha sido darle al boton creado y recibir "This is a test" de inmediato, ni un fallito minimo ni nada... jo, me habeis hecho la persona mas feliz del mundo, os debo unas cañas...
¡Millones de gracias Artistas!
Os recompensare con algun video bonito, ya vereis.

Responder
mif
Respuestas: 1095
 Mif
Topic starter
(@mif)
Noble Member
Registrado: hace 19 años

Obviamente "Puedo confirmar y confirmo" que ese sistema funciona bajo XP.

Responder
sinick
Respuestas: 32
(@sinick)
Eminent Member
Registrado: hace 18 años

Hola Mif, posiblemente ya hayas solucionado tu problema, pero si te sirve, yo el año pasado hice tres proyectos que trabajaban con el puerto serie de un ordenador (uno para escribir en una pantalla LCD, otro de domótica para controlar RELES y un programador de memorias 93Cxx), el puerto de serie lo controlaba con el Borland Builder 6.0 a través de la librería que dejo en el archivo adjunto de abajo y que conseguí en Internet. Una vez incluida la librería en el proyecto de Borland, solo tenia que llamar a las funciones ya definidas en la librería para manejar el puerto, estas funciones son muy sencillas, tiene tres básicas, que son conectar al puerto de serie, mandar un byte y desconectar.
Luego si te quieres meterte mas afondo en el puerto, puedes incluso manejar individualmente pines del puerto de serie y de esta forma, por ejemplo, poner a nivel alto o bajo las líneas RTS o DTR o leer datos de entrada por las líneas de entrada, claro que aquí ya tienes que modificar las librerías y tocar un poco las APIs de Windows.
De esta manera pude hacer mi programador de memorias.

En este archivo te viene un proyecto ya echo para mandas mensajes de un ordenador a otro, yo al principio, para no complicarme, modifique este proyectó para que hiciese lo que yo quería.

Un saludo.

Responder
isotopo
Respuestas: 113
(@isotopo)
Estimable Member
Registrado: hace 18 años

La forma en que me refería con CreateFile se puede ver aquí explicada
http://www.conclase.net/c/preguntas.php#seriewin

Permite establecer la velocidad, bits de paridad, etc. y después enviar o leer grupos de bytes.

Para WinXP no creo que haya nada mejor.

Responder
Página 3 / 4
Compartir: