VC CSerialPort类的使用方法详解

API 参考: 接口由两个类组成:CSerialException、CSerialPort。其成员函数和成员变量清单如下:

  CSerialException::CSerialException

  CSerialException::GetErrorMessage

  CSerialException::m_dwError

  CSerialPort::CSerialPort

  CSerialPort::~CSerialPort

  CSerialPort::Open

  CSerialPort::Close

  CSerialPort::Attach

  CSerialPort::Detach

  CSerialPort::operator HANDLE

  CSerialPort::IsOpen

  CSerialPort::Dump

  CSerialPort::Read

  CSerialPort::ReadEx

  CSerialPort::Write

  CSerialPort::WriteEx

  CSerialPort::TransmitChar

  CSerialPort::GetOverlappedResult

  CSerialPort::CancelIo

  CSerialPort::GetConfig

  CSerialPort::GetDefaultConfig

  CSerialPort::SetConfig

  CSerialPort::SetDefaultConfig

  CSerialPort::ClearBreak

  CSerialPort::SetBreak

  CSerialPort::ClearError

  CSerialPort::GetStatus

  CSerialPort::GetState

  CSerialPort::SetState

  CSerialPort::Escape

  CSerialPort::ClearDTR

  CSerialPort::ClearRTS

  CSerialPort::SetDTR

  CSerialPort::SetRTS

  CSerialPort::SetXOFF

  CSerialPort::SetXON

  CSerialPort::GetProperties

  CSerialPort::GetModemStatus

  CSerialPort::SetTimeouts

  CSerialPort::GetTimeouts

  CSerialPort::Set0Timeout

  CSerialPort::Set0WriteTimeout

  CSerialPort::Set0ReadTimeout

  CSerialPort::SetMask

  CSerialPort::GetMask

  CSerialPort::WaitEvent

  CSerialPort::Flush

  CSerialPort::Purge

  CSerialPort::TerminateOutstandingWrites

  CSerialPort::TerminateOutstandingReads

  CSerialPort::ClearWriteBuffer

  CSerialPort::ClearReadBuffer

  CSerialPort::Setup

  CSerialPort::OnCompletion

  CSerialPort::BytesWaiting

  CSerialPort::DataWaiting

  CSerialException::CSerialException

  CSerialException( DWORD dwError = 0);

  参数

  dwError  导致异常的错误。

  注释

   当创建CSerialExceptionThis对象时,此成员函数被调用。为了丢出 CSerialException,必须调用全程函数 AfxThrowSerialException。如果调用时 dwError 使用缺省值,则内部则会调用GetLastError。

  CSerialException::GetErrorMessage

  virtual BOOL GetErrorMessage( LPTSTR lpszError, UINT nMaxError, PUINT pnHelpContext = NULL );

  CString GetErrorMessage();

  返回值

  1) 如果函数调用成功,返回非零;否则,如果没有得到错误信息文本,则返回0。

  2) 表示错误的一个 CString

  参数

  lpszError  接收出错信息的缓冲指针。

  nMaxError  缓冲能容纳的最大字符数,包括NULL终结符。

  pnHelpContext  接收帮助上下文ID的UINT的地址,不返回ID。

  注释

  调用此成员函数获取有关出错信息。

  CSerialException::m_dwError

  注释

  导致异常错误。此错误值为一系统错误代码,类似WINERROR.H文件中的定义。Win32 的错误代码清单请参考Win32 SDK中的 Error Codes。

  CSerialPort::CSerialPort

  CSerialPort();

  注释

  标准 C++ 类构造函数。在内部将成员变量置为缺省值。

  CSerialPort::~CSerialPort

  virtual ~CSerialPort();

  注释

  标准 C++ 类析构函数。它确保关闭打开的通讯端口。

  CSerialPort::Open

   void Open( int nPort, DWORD dwBaud = 9600, Parity parity = NoParity, BYTE DataBits = 8, StopBits stopbits = OneStopBit, FlowControl fc = NoFlowControl, BOOL bOverlapped = FALSE);

  throw( CSerialException );

  参数

  nPort  拟打开的通讯端口。

  dwBaud 使用的波特率

  parity 使用的校验位。取下列枚举值:

