00001
00067
00068 #ifndef SEES_H_
00069 #define SEES_H_
00070
00071 #include <TriggerOutput.h>
00072 #include <TriggerOR.h>
00073 #include <TriggerAND.h>
00074 #include <ObjectsManager.h>
00075 #include <DebugStream.h>
00076 #include "ObjectMode.h"
00077 #include "SEESMessages.h"
00078 #include "SEESTypes.h"
00079 #include "SEES_SK.h"
00080
00081 class SEESMode;
00082 class SEESControl;
00083 class QG;
00084 class Diesel;
00085 class Generator;
00086 class SEESGroup;
00087
00091 class SEES:
00092 public SEES_SK
00093 {
00094 public:
00095 SEES( int gnum, const std::string& name, SEESControl* master, xmlNode* confnode );
00096 ~SEES();
00097
00098 virtual char* getName();
00099 inline std::string getSESName(){ return myname; }
00100
00101 inline int getNumber(){ return num; }
00102
00103 inline int getGroupNumber(){ return gnum; }
00104 inline void setGroupNumber( int num ){ gnum = num; }
00105
00106 int getReservPower();
00107 inline int getNominalPower(){ return npower; }
00108 long getP();
00109 long getU();
00110 long getF();
00111
00112 SEESTypes::ControlMode getControlMode();
00113 inline ObjectMode getOMode(){ return (ObjectMode)in_state_as; }
00114
00115 void requiredReserv( bool set );
00116 bool waitRunning();
00117 bool waitStopping();
00118 bool isOnMode();
00119 bool isAutoMode();
00120 bool isReservMode();
00121 bool isProtection();
00122 bool isAutoControl();
00124 long getPriority();
00125 void setLeader( bool set );
00126
00127
00128 bool canReservRunning();
00129 bool canReservStopping();
00130 bool isReservOnNeeded();
00131 bool isReservOffNeeded();
00132
00133 void onReservCommand();
00134 void offReservCommand();
00135 void resetReservCommand();
00136 void updateReservCommand();
00137 void setAloneWorking( bool state );
00138
00139
00140
00142 enum Timers
00143 {
00144 OnTimer,
00145 RunTimer,
00146 OffTimer,
00147 DGProtectionStopTimer,
00148 DGProtectionCheckTimer,
00149 QGTimer,
00150 AcceptWaitingTimer,
00151 AcceptControlTimer,
00152 Load20Timer,
00153 NoPowerTimer,
00154 BlockedRunTimer,
00155 UpdateStateTimer
00156 };
00157
00158 const int OnTime;
00159 const int QGOnTime;
00160 const int QGOffTime;
00161 const int RunTime;
00162 const int OffTime;
00163 const int AcceptWaitingTime;
00164 const int AcceptControlTime;
00165 const int Load20Time;
00166 const int CmdPause;
00167 const int ReservCount;
00168 const int askTimeout;
00169 const int askPause;
00170 const int filterPause;
00171 const int protectionPause;
00172 const int initPause;
00173 const int NoPowerTime;
00174 int BlockedRunTime;
00175 const int DGProtectionStopTime;
00176 const int DGProtectionCheckTime;
00177 const int modeTime;
00178 const int updateStateTime;
00179 int resetPause;
00180 int initAttempts;
00182 SEESControl* master;
00183 QG* qg;
00184 Diesel* dis;
00185 Generator* gen;
00186
00187 bool setLamp(const UniSetTypes::ObjectId id, UniSetTypes::LampCommand cmd);
00188
00189 TriggerOutput<SEES, SEES::Timers, int>* tm;
00190
00192 enum InputId
00193 {
00194
00195 Load105,
00196 Load95,
00197 Protection,
00198 Fault,
00199 NoPower,
00200 RequiredReserve,
00202
00203 ReservOn_Condition,
00204 Load20
00205 };
00206
00207 TriggerOutput<SEES, UniSetTypes::ObjectId, bool>* out;
00208
00209
00210 enum SigState
00211 {
00212 Sig_None,
00213 Sig_Filtrating,
00214 Sig_OK
00215 };
00216
00217 SigState load20_sig;
00220 TriggerOutput<SEES, UniSetTypes::ObjectId, bool>* msg;
00221
00222 const UniSetTypes::ObjectId myPostID;
00223
00224 static DebugStream dlog;
00225 static void init_dlog( DebugStream& dlog );
00226
00227 protected:
00228 SEES();
00229
00230 TriggerOR<SEES,SEES::InputId>* needReservOn;
00231 TriggerAND<SEES,SEES::InputId>* needReservOff;
00232
00233 virtual void step();
00234
00235 virtual void sigterm( int signo );
00236
00237 virtual void processingMessage( UniSetTypes::VoidMessage* msg );
00238 virtual void sysCommand( UniSetTypes::SystemMessage* sm );
00239 virtual void sensorInfo( UniSetTypes::SensorMessage* sm );
00240 virtual void timerInfo( UniSetTypes::TimerMessage* tm );
00241 void seesInfo( SEESMessage *sm );
00242
00243 void changeMode( SEESMode* m );
00244 void setTimer(SEES::Timers tid, int val);
00245 void setOut(UniSetTypes::ObjectId sid, bool state);
00246 void setProtection( bool state );
00247
00248 void onReservCondition( bool set );
00249 void offReservCondition( bool set );
00250 void updateReservNeeded();
00251 void resetModeTimer();
00252 void checkControlMode();
00253
00254 void setMyControlMode( SEESTypes::ControlMode m );
00255
00256 long getAnalogInput( UniSetTypes::ObjectId id );
00257
00258 inline bool isHaveQGLock(){ return haveQGLock; }
00259 inline void setQGLock( bool set ){ haveQGLock = set; }
00260
00261 private:
00262 friend class SEESMode;
00263 friend class SEESWaitingMode;
00264 friend class SEESAutoWaitingMode;
00265 friend class SEESProtectionMode;
00266 friend class SEESGroup;
00267
00268 friend std::ostream& operator<<(std::ostream& os, SEES& am );
00269 friend std::ostream& operator<<(std::ostream& os, SEES* am );
00270
00271 void init();
00272
00273 SEESMode* mode;
00274 SEESTypes::ControlMode myMode;
00275 int gnum;
00276 int num;
00277 int maxPower;
00278 int curReservPower;
00279 PassiveTimer ptMode;
00280
00281 PassiveTimer ptPing;
00282 PassiveTimer ptAnalog;
00283 UniSetTypes::ObjectId power_as;
00284 UniSetTypes::ObjectId voltage_as;
00285 UniSetTypes::ObjectId frequency_as;
00286 long in_power_as;
00287 long in_voltage_as;
00288 long in_frequency_as;
00289 int npower;
00290
00291 bool checkMode;
00292 Trigger trModeUnbalance;
00293 Trigger trModeUnbalanceCheck;
00294 PassiveTimer ptModeUnbalance;
00295
00296 UniSetTypes::uniset_mutex myModeMutex;
00297 UniSetTypes::uniset_mutex modeMutex;
00298 UniSetTypes::uniset_mutex reservMutex;
00299
00300
00301 SEESMessage::SEESMode toMode;
00302 SEESMessage::SEESMode prevMode;
00303 SEESMode* backMode;
00304 int attemptCounter;
00305 int attempt;
00307 bool protection;
00308 UniSetTypes::uniset_mutex protectionMutex;
00309 bool in_RequiredReserve;
00311
00312 bool haveQGLock;
00313 };
00314
00315 #endif // SEES_H_
00316