motor.h
1 /***************************************************************************
2  Copyright (C) 2002-2015 Kentaro Kitagawa
3  kitagawa@phys.s.u-tokyo.ac.jp
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  You should have received a copy of the GNU Library General
11  Public License and a list of authors along with this program;
12  see the files COPYING and AUTHORS.
13 ***************************************************************************/
14 #ifndef motorH
15 #define motorH
16 //---------------------------------------------------------------------------
17 #include "primarydriverwiththread.h"
18 #include "xnodeconnector.h"
19 
20 class XScalarEntry;
21 class QMainWindow;
22 class Ui_FrmMotorDriver;
24 
25 class DECLSPEC_SHARED XMotorDriver : public XPrimaryDriverWithThread {
26 public:
27  XMotorDriver(const char *name, bool runtime,
28  Transaction &tr_meas, const shared_ptr<XMeasure> &meas);
29  //! usually nothing to do
30  virtual ~XMotorDriver() {}
31  //! Shows all forms belonging to driver
32  virtual void showForms();
33 protected:
34  //! This function will be called when raw data are written.
35  //! Implement this function to convert the raw data to the record (Payload).
36  //! \sa analyze()
37  virtual void analyzeRaw(RawDataReader &reader, Transaction &tr) throw (XRecordError&);
38  //! This function is called after committing XPrimaryDriver::analyzeRaw() or XSecondaryDriver::analyze().
39  //! This might be called even if the record is invalid (time() == false).
40  virtual void visualize(const Snapshot &shot);
41 
42 public:
43  //! driver specific part below
44  const shared_ptr<XScalarEntry> &position() const {return m_position;} //!< [deg.]
45 
46  const shared_ptr<XDoubleNode> &target() const {return m_target;} //!< [deg.]
47  const shared_ptr<XUIntNode> &stepMotor() const {return m_stepMotor;} //!< [steps per rot.]
48  const shared_ptr<XUIntNode> &stepEncoder() const {return m_stepEncoder;} //!< [steps per rot.]
49  const shared_ptr<XDoubleNode> &currentStopping() const {return m_currentStopping;} //!< [%]
50  const shared_ptr<XDoubleNode> &currentRunning() const {return m_currentRunning;} //!< [%]
51  const shared_ptr<XDoubleNode> &speed() const {return m_speed;} //!< [Hz]
52  const shared_ptr<XDoubleNode> &timeAcc() const {return m_timeAcc;} //!< [ms/kHz]
53  const shared_ptr<XDoubleNode> &timeDec() const {return m_timeDec;} //!< [ms/kHz]
54  const shared_ptr<XBoolNode> &active() const {return m_active;}
55  const shared_ptr<XBoolNode> &ready() const {return m_ready;}
56  const shared_ptr<XBoolNode> &slipping() const {return m_slipping;}
57  const shared_ptr<XBoolNode> &microStep() const {return m_microStep;}
58  const shared_ptr<XBoolNode> &hasEncoder() const {return m_hasEncoder;}
59  const shared_ptr<XTouchableNode> &store() const {return m_store;}
60  const shared_ptr<XTouchableNode> &clear() const {return m_clear;}
61  const shared_ptr<XUIntNode> &auxBits() const {return m_auxBits;}
62  const shared_ptr<XBoolNode> &round() const {return m_round;}
63  const shared_ptr<XUIntNode> &roundBy() const {return m_roundBy;}
64  const shared_ptr<XTouchableNode> &forwardMotor() const {return m_forwardMotor;}
65  const shared_ptr<XTouchableNode> &reverseMotor() const {return m_reverseMotor;}
66  const shared_ptr<XTouchableNode> &stopMotor() const {return m_stopMotor;}
67 protected:
68  virtual void getStatus(const Snapshot &shot, double *position, bool *slipping, bool *ready) = 0;
69  virtual void changeConditions(const Snapshot &shot) = 0;
70  virtual void getConditions(Transaction &tr) = 0;
71  virtual void setTarget(const Snapshot &shot, double target) = 0;
72  virtual void setForward() = 0;
73  virtual void setReverse() = 0;
74  virtual void stopRotation() = 0;
75  virtual void setActive(bool active) = 0;
76  virtual void setAUXBits(unsigned int bits) = 0;
77  //! stores current settings to the NV memory of the instrument.
78  virtual void storeToROM() = 0;
79  virtual void clearPosition() = 0;
80 private:
81  const shared_ptr<XScalarEntry> m_position;
82 
83  const shared_ptr<XDoubleNode> m_target;
84  const shared_ptr<XUIntNode> m_stepMotor;
85  const shared_ptr<XUIntNode> m_stepEncoder;
86  const shared_ptr<XDoubleNode> m_currentStopping;
87  const shared_ptr<XDoubleNode> m_currentRunning;
88  const shared_ptr<XDoubleNode> m_speed;
89  const shared_ptr<XDoubleNode> m_timeAcc;
90  const shared_ptr<XDoubleNode> m_timeDec;
91  const shared_ptr<XBoolNode> m_active;
92  const shared_ptr<XBoolNode> m_ready;
93  const shared_ptr<XBoolNode> m_slipping;
94  const shared_ptr<XBoolNode> m_microStep;
95  const shared_ptr<XBoolNode> m_hasEncoder;
96  const shared_ptr<XUIntNode> m_auxBits;
97  const shared_ptr<XTouchableNode> m_clear;
98  const shared_ptr<XTouchableNode> m_store;
99  const shared_ptr<XBoolNode> m_round;
100  const shared_ptr<XUIntNode> m_roundBy;
101  const shared_ptr<XTouchableNode> m_forwardMotor;
102  const shared_ptr<XTouchableNode> m_reverseMotor;
103  const shared_ptr<XTouchableNode> m_stopMotor;
104 
105  shared_ptr<XListener> m_lsnTarget, m_lsnConditions,
106  m_lsnClear, m_lsnStore, m_lsnForwardMotor, m_lsnReverseMotor, m_lsnStopMotor, m_lsnAUX;
107  xqcon_ptr m_conPosition, m_conTarget, m_conStepMotor, m_conStepEncoder,
108  m_conCurrentStopping, m_conCurrentRunning, m_conSpeed,
109  m_conTimeAcc, m_conTimeDec, m_conActive, m_conReady, m_conSlipping,
110  m_conMicroStep, m_conHasEncoder, m_conClear, m_conStore,
111  m_conForwardMotor, m_conReverseMotor, m_conStopMotor,
112  m_conAUXBits, m_conRound, m_conRoundBy;
113 
114  const qshared_ptr<FrmMotorDriver> m_form;
115 
116  void onTargetChanged(const Snapshot &shot, XValueNodeBase *);
117  void onAUXChanged(const Snapshot &shot, XValueNodeBase *);
118  void onConditionsChanged(const Snapshot &shot, XValueNodeBase *);
119  void onClearTouched(const Snapshot &shot, XTouchableNode *);
120  void onStoreTouched(const Snapshot &shot, XTouchableNode *);
121  void onForwardMotorTouched(const Snapshot &shot, XTouchableNode *);
122  void onReverseMotorTouched(const Snapshot &shot, XTouchableNode *);
123  void onStopMotorTouched(const Snapshot &shot, XTouchableNode *);
124 
125  void *execute(const atomic<bool> &);
126 
127 };
128 
129 
130 #endif

Generated for KAME4 by  doxygen 1.8.3