15 #include "ui_motorform.h"
17 #include "interface.h"
19 #include "xnodeconnector.h"
22 XMotorDriver::XMotorDriver(
const char *name,
bool runtime,
23 Transaction &tr_meas,
const shared_ptr<XMeasure> &meas) :
26 dynamic_pointer_cast<
XDriver>(shared_from_this()))),
28 m_stepMotor(create<
XUIntNode>(
"StepMotor", true)),
29 m_stepEncoder(create<
XUIntNode>(
"StepEncoder", true)),
30 m_currentStopping(create<
XDoubleNode>(
"CurrentStopping", true)),
31 m_currentRunning(create<
XDoubleNode>(
"CurrentRunning", true)),
35 m_active(create<
XBoolNode>(
"Active", true)),
36 m_ready(create<
XBoolNode>(
"Ready", true)),
37 m_slipping(create<
XBoolNode>(
"Slipping", true)),
38 m_microStep(create<
XBoolNode>(
"MicroStep", true)),
39 m_hasEncoder(create<
XBoolNode>(
"HasEncoder", false)),
40 m_auxBits(create<
XUIntNode>(
"AUXBits", false)),
43 m_round(create<
XBoolNode>(
"Round", true)),
44 m_roundBy(create<
XUIntNode>(
"RoundBy", true)),
51 tr[ *active()] =
false;
54 meas->scalarEntries()->
insert(tr_meas, m_position);
56 m_form->statusBar()->hide();
57 m_form->setWindowTitle(i18n(
"Motor Driver - ") + getLabel() );
59 m_position->setUIEnabled(
false);
60 m_target->setUIEnabled(
false);
61 m_stepMotor->setUIEnabled(
false);
62 m_stepEncoder->setUIEnabled(
false);
63 m_currentStopping->setUIEnabled(
false);
64 m_currentRunning->setUIEnabled(
false);
65 m_speed->setUIEnabled(
false);
66 m_timeAcc->setUIEnabled(
false);
67 m_timeDec->setUIEnabled(
false);
68 m_active->setUIEnabled(
false);
69 m_ready->setUIEnabled(
false);
70 m_slipping->setUIEnabled(
false);
71 m_microStep->setUIEnabled(
false);
72 m_auxBits->setUIEnabled(
false);
73 m_clear->setUIEnabled(
false);
74 m_store->setUIEnabled(
false);
75 m_round->setUIEnabled(
false);
76 m_roundBy->setUIEnabled(
false);
77 m_forwardMotor->setUIEnabled(
false);
78 m_reverseMotor->setUIEnabled(
false);
79 m_stopMotor->setUIEnabled(
false);
82 m_conPosition = xqcon_create<XQLCDNumberConnector>(m_position->value(), m_form->m_lcdPosition);
83 m_form->m_dblTarget->setRange(-3600.0, 3600.0);
84 m_form->m_dblTarget->setSingleStep(1.0);
85 m_conTarget = xqcon_create<XQDoubleSpinBoxConnector>(m_target, m_form->m_dblTarget, m_form->m_slTarget);
86 m_conStepMotor = xqcon_create<XQLineEditConnector>(m_stepMotor, m_form->m_edStepMotor);
87 m_conStepEncoder = xqcon_create<XQLineEditConnector>(m_stepEncoder, m_form->m_edStepEncoder);
88 m_conCurrentStopping = xqcon_create<XQLineEditConnector>(m_currentStopping, m_form->m_edCurrStopping);
89 m_conCurrentRunning = xqcon_create<XQLineEditConnector>(m_currentRunning, m_form->m_edCurrRunning);
90 m_conSpeed = xqcon_create<XQLineEditConnector>(m_speed, m_form->m_edSpeed);
91 m_conTimeAcc = xqcon_create<XQLineEditConnector>(m_timeAcc, m_form->m_edTimeAcc);
92 m_conTimeDec = xqcon_create<XQLineEditConnector>(m_timeDec, m_form->m_edTimeDec);
93 m_conActive = xqcon_create<XQToggleButtonConnector>(m_active, m_form->m_ckbActive);
94 m_conMicroStep = xqcon_create<XQToggleButtonConnector>(m_microStep, m_form->m_ckbMicroStepping);
95 m_conSlipping = xqcon_create<XQLedConnector>(m_slipping, m_form->m_ledSlipping);
96 m_conReady = xqcon_create<XQLedConnector>(m_ready, m_form->m_ledReady);
97 m_conHasEncoder = xqcon_create<XQToggleButtonConnector>(m_hasEncoder, m_form->m_ckbHasEncoder);
98 m_conAUXBits = xqcon_create<XQLineEditConnector>(m_auxBits, m_form->m_edAUXBits);
99 m_conClear = xqcon_create<XQButtonConnector>(m_clear, m_form->m_btnClear);
100 m_conStore = xqcon_create<XQButtonConnector>(m_store, m_form->m_btnStore);
101 m_conRound = xqcon_create<XQToggleButtonConnector>(m_round, m_form->m_ckbRound);
102 m_conRoundBy = xqcon_create<XQLineEditConnector>(m_roundBy, m_form->m_edRoundBy);
103 m_conForwardMotor = xqcon_create<XQButtonConnector>(m_forwardMotor, m_form->m_btnFWD);
104 m_conReverseMotor = xqcon_create<XQButtonConnector>(m_reverseMotor, m_form->m_btnRVS);
105 m_conStopMotor = xqcon_create<XQButtonConnector>(m_stopMotor, m_form->m_btnSTOP);
111 m_form->showNormal();
119 pos = reader.pop<
double>();
120 slip = reader.pop<uint16_t>();
121 isready = reader.pop<uint16_t>();
122 m_position->value(tr, pos);
123 tr[ *m_slipping] = slip;
124 tr[ *m_ready] = isready;
134 setTarget(shot_this, shot[ *
target()]);
137 e.print(
getLabel() +
" " + i18n(
"Error while changing target, "));
145 changeConditions(shot_this);
146 setActive(shot_this[ *active()]);
149 e.print(
getLabel() +
" " + i18n(
"Error while changing conditions, "));
160 e.print(
getLabel() +
" " + i18n(
"Error while clearing position, "));
165 tr.unmark(m_lsnTarget);
175 e.print(
getLabel() +
" " + i18n(
"Error while storing to NV, "));
182 setAUXBits(shot[ *auxBits()]);
185 e.print(
getLabel() +
" " + i18n(
"Error, "));
196 e.print(
getLabel() +
" " + i18n(
"Error, "));
207 e.print(
getLabel() +
" " + i18n(
"Error, "));
218 e.print(
getLabel() +
" " + i18n(
"Error, "));
222 tr[ *
target()] = (double)tr[ *(m_position->value())];
223 tr.unmark(m_lsnTarget);
232 m_position->setUIEnabled(
true);
233 m_target->setUIEnabled(
true);
234 m_stepMotor->setUIEnabled(
true);
235 m_stepEncoder->setUIEnabled(
true);
236 m_currentStopping->setUIEnabled(
true);
237 m_currentRunning->setUIEnabled(
true);
238 m_speed->setUIEnabled(
true);
239 m_timeAcc->setUIEnabled(
true);
240 m_timeDec->setUIEnabled(
true);
241 m_active->setUIEnabled(
true);
242 m_ready->setUIEnabled(
true);
243 m_slipping->setUIEnabled(
true);
244 m_microStep->setUIEnabled(
true);
245 m_clear->setUIEnabled(
true);
246 m_store->setUIEnabled(
true);
247 m_auxBits->setUIEnabled(
true);
248 m_round->setUIEnabled(
true);
249 m_roundBy->setUIEnabled(
true);
250 m_forwardMotor->setUIEnabled(
true);
251 m_reverseMotor->setUIEnabled(
true);
252 m_stopMotor->setUIEnabled(
true);
256 m_lsnTarget = tr[ *
target()].onValueChanged().connectWeakly(shared_from_this(), &XMotorDriver::onTargetChanged);
257 m_lsnConditions = tr[ *
stepMotor()].onValueChanged().connectWeakly(shared_from_this(), &XMotorDriver::onConditionsChanged);
258 tr[ *
stepEncoder()].onValueChanged().connect(m_lsnConditions);
261 tr[ *
speed()].onValueChanged().connect(m_lsnConditions);
262 tr[ *
timeAcc()].onValueChanged().connect(m_lsnConditions);
263 tr[ *
timeDec()].onValueChanged().connect(m_lsnConditions);
264 tr[ *active()].onValueChanged().connect(m_lsnConditions);
265 tr[ *microStep()].onValueChanged().connect(m_lsnConditions);
266 tr[ *round()].onValueChanged().connect(m_lsnConditions);
267 tr[ *roundBy()].onValueChanged().connect(m_lsnConditions);
268 m_lsnClear = tr[ *clear()].onTouch().connectWeakly(shared_from_this(), &XMotorDriver::onClearTouched);
269 m_lsnStore = tr[ *store()].onTouch().connectWeakly(shared_from_this(), &XMotorDriver::onStoreTouched);
270 m_lsnForwardMotor = tr[ *forwardMotor()].onTouch().connectWeakly(shared_from_this(), &XMotorDriver::onForwardMotorTouched);
271 m_lsnReverseMotor = tr[ *reverseMotor()].onTouch().connectWeakly(shared_from_this(), &XMotorDriver::onReverseMotorTouched);
272 m_lsnStopMotor = tr[ *stopMotor()].onTouch().connectWeakly(shared_from_this(), &XMotorDriver::onStopMotorTouched);
273 m_lsnAUX = tr[ *auxBits()].onValueChanged().connectWeakly(shared_from_this(), &XMotorDriver::onAUXChanged);
276 while( !terminated) {
278 XTime time_awared = XTime::now();
280 bool slip =
false, isready =
false;
284 getStatus(shot, &pos, &slip, &isready);
287 e.print(
getLabel() +
" " + i18n(
"Read Error, "));
290 auto writer = std::make_shared<RawData>();
292 writer->push((uint16_t)slip);
293 writer->push((uint16_t)isready);
297 m_position->setUIEnabled(
false);
298 m_target->setUIEnabled(
false);
299 m_stepMotor->setUIEnabled(
false);
300 m_stepEncoder->setUIEnabled(
false);
301 m_currentStopping->setUIEnabled(
false);
302 m_currentRunning->setUIEnabled(
false);
303 m_speed->setUIEnabled(
false);
304 m_timeAcc->setUIEnabled(
false);
305 m_timeDec->setUIEnabled(
false);
306 m_active->setUIEnabled(
false);
307 m_ready->setUIEnabled(
false);
308 m_slipping->setUIEnabled(
false);
309 m_microStep->setUIEnabled(
false);
310 m_clear->setUIEnabled(
false);
311 m_store->setUIEnabled(
false);
312 m_auxBits->setUIEnabled(
false);
313 m_round->setUIEnabled(
false);
314 m_roundBy->setUIEnabled(
false);
315 m_forwardMotor->setUIEnabled(
false);
316 m_reverseMotor->setUIEnabled(
false);
317 m_stopMotor->setUIEnabled(
false);
321 m_lsnConditions.reset();
325 m_lsnForwardMotor.reset();
326 m_lsnReverseMotor.reset();
327 m_lsnStopMotor.reset();