📄 dnpexplain.cpp
字号:
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 + -