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

📄 comalarmbox.cpp

📁 在监控行业中比较流行的智敏报警盒
💻 CPP
字号:
// ComAlarmBox.cpp : implementation file
//

#include "stdafx.h"
#include "ComAlarmBox.h"

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

/////////////////////////////////////////////////////////////////////////////
// CComAlarmBox 

IMPLEMENT_DYNCREATE(CComAlarmBox, CWnd)

/////////////////////////////////////////////////////////////////////////////
// CPci16pr properties

/////////////////////////////////////////////////////////////////////////////
// CPci16pr operations
short CComAlarmBox::DataIn()
{
	short result;
    SendData(1,0x4A,0x00,0) ;

	BYTE data[8];
	DWORD dwBytes=7;
    if(!ReadCamera(data,  dwBytes))
	   return false;
	result=data[4];
	return result;
}

BOOL CComAlarmBox::Init(short CardNumber)
{
	BOOL result;
	CString StrTemp;
    StrTemp.Format("COM%d",CardNumber+1);
	if ( ! (result=Connect(StrTemp,9600)) )
	{
		StrTemp.Format("Error: 不能打开串口设备!\n");
	}
    nReadBack=0;
    SendData(1,0x4A,0x00,0) ;
	return result;
}

void CComAlarmBox::DataOut(short data)
{
    SendData(1,0x44,data,0) ;
   nReadBack= data;
}

void CComAlarmBox::Exit()
{
   SendData(1,0x44,0,0) ;
//   SendData(2,0x44,0,0) ;
   nReadBack=0;
   Disconnect();
}

short CComAlarmBox::ReadBack()
{
	short result=nReadBack;
	return result;
}


BOOL CComAlarmBox::SendData(int nDeviceNo,int nCommand,int nData1,int nData2) 
{
	int i;
	int   write_result;
	BYTE  cOutChar[8];
    cOutChar[0]=0xF6;
    cOutChar[1]=nDeviceNo;
    cOutChar[2]=nCommand;
    cOutChar[3]=0x10;
    cOutChar[4]=nData1;
    cOutChar[5]=nData2;
    cOutChar[6]=0x00;
    for ( i = 1; i < 6; i++)
	{
      cOutChar[6]=cOutChar[6]+cOutChar[i];
	  if(cOutChar[6]>256) cOutChar[6]=cOutChar[6]-256;
	}
	write_result = TalkToCamera(cOutChar, 7);
	if ( write_result < 0 ){
	    CString StrTemp="";
		StrTemp.Format(" Write Error: \n");
		return FALSE;
	}
  return TRUE;
}

BOOL CComAlarmBox::ReadData(int nDeviceNo,BOOLEAN *AlarmNum) 
{
	int i;
	BYTE       data[8];
	int        read_result;
	CString StrTemp="";
	int rb;
	data[0] = '\0';
	read_result = ReadCamera(data, 7);
	if ( (read_result < 0)  )
	{ 
		  StrTemp.Format("Read Error:\n");
		  return FALSE;
	}		
    for(int j=0;j<2;j++)
	{
        rb=data[4+j];
        for(i=0;i<8;i++)
		{
	      DWORD bi=1;
	      bi=bi<<i;
	      if(rb&bi)
		    AlarmNum[i+(nDeviceNo-1)*16+j*8]=true;
	      else
		    AlarmNum[i+(nDeviceNo-1)*16+j*8]=false;
		}
	}
	return TRUE;
}


BOOL CComAlarmBox::Connect(CString comport,int btl)
{

	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_ENABLE;//DTR_CONTROL_DISABLE
	Dcb.fRtsControl = RTS_CONTROL_ENABLE;//RTS_CONTROL_DISABLE;
	if (SetCommState(m_hComm, &Dcb) == 0)
		return FALSE;
	return true;
	/*
	COMMTIMEOUTS touts;
	touts.ReadIntervalTimeout = 10;
	touts.ReadTotalTimeoutMultiplier = touts.ReadTotalTimeoutConstant = 5;
	touts.WriteTotalTimeoutMultiplier = touts.WriteTotalTimeoutConstant = 5;
	return SetCommTimeouts(m_hComm, &touts);
	*/
}

//---------------------------------------------------------------------------------
BOOL CComAlarmBox::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:    
// Note:            
//---------------------------------------------------------------------------------
BOOL CComAlarmBox::ReadCamera(BYTE *data,  DWORD dwBytes)
{
    int i=0;
	BYTE byte = 0xf6; // first data byte

  if(!ReadFile(m_hComm, data, dwBytes, &dwBytes, NULL) == 0 )
  {
  }
      if(data[0]!=byte)       return false;

     
  return TRUE;
}

//---------------------------------------------------------------------------------
// Function Name:   
// Parameter:       
// Return Value:    
// Description:      对话
// Note:            
//---------------------------------------------------------------------------------
BOOL CComAlarmBox::TalkToCamera(BYTE *data,int nLen)
{
	DWORD dwBytes;
	BYTE checkSum = 0;
	Sleep(1);
	if (::WriteFile(m_hComm, data, nLen, &dwBytes, NULL) == 0)
	  return FALSE;
	return TRUE;
}

⌨️ 快捷键说明

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