📄 comm.h
字号:
//------------------------------------------------------------------
#ifndef CommH
#define CommH
//------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <sysdyn.h>
#include <extctrls.hpp>
//类型定义
enum TBaudRate{br110=100, br300=300, br600=600, br1200=1200, br2400=2400, br4800=4800, br9600=9600, br14400=14400, br19200=19200, br38400=38400, br56000=56000, br57600=57600, br115200=115200};
enum TComPortNumber { pnCOM1, pnCOM2, pnCOM3, pnCOM4, pnCOM5, pnCOM6, pnCOM7, pnCOM8, pnCOM9, pnCOM10, pnCOM11, pnCOM12, pnCOM13, pnCOM14, pnCOM15, pnCOM16 };
enum TParity { None, Odd, Even, Mark, Space };
enum TStopBits { SB1, SB1_5, SB2 };
enum TDataBits { DB5, DB6, DB7, DB8 };
enum THwHandShaking{hhNone,hhNoneRTSON,hhRTSCTS};
enum TSwHandShaking{shNone,shXonXoff};
// 输入缓冲区的默认大小
const long INPUTBUFFERSIZE = 4096;
// Line Status位定义
const int ME_CTS = 1;
const int ME_DSR = 2;
const int ME_RING = 4;
const int ME_RLSD = 8;
//DCB 位定义
const long dcb_Binary = 0x00000001;
const long dcb_ParityCheck = 0x00000002;
const long dcb_OutxCtsFlow = 0x00000004;
const long dcb_OutxDsrFlow = 0x00000008;
const long dcb_DtrControlMask = 0x00000030;
const long dcb_DtrControlDisable = 0x00000000;
const long dcb_DtrControlEnable = 0x00000010;
const long dcb_DtrControlHandshake = 0x00000020;
const long dcb_DsrSensivity = 0x00000040;
const long dcb_TXContinueOnXoff = 0x00000080;
const long dcb_OutX = 0x00000100;
const long dcb_InX = 0x00000200;
const long dcb_ErrorChar = 0x00000400;
const long dcb_NullStrip = 0x00000800;
const long dcb_RtsControlMask = 0x00003000;
const long dcb_RtsControlDisable = 0x00000000;
const long dcb_RtsControlEnable = 0x00001000;
const long dcb_RtsControlHandShake = 0x00002000;
const long dcb_RtsControlToggle = 0x00003000;
const long dcb_AbortOnError = 0x00004000;
const long dcb_Reserveds = 0xFFFF8000;
//事件函数定位器声明
typedef void __fastcall (__closure *TReceiveDataEvent)(System::TObject *Sender);
typedef void __fastcall (__closure *TReceiveErrorEvent)(System::TObject *Sender,DWORD EventMask);
typedef void __fastcall (__closure *TModemStateChangeEvent)(System::TObject *Sender
,DWORD ModemEvent);
//------------------------------------------------------------------
class PACKAGE TComm : public TComponent
{
private:
TTimer *CommTimer ; //组件用的定时器
char szInputBuffer[INPUTBUFFERSIZE];
HANDLE hComm ;
TComPortNumber FCommPort;
bool FPortOpen;
TBaudRate FBaudRate;
bool FParityCheck;
THwHandShaking FHwHandShaking;
TSwHandShaking FSwHandShaking ;
TDataBits FDataBits;
TParity FParity;
TStopBits FStopBits;
int FInputLen; //每次执行Input时所读取的字符串长度
int FRThreshold;//设置引发接收事件的门坎
bool FDTR;
bool FRTS;
String FInputData;
DynamicArray<byte> FInputByteData;
// FInputByteData: array of Byte;
int FCommEvent;
int FCommError;
bool FCDHolding;
bool FCTSHolding;
bool FDSRHolding;
bool FRIHolding;
//设置函数
void __fastcall SetCommPort(TComPortNumber Port); //设置COMPort
void __fastcall SetBaudRate(TBaudRate Rate); //设置速率
void __fastcall SetHwHandShaking(THwHandShaking c );//硬件交握
void __fastcall SetSwHandShaking(TSwHandShaking c );//软件交握
THwHandShaking __fastcall GetHwHandShaking(void);//硬件交握
TSwHandShaking __fastcall GetSwHandShaking(void);//软件交握
void __fastcall SetDataBits(TDataBits Size );//数据位数
void __fastcall SetParity(TParity p );//奇偶校验
void __fastcall SetStopBits(TStopBits Bits );//停止位
void __fastcall SetInDataCount(DWORD StrNo);//设成0表示清除FInputData
void __fastcall SetRThreshold(int RTNo); //接收门坎
void __fastcall SetPortOpen(bool b);//打开通信端口
void _SetCommState(void);//设置通信参数
bool __fastcall GetRTSStatus();
bool __fastcall GetDTRStatus();
void __fastcall SetDTRStatus(bool b);//DTR 状态
void __fastcall SetRTSStatus(bool b);//RTS状态
void __fastcall ReadProcess(void);//读取数据函数
void __fastcall EventProcess(void);//事件检测函数
void __fastcall GetModemState(void);//线路状态检测函数
void OpenComm(void);//打开通讯端口函数
void __fastcall CloseComm(void);//开关通信端口函数
int __fastcall ReadCommEvent(void); //硬件线路状态值读取
int __fastcall ReadCommError(void); //错误状态值的读取
String __fastcall ReadInputData(void);//返回收到的数据
int __fastcall ReadInDataCount(void);//读取有多少数据
bool __fastcall ReadCDHolding(void); //取得CD线路状态
bool __fastcall ReadDSRHolding(void);//取得DSR线路状态
bool __fastcall ReadRIHolding(void);//取得RI线路状态
bool __fastcall ReadCTSHolding(void);//取得CTS线路状态
//事件
TReceiveDataEvent FOnReceiveData;
TReceiveErrorEvent FOnReceiveError;
TModemStateChangeEvent FOnModemStateChange;
protected:
void __fastcall ProcTimer(TObject *Sender);
void __fastcall ReceiveData(void);
void __fastcall ReceiveError(DWORD EvtMask);
void __fastcall ModemStateChange(DWORD ModemEvent);
public:
__fastcall TComm(TComponent* Owner); //构造函数
bool OutputString(String DataToWrite);
bool OutputByte(const DynamicArray<byte> ByteData);
DynamicArray<byte> ReadInputByte(void);
__property bool PortOpen ={read = FPortOpen, write=SetPortOpen,default=false};
__property DWORD DataCount = { read = ReadInDataCount , write = SetInDataCount};
__property bool DTREnabled = { read = GetDTRStatus, write = SetDTRStatus};
__property bool RTSEnabled = { read = GetRTSStatus, write = SetRTSStatus};
__published:
//以下加入属性
__property TComPortNumber CommPort={read = FCommPort, write = SetCommPort, default = pnCOM1};
__property TBaudRate BaudRate ={read = FBaudRate,
write = SetBaudRate, default = br9600} ;
__property THwHandShaking HwHandShaking ={ read = GetHwHandShaking, write = SetHwHandShaking, default = hhNone};
__property TSwHandShaking SwHandShaking ={ read = GetSwHandShaking, write = SetSwHandShaking, default = shNone};
__property TDataBits DataBits ={ read = FDataBits ,write =SetDataBits,default = DB8} ;
__property TParity Parity = { read = FParity ,write = SetParity,default = None};
__property TStopBits StopBits ={ read = FStopBits ,write = SetStopBits,default =SB1};
__property DWORD CommEvent = { read = ReadCommEvent};
__property DWORD CommError = {read = ReadCommError};
__property String Input = { read = ReadInputData};
__property int InputLen = { read = FInputLen , write = FInputLen, default =0};
__property int RThreshold = { read = FRThreshold ,write = SetRThreshold, default =0 };
__property bool CDHolding = { read = ReadCDHolding};
__property bool DSRHolding = { read = ReadDSRHolding};
__property bool RIHolding = { read = ReadRIHolding};
__property bool CTSHolding = { read = ReadCTSHolding};
//事件
__property TReceiveDataEvent OnReceiveData =
{read = FOnReceiveData , write = FOnReceiveData};
__property TReceiveErrorEvent OnReceiveError =
{read = FOnReceiveError , write = FOnReceiveError};
__property TModemStateChangeEvent OnModemStateChange =
{read = FOnModemStateChange , write = FOnModemStateChange};
};
//------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -