?? comalarmbox.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 + -