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