diff --git a/MAC/Navigator2/panels/objects/Alerts/alarms.pnl b/MAC/Navigator2/panels/objects/Alerts/alarms.pnl index db7e6fcfed73107ee5d1bd98a0077f118120efb3..24029491e329f0b93b19fdfbdac3f0d1e8b5a3a8 100644 --- a/MAC/Navigator2/panels/objects/Alerts/alarms.pnl +++ b/MAC/Navigator2/panels/objects/Alerts/alarms.pnl @@ -30,6 +30,7 @@ string choice=\"\"; string baseDP=\"\"; bool needsSave=false; bool bDoubleClicked=false; +mapping g_alarms_copy; // routine for single mouse click @@ -153,7 +154,6 @@ void rClick(int row) { } } - // ******************************************* // Name : redraw_table // ******************************************* @@ -209,14 +209,13 @@ void redraw_table() { void acknowledgeAlarm(int iPos,string dp,string message,bool save) { // new state int state; - if (g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME || - g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) { + if (g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME || + g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) { state = SUSPICIOUS; - } else if (g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME || - g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT) { + } else if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME || + g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT) { state = BROKEN; } - DebugN(\"new state: \"+state); // check if the old state in the database is allready lower then the one in the global list. // in that case we need to keep the DB state, since the state could have been changed b4 the ack was done. // and the complete alarm can be removed from the global. @@ -224,26 +223,20 @@ void acknowledgeAlarm(int iPos,string dp,string message,bool save) { bool changed = false; if (dpExists(dp)) { dpGet(dp,dpState); - DebugN(\"old state: \"+dpState); if (dpState < state) { - DebugN(\"position: \"+iPos+\" remove from database\"); needsSave=true; - dynRemove(g_alarms[\"DPNAME\" ],iPos); - dynRemove(g_alarms[\"TIME\" ],iPos); - dynRemove(g_alarms[\"STATE\" ],iPos); - dynRemove(g_alarms[\"MESSAGE\"],iPos); - dynRemove(g_alarms[\"STATUS\" ],iPos); - if (save) { - } - saveAlarms(); - } else if (save) { + dynRemove(g_alarms_copy[\"DPNAME\" ],iPos); + dynRemove(g_alarms_copy[\"TIME\" ],iPos); + dynRemove(g_alarms_copy[\"STATE\" ],iPos); + dynRemove(g_alarms_copy[\"MESSAGE\"],iPos); + dynRemove(g_alarms_copy[\"STATUS\" ],iPos); + } else { // now we determined the new status and state we need to write it in the databasepoint // to trigger the complete chain again. ofcourse this needs to be done on the right database, so we get the // systemname from the dp first. - DebugN(\"otherwise trigger alarm on : \"+sys); string sys = dpSubStr(dp,DPSUB_SYS); if (dpExists(sys+\"__navObjectState\")) { dpSet(sys+\"__navObjectState.DPName\",dp, @@ -253,12 +246,12 @@ void acknowledgeAlarm(int iPos,string dp,string message,bool save) { } } } else { - LOG_WARN(\"navigator_alerts.pnl:RightMouseClick|dp is not existing\"); - - // need to check if save and needssave is true to deal with last element is faulty and the database does need to be saved - if (save && needsSaving) { - saveAlarms(); - } + LOG_WARN(\"navigator_alerts.pnl:RightMouseClick|dp is not existing\"); + } + + // need to check if save and needssave is true to deal with last element is faulty and the database does need to be saved + if (save && needsSave) { + saveAlarms(); } } @@ -267,7 +260,7 @@ private void saveAlarms() { if (dpExists(DPNAME_NAVIGATOR + \".alarms\")) { LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|Storing the alarms in db\"); setAlarms(DPNAME_NAVIGATOR + \".alarms\", - g_alarms[ \"TIME\"],g_alarms[ \"DPNAME\" ],g_alarms[ \"MESSAGE\" ],g_alarms[ \"STATE\" ],g_alarms[ \"STATUS\" ]); + g_alarms_copy[ \"TIME\"],g_alarms_copy[ \"DPNAME\" ],g_alarms_copy[ \"MESSAGE\" ],g_alarms_copy[ \"STATE\" ],g_alarms_copy[ \"STATUS\" ]); needsSave=false; } else { LOG_ERROR(\"navigator_alerts.pnl:RightMouseClick|Couldn't write alarms to navigator\"); @@ -282,87 +275,78 @@ private void saveAlarms() { } void acknowledge(string what) { + + g_alarms_copy = g_alarms; dyn_int ackList; - for (int iPos=1; iPos<=dynlen(g_alarms[\"DPNAME\"]) ; iPos++) { - DebugN(\"Looking at dp: \" + g_alarms[\"DPNAME\"][iPos]+\" \"+g_alarms[ \"STATE\" ][iPos]+\" \"+g_alarms[ \"STATUS\" ][iPos]); + for (int iPos=1; iPos<=dynlen(g_alarms_copy[\"DPNAME\"]) ; iPos++) { switch(what) { case (\"alarmall\") : { - if ((g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME || - g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT) && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"alarmall\"); + if ((g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME || + g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT) && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"alarmcame\") : { - if (g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"alarmcame\"); + if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"alarmwent\") : { - if (g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"alarmwent\"); + if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"suspall\") : { - if ((g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME || - g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"suspall\"); + if ((g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME || + g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"suspcame\") : { - if (g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"suspcame\"); + if (g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"suspwent\") : { - if ( g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"suspwent\"); + if ( g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"all\") : { - if (g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"all\"); + if (g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; } case (\"allcame\") : { - if (g_alarms[\"STATUS\"][iPos] == CAME ) { - DebugN(\"allcame\"); + if (g_alarms_copy[\"STATUS\"][iPos] == CAME ) { dynAppend(ackList,iPos); } break; } case (\"allwent\") : { - if (g_alarms[\"STATUS\"][iPos] == WENT ) { - DebugN(\"allwent\"); + if (g_alarms_copy[\"STATUS\"][iPos] == WENT ) { dynAppend(ackList,iPos); } break; } case (\"allstationtest\") : { - if (strpos(g_alarms[\"MESSAGE\"][iPos],\"stationtest\") >= 0 && - g_alarms[\"STATUS\"][iPos] != ACK ) { - DebugN(\"allstationtest\"); + if (strpos(g_alarms_copy[\"MESSAGE\"][iPos],\"stationtest\") >= 0 && + g_alarms_copy[\"STATUS\"][iPos] != ACK ) { dynAppend(ackList,iPos); } break; @@ -373,10 +357,9 @@ void acknowledge(string what) { // loop the list backwards to keep the dyn_list intact and same positions, only trigger the save with the last element. bool save = false; for (int jPos=dynlen(ackList); jPos>0; jPos--) { - string dp = g_alarms[\"DPNAME\"][ackList[jPos]]; - string message = g_alarms[\"MESSAGE\"][ackList[jPos]]; + string dp = g_alarms_copy[\"DPNAME\"][ackList[jPos]]; + string message = g_alarms_copy[\"MESSAGE\"][ackList[jPos]]; if (jPos == 1) save = true; - DebugN(\"deleting #\"+ackList[jPos]+ \" \"+dp+\" \"+message+\" \"+save); acknowledgeAlarm(ackList[jPos],dp,message,save); } }" 0 @@ -466,7 +449,7 @@ LANG:1 32 Arial Black,-1,11,5,50,0,0,0,0,0 26 2 "CASCADE_BUTTON1" "" -1 0 0 E E E 0 E 1 E N "_ButtonText" E N "_Button" E E +1 0 0 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E E E 3 0 0 0 0 0 E E E diff --git a/MAC/Navigator2/scripts/monitorAlarms.ctl b/MAC/Navigator2/scripts/monitorAlarms.ctl index fd50ba8e2c33adcd5b557b1d0f5481c23533a2de..1549495b47d9ffdb2d43e465f7f827ee8e3aa627 100644 --- a/MAC/Navigator2/scripts/monitorAlarms.ctl +++ b/MAC/Navigator2/scripts/monitorAlarms.ctl @@ -160,7 +160,7 @@ void objectStateCallback(string ident, dyn_dyn_anytype aResult) { // Loop through all alarms in this callback for (int nr = 2; nr < dynlen (aResult);nr+=4) { //get the stateNr and DP that go with this message - if (!dpExists(aResult[n][1])) continue; + if (!dpExists(aResult[nr][1])) continue; time aTime = getCurrentTime(); string aSystem = dpSubStr(aResult[nr][1],DPSUB_SYS); string aDP = aResult[nr][2];