FEDRA emulsion software from the OPERA Collaboration
AcqPlateChanger.h
Go to the documentation of this file.
1 #ifndef ROOT_AcqPlateChanger
2 #define ROOT_AcqPlateChanger
4 // //
5 // AcqPlateChanger //
6 // //
7 // Interface to Bern emulsion plate changer //
8 // //
9 // //
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <time.h>
15 #include <conio.h>
16 #include "TObject.h"
17 #include "AcqStage1.h"
18 
19 #ifndef __CINT__
20 #include "nidaqmx.h"
21 #endif
22 
23 
24 #define MAX_NUMBER_OF_PLATES 100
25 #define VPOS_UP 0
26 #define VPOS_DOWN 1
27 #define VPOS_DOWN_TO_STAGE 2
28 #define VPOS_ABOVE_STAGE 3
29 
30 struct Identifier
31 {
32  int Part[4];
33 };
34 
35 
36 
37 struct TPlate
38 {
40  int SeqNumber;
41  int InBank;
43 
44 };
45 
46 struct TBank
47 {
48  int Number; //0- microscope, 1-3 banks
49  int NEmulsions; //how many plates it contains
50  int NSeparators; //how many plates it contains
52 };
53 
54 
55 
56 //______________________________________________________________________________
57 class AcqPlateChanger : public TObject {
58 
59 private:
60  float StX,StY,StZ; //stage coordinates to save before arm power-on
61  public:
63  virtual ~AcqPlateChanger();
64 
65 // Low level hardware control functions
66 void OnReset(); //Here we write all 0 in ports P4 and P5
67 int Initialize(AcqStage1* Stage=NULL);
68 int PowerON();
69 void PowerOFF();
70 int ArmVacuumControl(bool VacOn, int timeout);
71 int TableVacuumControl(bool VacOn, int timeout);
72 int GoOnHAxis(int position, int timeout);
73 int GoOnVAxis(int position, int timeout);
74 
75 // Consistency and bank information management
76 int ReadStatusFile();
77 void UpdateStatusFile();
78 void ResetBanks();
79 virtual void Print();
80 TPlate* TakeFromBank(int bnk);
81 void AddToBank(int bnk, TPlate* plate);
82 int FindEmulsion(Identifier id, int Bank);
83 void LoadBrick(int Brick, int Nemulsions=57, int SrcBank=1, int DestBank=2, bool Separators=true, bool FirstIsSeparator=true);
84 void UnloadBrick();
85 
86 // Emulsion and arm manipulation methods
87  int Park(int idst);
88  int MoveEmulsion(int isrc, int idst);
89  int UnloadPlate(bool TurnPowerOff=true);
90  int LoadPlate(Identifier id);
91  int LoadPlate(int id0, int id1, int id2=0, int id3=0);
92 
93 
94  bool InitDone; // flag set when Initialize() is done
95  bool Ready; // flag set when banks are filled from status file
96  bool StageError; // flag is set if the stage position changed during robot operation
97  // this is to catch a "stage jump" bug in stage firmware
98  // when this condition is detected stage must be re-homed by host script
99  int SourceBank; // source bank (1 to NumberOfBanks)
100  int DestinationBank; // source bank (1 to NumberOfBanks
101  int PositionTimeout; // Timeout in x100ms to position the arm
102  int VacuumTimeout; // Timeout in x100ms to reach the vacuum on table or arm
103  int NumberOfBanks; // Number of banks on the table
104  bool LiftCorners; // if set - arm tries first to lift corners of the emulsion
105  // when taking it from the stage
106  int NumberOfAttempt; // max number of attempts to take emulsion from the plate
107  int SeparationAttempts; // number of up-down movements against brushes in bank
108  // to separate emulsion from separator
109 
110  float XLoadPosition; //stage positions for safe emulsion load/unload
113 
114  AcqStage1 *ST; // pointer to stage
115 
116 
117  ClassDef(AcqPlateChanger,1)
118 
119 };
120 
121 
122 
123 #endif /* ROOT_AcqPlateChanger */
TBank Bank[5]
Definition: AcqPlateChanger.cxx:15
#define MAX_NUMBER_OF_PLATES
Definition: AcqPlateChanger.h:24
MFTYPE32 long position
Definition: Milproto.h:644
Definition: AcqPlateChanger.h:57
int NumberOfAttempt
Definition: AcqPlateChanger.h:106
int TableVacuumControl(bool VacOn, int timeout)
Definition: AcqPlateChanger.cxx:259
int UnloadPlate(bool TurnPowerOff=true)
Definition: AcqPlateChanger.cxx:959
AcqPlateChanger()
Definition: AcqPlateChanger.cxx:25
bool LiftCorners
Definition: AcqPlateChanger.h:104
int VacuumTimeout
Definition: AcqPlateChanger.h:102
virtual ~AcqPlateChanger()
Definition: AcqPlateChanger.cxx:71
bool StageError
Definition: AcqPlateChanger.h:96
AcqStage1 * ST
Definition: AcqPlateChanger.h:114
int DestinationBank
Definition: AcqPlateChanger.h:100
void UnloadBrick()
Definition: AcqPlateChanger.cxx:498
void AddToBank(int bnk, TPlate *plate)
Definition: AcqPlateChanger.cxx:836
void PowerOFF()
Definition: AcqPlateChanger.cxx:676
float StX
Definition: AcqPlateChanger.h:60
void UpdateStatusFile()
Definition: AcqPlateChanger.cxx:406
bool InitDone
Definition: AcqPlateChanger.h:94
bool Ready
Definition: AcqPlateChanger.h:95
int PositionTimeout
Definition: AcqPlateChanger.h:101
int FindEmulsion(Identifier id, int Bank)
Definition: AcqPlateChanger.cxx:999
int ReadStatusFile()
Definition: AcqPlateChanger.cxx:439
int LoadPlate(Identifier id)
Definition: AcqPlateChanger.cxx:886
float YLoadPosition
Definition: AcqPlateChanger.h:111
int Park(int idst)
Definition: AcqPlateChanger.cxx:1014
int ArmVacuumControl(bool VacOn, int timeout)
Definition: AcqPlateChanger.cxx:219
int PowerON()
Definition: AcqPlateChanger.cxx:622
void OnReset()
Definition: AcqPlateChanger.cxx:77
void LoadBrick(int Brick, int Nemulsions=57, int SrcBank=1, int DestBank=2, bool Separators=true, bool FirstIsSeparator=true)
Definition: AcqPlateChanger.cxx:515
void ResetBanks()
Definition: AcqPlateChanger.cxx:606
float XLoadPosition
Definition: AcqPlateChanger.h:110
float ZLoadPosition
Definition: AcqPlateChanger.h:112
virtual void Print()
Definition: AcqPlateChanger.cxx:47
int GoOnVAxis(int position, int timeout)
Definition: AcqPlateChanger.cxx:354
int GoOnHAxis(int position, int timeout)
Definition: AcqPlateChanger.cxx:299
int SourceBank
Definition: AcqPlateChanger.h:99
int SeparationAttempts
Definition: AcqPlateChanger.h:107
float StZ
Definition: AcqPlateChanger.h:60
TPlate * TakeFromBank(int bnk)
Definition: AcqPlateChanger.cxx:853
int Initialize(AcqStage1 *Stage=NULL)
Definition: AcqPlateChanger.cxx:94
int MoveEmulsion(int isrc, int idst)
Definition: AcqPlateChanger.cxx:706
float StY
Definition: AcqPlateChanger.h:60
int NumberOfBanks
Definition: AcqPlateChanger.h:103
Definition: AcqStage1.h:134
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
#define NULL
Definition: nidaqmx.h:84
Definition: AcqPlateChanger.h:31
int Part[4]
Definition: AcqPlateChanger.h:32
Definition: AcqPlateChanger.h:47
TPlate * Plates[MAX_NUMBER_OF_PLATES *2]
Definition: AcqPlateChanger.h:51
int NEmulsions
Definition: AcqPlateChanger.h:49
int Number
Definition: AcqPlateChanger.h:48
int NSeparators
Definition: AcqPlateChanger.h:50
Definition: AcqPlateChanger.h:38
int SeqNumber
Definition: AcqPlateChanger.h:40
Identifier id
Definition: AcqPlateChanger.h:39
int InBank
Definition: AcqPlateChanger.h:41
bool IsSeparator
Definition: AcqPlateChanger.h:42