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

📄 multithreadserial.h

📁 多线程串口通信的例子,可以实现同时多串口的通信
💻 H
字号:
/*****************************************************************
  ||文件 : MultiThreadSerial.h(多线程串口通信类)
  ||编者 : 许伟群 
  ||EMail: xuweiqun@126.com
  ||QQ   : 12626946
  ||日期 : 2004-05
  ||修改 : 2005-09
  ||使用 :
  ||       1、设置DCB 
  ||          最好使用简单设置(4个主要参数)SetDCB(int nBaudRate,int nDataBit,int nCheckBit,int nStopBit );
  ||          也可以自定义设置SetDCB(DCB dcb)(对各个变量不熟悉,自定义很容易出错)
  ||          不设置默认为:波特率9600  数据位8  偶校验  停止位1
  ||       2、初使化串口InitComm(传入串口号和窗口句柄m_hWnd)
  ||       3、BeginComm启动串口接收数据的线程
  ||       4、当串口收到数据,向m_hWnd发送WM_ACTIVE_TRANS消息,并且发送了串口号
  ||          在消息处理函数中处理数据(通过串口号判断是哪个串口对象来接收数据)
  ||		  然后调用ReceiveData函数接收数据.
  ||	   5、写数据通过WriteComm函数
******************************************************************/


#if !defined(AFX_BIM10001_H__247217B6_8D3F_11D4_84B3_0050BF117318__INCLUDED_)
#define AFX_BIM10001_H__247217B6_8D3F_11D4_84B3_0050BF117318__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif 

#define FAIL               0 //返回成功定义为0

#define COMM232GETDATAMAX		204800	//接收缓冲区 200K
#define COMM232SENDDATAMAX		204800	//发送缓冲区 200K

//消息定义
#define WM_ACTIVE_TRANS          WM_USER + 101  //接收数据
	
class  MultiThreadSerial 
{

public:
         MultiThreadSerial();
virtual ~MultiThreadSerial();

public:
	bool BeginComm();
	bool InitComm(int nCom, HWND hWnd);
	void CloseComm();

	DWORD WriteComm(unsigned char *buf, DWORD dwLength);

	//自定义设置 
	void SetDCB(DCB dcb);
	//简单设置
	void SetDCB(int nBaudRate,int nDataBit,int nCheckBit,int nStopBit );

    int GetComNum();
    int GetBaudRate();
	int GetDataBit();
	int GetCheckBit();
	int GetStopBit();

	bool ComIsOpen();              //串口是否打开
	bool ComIsConnected();         //是否启动了线程
	void ReceiveData(BYTE* psz);   //接收数据
	void OnCommRecvNotify(WPARAM wParam, LPARAM lParam);

public:
	volatile HANDLE hPostMsgEvent;  //用于WM_COMMNOTIFY消息的事件对象
	bool bCommRxSign;				//Com读信号
	bool bCommTxSign;				//Com写信号
	volatile HANDLE m_hCom;  

private:
	DWORD ReadComm(unsigned char *buf, DWORD dwLength);


private:
	HWND m_hWnd;
	BYTE m_sRtnData[COMM232SENDDATAMAX];  //  从缓冲里读出,保存
	CWinThread *pThread;		          //辅助线程指针

	int m_nBaudRate;
	int m_nDataBit;
	int m_nCheckBit;
	int m_nStopBit;

    volatile bool m_bComIsOpen;          //串口是否打开
	volatile bool m_bCommConnected;	     //线程是否启动


private:
	int m_nCom;
	BYTE m_sCommSendBuffer[COMM232SENDDATAMAX];	//发送缓冲区
	BYTE m_sCommGetBuffer[COMM232GETDATAMAX];	//接收缓冲区COM
	int m_nCommGetCounter;		                //接收数据计数器
	OVERLAPPED osRead,osWrite;                  //用于重叠读/写
	DCB m_DCB;				                    //串口状态描述字

};
#endif

/*********************************************************************************
波特率 :	CBR_110		CBR_19200 
			CBR_300		CBR_38400 
			CBR_600		CBR_56000 
			CBR_1200	CBR_57600 
			CBR_2400	CBR_115200 
			CBR_4800	CBR_128000 
			CBR_9600	CBR_256000 
			CBR_14400 

校验   :    NOPARITY		无 
			ODDPARITY		奇校验
			EVENPARITY		偶校验
			MARKPARITY		Mark 
			SPACEPARITY		Space 

停止位 :    ONESTOPBIT      1 
			ONE5STOPBITS    1.5 
			TWOSTOPBITS     2 


数据位 :    4
            5
			6
			7
			8
**********************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -