| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #include "StdAfx.h"
- #include <iostream>
- #include <random>
- #include "DrainPoolUnit.h"
- // 定义给排水单元类实现
- CDrainPoolUnit::CDrainPoolUnit()
- {
- //m_WaterLevel = 0.1+rand()/(double)(RAND_MAX/10); //30-50之间随机浮点数
- // 创建一个随机数引擎
- std::random_device rd; // 用于获取随机种子
- std::mt19937 gen(rd()); // 以随机种子初始化Mersenne Twister生成器
- // 定义分布范围
- std::uniform_real_distribution<> dis(0, 9.9999); // 随机范围
- // 生成随机浮点数
- m_WaterLevel = 20.0;
- m_bWaterFromTS = FALSE;
- m_bLevelChange = FALSE;
- m_fWaterLevelAlarmLow = 10.0; //低水位
- m_fWaterLevelAlarmHigh = 80.0; //高水位
- m_fWaterLevelClose = 30.0; //关泵
- m_fWaterLevelOpenOne = 50.0; //单泵
- m_fWaterLevelOpenTwo = 70.0; //双泵
- m_fWaterLevelOpenThree = 90.0; //三泵
- m_fWaterLevelOpenFour = 90.0; //四泵
- }
- CDrainPoolUnit::~CDrainPoolUnit()
- {
- }
- void CDrainPoolUnit::AddDrainPump( const CString& strPoolStrID, const CString& strPumpStrID, int nType )
- {
- CDrainPump pump;
- pump.m_strPoolStrID = strPoolStrID;
- pump.m_strEqpmtStrID = strPumpStrID;
- pump.m_nType = nType;
- m_mapDrainPump.insert( make_pair(strPumpStrID, pump) );
- AddRunPumpType(nType);
- }
- CString CDrainPoolUnit::GetPumpStrIDByType( int nType )
- {
- CString strID = _T("");
- map< CString, CDrainPump>::iterator iter = m_mapDrainPump.begin();
- for ( ; iter != m_mapDrainPump.end(); iter++ )
- {
- if ( nType == iter->second.m_nType )
- {
- strID = iter->second.m_strEqpmtStrID;
- break;
- }
- }
- return strID;
- }
- bool CDrainPoolUnit::CheckRunPump( int nType )
- {
- bool bRet = false;
- vector<int>::iterator iterRunType = m_vecRunType.begin();
- for ( ; iterRunType != m_vecRunType.end(); iterRunType++ )
- {
- if ( nType == (*iterRunType) )
- {
- bRet = true;
- break;
- }
- }
- return bRet;
- }
- void CDrainPoolUnit::AddRunPumpType( int nType )
- {
- vector<int>::iterator iterRunType = m_vecRunType.begin();
- for ( ; iterRunType != m_vecRunType.end(); iterRunType++ )
- {
- if ( nType == (*iterRunType) )
- {
- m_vecRunType.erase(iterRunType);
- break;
- }
- }
- m_vecRunType.push_back(nType);
- }
- void CDrainPoolUnit::DelRunPumpType( int nType )
- {
- vector<int>::iterator iterRunType = m_vecRunType.begin();
- for ( ; iterRunType != m_vecRunType.end(); iterRunType++ )
- {
- if ( nType == (*iterRunType) )
- {
- m_vecRunType.erase(iterRunType);
- break;
- }
- }
- }
- void CDrainPoolUnit::AddRunPumpStrID( const CString& strEqpmtID )
- {
- map< CString, CDrainPump>::iterator iter = m_mapDrainPump.find(strEqpmtID);
- if ( iter== m_mapDrainPump.end() )
- {
- return;
- }
- AddRunPumpType( iter->second.m_nType);
- }
- int CDrainPoolUnit::Size()
- {
- return m_mapDrainPump.size();
- }
- CString CDrainPoolUnit::GetFirstPumpStrID()
- {
- CString strRet = _T("");
- if ( m_mapDrainPump.empty() )
- {
- return strRet;
- }
- map< CString, CDrainPump>::iterator iter = m_mapDrainPump.begin();
- if ( m_vecRunType.empty() )
- {
- strRet = iter->second.m_strEqpmtStrID;
- return strRet;
- }
- int nFirstType = m_vecRunType[0];
- for ( ; iter != m_mapDrainPump.end(); iter++ )
- {
- if ( iter->second.m_nType == nFirstType )
- {
- strRet = iter->second.m_strEqpmtStrID;
- break;
- }
- }
- return strRet;
- }
- CString CDrainPoolUnit::GetSecondPumpStrID()
- {
- CString strRet = _T("");
- if ( m_mapDrainPump.size() < 2 )
- {
- return strRet;
- }
- map< CString, CDrainPump>::iterator iter = m_mapDrainPump.begin();
- //iter++;
- if ( m_vecRunType.size() < 2 )
- {
- strRet = iter->second.m_strEqpmtStrID;
- return strRet;
- }
- int nSecondType = m_vecRunType[0];
- for ( ; iter != m_mapDrainPump.end(); iter++ )
- {
- if ( iter->second.m_nType == nSecondType )
- {
- strRet = iter->second.m_strEqpmtStrID;
- break;
- }
- }
- return strRet;
- }
- int CDrainPoolUnit::GetWaterLevel()
- {
- int nLevel=-1;
- // 超低水位 0-10
- // 停泵水位 10-30
- // 开单泵水位 30-50
- // 开双泵水位 50-80
- // 超高水位 80-100
- //修改界限值,预留缓冲值 mod by yangs
- if (m_WaterLevel >= m_fWaterLevelAlarmLow && m_WaterLevel < m_fWaterLevelClose)
- {
- nLevel=DrainAlarm_Low;
- }
- else if (m_WaterLevel >= m_fWaterLevelClose && m_WaterLevel < m_fWaterLevelOpenOne)
- {
- nLevel=DrainAlarm_Close;
- }
- else if (m_WaterLevel >= m_fWaterLevelOpenOne
- && (m_WaterLevel < m_fWaterLevelOpenTwo || m_fWaterLevelOpenTwo < 0))
- {
- nLevel=DrainAlarm_OpenOne;
- }
- else if (m_WaterLevel >= m_fWaterLevelOpenTwo
- && (m_WaterLevel < m_fWaterLevelOpenThree || m_fWaterLevelOpenThree < 0))
- {
- nLevel=DrainAlarm_OpenTwo;
- }
- else if (m_WaterLevel >= m_fWaterLevelOpenThree
- && (m_WaterLevel < m_fWaterLevelOpenFour || m_fWaterLevelOpenFour < 0))
- {
- nLevel=DrainAlarm_OpenThree;
- }
- else if (m_WaterLevel >= m_fWaterLevelOpenFour)
- {
- nLevel = DrainAlarm_OpenFour;
- }
- else {
- nLevel = DrainAlarm_Low;
- }
- return nLevel;
- }
- bool CDrainPoolUnit::checkWaterLevelAlarmHigh()
- {
- return m_WaterLevel >= m_fWaterLevelAlarmHigh;
- }
- //add by yangs
- void CDrainPoolUnit::SetWaterLevelByStatus(int nStatus)
- {
- switch(nStatus)
- {
- case DrainAlarm_Low:m_WaterLevel = m_fWaterLevelAlarmLow;
- break;
- case DrainAlarm_Close:m_WaterLevel = m_fWaterLevelClose;
- break;
- case DrainAlarm_OpenOne:m_WaterLevel = m_fWaterLevelOpenOne;
- break;
- case DrainAlarm_OpenTwo:m_WaterLevel = m_fWaterLevelOpenTwo;
- break;
- case DrainAlarm_OpenThree:m_WaterLevel = m_fWaterLevelOpenThree;
- break;
- case DrainAlarm_OpenFour:m_WaterLevel = m_fWaterLevelOpenFour;
- break;
- default:
- break;
- }
- }
- void CDrainPoolUnit::SetWaterLevel_FronTS(float fWaterHeightPercent)
- {
- m_bWaterFromTS = TRUE;
- int nPreLevel = GetWaterLevel();
- m_WaterLevel = fWaterHeightPercent; //顺序和前面一句代码不能颠倒,否则自己品味
- int nCurLevel = GetWaterLevel();
- if ( nCurLevel != nPreLevel )
- {
- m_bLevelChange = TRUE;
- }
- }
|