⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm.h

📁 实现RS232数据采集处理,设置RS23传输参数,显示控制终端的数据.
💻 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 + -