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

📄 com.cpp

📁 RTMS设备通讯协议
💻 CPP
字号:
// COM.cpp: implementation of the CCOM class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "COM.h"

#define READBUFFER 1024
#define WRITEBUFFER 1024

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCOM::CCOM()
{
	
}

CCOM::~CCOM()
{
	
}

BOOL CCOM::InitCOM(int m_hCom,int m_hBaud,int m_nDataBits,int m_nParity,int m_nStopBits)//初始化串口
{
	DCB dCB;
	COMMTIMEOUTS ct;
	CString m_sCom;
	
	switch(m_hCom)
	{
	case 1:
		m_sCom="COM1";
		break;
	case 2:
		m_sCom="COM2";
		break;
	case 3:
		m_sCom="COM3";
		break;
	case 4:
		m_sCom="COM4";
		break;
	case 5:
		m_sCom="COM5";
		break;
	case 6:
		m_sCom="COM6";
		break;
	case 7:
		m_sCom="COM7";
		break;
	case 8:
		m_sCom="COM8";
		break;

	default:
		m_sCom="COM1";
		break;
		
	}
	
	//得到打开串口,并得到串口句柄
	hCOM = CreateFile( m_sCom, GENERIC_READ | GENERIC_WRITE,
		0, NULL, OPEN_EXISTING, 0, NULL);
	if(hCOM == INVALID_HANDLE_VALUE)
		return FALSE;
	
	//初始化串口,READBUFFER和WRITEBUFFER是用户自己定义的两个宏
	SetupComm(hCOM, READBUFFER, WRITEBUFFER);
	PurgeComm(hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR);
	
	//设置DCB结构
	if(!GetCommState(hCOM, &dCB))
	{
		CloseHandle(hCOM);
		return FALSE;
	}

	dCB.BaudRate = m_hBaud;
	dCB.ByteSize = m_nDataBits;

	switch(m_nParity) // 校验设置
	{
	case 0: 
		dCB.Parity=NOPARITY;
		break;
		
	case 1: 
		dCB.Parity=ODDPARITY;
		break;
		
	case 2: 
		dCB.Parity=EVENPARITY;
		break;

	case 3:
		dCB.Parity=MARKPARITY;
		break;

	case 4:
		dCB.Parity=SPACEPARITY;
		break;

	default:
		dCB.Parity=NOPARITY;
		break;
	}
	
	switch(m_nStopBits) // 停止位
	{				
	case 0: 
		dCB.StopBits=ONE5STOPBITS;
		break;
	case 1: 
		dCB.StopBits=ONESTOPBIT;
		break;
	case 2:
		dCB.StopBits=TWOSTOPBITS;
		break;		
	default:
		dCB.StopBits=ONESTOPBIT;
		break;
	}

	if(!SetCommState(hCOM, &dCB))
	{
		CloseHandle(hCOM);
		return FALSE;
	}
	
	//设置超时值
	ct.ReadIntervalTimeout = MAXDWORD;
	ct.ReadTotalTimeoutConstant = 0;
	ct.ReadTotalTimeoutMultiplier = 0;
	ct.WriteTotalTimeoutConstant = 0;
	ct.WriteTotalTimeoutMultiplier = 0;
	if(!SetCommTimeouts(hCOM, &ct))
	{
		CloseHandle(hCOM);
		return FALSE;
	}
	return TRUE;
}

BOOL CCOM::SendCOMCode(unsigned char *chCode, int nNum)//写串口
{
	DWORD dwWritenNum;
	return WriteFile(hCOM, chCode, nNum, &dwWritenNum, NULL);
}

DWORD CCOM::GetCOMData(unsigned char *pchBuffer)//读串口
{

	DWORD dwReadNum;
	ReadFile(hCOM, pchBuffer, READBUFFER, &dwReadNum, NULL);
	return dwReadNum;
	
}

void CCOM::CloseCOM()
{
	CloseHandle(hCOM);
}

⌨️ 快捷键说明

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