enum Parity

{

EvenParity,

MarkParity,

NoParity,

OddParity,

SpaceParity

};

  Databits 使用的数据位。

  stopbits 使用的停止位。取下列枚举值:

enum StopBits

{

OneStopBit,

OnePointFiveStopBits,

TwoStopBits

};

  fc 使用的流控制方法。取下列枚举值:

enum FlowControl

{

NoFlowControl,

CtsRtsFlowControl,

CtsDtrFlowControl,

DsrRtsFlowControl,

DsrDtrFlowControl,

XonXoffFlowControl

};

  bOverlapped TRUE 以重叠模式打开端口,否则为 FALSE 表示使用阻塞调用。

  注释

  调用这个成员函数打开通讯端口。内部将使用CreateFile打开comm端口,然后根据函数参数的说明用SetState对各种不同的RS-232进行设置。如果出错,则会丢出一个CSerialException异常。

  CSerialPort::Close

  Close();

  注释

  必须与Open函数配对使用。关闭已经打开的通讯端口。

  CSerialPort::Attach

  void Attach(HANDLE hComm, BOOL bOverlapped = FALSE);

  参数

  hComm  打开通讯端口的SDK句柄。

  bOverlapped 如果端口以重叠模式打开为 TRUE,否则为 FALSE。

  注释

  允许将某个CSerialPort实例捆绑到现存的SDK通讯端口句柄。该函数的行为类似于MFC中CWnd::Attach函数。

  CSerialPort::Detach

  HANDLE Detach();

  返回值

  SDK 通讯端口句柄 HANDLE.

  注释

  必须与 Attach 函数配对使用。该函数的行为类似于MFC中的 CWnd::Detach函数。

  CSerialPort::operator HANDLE

  operator HANDLE();

  返回值

  SDK 通讯端口句柄 HANDLE。

  注释

  使用此操作符获取通讯端口对应的句柄。用该句柄可以直接调用Windows APIs。

  CSerialPort::IsOpen

  BOOL IsOpen() const

  返回值

  如果通讯端口处于打开状态则返回 TRUE,否则返回 FALSE。

  CSerialPort::Dump

  void Dump(CDumpContext& dc) const

  注释

  标准的MFC诊断支持函数。

  CSerialPort::Read \ ReadEx

  DWORD Read(void* lpBuf, DWORD dwCount);

  BOOL Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped, DWORD* pBytesRead = NULL);

  void ReadEx(void* lpBuf, DWORD dwCount);

  throw( CSerialException );

  返回值

  1) 读取的字节数。

  2) 如果是重叠读取全同步完成返回 TRUE ,如果此操作是异步完成,则返回 FALSE 。

  参数

  lpBuf 缓冲指针,从串口读取的数据将被缓冲到此地址。

  dwCount 指定从串口读取的字节数。

  overlapped 引用 OVERLAPPED 结构,如果端口以重叠模式打开,则此为必须的参数。

  pBytesRead 如果该值非空,则为存放所读字节数的地址。

  注释

  这三个函数包装了 SDK 的 ReadFile 和 ReadFileEx,第二个Read版本用于重叠模式。

  CSerialPort::Write \ WriteEx

  DWORD Write(const void* lpBuf, DWORD dwCount);

  BOOL Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped, DWORD* pBytesWritten = NULL);

  void WriteEx(const void* lpBuf, DWORD dwCount);

  throw( CSerialException );

  返回值

  1) 所写的字节数

  2) 如果为完全同步的重叠写入则为 TRUE,如果操作以异步方式完成则为FALSE。

  参数

  lpBuf 该指针指向要写入串口的数据缓冲。

  dwCount 指定要写入串口的字节数

  overlapped 引用 OVERLAPPED 结构。如果以重得叠模式打开端口,此参数是必须的。

  pBytesWritten 如果该值非空,则为存放所写字节数的地址。

  注释

  这三个函数包装了 SDK 的 WriteFile 和 WriteFileEx,第二个Read版本用于重叠模式。

  CSerialPort::TransmitChar

  void TransmitChar(char cChar) const

  throw( CSerialException );

  注释

  对TransmitCommChar SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetOverlappedResult

  void GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait)

  throw( CSerialException );

  注释

  对GetOverlappedResult SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::CancelIo

  void CancelIo()

  throw( CSerialException );

  注释

   对CancelIo SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。注意此函数只能在NT 4+或者Windows 98+中使用。Windows 95中使用该类的1.0版本将产生错误。该问题已在CSerialPort 的1.01版本中更正。

  CSerialPort::GetConfig

  void GetConfig(COMMCONFIG& config)

  throw( CSerialException );

  注释

  对GetCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetDefaultConfig

  static void GetDefaultConfig(int nPort, COMMCONFIG& config)

  throw( CSerialException );

  注释

  对GetDefaultCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::SetConfig

  void SetConfig(COMMCONFIG& config)

  throw( CSerialException );

  注释

  对SetCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::SetDefaultConfig

  static void SetDefaultConfig(int nPort, COMMCONFIG& config)

  throw( CSerialException );

  注释

  对SetDefaultCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::ClearBreak

  void ClearBreak()

  throw( CSerialException );

  注释

  对ClearCommBreak SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::SetBreak

  void SetBreak()

  throw( CSerialException );

  注释

  对SetCommBreak  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::ClearError

  void ClearError(DWORD& dwErrors)

  throw( CSerialException );

  注释

  对ClearCommError  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetStatus

  void GetStatus(COMMSTAT& stat)

  throw( CSerialException );

  注释

  对GetCommStatus  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetState

  void GetState(DCB& dcb)

  throw( CSerialException );

  注释

  对GetCommState  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::SetState

  void SetState(DCB& dcb)

  throw( CSerialException );

  注释

  对SetCommState  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::Escape

  void Escape(DWORD dwFunc)

  throw( CSerialException );

  注释

  对EscapeCommFunction  SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::ClearDTR

  void ClearDTR()

  throw( CSerialException );

  注释

  用低于DTR行的CLRDTR常量调用 Escape 函数。

  CSerialPort::ClearRTS

  void ClearRTS()

  throw( CSerialException );

  注释

  用低于RTR行的CLRRTR常量调用 Escape 函数。

  CSerialPort::SetDTR

  void SetDTR()

  throw( CSerialException );

  注释

  用发出DTR行的SETDTR常量调用 Escape 函数。

  CSerialPort::SetRTS

  void SetRTS()

  throw( CSerialException );

  注释

  用发出RTR行的SETRTR常量调用 Escape 函数。

  CSerialPort::SetXOFF

  void SetXOFF()

  throw( CSerialException );

  注释

  使用SETXOFF常量调用 Escape 函数,该常量导致传送行为接收XOFF字符。

  CSerialPort::SetXON

  void SetXON()

  throw( CSerialException );

  注释

  使用SETXON常量调用 Escape 函数,该常量导致传送行为接收XON字符。

  CSerialPort::GetProperties

  void GetProperties(COMMPROP& properties)

  throw( CSerialException );

  注释

  对GetCommProperties SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetModemStatus

  void GetModemStatus(DWORD& dwModemStatus)

  throw( CSerialException );

  注释

  对GetCommModemStatus SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::SetTimeouts

  void SetTimeouts(COMMTIMEOUTS& timeouts)

  throw( CSerialException );

  注释

  对SetCommTimeouts SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetTimeouts

  void GetTimeouts(COMMTIMEOUTS& timeouts)

  throw( CSerialException );

  注释

  对GetCommTimeouts SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::Set0Timeout

  void Set0Timeout()

  throw( CSerialException );

  注释

  将发送和接收的超时配置为 0 。这样将导致写操作立即返回,读操作时不论接收缓冲等待什么数据都返回,而不是等待指定的字节数到达后返回。

  CSerialPort::Set0WriteTimeout

  void Set0WriteTimeout()

  throw( CSerialException );

  注释

  将发送的超时配置为 0 。这样将导致写操作立即返回。

  CSerialPort::Set0ReadTimeout

  void Set0ReadTimeout()

  throw( CSerialException );

  注释

  将接收的超时配置为 0 。这样将导致读操作不论接收缓冲等待什么数据都返回,而不是等待指定的字节数到达后返回。

  CSerialPort::SetMask

  void SetMask(DWORD dwMask)

  throw( CSerialException );

  注释

  对SetCommMask SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::GetMask

  void GetMask(DWORD& dwMask)

  throw( CSerialException );

  注释

  对GetCommMask SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::WaitEvent

  void WaitEvent(DWORD& dwMask)

  BOOL WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped)

  throw( CSerialException );

  返回值

  如果为完全同步的重叠读操作则为 TRUE,如果操作是异步完成的则为FALSE。

  注释

  对WaitCommEvent SDK 函数进行简单打包。第二个为重叠版本,它会立即返回,并可在代码中手工重新设置OVERLAPPED结构 hEvent 成员以信号方式通知。具体细节请参考Win32 SDK文档。

  CSerialPort::Flush

  void Flush()

  throw( CSerialException );

  注释

  对FlushFileBuffers SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::Purge

  void Purge(DWORD dwFlags)

  throw( CSerialException );

  注释

  对PurgeComm SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::TerminateOutstandingWrites

  void TerminateOutstandingWrites()

  throw( CSerialException );

  注释

  用 PURGE_TXABORT 常量调用 Purge 函数,该常量终止所有将要进行的写操作并立即返回,即便是正在进行的还没有完成的写操作。

  CSerialPort::TerminateOutstandingReads

  void TerminateOutstandingReads()

  throw( CSerialException );

  注释

  用 PURGE_TXABORT 常量调用 Purge 函数,该常量终止所有将要进行的读操作并立即返回,即便是正在进行的还没有完成的读操作。

  CSerialPort::ClearWriteBuffer

  void ClearWriteBuffer()

  throw( CSerialException );

  注释

  用 PURGE_TXCLEAR 常量调用 Purge 函数,该常量清除输出缓冲(如果设备驱动程序有一个这样的缓冲的话)。

  CSerialPort::ClearReadBuffer

  void ClearReadBuffer()

  throw( CSerialException );

  注释

  用 PURGE_RXCLEAR 常量调用 Purge 函数,该常量清除输入缓冲(如果设备驱动程序有一个这样的缓冲的话)。

  CSerialPort::Setup

  void Setup(DWORD dwInQueue, DWORD dwOutQueue)

  throw( CSerialException );

  注释

  对SetupComm SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。

  CSerialPort::OnCompletion

  virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped);

  throw( CSerialException );

  参数

  dwErrorCode 

  指定I/O完成状态。该参数可为下列值之一:

  值

  意义

  0

  I/O 成功

  ERROR_HANDLE_EOF

  ReadFileEx 函数试图读到文件尾。

  dwCount 指定传输的字节数。如果发生错误,则此参数为 0。

  lpOverlapped OVERLAPPED 结构指针,由异步I/O函数指定。

  注释

   当任何WriteEx 或 ReadEx异步调用例程完成时,该函数被调用。在CSerialPort派生类中,该写此函数用自己特定的代码来反映异步调用完成时的行为。注意在对为 lpOverlapped 参数分配的内存进行清除处理时不要忘记调用此函数的父类版本CSerialPort::OnCompletion。

  CSerialPort::BytesWaiting

  DWORD BytesWaiting();

  throw( CSerialException );

  返回值

  等待从串口读取的字节数。

  注释

  该函数返回等待从串口读取的字节数。

  CSerialPort::DataWaiting

  BOOL DataWaiting(DWORD dwTimeout);

  throw( CSerialException );

  参数

  dwTimeout 在确定数据是否到达时,指定一个等待超时的毫秒值。

  返回值

  如果在指定的超时间隔内数据到达则为 TRUE,否则为 FALSE.。

  注释

  该函数等待指定的间隔检查数据是否到达串口。

 
发布了38 篇原创文章 · 获赞 12 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览