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

📄 rw_com.cpp

📁 在监控行业中比较流行的智敏报警盒
💻 CPP
字号:
// RW_COM.cpp: implementation of the CRW_COM class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RW_COM.h"
#include <math.h>

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


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

CRW_COM::CRW_COM()
{
	m_hComm = 0;
}

CRW_COM::~CRW_COM()
{
	Disconnect();
}

//---------------------------------------------------------------------------------
// Function Name:   
// Parameter:       
// Return Value:    
// Description:     
// Note:            
//---------------------------------------------------------------------------------
BOOL CRW_COM::Connect(CString comport,int btl)
{
//	btl=9600;
//  comport="COM1";
	Disconnect();
	m_hComm = CreateFile(comport, GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, NULL, NULL);
	if (m_hComm == INVALID_HANDLE_VALUE){
		m_hComm = 0;
		return FALSE;
	}
	DCB Dcb;
	Dcb.DCBlength = sizeof(DCB);
	GetCommState(m_hComm, &Dcb);
//	BuildCommDCB("baud=9600 parity=N data=8 stop=1", &Dcb);
	Dcb.BaudRate = btl;
	Dcb.fBinary = TRUE;
	Dcb.Parity = NOPARITY;
	Dcb.StopBits = ONESTOPBIT;
	Dcb.ByteSize = 8;
	Dcb.fDtrControl = DTR_CONTROL_DISABLE;
	Dcb.fRtsControl = RTS_CONTROL_DISABLE;
	if (SetCommState(m_hComm, &Dcb) == 0)
		return FALSE;
	COMMTIMEOUTS touts;
	touts.ReadIntervalTimeout = 5;
	touts.ReadTotalTimeoutMultiplier = touts.ReadTotalTimeoutConstant = 5;
	touts.WriteTotalTimeoutMultiplier = touts.WriteTotalTimeoutConstant = 5;
	return SetCommTimeouts(m_hComm, &touts);
}

//---------------------------------------------------------------------------------
// Function Name:   Disconnect()
// Parameter:       无
// Return Value:    错误代码
// Description:     关闭串口
// Note:            
//---------------------------------------------------------------------------------
BOOL CRW_COM::Disconnect()
{
	PurgeComm(m_hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
	if (m_hComm)
	{
		BOOL rcode= ::CloseHandle(m_hComm);
		if (rcode == TRUE)
			m_hComm = 0;
		return rcode;
	}
	return TRUE;
}

//---------------------------------------------------------------------------------
// Function Name:   
// Parameter:       
// Return Value:    
// Description:    读取串口数据,数据返回在data[0],data[1]
// Note:            
//---------------------------------------------------------------------------------
CString CRW_COM::ReadBackData()
{
  int i;
  DWORD dwBytes;
  BYTE data[8];
  for(i=0;i<8;i++)
  {
    data[i]=0x00;
  }
  if(!::ReadFile(m_hComm, data, 7, &dwBytes, NULL))
		AfxMessageBox("COM1不能读到数据!");
  /*
  if(::ReadFile(m_hComm, data, 3, &dwBytes, NULL) == 0 || dwBytes != 3)
//    return "00000000";
  if(data[2]!=data[0]+data[1]) 
		AfxMessageBox("校验码不对!");
	return "00000000";
	*/
	CString StrTemp="";
	int nBackData=data[4];
	int rb;
    //确定报警线路
    rb=nBackData;
    for(i=0;i<8;i++)
	{
	  DWORD bi=1;
	  bi=bi<<i;
	  if(rb&bi)         StrTemp=StrTemp+"1";
	  else              StrTemp=StrTemp+"0";
	}
//	StrTemp.Format("%08d",data[1]);
//		AfxMessageBox(StrTemp);
	return StrTemp;
}

//---------------------------------------------------------------------------------
// Function Name:   
// Parameter:       
// Return Value:    
// Description:     输出,nData是路数之组合
// Note:            
//---------------------------------------------------------------------------------
BOOL CRW_COM::SendOut(int nDeviceNo,int nData)
{
	int i;
	CString StrTemp="";
	StrTemp.Format("%d",nData);
//    AfxMessageBox(StrTemp);
	DWORD dwBytes;
	BYTE data[8] ;
	data[0]=0xF6;
	data[1]=nDeviceNo;
	data[2]=0x41;
	data[3]=0x08;
//	data[4]=nData;
	data[4]=0xFF;
	data[5]=0x00;
	data[6]=0x00;

    for ( i = 1; i < 6; i++)
	{
      data[6]=data[6]+data[i];
	}

	if(!::WriteFile(m_hComm, &data, 7, &dwBytes, NULL) )
		AfxMessageBox("COM1不能写入数据!");

/*
	for ( i = 0; i < 7; i++)
	{
//		::Sleep(2); //2ms
		if (::WriteFile(m_hComm, &data[i], 1, &dwBytes, NULL) == 0 )
			return FALSE;
	}
	*/
	return TRUE;
}

//---------------------------------------------------------------------------------
// Function Name:   
// Parameter:       
// Return Value:    
// Description:      查询输入,返回数据在data[0]内,data[1]中是设备号
// Note:            
//---------------------------------------------------------------------------------
CString CRW_COM::SerchIn(int nDeviceNo)
{
	int i;
	DWORD dwBytes;
	BYTE data[8] ;
	data[0]=0xF6;
	data[1]=nDeviceNo;
	data[2]=0x4A;
	data[3]=0x08;
	data[4]=0x00;
	data[5]=0x00;
	data[6]=0x00;

    for ( i = 1; i < 6; i++)
	{
      data[6]=data[6]+data[i];
	}
	if(!::WriteFile(m_hComm, &data, 7, &dwBytes, NULL) )
		AfxMessageBox("COM1不能写入数据!");
/*
	int i;
 	for ( i = 0; i < 3; i++)
	{
//	  ::Sleep(2); //2ms
	  if (::WriteFile(m_hComm, &data[i], 1, &dwBytes, NULL) == 0 || dwBytes != 1) ;
		return "00000000";
	}
	*/
	return ReadBackData();
}

⌨️ 快捷键说明

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