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

📄 dnpexplain.cpp

📁 电力和自动化通讯规约模拟软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	setSendCrc();
	SendRespons();
	return true;
}

BOOL CDnpExplain::PreOperateReply(WORD &rtuaddress, WORD &priaddress, BYTE ykindex,bool Onoff)
{
	GetLocalTime(&m_tSelectOperater);
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddress;
	rtuaddr2=rtuaddress>>8;
	priaddr1=(BYTE)priaddress;
	priaddr2=priaddress>>8;
	BYTE Length=0x1a;//31

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xd7);
	m_baOutBuffer.Add(0xce);
	m_baOutBuffer.Add(0x81);
///IIN
	m_baOutBuffer.Add(0x0c);//object
	m_baOutBuffer.Add(0x01);
	m_baOutBuffer.Add(0x17);
	m_baOutBuffer.Add(0x01);//Number
	m_baOutBuffer.Add(ykindex);//index
	if(Onoff)
		m_baOutBuffer.Add(0x81);//
	else
		m_baOutBuffer.Add(0x41);//
	m_baOutBuffer.Add(0x01);//
	m_baOutBuffer.Add(0xdc);//
	m_baOutBuffer.Add(0x05);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	///////////////////////CRC
	///////////////////////
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	////////////////////////////CRC
	////////////////////////////
	HandleIInInfo();
	
	setSendCrc();
	SendRespons();
	return true;
}

BOOL CDnpExplain::DoneOperateReply(WORD &rtuaddress, WORD &priaddress, BYTE ykindex, bool Onoff)
{
	SYSTEMTIME tDoneOperateTime;
	GetLocalTime(&tDoneOperateTime);
	//if(!OperateTimeOut(3000,tDoneOperateTime))
	//	return false;
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddress;
	rtuaddr2=rtuaddress>>8;
	priaddr1=(BYTE)priaddress;
	priaddr2=priaddress>>8;
	BYTE Length=0x1a;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xd8);
	m_baOutBuffer.Add(0xce);
	m_baOutBuffer.Add(0x81);
//////iin
	m_baOutBuffer.Add(0x0c);//object
	m_baOutBuffer.Add(0x01);
	m_baOutBuffer.Add(0x17);
	m_baOutBuffer.Add(0x01);//Number
	m_baOutBuffer.Add(ykindex);//
	if(Onoff)
		m_baOutBuffer.Add(0x81);//trip
	else
		m_baOutBuffer.Add(0x41);//close
	m_baOutBuffer.Add(0x01);//
	m_baOutBuffer.Add(0xd0);//
	m_baOutBuffer.Add(0x07);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	///////////////////////CRC
	///////////////////////
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	////////////////////////////CRC
	////////////////////////////
	HandleIInInfo();
	
	setSendCrc();
	SendRespons();
	BinaryInputChange(ykindex,Onoff);
	return true;
}

BOOL CDnpExplain::DirectOperateReply(WORD &rtuaddr, WORD &priaddr, BYTE index, bool Onoff)
{
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddr;
	rtuaddr2=rtuaddr>>8;
	priaddr1=(BYTE)priaddr;
	priaddr2=priaddr>>8;
	BYTE Length=0x1c;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xfd);
	m_baOutBuffer.Add(0xcc);
	m_baOutBuffer.Add(0x81);
///iin
	m_baOutBuffer.Add(0x0c);//object
	m_baOutBuffer.Add(0x01);
	m_baOutBuffer.Add(0x28);
	m_baOutBuffer.Add(0x01);//Number
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(index);//
	m_baOutBuffer.Add(0x00);//
	if(Onoff)
		m_baOutBuffer.Add(0x81);//trip
	else
		m_baOutBuffer.Add(0x41);//close
	m_baOutBuffer.Add(0x01);//
	m_baOutBuffer.Add(0xd0);//
	m_baOutBuffer.Add(0x07);//
	///////////////////////CRC
	///////////////////////
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	m_baOutBuffer.Add(0x00);//
	////////////////////////////CRC
	////////////////////////////
	HandleIInInfo();
	
	setSendCrc();
	SendRespons();
	BinaryInputChange(index,Onoff);
	return true;
}

BOOL CDnpExplain::TimeSynchReply(WORD &rtuaddr, WORD &priaddr,CByteArray &byteArray)
{
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddr;
	rtuaddr2=rtuaddr>>8;
	priaddr1=(BYTE)priaddr;
	priaddr2=priaddr>>8;
	BYTE Length=0x14;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xc3);
	m_baOutBuffer.Add(0xc2);
	m_baOutBuffer.Add(0x81);
