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

📄 mbpcdoc.cpp

📁 保护装置的mbpc软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		}
		else
		{
			Sleep(10);
			cntr++;
			if(cntr >= 100)
			{
				tStatus = 0;
			}
		}
		
	}
	if(cntr >= 100)
	{
		AfxMessageBox("timeout");
		CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
		pFrame->SetMessageText("通信超时");
		m_pComThread->m_nTimeCntr = 60;
		return FALSE;
	}
	return TRUE;
}

BOOL CMbpcDoc::LogIn(BYTE type, UINT Psw)
{
	int cntr = 0;
	BOOL tStatus = 1;
	m_bArrived = FALSE;
	m_nNeedMsg = ACK_SIGN_IN;
	this->SignIn(type, Psw);
	
	while(tStatus)
	{	
		if(m_bArrived == TRUE)
		{
			
			m_bArrived = FALSE;
			this->SignIn(type,Psw);
			tStatus = 0;
		}
		else
		{
			Sleep(10);
			cntr++;
			if(cntr >= 100)
			{
				tStatus = 0;
			}
		}
	
	}
	if(cntr >= 100)
	{
		AfxMessageBox("timeout");
		CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
		pFrame->SetMessageText("通信超时");
		m_pComThread->m_nTimeCntr = 60;
		return FALSE;
	}
	else if(this->m_bLogIn != 1)
	{
		 AfxMessageBox("登陆失败");
		 return FALSE;
	}
	else
		AfxMessageBox("登陆成功");
	return TRUE;
}

