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
31{
32 int Part[4];
33};
34
35
36
37struct TPlate
38{
41 int InBank;
43
44};
45
46struct 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//______________________________________________________________________________
57class AcqPlateChanger : public TObject {
58
59private:
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
66void OnReset(); //Here we write all 0 in ports P4 and P5
67int Initialize(AcqStage1* Stage=NULL);
68int PowerON();
69void PowerOFF();
70int ArmVacuumControl(bool VacOn, int timeout);
71int TableVacuumControl(bool VacOn, int timeout);
72int GoOnHAxis(int position, int timeout);
73int GoOnVAxis(int position, int timeout);
74
75// Consistency and bank information management
76int ReadStatusFile();
77void UpdateStatusFile();
78void ResetBanks();
79virtual void Print();
80TPlate* TakeFromBank(int bnk);
81void AddToBank(int bnk, TPlate* plate);
82int FindEmulsion(Identifier id, int Bank);
83void LoadBrick(int Brick, int Nemulsions=57, int SrcBank=1, int DestBank=2, bool Separators=true, bool FirstIsSeparator=true);
84void 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