123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613 |
- #include "stdafx.h"
- #include "kernel.h"
- #include "resource.h"
- #include "Client2SrvType.h"
- //---------------------------------------------- CBaseVar ----------
- IMPLEMENT_SERIAL(CBaseVar, CObject, 0)
- CBaseVar::CBaseVar():CObject()
- {
- m_strVarUID = _T("");
- m_strName = _T("");
- m_strDesc = _T("");
- m_strSetValue = _T("");
- m_strUnit = _T("");
- m_strOnDesc = _T("On");
- m_strOffDesc = _T("Off");
- m_strRelatePage = _T("");
- m_strFields = _T("public");
- m_strSnmpOid = _T("");
- m_strRs232Cmd = _T("");
- m_strRs232Type = _T("");
- m_nVarID = 0;
- m_nVarChildID = 0;
- m_nVarItemID = 0;
- m_nVarTypeID = 0;
- m_nDevID = 0;
- m_nMinValues = 0;
- m_nMaxValues = 0;
- m_nMaxConvtRate = 0;
- m_nMinConvtRate = 0;
- m_nUpperLimit = 0;
- m_nLowerLimit = 0;
- m_nNormalState = 0;
- m_nCollectFreq = 0;
- m_nRearm = 0;
- m_nOffset = 0;
- //m_nCoefficient = 0;
- m_nFuncCode = 0;
- m_nRegStartAddr = 0;
- m_nRegNum = 0;
- m_nDataLen = 0;
- m_nWaringLevel = 0;
- m_nPurview = 0;
- m_nRs232Index = 0;
- m_bIsSave = FALSE;
- m_bRealtimeFlag = FALSE;
- m_bIsDDE = FALSE;
- m_bRecCurve = FALSE;
- //===============================================
- // 新增成员变量 in 2010-04-07
- m_fCoef = 0.0;
- m_nIdentifyTime = 0;
- m_nRedetectTime = 0;
- m_bIsNormalAlarm = FALSE;
- m_nStartBit = 0;
- m_nEndBit = 0;
- m_strReserved1 = _T("");
- m_strReserved2 = _T("");
- m_strReserved3 = _T("");
- m_strReserved4 = _T("");
- m_strReserved5 = _T("");
- m_strReserved6 = _T("");
- m_strReserved7 = _T("");
- m_strReserved8 = _T("");
- m_strReserved9 = _T("");
- m_strReserved10 = _T("");
- m_nReserved1 = 0;
- m_nReserved2 = 0;
- m_nReserved3 = 0;
- m_nReserved4 = 0;
- m_nReserved5 = 0;
- m_nReserved6 = 0;
- m_nReserved7 = 0;
- m_nReserved8 = 0;
- m_nReserved9 = 0;
- m_nReserved10 = 0;
-
- m_bReserved1 = FALSE;
- m_bReserved2 = FALSE;
- m_bReserved3 = FALSE;
- m_bReserved4 = FALSE;
- m_bReserved5 = FALSE;
- m_bReserved6 = FALSE;
- m_bReserved7 = FALSE;
- m_bReserved8 = FALSE;
- m_bReserved9 = FALSE;
- m_bReserved10 = FALSE;
- }
- CBaseVar &CBaseVar::operator=(CBaseVar& member)
- {
- m_strVarUID = member.m_strVarUID;
- m_strName = member.m_strName;
- m_strDesc = member.m_strDesc;
- m_strSetValue = member.m_strSetValue;
- m_strUnit = member.m_strUnit;
- m_strOnDesc = member.m_strOnDesc;
- m_strOffDesc = member.m_strOffDesc;
- m_strRelatePage = member.m_strRelatePage;
- m_strFields = member.m_strFields;
- m_strSnmpOid = member.m_strSnmpOid;
- m_nVarID = member.m_nVarID;
- m_nVarChildID = member.m_nVarChildID;
- m_nVarItemID = member.m_nVarItemID;
- m_nVarTypeID = member.m_nVarTypeID;
- m_nDevID = member.m_nDevID;
- m_nMinValues = member.m_nMinValues;
- m_nMaxValues = member.m_nMaxValues;
- m_nMaxConvtRate = member.m_nMaxConvtRate;
- m_nMinConvtRate = member.m_nMinConvtRate;
- //m_nCoefficient = member.m_nCoefficient;
- m_nUpperLimit = member.m_nUpperLimit;
- m_nLowerLimit = member.m_nLowerLimit;
- m_nNormalState = member.m_nNormalState;
- m_nCollectFreq = member.m_nCollectFreq;
- m_nRearm = member.m_nRearm;
- m_nOffset = member.m_nOffset;
- m_nFuncCode = member.m_nFuncCode;
- m_nRegStartAddr = member.m_nRegStartAddr;
- m_nRegNum = member.m_nRegNum;
- m_nDataLen = member.m_nDataLen;
- m_nWaringLevel = member.m_nWaringLevel;
- m_nPurview = member.m_nPurview;
- m_bIsDDE = member.m_bIsDDE;
- m_bRecCurve = member.m_bRecCurve;
- m_bIsSave = member.m_bIsSave;
- m_bRealtimeFlag = member.m_bRealtimeFlag;
- m_strRs232Cmd = member.m_strRs232Cmd;
- m_strRs232Type = member.m_strRs232Type;
- m_nRs232Index = member.m_nRs232Index;
- //===============================================
- // 新增成员变量 in 2010-04-07
- m_fCoef = member.m_fCoef;
- m_nIdentifyTime = member.m_nIdentifyTime;
- m_nRedetectTime = member.m_nRedetectTime;
- m_bIsNormalAlarm = member.m_bIsNormalAlarm;
- m_nStartBit = member.m_nStartBit;
- m_nEndBit = member.m_nEndBit;
- m_nStatusListNum = member.m_nStatusListNum;
- list<int>::iterator it_status_id;
- int nStatusID;
- for( it_status_id = member.m_listStatusID.begin(); it_status_id != member.m_listStatusID.end(); )
- {
- nStatusID = *(it_status_id++);
- m_listStatusID.insert(m_listStatusID.end(), nStatusID);
- }
-
- list<CString>::iterator it_status_desc;
- CString strStatusDesc;
- for( it_status_desc = member.m_listStatusDesc.begin(); it_status_desc != member.m_listStatusDesc.end(); )
- {
- strStatusDesc = *(it_status_desc++);
- m_listStatusDesc.insert(m_listStatusDesc.end(), strStatusDesc);
- }
- m_strReserved1 = member.m_strReserved1;
- m_strReserved2 = member.m_strReserved2;
- m_strReserved3 = member.m_strReserved3;
- m_strReserved4 = member.m_strReserved4;
- m_strReserved5 = member.m_strReserved5;
- m_strReserved6 = member.m_strReserved6;
- m_strReserved7 = member.m_strReserved7;
- m_strReserved8 = member.m_strReserved8;
- m_strReserved9 = member.m_strReserved9;
- m_strReserved10 = member.m_strReserved10;
- m_nReserved1 = member.m_nReserved1;
- m_nReserved2 = member.m_nReserved2;
- m_nReserved3 = member.m_nReserved3;
- m_nReserved4 = member.m_nReserved4;
- m_nReserved5 = member.m_nReserved5;
- m_nReserved6 = member.m_nReserved6;
- m_nReserved7 = member.m_nReserved7;
- m_nReserved8 = member.m_nReserved8;
- m_nReserved9 = member.m_nReserved9;
- m_nReserved10 = member.m_nReserved10;
-
- m_bReserved1 = member.m_bReserved1;
- m_bReserved2 = member.m_bReserved2;
- m_bReserved3 = member.m_bReserved3;
- m_bReserved4 = member.m_bReserved4;
- m_bReserved5 = member.m_bReserved5;
- m_bReserved6 = member.m_bReserved6;
- m_bReserved7 = member.m_bReserved7;
- m_bReserved8 = member.m_bReserved8;
- m_bReserved9 = member.m_bReserved9;
- m_bReserved10 = member.m_bReserved10;
- return *this;
- }
- void CBaseVar::Serialize(CArchive& ar)
- {
- CObject::Serialize(ar);
- if(ar.IsStoring())
- {
- ar << m_strVarUID;
- ar << m_strName;
- ar << m_strDesc;
- ar << m_strSetValue;
- ar << m_strUnit;
- ar << m_strOnDesc;
- ar << m_strOffDesc;
- ar << m_strRelatePage;
- ar << m_strFields;
- ar << m_strSnmpOid;
- ar << m_nVarID;
- ar << m_nVarChildID;
- ar << m_nVarItemID;
- ar << m_nVarTypeID;
- ar << m_nDevID;
- ar << m_nMinValues;
- ar << m_nMaxValues;
- ar << m_nMaxConvtRate;
- ar << m_nMinConvtRate;
- //ar << m_nCoefficient;
- ar << m_nUpperLimit;
- ar << m_nLowerLimit;
- ar << m_nNormalState;
- ar << m_nCollectFreq;
- ar << m_nRearm;
- ar << m_nOffset;
- ar << m_nFuncCode;
- ar << m_nRegStartAddr;
- ar << m_nRegNum;
- ar << m_nDataLen;
- ar << m_nWaringLevel;
- ar << m_nPurview;
- ar << m_bIsDDE;
- ar << m_bRecCurve;
- ar << m_bIsSave;
- ar << m_bRealtimeFlag;
- ar << m_strRs232Cmd;
- ar << m_strRs232Type;
- ar << m_nRs232Index;
- //===============================================
- // 新增成员变量 in 2010-04-07
- ar << m_fCoef;
- ar << m_nIdentifyTime;
- ar << m_nRedetectTime;
- ar << m_bIsNormalAlarm;
- ar << m_nStartBit;
- ar << m_nEndBit;
- m_nStatusListNum = m_listStatusID.size();
- ar << m_nStatusListNum;
- list<int>::iterator it_status_id;
- int nStatusID;
- for( it_status_id = m_listStatusID.begin(); it_status_id != m_listStatusID.end(); )
- {
- nStatusID = *(it_status_id++);
- ar << nStatusID;
- }
-
- list<CString>::iterator it_status_desc;
- CString strStatusDesc;
- for( it_status_desc = m_listStatusDesc.begin(); it_status_desc != m_listStatusDesc.end(); )
- {
- strStatusDesc = *(it_status_desc++);
- ar << strStatusDesc;
- }
- //ar << m_listEndBit;
- //ar << m_listStatusID;
- //ar << m_listStatusDesc;
- ar << m_strReserved1;
- ar << m_strReserved2;
- ar << m_strReserved3;
- ar << m_strReserved4;
- ar << m_strReserved5;
- ar << m_strReserved6;
- ar << m_strReserved7;
- ar << m_strReserved8;
- ar << m_strReserved9;
- ar << m_strReserved10;
- ar << m_nReserved1;
- ar << m_nReserved2;
- ar << m_nReserved3;
- ar << m_nReserved4;
- ar << m_nReserved5;
- ar << m_nReserved6;
- ar << m_nReserved7;
- ar << m_nReserved8;
- ar << m_nReserved9;
- ar << m_nReserved10;
- ar << m_bReserved1;
- ar << m_bReserved2;
- ar << m_bReserved3;
- ar << m_bReserved4;
- ar << m_bReserved5;
- ar << m_bReserved6;
- ar << m_bReserved7;
- ar << m_bReserved8;
- ar << m_bReserved9;
- ar << m_bReserved10;
- }
- else
- {
- ar >> m_strVarUID;
- ar >> m_strName;
- ar >> m_strDesc;
- ar >> m_strSetValue;
- ar >> m_strUnit;
- ar >> m_strOnDesc;
- ar >> m_strOffDesc;
- ar >> m_strRelatePage;
- ar >> m_strFields;
- ar >> m_strSnmpOid;
- ar >> m_nVarID;
- ar >> m_nVarChildID;
- ar >> m_nVarItemID;
- ar >> m_nVarTypeID;
- ar >> m_nDevID;
- ar >> m_nMinValues;
- ar >> m_nMaxValues;
- ar >> m_nMaxConvtRate;
- ar >> m_nMinConvtRate;
- //ar >> m_nCoefficient;
- ar >> m_nUpperLimit;
- ar >> m_nLowerLimit;
- ar >> m_nNormalState;
- ar >> m_nCollectFreq;
- ar >> m_nRearm;
- ar >> m_nOffset;
- ar >> m_nFuncCode;
- ar >> m_nRegStartAddr;
- ar >> m_nRegNum;
- ar >> m_nDataLen;
- ar >> m_nWaringLevel;
- ar >> m_nPurview;
- ar >> m_bIsDDE;
- ar >> m_bRecCurve;
- ar >> m_bIsSave;
- ar >> m_bRealtimeFlag;
- ar >> m_strRs232Cmd;
- ar >> m_strRs232Type;
- ar >> m_nRs232Index;
- #if IS_NEW_VERSION
- //===============================================
- // 新增成员变量 in 2010-04-07
- ar >> m_fCoef;
- ar >> m_nIdentifyTime;
- ar >> m_nRedetectTime;
- ar >> m_bIsNormalAlarm;
- ar >> m_nStartBit;
- ar >> m_nEndBit;
- ar >> m_nStatusListNum;
- int nStatusID;
- CString strStatusDesc;
- for( int i = 0; i < m_nStatusListNum; i++ )
- {
- ar >> nStatusID;
- m_listStatusID.insert(m_listStatusID.end(), nStatusID);
- }
- for( int i = 0; i < m_nStatusListNum; i++ )
- {
- ar >> strStatusDesc;
- m_listStatusDesc.insert(m_listStatusDesc.end(), strStatusDesc);
- }
- ar >> m_strReserved1;
- ar >> m_strReserved2;
- ar >> m_strReserved3;
- ar >> m_strReserved4;
- ar >> m_strReserved5;
- ar >> m_strReserved6;
- ar >> m_strReserved7;
- ar >> m_strReserved8;
- ar >> m_strReserved9;
- ar >> m_strReserved10;
- ar >> m_nReserved1;
- ar >> m_nReserved2;
- ar >> m_nReserved3;
- ar >> m_nReserved4;
- ar >> m_nReserved5;
- ar >> m_nReserved6;
- ar >> m_nReserved7;
- ar >> m_nReserved8;
- ar >> m_nReserved9;
- ar >> m_nReserved10;
- ar >> m_bReserved1;
- ar >> m_bReserved2;
- ar >> m_bReserved3;
- ar >> m_bReserved4;
- ar >> m_bReserved5;
- ar >> m_bReserved6;
- ar >> m_bReserved7;
- ar >> m_bReserved8;
- ar >> m_bReserved9;
- ar >> m_bReserved10;
- #endif
- }
- }
- //---------------------------------------------- CAnalog ----------
- IMPLEMENT_SERIAL(CAnalog, CBaseVar, 0)
- CAnalog::CAnalog():CBaseVar()
- {
- m_bSave = FALSE;
- addr = NULL;
- m_nMonth = 1;
- m_nDay = 1;
- m_nMinCount = 0;
- m_nMinutes = 0;
- m_fDayMax = 0;
- m_fDayAvg = 0;
- m_fDayMin = 9999;
- m_fData = -1;
- bConfirm = false;
- }
- CAnalog &CAnalog::operator=(CAnalog& analog)
- {
- *(CBaseVar*)this = *((CBaseVar*)&analog);
- return *this;
- }
- void CAnalog::Serialize(CArchive& ar)
- {
- CBaseVar::Serialize(ar);
- if(ar.IsStoring())
- {
- ar << m_bSave;
- ar << m_fData;
- ar << m_nMonth;
- ar << m_nDay;
- ar << m_nMinCount;
- ar << m_fDayMax;
- ar << m_fDayAvg;
- ar << m_fDayMin;
- }
- else
- {
- ar >> m_bSave;
- ar >> m_fData;
- ar >> m_nMonth;
- ar >> m_nDay;
- ar >> m_nMinCount;
- ar >> m_fDayMax;
- ar >> m_fDayAvg;
- ar >> m_fDayMin;
- }
- }
- unsigned int CAnalog::CalcCheckSum( void *pData, unsigned int nSize )
- {
- unsigned int checksum = 0;
- if ( nSize <= sizeof( ProtocolHeader ) )
- {
- return 0;
- }
- unsigned char *pBody = &( ( unsigned char* )pData )[ sizeof( ProtocolHeader ) ];
- nSize -= sizeof( ProtocolHeader );
- checksum = crc32( 0, pBody, nSize );
- return checksum;
- }
- // 获取特殊处理变量
- void CAnalog::GetSpecialVarContent()
- {
- if( !pDevicesManager->m_SocketClient.IsOpen() )
- {
- return;
- }
- CBaseVar *pBaseVar = (CBaseVar *)this;
- ReadSingleSpecialVarData tagReadSingleSpecialVarData;
- int nLen = sizeof(ReadSingleSpecialVarData);
- memset( &tagReadSingleSpecialVarData, 0, nLen );
- tagReadSingleSpecialVarData.Header.nLen = nLen;
- tagReadSingleSpecialVarData.Header.nCmd = CMD_READ_SPECIAL_SINGLE_VAR_DATA;
- tagReadSingleSpecialVarData.Header.nCmdType = 0;
-
- strcpy( (char *)tagReadSingleSpecialVarData.DevUid, (char *)(LPCTSTR)pBaseVar->m_strVarUID );
- tagReadSingleSpecialVarData.iVarid = pBaseVar->m_nVarID;
- tagReadSingleSpecialVarData.iSpecialFlag = pBaseVar->m_nVarTypeID;
- tagReadSingleSpecialVarData.Header.Verify = CalcCheckSum( &tagReadSingleSpecialVarData, nLen );
- USES_CONVERSION;
- pDevicesManager->m_SocketClient.Write((const LPBYTE)&tagReadSingleSpecialVarData, nLen, NULL);
- //TRACE1( "读求特殊变量ID = %d \r\n", tagReadSingleSpecialVarData.iVarid );
- }
- void CAnalog::GetVarContent()
- {
- //请求服务器得到变量的内容和报警状态
- if( !pDevicesManager->m_SocketClient.IsOpen() ) return;
- CBaseVar *pBaseVar = (CBaseVar *)this;
- if( pBaseVar->m_nVarTypeID == 1000 ) // 内存变量,现在只用来处理设备在线状态
- {
- DevOnline tagDevOnline;
- int nLen = sizeof(DevOnline);
- memset( &tagDevOnline, 0, nLen );
-
- tagDevOnline.Header.nLen = nLen;
- tagDevOnline.Header.nCmd = CMD_DEV_ONLINE;
- tagDevOnline.Header.nCmdType = 0;
- tagDevOnline.nVarID = pBaseVar->m_nVarID;
- strcpy((char *)tagDevOnline.DevUid, (char *)(LPCTSTR)pBaseVar->m_strVarUID);
- tagDevOnline.Header.Verify = CalcCheckSum( &tagDevOnline, nLen );
- USES_CONVERSION;
- pDevicesManager->m_SocketClient.Write((const LPBYTE)&tagDevOnline, nLen, NULL);
- }
- else // I/O变量
- {
- // 请求变量在线状态,只有采集设备才会用到
- if( this->m_pDevice->m_nIsCollectDev == 1 )
- {
- // 暂不做处理
- }
- ReadSingleVarData tagReadSingleVarData;
- int nLen = sizeof(ReadSingleVarData);
- memset( &tagReadSingleVarData, 0, nLen );
- tagReadSingleVarData.Header.nLen = nLen;
- tagReadSingleVarData.Header.nCmd = CMD_READ_SINGLE_VAR_DATA;
- tagReadSingleVarData.Header.nCmdType = 0;
-
- strcpy( (char *)tagReadSingleVarData.DevUid, (char *)(LPCTSTR)pBaseVar->m_strVarUID );
- tagReadSingleVarData.nVarID = pBaseVar->m_nVarID;
- TRACE1( "读求变量ID = %d \r\n", tagReadSingleVarData.nVarID );
- tagReadSingleVarData.Header.Verify = CalcCheckSum( &tagReadSingleVarData, nLen );
- USES_CONVERSION;
- pDevicesManager->m_SocketClient.Write((const LPBYTE)&tagReadSingleVarData, nLen, NULL);
- }
- }
- void CAnalog::SetValue(float fValue)
- {
- if( !pDevicesManager->m_SocketClient.IsOpen() ) return;
- CBaseVar *pBaseVar = (CBaseVar *)this;
- WrSingleVarData tagWrSingleVarData;
- int nLen = sizeof(WrSingleVarData);
- memset( &tagWrSingleVarData, 0, nLen );
- tagWrSingleVarData.Header.nLen = nLen;
- tagWrSingleVarData.Header.nCmd = CMD_WRITE_SINGLE_VAR_DATA;
- tagWrSingleVarData.Header.nCmdType = 0;
- memcpy( &tagWrSingleVarData.DevUid, (char *)(LPCTSTR)pBaseVar->m_strVarUID, sizeof(tagWrSingleVarData.DevUid) );
- tagWrSingleVarData.VarData.nVarID = pBaseVar->m_nVarID;
- tagWrSingleVarData.VarData.Data = (DOUBLE)fValue;
- tagWrSingleVarData.Header.Verify = CalcCheckSum( &tagWrSingleVarData, nLen );
- USES_CONVERSION;
- pDevicesManager->m_SocketClient.Write((const LPBYTE)&tagWrSingleVarData, nLen, NULL);
- m_fData = fValue;
- }
- void CAnalog::Fresh()
- {
- // 特殊处理变量单独处理
- if( m_nVarTypeID >= SPECIAL_VAR_TYPE_MIN_ID && m_nVarTypeID <= SPECIAL_VAR_TYPE_MAX_ID )
- {
- GetSpecialVarContent();
- }
- else
- {
- // 得到变量值和报警状态
- GetVarContent();
- }
- }
|