source: trunk/MagicSoft/Cosy/devdrv/macs.h@ 1701

Last change on this file since 1701 was 1701, checked in by tbretz, 22 years ago
*** empty log message ***
File size: 2.6 KB
Line 
1#ifndef MACS_H
2#define MACS_H
3
4#include <TObject.h>
5
6#include "nodedrv.h"
7#include "base/timer.h"
8
9class Macs : public NodeDrv, public TObject
10{
11private:
12 BYTE_t fMacId;
13
14 LWORD_t fVelRes;
15 LWORDS_t fVel;
16
17 LWORDS_t fPos;
18 Timer fPosTime;
19
20 LWORD_t fRes; // Encoder resolution
21
22 LWORDS_t fPdoPos;
23 Timer fPdoTime;
24
25 BYTE_t fPosActive;
26 BYTE_t fRpmActive;
27
28 TTimer *fTimeout;
29 Bool_t fTimerOn;
30 LWORD_t fGuardTime;
31 double fTimeoutTime;
32
33 LWORD_t string(BYTE_t b0=0, BYTE_t b1=0, BYTE_t b2=0, BYTE_t b3=0)
34 {
35 return (LWORD_t)(b0<<24 | b1<<16 | b2<<8 | b3);
36 }
37
38 void ResetTimeout();
39 Bool_t HandleTimer(TTimer *t);
40
41public:
42 Macs(const BYTE_t nodeid, const char *name=NULL, MLog &out=gLog);
43 virtual ~Macs();
44
45 void InitDevice(Network *);
46
47 //void StartDevice();
48 void StopDevice();
49
50 void HandleSDO(WORD_t idx, BYTE_t subidx, LWORD_t val, timeval_t *tv);
51 void HandleSDOOK(WORD_t idx, BYTE_t subidx);
52 void HandleSDOError(LWORD_t data) { NodeDrv::HandleSDOError(data); }
53
54 void HandlePDO1(BYTE_t *data, timeval_t *tv);
55 void HandlePDO2(BYTE_t *data, timeval_t *tv);
56
57 void SendMsg(BYTE_t data[6]);
58 void SendMsg(BYTE_t d0=0, BYTE_t d1=0, BYTE_t d2=0,
59 BYTE_t d3=0, BYTE_t d4=0, BYTE_t d5=0);
60
61 void ReqPos();
62 void ReqVel();
63 //void ReqAxEnd();
64 void ReqVelRes();
65 void ReqRes();
66 void SetHome(LWORDS_t pos=0, WORD_t maxtime=25);
67 void SetAcceleration(LWORD_t acc);
68 void SetDeceleration(LWORD_t dec);
69 void SetVelocity(LWORD_t vel);
70 void SetNoWait(BYTE_t flag=TRUE);
71 void SetRpmMode(BYTE_t mode=TRUE);
72 void SetRpmVelocity(LWORDS_t cvel);
73 void SetPDO1On(BYTE_t flag=TRUE);
74 void SetPosEndswitch(LWORDS_t val);
75 void SetNegEndswitch(LWORDS_t val);
76
77 void EnableEndswitches(bool neg=true, bool pos=true);
78
79 void StartVelSync();
80 void StartPosSync();
81
82 void StartRelPos(LWORDS_t pos);
83 void StartAbsPos(LWORDS_t pos);
84
85 void SetTimeoutTime(LWORD_t ms);
86 void ReqTimeoutTime();
87
88 void EnableTimeout(bool enable=true, LWORDS_t ms=-1);
89
90 void StopMotor();
91
92 int IsPositioning() { return fPosActive; }
93
94 double GetTime();
95 double GetMjd();
96
97 double GetPdoTime();
98 double GetPdoMjd();
99
100 LWORDS_t GetPdoPos() { return fPdoPos; }
101
102 LWORDS_t GetPos() { return fPos; }
103 LWORDS_t GetVel() { return fVel; }
104 LWORD_t GetVelRes() { return fVelRes; } // Velocity units (would be 100 for %)
105 LWORD_t GetRes() { return fRes; } // Encoder resolution
106
107 void HandleError();
108
109 ClassDef(Macs, 0)
110};
111
112#endif
Note: See TracBrowser for help on using the repository browser.