DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
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"
14
15namespace DynExpInstr
16{
17 class PI_C_862;
18
19 namespace PI_C_862_Tasks
20 {
27
34
41
42 class SetHomeTask final : public DynExp::TaskBase
43 {
45 };
46
58
69
70 class MoveToHomeTask final : public DynExp::TaskBase
71 {
72 public:
74
75 private:
77 };
78
90
102
103 class StopMotionTask final : public DynExp::TaskBase
104 {
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
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
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 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 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 ~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 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 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 void StopMotion() const override
Stops any motion or position stabilization of the positioner immediately.
Definition PI-C-862.h:225
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 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
static constexpr auto Name() noexcept
Definition PI-C-862.h:204
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
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
signed long long PositionType
Numeric type to store the stage positions.
Definition Stage.h:71
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.
Refer to DynExp::ParamsBase::dispatch_tag.
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
This class holds a pointer (LinkedObjectWrapperPointer) to a LinkedObjectWrapper. Intances of this cl...
Definition Object.h:3160
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...
Defines the return type of task functions.
Definition Instrument.h:824
Refer to DynExp::ParamsBase::dispatch_tag.
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
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