ElectricEqpmt_SwicthEqpmt.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. #include "pch.h"
  2. #include "ElectricEqpmt_SwicthEqpmt.h"
  3. #include "ElectricEqpmt_Breaker.h"
  4. #include "ElectricEqpmt_IsolatingSwitch_ThreePosition.h"
  5. bool CElectricEqpmt_SwicthEqpmt::handle_delaytime(time_t& time, map<string, BaseElectricEqpmt*>& eqpmtmap, const DelayTimeInfo& delayparm)
  6. {
  7. //xyx����begin
  8. string EqpmtTypeName = GetBaseTypeName(); //�豸��������
  9. string EqpmtName = GetEqpmentName(); //�豸����
  10. int EqpmtSourceStatonID = GetSourceStationID(); //�豸�����վID
  11. int EqpmtType = GetBaseType(); //�豸����
  12. //xyx����end
  13. if (delayparm.type == Auto_DelayTime_CtrlExecution) //�豸����ִ�е�
  14. {
  15. // ʱ�����ж�
  16. if (time - delayparm.occartime <= delayparm.delaydur)
  17. return true;
  18. // �ж��Ƿ�ӳ������ʵ�豸
  19. // ����ʵ�豸����Ҫ�ȴ��豸����
  20. if (checkReallyEqpmtFlag())
  21. {
  22. // ��ʵ�豸�Ѿ�����
  23. if (checkRealEqpmtFeedback())
  24. {
  25. // ��ʵ�豸������״̬��Ҫִ�е�Ŀ��״̬�Ƚ�
  26. // һ��˵��ִ�гɹ�����ͬ������״̬�����򲻽��в���
  27. if (delayparm.destatus == getRealEqpmtStatus())
  28. {
  29. EqpmtCtrl(delayparm.destatus, eqpmtmap, "", CTRLTYPE_STATUS, GetCtrlMark());
  30. }
  31. setRealEqpmtFeedback(false);
  32. }
  33. }
  34. else //���������豸ֱ��ִ�ж���
  35. {
  36. EqpmtCtrl(delayparm.destatus, eqpmtmap, "", CTRLTYPE_STATUS, GetCtrlMark());
  37. }
  38. ResetCtrlMark();
  39. return false;
  40. }
  41. return true;
  42. }
  43. CElectricEqpmt_SwicthEqpmt::CElectricEqpmt_SwicthEqpmt()
  44. {
  45. //CtrlLockStatus=Electric_Eqpmt_Status_UnLock;
  46. SetControlLock(Electric_Eqpmt_Status_UnLock);
  47. p_DelayTimeMap=nullptr;
  48. //CardStatus=ELC_EQPMTCARDSTATUS_NORMAL;
  49. //CtrlArea=ELC_EQPMTCTRL_REMOTE;
  50. }
  51. void CElectricEqpmt_SwicthEqpmt::TurnOn(ELEEQPMTMAP& ElectricEqpmtMap)
  52. {
  53. // ���ϳ�����Ҫ�������豸�����в���
  54. if (GetFaultSceneLock())
  55. {
  56. return;
  57. }
  58. UpdateEqpmtStatus(ElectricEqpmtMap,Electric_Eqpmt_Status_ON);
  59. if (JudgeIsInputPower(ElectricEqpmtMap))
  60. {
  61. SetPower(true);
  62. PowerIn(ElectricEqpmtMap,GetEqpmentID());
  63. }
  64. //400V���ɿض�·����բ �绷���Ϲ���
  65. if (GetBaseType() == OCC_EQPMTTYPE_400vACUncontrolBreaker)
  66. {
  67. SetPower(true);
  68. }
  69. DealElcTurnOffArea();
  70. }
  71. bool CElectricEqpmt_SwicthEqpmt::JudgeIsInputPower(ELEEQPMTMAP& ElectricEqpmtMap)
  72. {
  73. std::map<string,InputLineInfo>::iterator iter1 = InputEqpmtIDMap.begin();
  74. for (;iter1!=InputEqpmtIDMap.end();iter1++)
  75. {
  76. ELEEQPMTMAP::iterator iter_Input=ElectricEqpmtMap.find(iter1->second.ID);
  77. if (iter_Input!=ElectricEqpmtMap.end())
  78. {
  79. if (iter_Input->second->GetPower())
  80. {
  81. return true;
  82. }
  83. }
  84. }
  85. return false;
  86. }
  87. void CElectricEqpmt_SwicthEqpmt::UpdateLockStatus(int status)
  88. {
  89. if (GetControlLock()!=status)
  90. {
  91. //CtrlLockStatus=status;
  92. SetControlLock(status);
  93. //xyx����begin
  94. //if (GetControlLock()==Electric_Eqpmt_Status_UnLock)
  95. //{
  96. // string text;
  97. // text.Format(" %s %s ���Ʊ������",GetBaseTypeName(),GetEqpmentName());
  98. // SendMsgNotice(GetSourceStationID(),GetRegion(),3,DH_MSGCATEGORY_SOE,text);
  99. // //UpdateEqpmtStatus(ElectricEqpmtMap,Electric_Eqpmt_Status_ON);
  100. //}
  101. //else if (GetControlLock()==Electric_Eqpmt_Status_Lock)
  102. //{
  103. // string text;
  104. // text.Format(" %s %s ���Ʊ���",GetBaseTypeName(),GetEqpmentName());
  105. // SendMsgNotice(GetSourceStationID(),GetRegion(),3,DH_MSGCATEGORY_SOE,text);
  106. //}
  107. //xyx����end
  108. //xyx����begin
  109. string EqpmtTypeName = GetBaseTypeName(); //�豸��������
  110. string EqpmtName = GetEqpmentName(); //�豸����
  111. int EqpmtSourceStatonID = GetSourceStationID(); //�豸�����վID
  112. int EqpmtType = GetBaseType(); //�豸����
  113. if (GetControlLock()==Electric_Eqpmt_Status_UnLock)
  114. {
  115. int nActType1 = ElcAlarm_TripActType_Unlock; //�����Ʊ����������������
  116. UpdateAlarmType(EqpmtType,EqpmtTypeName,EqpmtName,EqpmtSourceStatonID,nActType1);
  117. UpdateEqpmtLightCardStatu(-1);
  118. }
  119. else if (GetControlLock()==Electric_Eqpmt_Status_Lock)
  120. {
  121. int nActType2 = ElcAlarm_TripActType_Lock; //�����Ʊ�������������
  122. //UpdateAlarmType(EqpmtType,EqpmtTypeName,EqpmtName,EqpmtSourceStatonID,nActType2);//mod by chenht
  123. }
  124. //xyx����end
  125. }
  126. }
  127. void CElectricEqpmt_SwicthEqpmt::UpdateFaultLockStatus(int status)
  128. {
  129. if (GetFaultLockStatus()!=status)
  130. {
  131. //FaultLock=status;
  132. SetFaultLockStatus(status);
  133. }
  134. }
  135. void CElectricEqpmt_SwicthEqpmt::UpdateRemoteLockStatus(int status)
  136. {
  137. if (GetRemoteLockStatus()!=status)
  138. {
  139. //m_nReMoteLockStatus=status;
  140. SetRemoteLockStatus(status);
  141. }
  142. }
  143. void CElectricEqpmt_SwicthEqpmt::TurnOff(ELEEQPMTMAP& ElectricEqpmtMap,int offcase)
  144. {
  145. UpdateEqpmtStatus(ElectricEqpmtMap,Electric_Eqpmt_Status_OFF);
  146. PowerLost(ElectricEqpmtMap,GetEqpmentID(),offcase);
  147. DealElcTurnOffArea();
  148. }
  149. void CElectricEqpmt_SwicthEqpmt::EqpmtCtrl(int status,ELEEQPMTMAP& ElectricEqpmtMap,string Stdid,int CtrlType,int nMark/* = 0*/)
  150. {
  151. BaseElectricEqpmt::EqpmtCtrl(status, ElectricEqpmtMap, Stdid, CtrlType, nMark );
  152. if (CtrlType==CTRLTYPE_LOCKSTATUS)
  153. {
  154. UpdateLockStatus(status);
  155. }
  156. else if (CtrlType ==CTRLTYPE_STATUS
  157. && GetCardStatus() == ELC_EQPMTCARDSTATUS_NORMAL /***6500 Ϊδ����״̬ by chenht 2020 0701***/
  158. && !GetFaultSceneLock())
  159. {
  160. //xyx�޸ģ�begin
  161. //˵������������ʾ����ͨ�����õķ�ʽʵ��
  162. if (GetControlLock()==Electric_Eqpmt_Status_UnLock)
  163. {
  164. string EqpmtTypeName = GetBaseTypeName(); //�豸��������
  165. string EqpmtName = GetEqpmentName(); //�豸����
  166. int EqpmtSourceStatonID = GetSourceStationID(); //�豸�����վID
  167. int EqpmtType = GetBaseType(); //�豸����
  168. if (status==Eqpmt_Operation_OFF&&GetStatus()==Electric_Eqpmt_Status_ON)
  169. {
  170. TurnOff(ElectricEqpmtMap,POWER_EQPMT_OPERNO);
  171. int nActType1 = ElcAlarm_TripActType_Open; //����բ������
  172. UpdateAlarmType(EqpmtType,EqpmtTypeName,EqpmtName,EqpmtSourceStatonID,nActType1);
  173. UpdateOperResultToTechEva(GetEqpmentID(),GetStatus()); //���¡���բ��ִ�н��
  174. }
  175. else if (status==Eqpmt_Operation_ON&&GetStatus()==Electric_Eqpmt_Status_OFF)
  176. {
  177. //if (OCC_EQPMTTYPE_BREAKER_DC==GetBaseType())
  178. //{
  179. // return;
  180. //}
  181. TurnOn(ElectricEqpmtMap);
  182. int nActType2 = ElcAlarm_TripActType_Close; //����բ������
  183. UpdateAlarmType(EqpmtType,EqpmtTypeName,EqpmtName,EqpmtSourceStatonID,nActType2);
  184. UpdateOperResultToTechEva(GetEqpmentID(),GetStatus()); //���¡���բ��ִ�н��
  185. }
  186. else
  187. UpdateEqpmtStatus(ElectricEqpmtMap,GetStatus());
  188. }
  189. //xyx�޸ģ�end
  190. }
  191. else if (CtrlType ==CTRLTYPE_CARD)
  192. {
  193. //CardStatus = status;
  194. SetCardStatus(status);
  195. UpdateEqpmtStatus(ElectricEqpmtMap,GetCardStatus(),CTRLTYPE_CARD);
  196. }
  197. }
  198. void CElectricEqpmt_SwicthEqpmt::EqpmtCtrlExecution(int status, map<string, BaseElectricEqpmt*>& ElectricEqpmtMap, string Stdid, int CtrlType, int nMark)
  199. {
  200. // �����״̬���Ʋ���
  201. if (CTRLTYPE_STATUS == CtrlType)
  202. {
  203. // ����
  204. SetCtrlMark(nMark);
  205. // ��������Դ�ǿͻ��˻�����ʵ�豸
  206. if (OperClient_RealSys == nMark || OperClient_RealSynch == nMark)
  207. {
  208. // �����û����ʱ
  209. DELAYMAP::iterator iter = p_DelayTimeMap->find(GetEqpmentID());
  210. // ����ʱ��ʾ�ͻ����в�����ִ�У����÷�����־
  211. if (iter != p_DelayTimeMap->end())
  212. {
  213. setRealEqpmtFeedback(true);
  214. setRealEqpmtStatus(status);
  215. }
  216. else
  217. {
  218. // ����ʱ��ʾ�����仯������
  219. EqpmtCtrl(status, ElectricEqpmtMap, Stdid, CtrlType, nMark);
  220. }
  221. }
  222. else
  223. {
  224. // ��������������Դ��ֱ�ӽ�����ʱ�ж�
  225. DelayTimeInfo delay;
  226. delay.type = Auto_DelayTime_CtrlExecution;
  227. delay.delaydur = getDelaydurTime();
  228. delay.occartime = GetNumTime_Second_2();
  229. delay.srcid = GetEqpmentID();
  230. delay.srcstatus = GetStatus();
  231. delay.desid = GetEqpmentID();
  232. delay.destatus = status;
  233. p_DelayTimeMap->insert(make_pair(GetEqpmentID(), delay));
  234. // ת��������Ϣ����ʵ�豸
  235. OPERCMDTOREAL ctrlcmd;
  236. ctrlcmd.CtrlType = CtrlType;
  237. ctrlcmd.EqpmtStatus = status;
  238. memcpy(ctrlcmd.EqpmtStrID,GetEqpmentID().c_str(),sizeof(ctrlcmd.EqpmtStrID));
  239. OCCCOMMAND tmpSendHC;
  240. tmpSendHC.setPacketValue(&ctrlcmd, OCCCOMMAND::eOperCmdExecuteToReal);
  241. tmpSendHC.DesSysType = OCC_SYS_DD_CLIENT;
  242. tmpSendHC.TrainningID = m_Trianid;
  243. tmpSendHC.ScrSysType = OCC_SYS_DD_SVR;
  244. p_SendList->push(tmpSendHC);
  245. }
  246. }
  247. else
  248. {
  249. EqpmtCtrl(status, ElectricEqpmtMap, Stdid, CtrlType, nMark);
  250. }
  251. }
  252. void CElectricEqpmt_SwicthEqpmt::AddActUnoin(int operstatus,string preeqpmtid,int prestatus,int eventid)
  253. {
  254. UionCtrl actunion;
  255. actunion.Sourceid = GetEqpmentID();
  256. actunion.OperStatus = operstatus;
  257. actunion.PreEqpmtID = preeqpmtid;
  258. actunion.PreStatus = prestatus;
  259. actunion.EventID = eventid;
  260. m_ActUnions.push_back(actunion);
  261. }
  262. //���ӵؿ���״̬
  263. int CElectricEqpmt_SwicthEqpmt::CheckEarthSwitchStatus(int status,ELEEQPMTMAP& ElectricEqpmtMap,int stdid,int subsysyid,int trianid,int stationid,int viewid)
  264. {
  265. int nRetStatus = DH_CmdReplyStatus_Pass;
  266. ELEEQPMTMAP::iterator iterEqpmt;
  267. for ( int i = 0; i < m_EarthSwitchID.size(); i++ )
  268. {
  269. iterEqpmt = ElectricEqpmtMap.find( m_EarthSwitchID[i]);
  270. //��ȡ�ӵؿ���
  271. if ( iterEqpmt != ElectricEqpmtMap.end())
  272. {
  273. //�ӵؿ��ش��ں�բ
  274. if (iterEqpmt->second->GetStatus()==Electric_Eqpmt_Status_ON)
  275. {
  276. ELEEQPMTMAP::iterator iterEqpmt1;
  277. for (int j = 0; j < iterEqpmt->second->m_EarthSwitchInputSwitch.size();j++)
  278. {
  279. iterEqpmt1 = ElectricEqpmtMap.find( iterEqpmt->second->m_EarthSwitchInputSwitch[j]);
  280. if (iterEqpmt1 != ElectricEqpmtMap.end())
  281. {
  282. if ( iterEqpmt1->second != NULL && iterEqpmt1->second->GetStatus()==Electric_Eqpmt_Status_ON)
  283. {
  284. nRetStatus = DH_CmdReplyStatus_Deny;
  285. break;
  286. }
  287. }
  288. }
  289. }
  290. if (nRetStatus == DH_CmdReplyStatus_Deny)
  291. {
  292. break;
  293. }
  294. }
  295. }
  296. if ( nRetStatus == DH_CmdReplyStatus_Deny )
  297. {
  298. if (trianid>0)
  299. {
  300. string retstr = GetEqpmentName() + " ������ֹ";
  301. DHSVRREPLY CheckReplyMsg;
  302. memset(&CheckReplyMsg,0,sizeof(DHSVRREPLY)) ;
  303. strncpy(CheckReplyMsg.ReplyText,retstr.c_str(),sizeof(CheckReplyMsg.ReplyText));
  304. CheckReplyMsg.CmdID = OCCCOMMAND::eUpdateOperCheck;
  305. string strName=GetEqpmentID();
  306. strncpy(CheckReplyMsg.EqpmtStrID,strName.c_str(), sizeof(CheckReplyMsg.EqpmtStrID));
  307. CheckReplyMsg.CtrlLock=GetControlLock();
  308. CheckReplyMsg.StdID = stdid;
  309. CheckReplyMsg.EqpmtStatus =nRetStatus;
  310. CheckReplyMsg.StationID=stationid;
  311. CheckReplyMsg.ViewID = viewid;
  312. CheckReplyMsg.SubSysID = subsysyid;
  313. OCCCOMMAND NetOrder;
  314. NetOrder.DesSysType = OCC_SYS_DD_CLIENT;
  315. NetOrder.ScrSysType = OCC_SYS_DD_SVR;
  316. NetOrder.TrainningID = trianid;
  317. NetOrder.setPacketValue(&CheckReplyMsg,OCCCOMMAND::eUpdateSvrReply);
  318. p_SendList->push(NetOrder);
  319. return nRetStatus;
  320. }
  321. }
  322. return nRetStatus;
  323. }
  324. int CElectricEqpmt_SwicthEqpmt::CheckEqpmtCtrlCase(int status,ELEEQPMTMAP& ElectricEqpmtMap,int stdid,int subsysyid,int trianid,int stationid,int viewid, int CtrlType, int nMark)
  325. {
  326. // ��ʵ�豸����״̬�仯��������У��ֱ�Ӹ���
  327. if (OperClient_RealSys == nMark || OperClient_RealSynch == nMark)
  328. {
  329. return DH_CmdReplyStatus_Pass;
  330. }
  331. //�ֺ�բ����У������豸����״̬У��
  332. if (CtrlType == CTRLTYPE_STATUS)
  333. {
  334. if (GetCardStatus() != ELC_EQPMTCARDSTATUS_NORMAL)
  335. {
  336. return DH_CmdReplyStatus_Deny;
  337. }
  338. }
  339. //�����豸���Ƶ����Ԫ�������������Ԫ��������صIJ���
  340. //���ӵؿ������Ԫ��״̬
  341. if (CheckEarthSwitchStatus(status,ElectricEqpmtMap,stdid,subsysyid,trianid,stationid,viewid)==DH_CmdReplyStatus_Deny)
  342. {
  343. return DH_CmdReplyStatus_Deny;
  344. }
  345. DHSVRREPLY CheckReplyMsg;
  346. memset(CheckReplyMsg.ReplyText,0,ALARM_LEN) ;
  347. string retstr;
  348. int retstatus = DH_CmdReplyStatus_Deny;
  349. int index=0;
  350. multimap<int,UionCtrl> mapPass;
  351. multimap<int,UionCtrl> mapDeny;
  352. //��鱻�������豸״̬
  353. for (size_t i=0;i<m_CtrlUnions.size();i++)
  354. {
  355. if (m_CtrlUnions[i].Sourceid==GetEqpmentID()&&m_CtrlUnions[i].OperStatus==status&&m_CtrlUnions[i].Relation==EQPMT_RELATIONTYPE_PASSUIONCTRL) //��������
  356. {
  357. ELEEQPMTMAP::iterator iter = ElectricEqpmtMap.find(m_CtrlUnions[i].PreEqpmtID); //���������豸��ǰһ���豸��״̬��
  358. if (iter!=ElectricEqpmtMap.end())
  359. {
  360. int static lastindex=m_CtrlUnions[i].Index;
  361. if (iter->second->GetStatus()!=m_CtrlUnions[i].PreStatus)
  362. {
  363. mapDeny.insert(make_pair(m_CtrlUnions[i].Index,m_CtrlUnions[i]));
  364. }
  365. else
  366. {
  367. mapPass.insert(make_pair(m_CtrlUnions[i].Index,m_CtrlUnions[i]));
  368. //��ɳ3������ʿ��԰վ�����߶�·����բ�߼� add by chenht
  369. if (GetEqpmentID() == "{A3F7D8D7-9D77-47CA-B3BD-C55961D104CF}" || GetEqpmentID() == "{36B74635-B3EC-48B0-BE90-CC2D89604FB7}")
  370. {
  371. mapDeny.clear();
  372. break;
  373. }
  374. }
  375. }
  376. }
  377. }
  378. if (mapPass.size()==0&&mapDeny.size()==0)
  379. {
  380. retstatus=DH_CmdReplyStatus_Pass;
  381. }
  382. multimap<int,UionCtrl>::iterator iterPass=mapPass.begin();
  383. while(iterPass!=mapPass.end())
  384. {
  385. if (mapDeny.find(iterPass->first)==mapDeny.end())
  386. {
  387. retstatus=DH_CmdReplyStatus_Pass;
  388. break;
  389. }
  390. iterPass++;
  391. }
  392. if (retstatus==DH_CmdReplyStatus_Deny)
  393. {
  394. multimap<int,UionCtrl>::iterator firsiter=mapDeny.begin(); //�������в����㱻������״̬��˵�� added by zhngjiahua
  395. for (;firsiter!=mapDeny.end();firsiter++)
  396. {
  397. ELEEQPMTMAP::iterator iter= ElectricEqpmtMap.find(firsiter->second.PreEqpmtID);
  398. std::string tips;
  399. std::stringstream ss;
  400. ss << iter->second->GetStationName() << " "
  401. << iter->second->GetBaseTypeName() << " "
  402. << iter->second->GetEqpmentName() << (" λ�ò���");
  403. tips = ss.str();
  404. if (firsiter->second.PreStatus==Electric_Eqpmt_Status_ON)
  405. {
  406. int nBasetypeID = GetBaseType();
  407. if (nBasetypeID == OCC_EQPMTTYPE_400vACControlBreaker)
  408. {
  409. //tips.Format("%s %s ����ģʽ:���ǵ㶯ģʽ ��ֹ����",iter->second->GetStationName(),iter->second->GetBaseTypeName());
  410. std::stringstream ss_2;
  411. ss_2 << iter->second->GetStationName() << " "
  412. << iter->second->GetBaseTypeName() << " "
  413. << ("����ģʽ:���ǵ㶯ģʽ ��ֹ����");
  414. tips = ss_2.str();
  415. }
  416. else
  417. {
  418. tips+= ("��λ");
  419. }
  420. }
  421. if (firsiter->second.PreStatus==Electric_Eqpmt_Status_OFF)
  422. {
  423. int nBasetypeID = GetBaseType();
  424. if (/*GetEqpmentID() == "{A3F7D8D7-9D77-47CA-B3BD-C55961D104CF}" || GetEqpmentID() == "{36B74635-B3EC-48B0-BE90-CC2D89604FB7}"*/
  425. nBasetypeID == OCC_EQPMTTYPE_110kVACMLine || nBasetypeID == OCC_EQPMTTYPE_110kvPowerLine || nBasetypeID == OCC_EQPMTTYPE_35kVMOTHERLINE || nBasetypeID == OCC_EQPMTTYPE_35kvACPowerLine
  426. || nBasetypeID == OCC_EQPMTTYPE_400vACMLine || nBasetypeID == OCC_EQPMTTYPE_400vACPowerLine || nBasetypeID == OCC_EQPMTTYPE_1500vDCMLine || nBasetypeID == OCC_EQPMTTYPE_DCPowerLine
  427. || nBasetypeID == OCC_EQPMTTYPE_1500VNegativeBusLine || nBasetypeID == OCC_EQPMTTYPE_TouchNet)
  428. {
  429. //tips.Format("%s %s ״̬����",iter->second->GetStationName(),iter->second->GetEqpmentName());
  430. //tips+="ʧ��״̬";
  431. std::stringstream ss_3;
  432. ss_3 << iter->second->GetStationName() << " "
  433. << iter->second->GetEqpmentName() << (" ״̬����ʧ��");
  434. tips = ss_3.str();
  435. }
  436. if (nBasetypeID == OCC_EQPMTTYPE_400vACControlBreaker)
  437. {
  438. //tips.Format("%s %s ������Ͷ�Ը�λ��ֹ����",iter->second->GetStationName(),iter->second->GetBaseTypeName());
  439. std::stringstream ss_4;
  440. ss_4 << iter->second->GetStationName() << " "
  441. << iter->second->GetBaseTypeName() << (" ������Ͷ�Ը�λ��ֹ����");
  442. tips = ss_4.str();
  443. }
  444. else
  445. {
  446. tips+= ("��λ");
  447. }
  448. }
  449. retstr+=tips+"\r\n";
  450. }
  451. }
  452. ELEEQPMTMAP::iterator iter1 = ElectricEqpmtMap.find(GetEqpmentID());
  453. string str;
  454. int autoboltstatus = -1;
  455. if (iter1!=ElectricEqpmtMap.end())
  456. {
  457. //modified by zhangjiahua
  458. if (iter1->second->GetEqpmentType()==Electric_EqpmentType_Breaker)
  459. {
  460. ElectricEqpmt_Breaker* pbreak=(ElectricEqpmt_Breaker*)iter1->second;
  461. str=pbreak->GetAutoBoltID();
  462. ELEEQPMTMAP::iterator iter2 = ElectricEqpmtMap.find(str);
  463. if (iter2!=ElectricEqpmtMap.end())
  464. {
  465. autoboltstatus=iter2->second->GetStatus();
  466. }
  467. }
  468. // str =iter1->second->GetAutoBoltID();
  469. //ELEEQPMTMAP::iterator iter2 = ElectricEqpmtMap.find(str);
  470. //if (iter2!=ElectricEqpmtMap.end())
  471. //{
  472. // autoboltstatus=iter2->second->GetStatus();
  473. //} //noted by zhangjiahua on 2019.4.10
  474. }
  475. if(GetCommunicationStatus()==1)
  476. {
  477. //retstr.Format("%s %s ͨѶ�ж�",GetBaseTypeName(),GetEqpmentName());
  478. std::stringstream ss_5;
  479. ss_5 << GetBaseTypeName() << " "
  480. << GetEqpmentName() << " "
  481. << ("ͨѶ�ж�");
  482. retstr = ss_5.str();
  483. retstatus = DH_CmdReplyStatus_Deny;
  484. goto lable;
  485. }
  486. //��������߼�״̬
  487. if (GetControlLock()==Electric_Eqpmt_Status_Lock)
  488. {
  489. if (GetEqpmentName()=="300"||GetEqpmentName()=="400"||GetEqpmentName()=="400����"||GetEqpmentName()=="ĸ�����ع�(400)")
  490. {
  491. //retstr.Format("%s %s ����",GetBaseTypeName(),GetEqpmentName());
  492. std::stringstream ss_5;
  493. ss_5 << GetBaseTypeName() << " "
  494. << GetEqpmentName() << " "
  495. << ("����");
  496. retstr = ss_5.str();
  497. }
  498. else
  499. {
  500. //retstr.Format("%s %s ���Ʊ���",GetBaseTypeName(),GetEqpmentName());
  501. std::stringstream ss_5;
  502. ss_5 << GetBaseTypeName() << " "
  503. << GetEqpmentName() << " "
  504. << ("���Ʊ���");
  505. retstr = ss_5.str();
  506. }
  507. retstatus = DH_CmdReplyStatus_Deny;
  508. goto lable;
  509. }
  510. if (GetRemoteLockStatus()==Electric_Eqpmt_Status_RemoteLock)
  511. {
  512. //retstr.Format("%s %s ң�ű���",GetBaseTypeName(),GetEqpmentName());
  513. std::stringstream ss_5;
  514. ss_5 << GetBaseTypeName() << " "
  515. << GetEqpmentName() << " "
  516. << ("ң�ű���");
  517. retstr = ss_5.str();
  518. retstatus = DH_CmdReplyStatus_Deny;
  519. goto lable;
  520. }
  521. if(GetFaultLockStatus()==Electric_Eqpmt_Status_Lock)
  522. {
  523. //retstr.Format("%s %s ���ϱ���",GetBaseTypeName(),GetEqpmentName());
  524. std::stringstream ss_5;
  525. ss_5 << GetBaseTypeName() << " "
  526. << GetEqpmentName() << " "
  527. << ("���ϱ���");
  528. retstr = ss_5.str();
  529. retstatus = DH_CmdReplyStatus_Deny;
  530. //SetControlLock(true);
  531. goto lable;
  532. }
  533. if (GetControlArea()==ELC_EQPMTCTRL_LOCAL)
  534. {
  535. //retstr.Format("%s %s �͵ؿ��ƣ���Ȩ����",GetBaseTypeName(),GetEqpmentName());
  536. std::stringstream ss_5;
  537. ss_5 << GetBaseTypeName() << " "
  538. << GetEqpmentName() << " "
  539. << (" �͵ؿ��ƣ���Ȩ����");
  540. retstr = ss_5.str();
  541. retstatus = DH_CmdReplyStatus_Deny;
  542. goto lable;
  543. }
  544. if (GetCardStatus()!= ELC_EQPMTCARDSTATUS_NORMAL)//������״̬
  545. {
  546. //retstr.Format("%s %s ����״̬����ֹ����",GetBaseTypeName(),GetEqpmentName());
  547. std::stringstream ss_5;
  548. ss_5 << GetBaseTypeName() << " "
  549. << GetEqpmentName() << " "
  550. << ("����״̬����ֹ����");
  551. retstr = ss_5.str();
  552. retstatus = DH_CmdReplyStatus_Deny;
  553. goto lable;
  554. }
  555. lable:
  556. if (trianid>0)
  557. {
  558. strncpy(CheckReplyMsg.ReplyText,retstr.c_str(), sizeof(CheckReplyMsg.ReplyText));
  559. CheckReplyMsg.CmdID = OCCCOMMAND::eUpdateOperCheck;
  560. //strcpy(CheckReplyMsg.EqpmtStrID,GetEqpmentID().GetBuffer(GUID_LEN));
  561. //GetEqpmentID().ReleaseBuffer(GUID_LEN);
  562. string strID=GetEqpmentID();
  563. strncpy(CheckReplyMsg.EqpmtStrID,strID.c_str(), sizeof(CheckReplyMsg.EqpmtStrID));
  564. CheckReplyMsg.CtrlLock= GetFaultLockStatus() /*GetControlLock()*/;
  565. if (autoboltstatus<-0.01)
  566. {
  567. CheckReplyMsg.AutoBoltStatus=1;
  568. }
  569. else
  570. {
  571. CheckReplyMsg.AutoBoltStatus=autoboltstatus;
  572. }
  573. CheckReplyMsg.StdID = stdid;
  574. CheckReplyMsg.EqpmtStatus =retstatus; //100��ʾͨ����101�ܾ�
  575. CheckReplyMsg.StationID=stationid;
  576. CheckReplyMsg.ViewID = viewid;
  577. CheckReplyMsg.SubSysID = subsysyid;
  578. OCCCOMMAND NetOrder;
  579. NetOrder.DesSysType = OCC_SYS_DD_CLIENT;
  580. NetOrder.ScrSysType = OCC_SYS_DD_SVR;
  581. NetOrder.TrainningID = trianid;
  582. NetOrder.setPacketValue(&CheckReplyMsg,OCCCOMMAND::eUpdateSvrReply);
  583. p_SendList->push(NetOrder);
  584. }
  585. return retstatus;
  586. }
  587. void CElectricEqpmt_SwicthEqpmt::SetRemoteLock(ELEEQPMTMAP& ElectricEqpmtMap,int status,int ctrlArea,int lockType)
  588. {
  589. SetControlArea(ctrlArea);
  590. UpdateRemoteLockStatus(Electric_Eqpmt_Status_RemoteLock);
  591. UpdateEqpmtStatus(ElectricEqpmtMap,status);
  592. }
  593. void CElectricEqpmt_SwicthEqpmt::CancleRemoteLock(ELEEQPMTMAP& ElectricEqpmtMap,int status,int ctrlArea)
  594. {
  595. SetControlArea(ctrlArea);
  596. UpdateRemoteLockStatus(Electric_Eqpmt_Status_RemoteUnLock);
  597. UpdateEqpmtStatus(ElectricEqpmtMap,status);
  598. }
  599. void CElectricEqpmt_SwicthEqpmt::SetShield( ELEEQPMTMAP& ElectricEqpmtMap )
  600. {
  601. UpdateLockStatus(Electric_Eqpmt_Status_Lock);
  602. UpdateEqpmtStatus(ElectricEqpmtMap,GetStatus());
  603. }
  604. void CElectricEqpmt_SwicthEqpmt::CancleShield( ELEEQPMTMAP& ElectricEqpmtMap )
  605. {
  606. UpdateLockStatus(Electric_Eqpmt_Status_UnLock);
  607. UpdateEqpmtStatus(ElectricEqpmtMap,GetStatus());
  608. }
  609. bool CElectricEqpmt_SwicthEqpmt::PowerLost(ELEEQPMTMAP& eqpmtmap,string sourceid,int offcase)
  610. {
  611. SetPower(false);
  612. UpdateEqpmtStatus(eqpmtmap, Electric_Eqpmt_Status_OFF, CTRLTYPE_ElcCut); //��ͻ��˸��¿����豸����״̬add by yangs
  613. std::map<string,string>::iterator iter = OutputEqpmtIDMap.begin(); //OutputEqpmtIDMapΪ sourceid������豸
  614. for (;iter!=OutputEqpmtIDMap.end();iter++)
  615. {
  616. ELEEQPMTMAP::iterator iter1 = eqpmtmap.find(iter->first);
  617. if (iter1==eqpmtmap.end())
  618. continue;
  619. iter1->second->PowerCut(eqpmtmap,GetEqpmentID(),offcase);
  620. }
  621. DealElcTurnOffArea();
  622. return true;
  623. }
  624. bool CElectricEqpmt_SwicthEqpmt::PowerCut(ELEEQPMTMAP& eqpmtmap,string sourceid,int offcase)
  625. {
  626. int count =0;
  627. string id;
  628. std::map<string,InputLineInfo>::iterator iter = InputEqpmtIDMap.begin();
  629. for (;iter!=InputEqpmtIDMap.end();iter++)
  630. {
  631. if (sourceid==iter->first)
  632. {
  633. iter->second.InputPower = false;
  634. }
  635. if (iter->second.InputPower)
  636. {
  637. count++;
  638. id = iter->first;
  639. }
  640. }
  641. if (GetStatus()==Electric_Eqpmt_Status_ON)
  642. {
  643. if (count==1)
  644. {
  645. ELEEQPMTMAP::iterator iter3 = eqpmtmap.find(id);
  646. if (iter3!=eqpmtmap.end())
  647. {
  648. iter3->second->PowerCut(eqpmtmap,GetEqpmentID(),offcase);
  649. }
  650. }
  651. if (count<1)
  652. {
  653. PowerLost(eqpmtmap,GetEqpmentID(),offcase);
  654. }
  655. }
  656. return true;
  657. }
  658. bool CElectricEqpmt_SwicthEqpmt::PowerIn(ELEEQPMTMAP& eqpmtmap,string sourceid)
  659. {
  660. std::map<string,InputLineInfo>::iterator iter = InputEqpmtIDMap.begin();
  661. for (;iter!=InputEqpmtIDMap.end();iter++)
  662. {
  663. if (sourceid==iter->first)
  664. {
  665. iter->second.InputPower = true;
  666. }
  667. }
  668. if (GetStatus()==Electric_Eqpmt_Status_ON)
  669. {
  670. SetPower(true);
  671. UpdateEqpmtStatus(eqpmtmap, Electric_Eqpmt_Status_ON, CTRLTYPE_ElcCut); //��ͻ��˸��¿����豸����״̬add by yangs
  672. std::map<string,string>::iterator iter2 = OutputEqpmtIDMap.begin();
  673. for (;iter2!=OutputEqpmtIDMap.end();iter2++)
  674. {
  675. if (iter2->first!=sourceid)
  676. {
  677. ELEEQPMTMAP::iterator iter3 = eqpmtmap.find(iter2->first);
  678. if (iter3!=eqpmtmap.end())
  679. {
  680. iter3->second->PowerIn(eqpmtmap,GetEqpmentID());
  681. }
  682. }
  683. }
  684. }
  685. DealElcTurnOffArea();
  686. return true;
  687. }
  688. void CElectricEqpmt_SwicthEqpmt::ClearProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid)
  689. {
  690. //UpdateLockStatus(Electric_Eqpmt_Status_UnLock);
  691. //MOD by yangs 20230302
  692. //if(MRunLineID == 300){
  693. //modify by dengt 20241130
  694. if (MRunLineID == 325 || MRunLineID == 300 || MRunLineID == 542
  695. || MRunLineID == 314 || MRunLineID == 324)
  696. {
  697. setProhibitedReversion(false);
  698. }
  699. else
  700. {
  701. UpdateFaultLockStatus(Electric_Eqpmt_Status_UnLock);
  702. UpdateEqpmtStatus(ElectricEqpmtMap,GetStatus());
  703. }
  704. EraseErrorNosByErrorID(errorid);
  705. //ActiveProtectIndex = -1;
  706. for (int i=0;i<m_ActUnions.size();i++)
  707. {
  708. ELEEQPMTMAP::iterator iter = ElectricEqpmtMap.find(m_ActUnions[i].PreEqpmtID);
  709. if (iter!=ElectricEqpmtMap.end())
  710. {
  711. //add by yangs 20230702
  712. iter->second->EraseErrorNosByErrorID(errorid);
  713. //mod by yangs 20230302
  714. //if(MRunLineID == 300){
  715. //modify by dengt 20241130
  716. if (MRunLineID == 325 || MRunLineID == 300 || MRunLineID == 542
  717. || MRunLineID == 314 || MRunLineID == 324)
  718. {
  719. iter->second->setProhibitedReversion(false);
  720. }
  721. else{
  722. iter->second->UnLockTrippingEqpmt(ElectricEqpmtMap);
  723. }
  724. }
  725. }
  726. // ң�Ź���ȡ��:���ϻָ���ң����ʧ
  727. /*if ( m_nCurProtectID > 0 )
  728. {
  729. DealTelesignalisation( errorid, GetEqpmentID(), 0);
  730. }*/
  731. }
  732. void CElectricEqpmt_SwicthEqpmt::ClearSingleProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid,const string& strProtecResetType )// added by zhangjh on 2017.5.17 ���������·���������麯��
  733. {
  734. if ( Electric_Eqpmt_Status_Lock == GetFaultLockStatus() )
  735. {
  736. //xyx����begin
  737. //string strtext;
  738. //strtext.Format("%s %s ң��ִ�гɹ�",GetEqpmentName(), strProtecResetType);
  739. //SendMsgNotice(GetSourceStationID(),GetRegion(),2,DH_MSGCATEGORY_SYS,strtext);
  740. //xyx����end
  741. //xyx�޸�begin
  742. string EqpmtTypeName = GetBaseTypeName(); //�豸��������
  743. string EqpmtName = GetEqpmentName(); //�豸����
  744. int EqpmtSourceStatonID = GetSourceStationID(); //�豸�����վID
  745. int EqpmtType = GetBaseType(); //�豸����
  746. int nActType = ElcAlarm_TripActType_Reset; //���������顱��������
  747. UpdateAlarmType(EqpmtType,EqpmtTypeName,EqpmtName,EqpmtSourceStatonID,nActType);
  748. //xyx�޸�end
  749. UpdateFaultLockStatus(Electric_Eqpmt_Status_UnLock);
  750. UpdateEqpmtStatus(ElectricEqpmtMap,GetStatus());
  751. UpdateEqpmtLightCardStatu(-1);
  752. }
  753. }