DynExp
Highly flexible laboratory automation for dynamically changing experiments.
PI-C-862.h
Go to the documentation of this file.
1 // This file is part of DynExp.
2 
9 #pragma once
10 
11 #include "stdafx.h"
12 #include "DynExpCore.h"
13 #include "MetaInstruments/Stage.h"
14 
15 namespace DynExpInstr
16 {
17  class PI_C_862;
18 
19  namespace PI_C_862_Tasks
20  {
22  {
24 
26  };
27 
29  {
31 
33  };
34 
36  {
38 
40  };
41 
42  class SetHomeTask final : public DynExp::TaskBase
43  {
45  };
46 
47  class ReferenceTask final : public DynExp::TaskBase
48  {
49  public:
52 
53  private:
55 
57  };
58 
59  class SetVelocityTask final : public DynExp::TaskBase
60  {
61  public:
63 
64  private:
66 
68  };
69 
70  class MoveToHomeTask final : public DynExp::TaskBase
71  {
72  public:
74 
75  private:
77  };
78 
79  class MoveAbsoluteTask final : public DynExp::TaskBase
80  {
81  public:
84 
85  private:
87 
89  };
90 
91  class MoveRelativeTask final : public DynExp::TaskBase
92  {
93  public:
96 
97  private:
99 
101  };
102 
103  class StopMotionTask final : public DynExp::TaskBase
104  {
105  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
106  };
107  }
108 
110  {
112 
113  public:
115  {
116  constexpr void Set(uint8_t ByteCode) noexcept { this->ByteCode = ByteCode; }
117 
118  constexpr bool Busy() const noexcept { return ByteCode & (1 << 0); }
119  constexpr bool CommandError() const noexcept { return ByteCode & (1 << 1); }
120  constexpr bool TrajectoryComplete() const noexcept { return ByteCode & (1 << 2); }
121  constexpr bool IndexPulseReceived() const noexcept { return ByteCode & (1 << 3); }
122  constexpr bool PositionLimitExceeded() const noexcept { return ByteCode & (1 << 4); }
123  constexpr bool ExcessivePositionError() const noexcept { return ByteCode & (1 << 5); }
124  constexpr bool BreakpointReached() const noexcept { return ByteCode & (1 << 6); }
125  constexpr bool MotorLoopOff() const noexcept { return ByteCode & (1 << 7); }
126 
127  private:
128  uint8_t ByteCode = 0;
129  };
130 
131  enum ErrorCodeType : uint8_t {
141  };
142 
143  PI_C_862StageData() = default;
144  virtual ~PI_C_862StageData() = default;
145 
146  auto GetLM629Status() const noexcept { return LM629Status; }
147  auto GetErrorCode() const noexcept { return ErrorCode; }
148 
150 
151  private:
152  void ResetImpl(dispatch_tag<PositionerStageData>) override final;
154 
155  virtual bool IsMovingChild() const noexcept override;
156  virtual bool HasArrivedChild() const noexcept override;
157  virtual bool HasFailedChild() const noexcept override;
158 
162  };
163 
165  {
166  public:
168  virtual ~PI_C_862_Params() = default;
169 
170  virtual const char* GetParamClassTag() const noexcept override { return "PI_C_862_Params"; }
171 
173  "HardwareAdapter", "Serial port", "Underlying hardware adapter of this instrument", DynExpUI::Icons::HardwareAdapter };
174  Param<ParamsConfigDialog::TextType> MercuryAddress = { *this, "MercuryAddress", "Mercury address",
175  "Address (0-F) of the Mercury controller to be used", true, "0" };
176 
177  private:
180  };
181 
183  {
184  public:
187 
189  virtual ~PI_C_862_Configurator() = default;
190 
191  private:
192  virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<PI_C_862_Configurator>(ID, Core); }
193  };
194 
195  class PI_C_862 : public PositionerStage
196  {
197  public:
201 
202  static std::string AnswerToNumberString(std::string&& Answer, const char* StartCode);
203 
204  constexpr static auto Name() noexcept { return "PI C-862"; }
205 
206  PI_C_862(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params);
207  virtual ~PI_C_862() {}
208 
209  virtual std::string GetName() const override { return Name(); }
210 
211  virtual PositionerStageData::PositionType GetMinPosition() const noexcept override { return -12455000; }
212  virtual PositionerStageData::PositionType GetMaxPosition() const noexcept override { return 12455000; }
213  virtual PositionerStageData::PositionType GetResolution() const noexcept override { return 1000; }
214  virtual PositionerStageData::PositionType GetMinVelocity() const noexcept override { return 0; }
215  virtual PositionerStageData::PositionType GetMaxVelocity() const noexcept override { return 500000; }
216  virtual PositionerStageData::PositionType GetDefaultVelocity() const noexcept override { return 200000; }
217 
218  virtual void SetHome() const override { MakeAndEnqueueTask<PI_C_862_Tasks::SetHomeTask>(); }
219  virtual void Reference(DirectionType Direction = DirectionType::Forward, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<PI_C_862_Tasks::ReferenceTask>(Direction, CallbackFunc); }
220  virtual void SetVelocity(PositionerStageData::PositionType Velocity) const override { MakeAndEnqueueTask<PI_C_862_Tasks::SetVelocityTask>(Velocity); }
221 
222  virtual void MoveToHome(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<PI_C_862_Tasks::MoveToHomeTask>(CallbackFunc); }
223  virtual void MoveAbsolute(PositionerStageData::PositionType Position, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<PI_C_862_Tasks::MoveAbsoluteTask>(Position, CallbackFunc); }
224  virtual void MoveRelative(PositionerStageData::PositionType Position, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<PI_C_862_Tasks::MoveRelativeTask>(Position, CallbackFunc); }
225  virtual void StopMotion() const override { MakeAndEnqueueTask<PI_C_862_Tasks::StopMotionTask>(); }
226 
227  private:
228  virtual void OnErrorChild() const override;
229 
230  void ResetImpl(dispatch_tag<PositionerStage>) override final;
232 
233  virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<PI_C_862_Tasks::InitTask>(); }
234  virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<PI_C_862_Tasks::ExitTask>(); }
235  virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<PI_C_862_Tasks::UpdateTask>(); }
236  };
237 }
Defines DynExp's core module as an interface between the UI and DynExp objects.
Implementation of a meta instrument to control single-axis positioner stages.
DynExp::LinkedObjectWrapperContainer< DynExp::SerialCommunicationHardwareAdapter > HardwareAdapter
Definition: PI-C-862.h:149
virtual bool HasArrivedChild() const noexcept override
Returns whether the stage has arrived at its destiny position (result of HasArrivedChild())
Definition: PI-C-862.cpp:209
virtual bool HasFailedChild() const noexcept override
Returns whether the stage is in an error state, i.e. moving has failed (result of HasFailedChild())
Definition: PI-C-862.cpp:214
virtual bool IsMovingChild() const noexcept override
Returns whether the stage is currently moving (result of IsMovingChild())
Definition: PI-C-862.cpp:204
virtual ~PI_C_862StageData()=default
LM629StatusType LM629Status
Definition: PI-C-862.h:159
virtual void ResetImpl(dispatch_tag< PI_C_862StageData >)
Definition: PI-C-862.h:153
void ResetImpl(dispatch_tag< PositionerStageData >) override final
Refer to DynExp::InstrumentDataBase::Reset(). Using tag dispatch mechanism to ensure that ResetImpl()...
Definition: PI-C-862.cpp:195
auto GetErrorCode() const noexcept
Definition: PI-C-862.h:147
auto GetLM629Status() const noexcept
Definition: PI-C-862.h:146
virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core) const override
Override to make derived classes call DynExp::MakeParams with the correct configurator type derived f...
Definition: PI-C-862.h:192
virtual ~PI_C_862_Configurator()=default
PI_C_862_Params(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
Definition: PI-C-862.h:167
virtual const char * GetParamClassTag() const noexcept override
This function is intended to be overridden once in each derived class returning the name of the respe...
Definition: PI-C-862.h:170
virtual void ConfigureParamsImpl(dispatch_tag< PI_C_862_Params >)
Definition: PI-C-862.h:179
void ConfigureParamsImpl(dispatch_tag< PositionerStageParams >) override final
Called by DynExp::ParamsBase::ConfigureParams() as a starting point for the tag dispatch mechanism to...
Definition: PI-C-862.h:178
virtual ~PI_C_862_Params()=default
virtual void ExitFuncImpl(dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
Definition: PI-C-862.h:32
void ExitFuncImpl(dispatch_tag< PositionerStageTasks::ExitTask >, DynExp::InstrumentInstance &Instance) override final
Deinitializes the respective instrument within the instrument inheritance hierarchy....
Definition: PI-C-862.cpp:28
void InitFuncImpl(dispatch_tag< PositionerStageTasks::InitTask >, DynExp::InstrumentInstance &Instance) override final
Initializes the respective instrument within the instrument inheritance hierarchy....
Definition: PI-C-862.cpp:8
virtual void InitFuncImpl(dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
Definition: PI-C-862.h:25
MoveAbsoluteTask(PositionerStageData::PositionType Position, CallbackType CallbackFunc) noexcept
Definition: PI-C-862.h:82
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:165
const PositionerStageData::PositionType Position
Definition: PI-C-862.h:88
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:175
MoveRelativeTask(PositionerStageData::PositionType Position, CallbackType CallbackFunc) noexcept
Definition: PI-C-862.h:94
const PositionerStageData::PositionType Position
Definition: PI-C-862.h:100
MoveToHomeTask(CallbackType CallbackFunc) noexcept
Definition: PI-C-862.h:73
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:155
ReferenceTask(PositionerStage::DirectionType Direction, CallbackType CallbackFunc) noexcept
Definition: PI-C-862.h:50
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:132
const PositionerStage::DirectionType Direction
Definition: PI-C-862.h:56
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:122
SetVelocityTask(PositionerStageData::PositionType Velocity) noexcept
Definition: PI-C-862.h:62
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:145
const PositionerStageData::PositionType Velocity
Definition: PI-C-862.h:67
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
Definition: PI-C-862.cpp:185
void UpdateFuncImpl(dispatch_tag< PositionerStageTasks::UpdateTask >, DynExp::InstrumentInstance &Instance) override final
Updates the respective instrument within the instrument inheritance hierarchy. Call UpdateFuncImpl() ...
Definition: PI-C-862.cpp:48
virtual void UpdateFuncImpl(dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
Definition: PI-C-862.h:39
virtual void Reference(DirectionType Direction=DirectionType::Forward, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
References the positioner such that it finds its zero position or end stop.
Definition: PI-C-862.h:219
virtual void MoveAbsolute(PositionerStageData::PositionType Position, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Moves the positioner to an absolute position in its native units. Do divide units of PositionerStageD...
Definition: PI-C-862.h:223
virtual std::unique_ptr< DynExp::UpdateTaskBase > MakeUpdateTask() const override
Factory function for an update task (UpdateTaskBase). Override to define the desired update task in d...
Definition: PI-C-862.h:235
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
Definition: PI-C-862.h:233
virtual PositionerStageData::PositionType GetMaxPosition() const noexcept override
Returns the maximal position the stage can move to in nm if the stage supports SI units,...
Definition: PI-C-862.h:212
virtual void SetVelocity(PositionerStageData::PositionType Velocity) const override
Sets the positioner's velocity in its native units. Do divide units of PositionerStageData::Velocity ...
Definition: PI-C-862.h:220
virtual PositionerStageData::PositionType GetMinVelocity() const noexcept override
Returns the minimal velocity the stage can move with in nm/s if the stage supports SI units,...
Definition: PI-C-862.h:214
virtual void MoveRelative(PositionerStageData::PositionType Position, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Moves the positioner to a position relative to its current position. The position offset Steps has to...
Definition: PI-C-862.h:224
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
Definition: PI-C-862.h:234
virtual PositionerStageData::PositionType GetMinPosition() const noexcept override
Returns the minimal position the stage can move to in nm if the stage supports SI units,...
Definition: PI-C-862.h:211
virtual void ResetImpl(dispatch_tag< PI_C_862 >)
Definition: PI-C-862.h:231
virtual void StopMotion() const override
Stops any motion or position stabilization of the positioner immediately.
Definition: PI-C-862.h:225
virtual ~PI_C_862()
Definition: PI-C-862.h:207
virtual PositionerStageData::PositionType GetMaxVelocity() const noexcept override
Returns the maximal velocity the stage can move with in nm/s if the stage supports SI units,...
Definition: PI-C-862.h:215
virtual PositionerStageData::PositionType GetDefaultVelocity() const noexcept override
Returns the stage's default velocity in nm/s if the stage supports SI units, in steps/s otherwise.
Definition: PI-C-862.h:216
virtual void SetHome() const override
Stores the positioner's home position. Also refer to MoveToHome().
Definition: PI-C-862.h:218
virtual PositionerStageData::PositionType GetResolution() const noexcept override
Returns the stage's position resolution (precision) in nm if the stage supports SI units,...
Definition: PI-C-862.h:213
virtual std::string GetName() const override
Returns the name of this Object type.
Definition: PI-C-862.h:209
constexpr static auto Name() noexcept
Definition: PI-C-862.h:204
virtual void MoveToHome(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Moves the positioner to its stored home position. Also refer to SetHome().
Definition: PI-C-862.h:222
Configurator class for PositionerStage.
Definition: Stage.h:142
Data class for PositionerStage.
Definition: Stage.h:66
PositionType Velocity
Velocity in nm/s if the respective stage supports SI units. Otherwise, in units of steps/s.
Definition: Stage.h:112
signed long long PositionType
Numeric type to store the stage positions.
Definition: Stage.h:71
PositionType Position
Position in nm if the respective stage supports SI units. Otherwise, in units of steps performed.
Definition: Stage.h:107
Parameter class for PositionerStage.
Definition: Stage.h:119
Defines a task for deinitializing an instrument within an instrument inheritance hierarchy....
Definition: Stage.h:39
Defines a task for initializing an instrument within an instrument inheritance hierarchy....
Definition: Stage.h:26
Defines a task for updating an instrument within an instrument inheritance hierarchy....
Definition: Stage.h:52
Implementation of a meta instrument to control single-axis positioner stages.
Definition: Stage.h:155
DirectionType
Type to determine the direction of the positioner stage's movements.
Definition: Stage.h:160
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition: DynExpCore.h:127
Refer to DynExp::ParamsBase::dispatch_tag.
Definition: Instrument.h:1151
Refer to DynExp::ParamsBase::dispatch_tag.
Definition: Instrument.h:1120
Base class for instruments. Instruments comprise virtual devices (meta instruments) and physial devic...
Definition: Instrument.h:451
Configurator class for InstrumentBase.
Definition: Instrument.h:435
Data structure to contain data which is synchronized in between different threads....
Definition: Instrument.h:135
Refer to ParamsBase::dispatch_tag.
Definition: Instrument.h:146
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
Definition: Instrument.h:772
Parameter class for InstrumentBase.
Definition: Instrument.h:401
Refer to ParamsBase::dispatch_tag.
Definition: Object.h:2018
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition: Object.h:349
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
Definition: Instrument.h:892
std::function< void(const TaskBase &, ExceptionContainer &)> CallbackType
Type of a callback function which is invoked when a task has finished, failed or has been aborted....
Definition: Instrument.h:939
TaskBase(CallbackType CallbackFunc=nullptr) noexcept
Constructs an instrument task.
Definition: Instrument.h:979
const CallbackType CallbackFunc
This callback function is called after the task has finished (either successfully or not) with a refe...
Definition: Instrument.h:1072
Defines the return type of task functions.
Definition: Instrument.h:824
Refer to DynExp::ParamsBase::dispatch_tag.
Definition: Instrument.h:1182
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
Definition: Instrument.h:1254
constexpr auto HardwareAdapter
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Definition: Object.h:1807
size_t ItemIDType
ID type of objects/items managed by DynExp.
Accumulates include statements to provide a precompiled header.
constexpr bool TrajectoryComplete() const noexcept
Definition: PI-C-862.h:120
constexpr bool ExcessivePositionError() const noexcept
Definition: PI-C-862.h:123
constexpr bool CommandError() const noexcept
Definition: PI-C-862.h:119
constexpr bool PositionLimitExceeded() const noexcept
Definition: PI-C-862.h:122
constexpr bool MotorLoopOff() const noexcept
Definition: PI-C-862.h:125
constexpr bool BreakpointReached() const noexcept
Definition: PI-C-862.h:124
constexpr void Set(uint8_t ByteCode) noexcept
Definition: PI-C-862.h:116
constexpr bool IndexPulseReceived() const noexcept
Definition: PI-C-862.h:121
constexpr bool Busy() const noexcept
Definition: PI-C-862.h:118