//////IIN
	m_baOutBuffer.Add(0x00);
	m_baOutBuffer.Add(0x32);//object
	m_baOutBuffer.Add(0x01);
	m_baOutBuffer.Add(0x07);
	m_baOutBuffer.Add(0x01);//Number
	m_baOutBuffer.Add(byteArray.GetAt(17));
	m_baOutBuffer.Add(byteArray.GetAt(18));
	m_baOutBuffer.Add(byteArray.GetAt(19));
	m_baOutBuffer.Add(byteArray.GetAt(20));
	m_baOutBuffer.Add(byteArray.GetAt(21));
	m_baOutBuffer.Add(byteArray.GetAt(22));
	m_timeAnch=false;
	HandleIInInfo();
	setSendCrc();
	SendRespons();
	m_pRtuSimDlg=m_pMainDlg;
	if(m_pRtuSimDlg) 
	{
		m_pRtuSimDlg->m_TimeStatus="正常";
		m_pRtuSimDlg->UpdateData(false);
	}
	return true;
}

BOOL CDnpExplain::SendSoeDataWithAbsolute(WORD &rtuaddr, WORD &priaddr,BYTE yxIndex,BOOL Onoff)
{
	if(m_paSOE.GetSize()==0)
	{
		return false;
	}
	int soeItem=m_paSOE.GetSize();
	CSOERec *pSoeRec=new CSOERec;
//	time_t ltime,timeInSce;
	__int64	timeInMillSec;
	SYSTEMTIME pSystemTime;
	BYTE timetemp1,timetemp2,timetemp3,
		timetemp4,timetemp5,timetemp6;

//	pSoeRec=m_paSOE.GetAt(0);	

	
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddr;
	rtuaddr2=rtuaddr>>8;
	priaddr1=(BYTE)priaddr;
	priaddr2=priaddr>>8;
	BYTE Length=14+8*soeItem;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xca);
	m_baOutBuffer.Add(0xeb);
	m_baOutBuffer.Add(0x81);
	//IIN
	m_baOutBuffer.Add(0x02);//object
	m_baOutBuffer.Add(0x02);
	m_baOutBuffer.Add(0x17);
	m_baOutBuffer.Add(soeItem);//Number
	for(int i=0;i<soeItem;i++)
	{
		pSoeRec=(CSOERec *)m_paSOE.GetAt(i);
		BYTE digitalIndex=pSoeRec->m_uDigitalNO;
		BOOL bOpened=pSoeRec->m_bOpened;
		pSystemTime=pSoeRec->m_stTime;//获取毫秒
		timeInMillSec=(__int64)pSystemTime.wSecond*1000+(__int64)pSystemTime.wMilliseconds;
		timetemp1=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp2=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp3=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp4=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp5=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp6=(BYTE)timeInMillSec;
		m_baOutBuffer.Add(digitalIndex);//index
		if(bOpened)
			m_baOutBuffer.Add(0x81);//
		else
			m_baOutBuffer.Add(0x41);//
		m_baOutBuffer.Add(timetemp1);
		m_baOutBuffer.Add(timetemp2);
		m_baOutBuffer.Add(timetemp3);
		m_baOutBuffer.Add(timetemp4);
		m_baOutBuffer.Add(timetemp5);
		/////////////////////////////CRC
		////////////////////////////
		m_baOutBuffer.Add(timetemp6);
	}
	HandleIInInfo();
	setSendCrc();
	SendRespons();
	m_paSOE.RemoveAll();
	return true;
}

BOOL CDnpExplain::CallClass0Data(WORD &rtuaddr, WORD &priaddr)
{
	if(m_dwaCount.GetSize()==0||m_waAnalog.GetSize()==0||m_baDigital.GetSize()==0)
	{
		return false;
	}
	BYTE DigitalCount=m_baDigital.GetSize();
	BYTE AnalogyCount=m_waAnalog.GetSize();
	BYTE CountNumber=m_dwaCount.GetSize();
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	BYTE data1,data2,data3,data4;
	priaddr1=(BYTE)priaddr;
	priaddr2=priaddr>>8;
	rtuaddr1=(BYTE)rtuaddr;
	rtuaddr2=rtuaddr>>8;
	BYTE Length=10+5*3+DigitalCount+AnalogyCount*2+CountNumber*4;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xcf);
	m_baOutBuffer.Add(0xc7);
	m_baOutBuffer.Add(0x81);
    //iin1
	///iin2
	m_baOutBuffer.Add(0x01);//binary input
	m_baOutBuffer.Add(0x01);
	m_baOutBuffer.Add(0x00);
	m_baOutBuffer.Add(0x00);//number
	m_baOutBuffer.Add(DigitalCount*8-1);//number
	for(int i=0;i<DigitalCount;i++)
	{
		m_baOutBuffer.Add(m_baDigital[i]);
	}
