9. Comunicaciones en serie RS-232
El c++ Borland Builder no contiene ningún objeto o control para realizar las comunicaciones RS232, por lo que se han de buscar recursos de terceros para realizar esta función. Las comunicaciones en serie RS232 se pueden implementar de múltiples y variadas formas, se puede acceder a las APIs de Windows (trabajo arduo y complejo), se puede instalar el ActiveX MScomm32.ocx del Visual Basic o se puede utilizar un control desarrollado para el Builder C++. En nuestro caso haremos uso de un pequeño control Freeware desarrollado por Victor Chen.
Borland c++ builder Serial Port Components
Métodos:
void Open(); Abrir el Puerto de comunicaciones
void Close(); Cerrar el Puerto de comunicaciones
bool Enabled(); Estado del Puerto de comunicaciones
int Write(char Buf[], DWORD Count) ; Escribir en el Buffer de salida
int Read(char Buf[] , DWORD Count); Leer del Buffer de entrada
int InQueCount(); Númer o de bytes en el Buffer de Entrada, -1 = Puerto cerrado
int OutQueCount(); Númer o de bytes en el Buffer de Salida, -1 = Puerto cerrado
void PurgeIn(); Limpiar el Buffer de Entrada
void PurgeOut(); Limpiar el Buffer de Salida
// {Comm escape functions}
void SetDTRState(bool State);
void SetRTSState(bool State);
void SetBREAKState(bool State);
void SetXONState(bool State);
void UpdateDataControlBlock();
Propiedades de TComm
BaudRate (Velocidad en Baudios)
br110, br300, br600, br1200, br2400, br4800, br9600, br14400, br19200, br38400, br56000, br57600, br115200, br128000, br256000
DataBits (Bits de datos)
da4, da5, da6, da7, da8,
DeviceName (Nombre del puerto de comunicaciones)
Com1, Com2...
EventChars
FlowControl (Control del flujo)
fcNone, fcCTS, fcDTR, fcSoftware, fcDefault
MonitorEvents (Monitorizar los eventos)
Options
coParityCheck, coDsrSensitivity, coIgnoreXOff, coErrorChar, coNullStrip
Parity (Paridad)
paNone, paOdd, paEven, paMark, paSpace
ReadBufSize (Tamaño del buffer de lectura)
4096
ReadTimeout
1000
StopBits (Bits de Stop)
sb10, sb15, sb20
SuspendTime
5
WriteBufSize (Tamaño del buffer de escritura)
2048
WriteTimeout (Tiempo de espera en escritura)
1000

Propiedades de control TComm de comunicaciones RS-232
Eventos
// OnBreak
void __fastcall TForm1::Comm1Break(TObject *Sender){
}
// OnComStatEvent
void __fastcall TForm1::Comm1ComStatEvent(TObject *Sender, DWORD Status, COMSTAT ComStat){
}
// OnCts
void __fastcall TForm1::Comm1Cts(TObject *Sender){
}
//OnDsr
void __fastcall TForm1::Comm1Dsr(TObject *Sender){
}
// OnRing
void __fastcall TForm1::Comm1Ring(TObject *Sender){
}
// OnRlsd
void __fastcall TForm1::Comm1Rlsd(TObject *Sender){
}
// OnError
void __fastcall TForm1::Comm1Error(TObject *Sender, int Errors){
}
// OnRxChar
void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count){
}
// OnRxFlag;
void __fastcall TForm1::Comm1RxFlag(TObject *Sender){
}
// OnTxEmpty;
void __fastcall TForm1::Comm1TxEmpty(TObject *Sender){
}
Indicadores:
bool Connected={ read=FConnected} ;
// {Comm status flags}
bool CTS={ index=1, read=GetModemState } ;
bool DSR ={ index=2, read=GetModemState} ;
bool RING={ index=3, read=GetModemState } ;
bool RLSD ={ index=4, read=GetModemState} ;
bool CtsHold ={ index=1, read=GetComState };
bool DsrHold ={ index=2, read=GetComState };
bool RlsdHold ={ index=3, read=GetComState };
bool XOffHold ={ index=4, read=GetComState };
bool XOffSent ={ index=5, read=GetComState };
__property HANDLE Handle ={ read=FHandle };

Eventos de control TComm de comunicaciones RS-232