BOOL CMbpcDoc::ReqSOEIndex()
{
	BYTE tSum = 0, tBuf[12];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;

	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = SOE_INDEX_CALLING;  

	for(int i = 0; i < 9; i++)
	{
		tSum += tBuf[i];
	}

	tBuf[9] = tSum; tBuf[10] = 0xd7; tBuf[11] = 0x09;
	
	WriteFile(m_pComThread->m_hCommDev, tBuf, 12, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqKEY_M(UINT addr, WORD value, BYTE type)
{
	BYTE tSum = 0, tBuf[19];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;

	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x10; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = KEY_M_FUN;  
	
	BYTE a[4];
	memset(a,0,sizeof(a));
	memcpy(&a,&addr,sizeof(UINT));

	tBuf[9] = a[3]; tBuf[10] = a[2]; tBuf[11] = a[1]; tBuf[12] = a[0];

	memset(a,0,sizeof(a));
	memcpy(&a[0],&value,sizeof(WORD));

	tBuf[13] = a[1]; tBuf[14] = a[0];

	tBuf[15] = type;
	for(int i = 0; i < 16; i++)
	{
		tSum += tBuf[i];
	}

	tBuf[16] = tSum; tBuf[17] = 0xd7; tBuf[18] = 0x09;
	
	WriteFile(m_pComThread->m_hCommDev, tBuf, 19, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqKEY_P(UINT addr, BYTE length)
{
	BYTE tSum = 0, tBuf[17];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;

	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0e; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = KEY_P_FUN;  
	
	BYTE a[4];
	memset(a,0,sizeof(a));
	memcpy(&a,&addr,sizeof(UINT));

	tBuf[9] = a[3]; tBuf[10] = a[2]; tBuf[11] = a[1]; tBuf[12] = a[0];

	tBuf[13] = length;
	for(int i = 0; i < 14; i++)
	{
		tSum += tBuf[i];
	}

	tBuf[14] = tSum; tBuf[15] = 0xd7; tBuf[16] = 0x09;
	
	WriteFile(m_pComThread->m_hCommDev, tBuf, 17, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

//DEL void CMbpcDoc::OnDi() 
//DEL {
//DEL 	// TODO: Add your command handler code here
//DEL 	//this->ReqDiInfo(this->m_device_info.di_count);
//DEL 	this->ReqMeterInfo(this->m_device_info.energy_count);
//DEL }

BOOL CMbpcDoc::ReqSoe(BYTE type, WORD num, BYTE cntr)
{
	BYTE tSum = 0, tBuf[16];
	memset(tBuf,0,sizeof(tBuf));
	DWORD	data_written;

	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0d; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = SOE_CALLING;  

	tBuf[9] = type;
	
	BYTE a[2];
	memset(a,0,2);
	memcpy(&a,&num,2);
	tBuf[10] = a[1]; tBuf[11] = a[0];
	tBuf[12] = cntr;

	for(int i = 0; i < 13; i++)
	{
		tSum += tBuf[i];
	}

	tBuf[13] = tSum; tBuf[14] = 0xd7; tBuf[15] = 0x09;
	
	WriteFile(m_pComThread->m_hCommDev, tBuf, 16, &data_written, &m_pComThread->m_osWrite);

	return TRUE;
}

BOOL CMbpcDoc::DeleteSoe()
{
	BYTE tSum = 0, tBuf[12];
	memset(tBuf,0,sizeof(tBuf));
	DWORD	data_written;

	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0d; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = DEL_SOE_CALLING;  

	for(int i = 0; i < 9; i++)
	{
		tSum += tBuf[i];
	}

	tBuf[9] = tSum; tBuf[10] = 0xd7; tBuf[11] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 16, &data_written, &m_pComThread->m_osWrite);

	return TRUE;
}

BOOL CMbpcDoc::DelSOE()
{
	int cntr = 0;
	BOOL tStatus = 1;
	this->DeleteSoe();
	m_bArrived = FALSE;
	while(tStatus)
	{
		if(m_bArrived == TRUE)
		{
			m_nNeedMsg = ACK_DEL_SOE;
			m_bArrived = FALSE;
			this->DeleteSoe();
			tStatus = 0;
		}
		else
		{
			Sleep(10);
			cntr++;
			if(cntr >= 100)
			{
				tStatus = 0;
			}
		}
		
	}
	if(cntr >= 100)
	{
		AfxMessageBox("timeout");
		CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
		pFrame->SetMessageText("通信超时");
		m_pComThread->m_nTimeCntr = 60;
		return FALSE;
	}
	else if(this->m_bDelSoe == 0)
	{
		 AfxMessageBox("删除失败");
		 return FALSE;
	}
	else
		AfxMessageBox("删除成功");
	return TRUE;
}

//DEL BOOL CMbpcDoc::ReqFrequency()
//DEL {
//DEL 
//DEL }

BOOL CMbpcDoc::ReqAnaInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_ANALOG_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleMeterInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_METER_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleDiInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_DI_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleDoInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_DO_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleEnableInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_ENABLE_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleSettingInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_SETTING_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleAlarmInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_ALARM_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

BOOL CMbpcDoc::ReqSingleRecordInfo(BYTE Id)
{
	BYTE tSum = 0, tBuf[13];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 0x0a; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = REQ_RECORD_INFO; tBuf[9] = Id;

	for(int i = 0; i < 10; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[10] = tSum; tBuf[11] = 0xd7; tBuf[12] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 13, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}


BOOL CMbpcDoc::SetDeviceName(CString Station, CString Device)
{
	BYTE tSum = 0, tBuf[44];
	memset(tBuf,0,sizeof(tBuf));
	DWORD data_written;
	tBuf[0] = 0xeb; tBuf[1] = 0x90; tBuf[2] = m_nRemoteAddr; tBuf[3] = LOCAL_ADDRESS;
	tBuf[4] = 41; tBuf[5] = 0x00; tBuf[6] = PROT_PRIM_VERSION; tBuf[7] = PROT_SCND_VERSION;
	tBuf[8] = SET_DEVICE_NAME; 
	
	memcpy(&tBuf[9],Station.GetBuffer(Station.GetLength()),sizeof(STATION_NAME));
	memcpy(&tBuf[25], Device.GetBuffer(Device.GetLength()),sizeof(DEVICE_NAME));

	for(int i = 0; i < 41; i++)
	{
		tSum += tBuf[i];
	}
	tBuf[41] = tSum; tBuf[42] = 0xd7; tBuf[43] = 0x09;

	WriteFile(m_pComThread->m_hCommDev, tBuf, 44, &data_written, &m_pComThread->m_osWrite);
	return TRUE;
}

void CMbpcDoc::WriteConfigFile()
{
	CString sFile,sPath;
//	FILE *myfile;

	GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	sFile = sPath + "\\config.dat";
	
	ofstream fout;
	fout.open(sFile,   ios::binary);
	fout.write((char*)&m_device_info,sizeof(DEVICE_INFO));
	fout.write((char*)&m_analog_info,sizeof(m_analog_info));
	fout.write((char*)&m_energy_info,sizeof(m_energy_info));
	fout.write((char*)&m_DiInfo,sizeof(m_DiInfo));
	fout.write((char*)&m_DoInfo,sizeof(m_DoInfo));
	fout.write((char*)&m_EnableInfo,sizeof(m_EnableInfo));
	fout.write((char*)&m_SettingInfo,sizeof(m_SettingInfo));
	fout.write((char*)&m_AlarmInfo,sizeof(m_AlarmInfo));
	fout.write((char*)&m_RecordInfo,sizeof(m_RecordInfo));
	fout.close();
	
}

void CMbpcDoc::ReadConfigFile()
{
	CString sFile,sPath;
//	FILE *myfile;

	GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	sFile = sPath + "\\config.dat";

	ifstream fin;
	fin.open(sFile,   ios::binary);
	fin.read((char*)&m_device_info,sizeof(DEVICE_INFO));
	fin.read((char*)&m_analog_info,sizeof(m_analog_info));
	fin.read((char*)&m_energy_info,sizeof(m_energy_info));
	fin.read((char*)&m_DiInfo,sizeof(m_DiInfo));
	fin.read((char*)&m_DoInfo,sizeof(m_DoInfo));
	fin.read((char*)&m_EnableInfo,sizeof(m_EnableInfo));
	fin.read((char*)&m_SettingInfo,sizeof(m_SettingInfo));
	fin.read((char*)&m_AlarmInfo,sizeof(m_AlarmInfo));
	fin.read((char*)&m_RecordInfo,sizeof(m_RecordInfo));
	fin.close();
}

void CMbpcDoc::OnCloseDocument() 
{
	// TODO: Add your specialized code here and/or call the base class
	this->WriteConfigFile();
	CDocument::OnCloseDocument();
}

/*BOOL CMbpcDoc::SetAnalogScndPara(BYTE id, CString name, float ratio)
{
	return TRUE;
}*/



void CMbpcDoc::SetTitle(LPCTSTR lpszTitle) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CDocument::SetTitle(lpszTitle);
}


void __cdecl ThreadReqInfo(void* point)
{
	CMbpcDoc *pDoc;
	pDoc = (CMbpcDoc*)point;
	
	
	_endthread();
}

⌨️ 快捷键说明

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