////////////////////////////////////
	m_baOutBuffer.Add(0x1e);//object
	m_baOutBuffer.Add(0x04);
	m_baOutBuffer.Add(0x00);
	m_baOutBuffer.Add(0x00);//Number
	m_baOutBuffer.Add(AnalogyCount-1);//Number
	for(int ii=0;ii<AnalogyCount;ii++)
	{
		data1=(BYTE)m_waAnalog[ii];
		data2=m_waAnalog[ii]>>8;
		m_baOutBuffer.Add(data1);
		m_baOutBuffer.Add(data2);
	}

	m_baOutBuffer.Add(0x14);//object
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x00);
	m_baOutBuffer.Add(0x00);//Number
	m_baOutBuffer.Add(CountNumber-1);//Number
	CDWordArray m_CountTemp;
	for(int j=0;j<CountNumber;j++)
	{
		m_CountTemp.Add(m_dwaCount[j]);
	}
	for(int iii=0;iii<CountNumber;iii++)
	{
		DWORD dwTemp=m_CountTemp[iii];
		data1=(BYTE)m_CountTemp[iii];
		m_CountTemp[iii]>>=8;
		data2=(BYTE)m_CountTemp[iii];
		m_CountTemp[iii]>>=8;
		data3=(BYTE)m_CountTemp[iii];
		m_CountTemp[iii]>>=8;
		data4=(BYTE)m_CountTemp[iii];
		m_baOutBuffer.Add(data1);
		m_baOutBuffer.Add(data2);
		m_baOutBuffer.Add(data3);
		m_baOutBuffer.Add(data4);
	}
	HandleIInInfo();
	setSendCrc();
	SendRespons();
	return true;
}

BOOL CDnpExplain::CallClass1Data(WORD &rtuaddr, WORD &priaddr)
{
	BOOL bResult = FALSE;


	return bResult;
}

BOOL CDnpExplain::CallClass2Data(WORD &rtuaddr, WORD &priaddr)
{
	if(m_paSOE.GetSize()==0)
	{
		return false;
	}
	m_soeState=false;
	int soeItem=m_paSOE.GetSize();
	CSOERec *pSoeRec=new CSOERec;
	CTimeSpan timeSpanTemp;
	CTime baseTime(0);
	__int64	timeInMillSec;
	SYSTEMTIME pSystemTime;
	BYTE timetemp1,timetemp2,timetemp3,
		timetemp4,timetemp5,timetemp6;

//	pSoeRec=m_paSOE.GetAt(0);	

	
	BYTE rtuaddr1,rtuaddr2,priaddr1,priaddr2;
	rtuaddr1=(BYTE)rtuaddr;
	rtuaddr2=rtuaddr>>8;
	priaddr1=(BYTE)priaddr;
	priaddr2=priaddr>>8;
	BYTE Length=14+8*soeItem;

	m_baOutBuffer.RemoveAll();
	m_baOutBuffer.Add(0x05);
	m_baOutBuffer.Add(0x64);
	m_baOutBuffer.Add(Length);//Length
	m_baOutBuffer.Add(0x44);
	m_baOutBuffer.Add(priaddr1);
	m_baOutBuffer.Add(priaddr2);
	m_baOutBuffer.Add(rtuaddr1);
	m_baOutBuffer.Add(rtuaddr2);
	//////////////////////////////2Byte CRC reserved
	/////////////////////////////
	m_baOutBuffer.Add(0xca);
	m_baOutBuffer.Add(0xeb);
	m_baOutBuffer.Add(0x81);
    //iin1
	//iin2
	m_baOutBuffer.Add(0x02);//object
	m_baOutBuffer.Add(0x02);
	m_baOutBuffer.Add(0x17);
	m_baOutBuffer.Add(soeItem);//Number
	for(int i=0;i<soeItem;i++)
	{
		pSoeRec=(CSOERec *)m_paSOE.GetAt(i);
		BYTE digitalIndex=pSoeRec->m_uDigitalNO;
		BOOL bOpened=pSoeRec->m_bOpened;
		pSystemTime=pSoeRec->m_stTime;//获取毫秒
		CTime timeSoeItem(pSystemTime);
		timeSpanTemp=timeSoeItem-baseTime;
		timeInMillSec=timeSpanTemp.GetTotalSeconds();
		timetemp1=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp2=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp3=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp4=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp5=(BYTE)timeInMillSec;
		timeInMillSec>>=8;
		timetemp6=(BYTE)timeInMillSec;
		m_baOutBuffer.Add(digitalIndex);//index
		if(bOpened)
			m_baOutBuffer.Add(0x81);//
		else
			m_baOutBuffer.Add(0x41);//
		m_baOutBuffer.Add(timetemp1);
		m_baOutBuffer.Add(timetemp2);
		m_baOutBuffer.Add(timetemp3);
		m_baOutBuffer.Add(timetemp4);
		m_baOutBuffer.Add(timetemp5);
		/////////////////////////////CRC
		////////////////////////////
		m_baOutBuffer.Add(timetemp6);
	}
	HandleIInInfo();
	
	setSendCrc();
	SendRespons();
	m_paSOE.RemoveAll();
	return true;
}

BOOL CDnpExplain::SendSoeDataWithRelative(WORD &rtuaddr, WORD &priaddr)
{
	BOOL bResult = FALSE;

	return bResult;
}

BOOL CDnpExplain::CallClass3Data(WORD &rtuaddr, WORD &priaddr)
{
	if(m_paFault.GetSize()==0)
	{
		return false;
	}
	m_faultState=false;
	int faultNum=m_paFault.GetSize();
	CFaultRec *pFaultRec=new CFaultRec;
	//	time_t ltime,timeInSce;

⌨️ 快捷键说明

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