📄 asdu.cpp
字号:
m_TOO = 0x00; m_TOV = 0x00; m_FAN = 0; m_ACC = 0x00;}void CAsdu24::BulidArray(CByteArray& Data){ Data.SetSize(11); Data.FreeExtra(); m_iResult = 1; Data.SetAt(0, m_TYP); Data.SetAt(1, m_VSQ.byte); Data.SetAt(2, m_COT); Data.SetAt(3, m_Addr); Data.SetAt(4, m_FUN); Data.SetAt(5, m_INF); Data.SetAt(6, m_TOO); Data.SetAt(7, m_TOV); Data.SetAt(10, m_ACC); memcpy(&Data[8], &m_FAN, 2*sizeof(BYTE));}/////////// ASDU25 /////////CAsdu25::CAsdu25(){ m_TYP = 0x19; m_VSQ.byte = 0x81; m_COT = 0x1f; m_TOO = 0x00; m_TOV = 0x00; m_FAN = 0; m_ACC = 0x00;}void CAsdu25::BulidArray(CByteArray& Data){ Data.SetSize(11); Data.FreeExtra(); m_iResult = 1; Data.SetAt(0, m_TYP); Data.SetAt(1, m_VSQ.byte); Data.SetAt(2, m_COT); Data.SetAt(3, m_Addr); Data.SetAt(4, m_FUN); Data.SetAt(5, m_INF); Data.SetAt(6, m_TOO); Data.SetAt(7, m_TOV); Data.SetAt(10, m_ACC); memcpy(&Data[8], &m_FAN, 2*sizeof(BYTE));}/////////// ASDU26 /////////CAsdu26::CAsdu26(){ m_TOV = 0x00; m_FAN = 0; m_NOF = 0; m_NOC = 0x00; m_NOE = 0; m_INT = 0; memset(m_Cp32Time.byte, 0x00, sizeof(m_Cp32Time.byte));}CAsdu26::CAsdu26(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0); memset(m_Cp32Time.byte, 0x00, sizeof(m_Cp32Time.byte));}void CAsdu26::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU26的解释处理 { if (m_ASDUData.GetSize() < 15*sizeof(BYTE)) { m_ASDUData.SetSize(0); m_iResult = 0; return; } m_iResult = 1; m_TOV = m_ASDUData[1]; m_FAN = *(WORD*)(m_ASDUData.GetData()+2); m_NOF = *(WORD*)(m_ASDUData.GetData()+4); m_NOC = m_ASDUData[6]; m_NOE = *(WORD*)(m_ASDUData.GetData()+7); m_INT = *(WORD*)(m_ASDUData.GetData()+9); memcpy(m_Cp32Time.byte, m_ASDUData.GetData()+11, sizeof(m_Cp32Time.byte)); m_ASDUData.RemoveAt(0, 15*sizeof(BYTE)); m_ASDUData.FreeExtra(); } // m_ASDUData.SetSize(0);}/////////// ASDU27 /////////CAsdu27::CAsdu27(){ m_TOV = 0x00; m_FAN = 0; m_ACC = 0x00; m_RPV = 0.0; m_RSV = 0.0; m_RFA = 0.0;}CAsdu27::CAsdu27(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0);}void CAsdu27::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU27的解释处理 { if (m_ASDUData.GetSize() < 17*sizeof(BYTE)) { m_ASDUData.SetSize(0); m_iResult = 0; return; } m_iResult = 1; m_TOV = m_ASDUData[1]; m_FAN = *(WORD*)(m_ASDUData.GetData()+2); m_ACC = m_ASDUData[4]; m_RPV = *(float*)(m_ASDUData.GetData()+5); m_RSV = *(float*)(m_ASDUData.GetData()+9); m_RFA = *(float*)(m_ASDUData.GetData()+13); m_ASDUData.RemoveAt(0, 17*sizeof(BYTE)); m_ASDUData.FreeExtra(); } // m_ASDUData.SetSize(0);}/////////// ASDU28 /////////CAsdu28::CAsdu28(){ m_FAN = 0;}CAsdu28::CAsdu28(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0); m_FAN = 0;}void CAsdu28::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU28的解释处理 { if (m_ASDUData.GetSize() < 4*sizeof(BYTE)) { m_ASDUData.SetSize(0); m_iResult = 0; return; } m_iResult = 1; m_FAN = *(WORD*)(m_ASDUData.GetData()+2); m_ASDUData.RemoveAt(0, 4*sizeof(BYTE)); m_ASDUData.FreeExtra(); } // m_ASDUData.SetSize(0);}/////////// ASDU29 /////////CAsdu29::CAsdu29(){ m_FAN = 0;}CAsdu29::CAsdu29(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0); m_FAN = 0;}void CAsdu29::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU29的解释处理 { if (m_ASDUData.GetSize() >= 3) { if (m_ASDUData.GetSize() < (int)((3+m_ASDUData.GetAt(2)*3)*sizeof(BYTE))) { m_ASDUData.SetSize(0); m_iResult = 0; return; } m_iResult = 1; m_FAN = *(WORD*)(m_ASDUData.GetData()); m_ASDUData.RemoveAt(0, 2); m_SwitchData.SetSize((1+m_ASDUData.GetAt(0)*5)*sizeof(BYTE)); memcpy(m_SwitchData.GetData(), m_ASDUData.GetData(), m_SwitchData.GetSize()); m_ASDUData.RemoveAt(0, m_SwitchData.GetSize()); m_ASDUData.FreeExtra(); } else { m_ASDUData.SetSize(0); m_iResult = 0; return; } }}/////////// ASDU30 /////////CAsdu30::CAsdu30(){ m_TOV = 0x00; m_FAN = 0;}CAsdu30::CAsdu30(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0); m_TOV = 0x00; m_FAN = 0;}void CAsdu30::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU30的解释处理 { // if (m_ASDUData.GetSize() >= 7) // { // WORD wtmp = 0; // memcpy(&wtmp, &m_ASDUData[5], sizeof(WORD)); // if (m_ASDUData.GetSize() < (int)((9+wtmp*2)*sizeof(BYTE))) // { // m_ASDUData.SetSize(0); // m_iResult = 0; // return; // } // m_iResult = 1; // m_ASDUData.RemoveAt(0); // m_TOV = m_ASDUData[0]; // m_FAN = *(WORD*)(m_ASDUData.GetData()+1); // m_ACC = m_ASDUData[3]; // m_ASDUData.RemoveAt(0, 3); // m_AnalogData.SetSize((5+wtmp*2)*sizeof(BYTE)); // memcpy(m_AnalogData.GetData(), m_ASDUData.GetData(), m_AnalogData.GetSize()); // m_ASDUData.RemoveAt(0, m_AnalogData.GetSize()); // m_ASDUData.FreeExtra(); // } if(m_ASDUData.GetSize()>=8) { BYTE btmp=0; btmp=m_ASDUData[5]; if(m_ASDUData.GetSize()<btmp*2+8) { m_ASDUData.SetSize(0); m_iResult=0; return; } m_iResult=1; m_ASDUData.RemoveAt(0); m_TOV=m_ASDUData[0]; m_FAN = *(WORD*)(m_ASDUData.GetData()+1); m_ACC = m_ASDUData[3]; m_ASDUData.RemoveAt(0, 3); m_AnalogData.SetSize((4+btmp*2)*sizeof(BYTE)); memcpy(m_AnalogData.GetData(), m_ASDUData.GetData(), m_AnalogData.GetSize()); m_ASDUData.RemoveAt(0, m_AnalogData.GetSize()); m_ASDUData.FreeExtra(); } else { m_ASDUData.SetSize(0); m_iResult = 0; return; } }}/////////// ASDU31 /////////CAsdu31::CAsdu31(){ m_TOO = 0x00; m_TOV = 0x00; m_FAN = 0; m_ACC = 0x00;}CAsdu31::CAsdu31(CAsdu& a){ m_TYP = a.m_TYP; m_VSQ.byte = a.m_VSQ.byte; m_COT = a.m_COT; m_Addr = a.m_Addr; m_FUN = a.m_FUN; m_INF = a.m_INF; m_ASDUData.Append(a.m_ASDUData); a.m_ASDUData.SetSize(0); m_TOO = 0x00; m_TOV = 0x00; m_FAN = 0; m_ACC = 0x00;}void CAsdu31::ExplainAsdu(int iProcessType /* =0 */){ if (iProcessType == 0)//标准103的ASDU31的解释处理 { if (m_ASDUData.GetSize() < 5) { m_ASDUData.SetSize(0); m_iResult = 0; return; } m_iResult = 1; m_TOO = m_ASDUData[0]; m_TOV = m_ASDUData[1]; m_FAN = *(WORD*)(m_ASDUData.GetData()+2); m_ACC = m_ASDUData[4]; m_ASDUData.RemoveAt(0, 5*sizeof(BYTE)); m_ASDUData.FreeExtra(); } // m_ASDUData.SetSize(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -