📄 nsclass.cpp
字号:
szASDU[ASDUHEAD_TYP] = ASDU_10;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GW;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = ASDUINF_EXCW;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = GRP_SYS1;
szASDU[ASDUHEAD_DAT + 3] = SYS_INF_PULSEFZ;
// KOD
szASDU[ASDUHEAD_DAT + 4] = 1;
// GDD
szASDU[ASDUHEAD_DAT + 5] = GDD_UINT;
szASDU[ASDUHEAD_DAT + 6] = 1;
szASDU[ASDUHEAD_DAT + 7] = 1;
szASDU[ASDUHEAD_DAT + 8] = 0;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_10_SIZE );
}
break;
case STATE_RELAY:
{
BYTE szASDU[ASDU_10_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_10;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GW;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = m_btInf;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
BYTE btGroup = 0, btCode = 0;
if ( -1 == theApp.GetPointCode( m_LogicAddr.m_btType, TYPE_RELAY, m_wRelayIndex, btGroup, btCode ) )
{
return PREM_ERR_PARAM;
break;
}
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = 11;
szASDU[ASDUHEAD_DAT + 3] = btCode;
// KOD
szASDU[ASDUHEAD_DAT + 4] = 1;
// GDD
szASDU[ASDUHEAD_DAT + 5] = GDD_2BITS;
szASDU[ASDUHEAD_DAT + 6] = 1;
szASDU[ASDUHEAD_DAT + 7] = 1;
BYTE btValue = 0;
if ( -1 == theApp.GetRelayCode( m_LogicAddr.m_btType, m_wRelayIndex, m_btRelayValue, btValue ) )
{
return PREM_ERR_PARAM;
break;
}
if ( (BYTE)-1 == btValue || ( DPI_OFF != btValue && DPI_ON != btValue ) )
{
return PREM_ERR_PARAM;
break;
}
szASDU[ASDUHEAD_DAT + 8] = btValue;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_10_SIZE );
}
break;
case STATE_REQUESTAREA:
{
BYTE szASDU[ASDU_21_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_21;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GR;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 241;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = GRP_SYS1;
szASDU[ASDUHEAD_DAT + 3] = m_btInf;
// KOD
szASDU[ASDUHEAD_DAT + 4] = m_btProtectKOD;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_21_SIZE );
}
break;
case STATE_REQUESTVAL:
{
BYTE szASDU[ASDU_21_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_21;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GR;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 241;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = GRP_VAL2;
szASDU[ASDUHEAD_DAT + 3] = 0x00;
// KOD
szASDU[ASDUHEAD_DAT + 4] = m_btProtectKOD;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_21_SIZE );
}
break;
case STATE_REQUESTYB:
{
BYTE szASDU[ASDU_21_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_21;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GR;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 241;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = GRP_RYB;
szASDU[ASDUHEAD_DAT + 3] = 0x00;
// KOD
szASDU[ASDUHEAD_DAT + 4] = m_btProtectKOD;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_21_SIZE );
}
break;
case STATE_REQUESTPROTANA:
{
BYTE szASDU[ASDU_21_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_21;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_GR;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 241;
// RII
szASDU[ASDUHEAD_DAT] = m_btScn++;
// NGD
szASDU[ASDUHEAD_DAT + 1] = 1;
// GIN
szASDU[ASDUHEAD_DAT + 2] = GRP_ANA1;
szASDU[ASDUHEAD_DAT + 3] = 0x00;
// KOD
szASDU[ASDUHEAD_DAT + 4] = m_btProtectKOD;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_21_SIZE );
}
break;
case STATE_CHANGEYB:
case STATE_ACKCHANGEYB:
case STATE_CANCELCHANGEYB:
case STATE_CHANGEAREA:
case STATE_ACKCHANGEAREA:
case STATE_CANCELCHANGEAREA:
case STATE_CHANGEVAL:
case STATE_ACKCHANGEVAL:
case STATE_CANCELCHANGEVAL:
if ( m_pValue )
m_pChannel->ProcessSend( (char*)m_pValue, m_nLength );
break;
case STATE_REQUESTACC:
if ( 4 == m_btStep )
{
BYTE szASDU[ASDU_25_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_25;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_EVTDAT;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 0;
// TOO
szASDU[ASDUHEAD_DAT] = 68;
// TOV
szASDU[ASDUHEAD_DAT + 1] = 1;
// FAN
szASDU[ASDUHEAD_DAT + 2] = LOBYTE( m_wOrder );
szASDU[ASDUHEAD_DAT + 3] = HIBYTE( m_wOrder );
// ACC
szASDU[ASDUHEAD_DAT + 4] = m_btChannel;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_25_SIZE );
}
else
{
BYTE szASDU[ASDU_24_SIZE];
szASDU[ASDUHEAD_TYP] = ASDU_24;
szASDU[ASDUHEAD_VSQ] = 0x81;
szASDU[ASDUHEAD_COT] = COT_EVTDAT;
szASDU[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
szASDU[ASDUHEAD_FUN] = 254;
szASDU[ASDUHEAD_INF] = 0;
// TOO
switch( m_btStep )
{
case 0:
szASDU[ASDUHEAD_DAT] = 24;
break;
case 1:
szASDU[ASDUHEAD_DAT] = 1;
break;
case 2:
szASDU[ASDUHEAD_DAT] = 2;
break;
case 3:
szASDU[ASDUHEAD_DAT] = 16;
break;
case 5:
szASDU[ASDUHEAD_DAT] = 8;
break;
}
// TOV
szASDU[ASDUHEAD_DAT + 1] = 1;
// FAN
szASDU[ASDUHEAD_DAT + 2] = LOBYTE( m_wOrder );
szASDU[ASDUHEAD_DAT + 3] = HIBYTE( m_wOrder );
// ACC
szASDU[ASDUHEAD_DAT + 4] = m_btChannel;
m_pChannel->ProcessSend( (char*)szASDU, ASDU_24_SIZE );
}
break;
default:
break;
}
return PREM_OK;
}
void CEquipment::Startup()
{
// receive form device
if ( !m_bComm )
{
OnCommOK();
m_bComm = TRUE;
}
Version();
}
int CEquipment::Version()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_VERSION;
ProcessSend();
return PREM_OK;
}
int CEquipment::TimeSync()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_TIMESYNC;
ProcessSend();
m_nState = STATE_NONE;
return PREM_OK;
}
int CEquipment::LoadAccidentInf()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_ACCIDENTINF;
ProcessSend();
return PREM_OK;
}
int CEquipment::LoadEventInf()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_EVENTINF;
ProcessSend();
return PREM_OK;
}
int CEquipment::LoadChannelInf()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_CHANNELINF;
ProcessSend();
return PREM_OK;
}
int CEquipment::LoadStateInf()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_STATEINF;
ProcessSend();
return PREM_OK;
}
int CEquipment::GI()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_GI;
ProcessSend();
return PREM_OK;
}
int CEquipment::FreezePulse()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_FREEZEPULSE;
ProcessSend();
return PREM_OK;
}
int CEquipment::CallPulse()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_CALLPULSE;
ProcessSend();
return PREM_OK;
}
int CEquipment::FreePulse()
{
if ( !IsCommFree() )
return PREM_ERR_TASK;
m_nState = STATE_FREEPULSE;
ProcessSend();
return PREM_OK;
}
int CEquipment::WritePulse( WORD wIndex, BYTE* pValue, BYTE btType )
{
// is state free
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
m_nState = STATE_WRITEPULSE;
// free old data
if ( m_pValue )
{
delete[] m_pValue;
m_pValue = NULL;
m_nLength = 0;
}
// allocate the buffer
// modify only 1 per time
m_nLength = ASDUHEAD_DAT + 2 + ( GIN_LEN + KOD_LEN + GDD_LEN + 4 );
m_pValue = new BYTE[m_nLength];
if ( !m_pValue )
return PREM_ERR_MEMORY;
// frame header
m_pValue[ASDUHEAD_TYP] = ASDU_10;
m_pValue[ASDUHEAD_VSQ] = 0x81;
m_pValue[ASDUHEAD_COT] = COT_GW;
m_pValue[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
m_pValue[ASDUHEAD_FUN] = 254;
m_pValue[ASDUHEAD_INF] = ASDUINF_EXCW;
// RII
m_pValue[ASDUHEAD_DAT] = m_btScn++;
m_pValue[ASDUHEAD_DAT + 1] = 1;
// NGD
m_pValue[ASDUHEAD_DAT + 1] = 0;
BYTE* pTemp = m_pValue + ASDUHEAD_DAT + 2;
// GIN
BYTE btGroup = 0, btCode = 0;
if ( -1 == theApp.GetPointCode( m_LogicAddr.m_btType, TYPE_PULSE, wIndex, btGroup, btCode ) )
return PREM_ERR_PARAM;
*pTemp++ = btGroup;
*pTemp++ = btCode;
// KOD
*pTemp++ = KOD_VALUE;
// GDD
if ( btType )
{
*pTemp++ = GDD_UINT;
*pTemp++ = sizeof(DWORD);
*pTemp++ = 1;
*(DWORD*)pTemp = *(DWORD*)pValue;
pTemp += sizeof(DWORD);
}
else
{
*pTemp++ = GDD_REAL;
*pTemp++ = sizeof(float);
*pTemp++ = 1;
*(float*)pTemp = *(float*)pValue;
pTemp += sizeof(float);
}
ProcessSend();
return PREM_OK;
}
int CEquipment::RelaySelect( WORD wRtu, BYTE btType, WORD wIndex, BYTE btValue )
{
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
m_wRelayRtu = wRtu;
m_wRelayIndex = wIndex;
m_btInf = ASDUINF_ACKW;
m_btRelayValue = btValue;
m_nState = STATE_RELAY;
int nRet = ProcessSend();
if ( PREM_OK != nRet )
m_nState = STATE_NONE;
return nRet;
}
int CEquipment::RelayRun( WORD wRtu, BYTE btType, WORD wIndex, BYTE btValue )
{
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
m_wRelayRtu = wRtu;
m_wRelayIndex = wIndex;
m_btInf = ASDUINF_EXCW;
m_btRelayValue = btValue;
m_nState = STATE_RELAY;
int nRet = ProcessSend();
if ( PREM_OK != nRet )
m_nState = STATE_NONE;
return nRet;
}
int CEquipment::RelayCancel( WORD wRtu, BYTE btType, WORD wIndex, BYTE btValue )
{
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
m_nState = STATE_RELAY;
m_wRelayRtu = wRtu;
m_wRelayIndex = wIndex;
m_btInf = ASDUINF_CANW;
m_btRelayValue = btValue;
m_nState = STATE_RELAY;
int nRet = ProcessSend();
m_nState = STATE_NONE;
return nRet;
}
int CEquipment::RequestVal( WORD wRtu, HWND hWnd, BYTE btKOD )
{
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
ClearList();
m_nState = STATE_REQUESTVAL;
m_wProtectRtu = wRtu;
m_btProtectKOD = btKOD;
m_hProtectWnd = hWnd;
ProcessSend();
return PREM_OK;
}
int CEquipment::ChangeVal( WORD wRtu, HWND hWnd, BYTE* pValue, APPSTATE appState )
{
if ( STATE_GI < m_nState )
return PREM_ERR_TASK;
m_nState = appState;
m_wProtectRtu = wRtu;
m_hProtectWnd = hWnd;
// free old data
if ( m_pValue )
{
delete[] m_pValue;
m_pValue = NULL;
m_nLength = 0;
}
// allocate the buffer
m_nLength = ASDUHEAD_DAT + 2 + ( GIN_LEN + KOD_LEN + GDD_LEN + sizeof(float) ) * m_ListValue.GetCount();
m_pValue = new BYTE[m_nLength];
if ( !m_pValue )
return PREM_ERR_MEMORY;
// skip flag & total
pValue += sizeof(WORD);
WORD wTotal = *(WORD*)pValue;
pValue += sizeof(WORD);
// frame header
m_pValue[ASDUHEAD_TYP] = ASDU_10;
m_pValue[ASDUHEAD_VSQ] = 0x81;
m_pValue[ASDUHEAD_COT] = COT_GW;
m_pValue[ASDUHEAD_ADR] = m_LogicAddr.m_btAddrLgc;
m_pValue[ASDUHEAD_FUN] = 254;
switch( appState )
{
case STATE_CHANGEVAL:
m_pValue[ASDUHEAD_INF] = ASDUINF_ACKW;
break;
case STATE_ACKCHANGEVAL:
m_pValue[ASDUHEAD_INF] = ASDUINF_EXCW;
break;
case STATE_CANCELCHANGEVAL:
m_pValue[ASDUHEAD_INF] = ASDUINF_CANW;
break;
}
// RII
m_pValue[ASDUHEAD_DAT] = m_btScn++;
// NGD
m_pValue[ASDUHEAD_DAT + 1] = 0;
BYTE* pTemp = m_pValue + ASDUHEAD_DAT + 2;
// process the value
POSITION pos = m_ListValue.GetHeadPosition();
while( pos )
{
CProtectValue* pProtectValue = m_ListValue.GetNext( pos );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -