📄 rw_com.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 + -