File: WORKFLOW\TCmd.cpp

    1 #include "internls\evrythng.h" // GermanVersion
    2 #include "winresrc\rc_def.h"   // Ressourcen-IDs
    3 #include "motrstrg\motrstrg.h"
    4 #include "workflow\TCmd.h"
    5 
    6 extern TSteering Steering;
    7 
    8 TCmd::TCmd( TCmdTag ct ) : bMoveOk(0)
    9 {
   10         bMoveOk = new BOOL [mlGetAxisNumber()];
   11         memset(bMoveOk, FALSE, mlGetAxisNumber()*sizeof(BOOL));
   12         eCmdId = ct.Id;
   13         bPositionValid = TRUE;
   14         bNoMeasure = FALSE;
   15         nFailureId = 0;
   16         eStep = CReady;
   17 };
   18 
   19 TCmd::~TCmd()
   20 {
   21         Steering.StopTimer();
   22         _FREELIST(bMoveOk);
   23 };
   24 
   25 void TCmd::GetName ( LPSTR aName )
   26 {
   27                 strcpy( aName, "BASE" );
   28 };
   29 
   30 bool TCmd::GetShowData ( LPSTR s )
   31 {
   32         return true;
   33 };
   34 
   35 ECmdCode TCmd::FirstStep ( void )
   36 {
   37         return CReady;
   38 };
   39 
   40 ECmdCode TCmd::ControlStep ( void )
   41 {
   42         return CReady;
   43 };
   44 
   45 ECmdCode TCmd::ReadyStep ( void )
   46 {
   47         return CReady;
   48 };
   49 
   50 ECmdCode TCmd::Ready ( void )
   51 {
   52         return CReady;
   53 };
   54 
   55 ECmdCode TCmd::DoAction ( void)
   56 {
   57         switch (eStep)
   58         {
   59                 case CFirstStep :
   60                         return FirstStep();
   61 
   62                 case CControlStep :
   63                         return ControlStep();
   64                 
   65                 case CReadyStep :
   66                         return ReadyStep();
   67                 
   68                 case CReady :
   69                         return Ready();
   70         }
   71         MessageBox(GetFocus(), "Unbekannter Schritt", "Meldung", MBINFO);
   72         return CStop;
   73 }
   74 
   75 BOOL TCmd::StartMove (const int mid, double dDistance )
   76 {
   77         //Ausfuehren der Motorbewegung und Ueberpruefung des Rueckgabewertes,
   78         //falls erfolgreich, setze Zustandsvariablen entsprechend
   79         if (mlMoveToDistance(mid, dDistance) )
   80         {
   81                 bMoveOk[mid]= FALSE;
   82                 bPositionValid= FALSE;
   83                 return TRUE;
   84         }
   85         return FALSE;
   86 };
   87 
   88 ECmdCode TCmd::WakeUp ( void )
   89 {
   90         int mid;
   91         double dd;
   92         BOOL bAllReady= TRUE;
   93         for (mid= 0; mid < mlGetAxisNumber(); mid++)
   94                 if ( !bMoveOk[mid] )
   95                 {
   96                         if ( mlIsMoveFinish(mid) )
   97                         {
   98                                 DelayTime(5);
   99                                 if (mlGetDistance(mid, dd))
  100                                         bMoveOk[mid]= TRUE;
  101                                 else
  102                                         bAllReady= FALSE;
  103                         }
  104                         else
  105                                 bAllReady= FALSE;
  106                 }
  107 
  108         if ( bAllReady )
  109         {
  110                 bPositionValid= TRUE;
  111                 if ( bNoMeasure )
  112                 {
  113                         bNoMeasure= FALSE;
  114                         return DoAction();
  115                 }
  116                 else
  117                         return CMeasure;
  118         }
  119         else
  120                 return CRecall;
  121 };
  122 
  123 ECmdId TCmd::GetId ( void )
  124 {
  125         return eCmdId;
  126 };
  127         
  128 BOOL TCmd::IsPositionValid ( void )
  129 {
  130         return bPositionValid;
  131 };
  132         
  133 BOOL TCmd::IsReady ( void )
  134 {
  135         return ( eStep == CReady );
  136 };
  137