diff --git a/Db/ecmcPluginMotion.template b/Db/ecmcPluginMotion.template index f63e18c..2b815e7 100644 --- a/Db/ecmcPluginMotion.template +++ b/Db/ecmcPluginMotion.template @@ -161,7 +161,7 @@ record(waveform,"$(P)Plg-Mtn${INDEX}-ErrId-Arr"){ field(TSE, "0") } -# Axis Error Id +# Axis status word record(waveform,"$(P)Plg-Mtn${INDEX}-Stat-Arr"){ info(asyn:FIFO, "1000") field(DESC, "Status wd") @@ -191,10 +191,13 @@ record(ao,"$(P)Plg-Mtn${INDEX}-AxCmd-RB"){ field(DTYP,"asynInt32") field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.axis_id") field(DOL, "0") + field(PREC,"0") + field(DRVL,"0") + field(DRVH,"100") field(VAL, "1") } -record(ai,"$(P)Plg-Mtn${INDEX}-SmpHz-RB"){ +record(ai,"$(P)Plg-Mtn${INDEX}-SmpHz"){ info(asyn:READBACK,"1") field(DESC, "Sample rate") field(DTYP,"asynFloat64") @@ -204,68 +207,63 @@ record(ai,"$(P)Plg-Mtn${INDEX}-SmpHz-RB"){ field(SCAN, "I/O Intr") } -record(ai,"$(P)Plg-Mtn${INDEX}-BuffSze"){ - info(asyn:READBACK,"1") - field(DESC, "Buffer Size") - field(DTYP,"asynInt32") - field(INP, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.buff_size") - field(VAL, "1") -} +# Future use +#record(ai,"$(P)Plg-Mtn${INDEX}-BuffSze"){ +# info(asyn:READBACK,"1") +# field(DESC, "Buffer Size") +# field(DTYP,"asynInt32") +# field(INP, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.buff_size") +# field(VAL, "1") +#} -record(ai,"$(P)Plg-Mtn${INDEX}-ElmCnt"){ - info(asyn:READBACK,"1") - field(DESC, "Elements in buffer count") - field(DTYP,"asynInt32") - field(INP, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.elem_count") - field(VAL, "1") -} +# Future use +#record(ai,"$(P)Plg-Mtn${INDEX}-ElmCnt"){ +# info(asyn:READBACK,"1") +# field(DESC, "Elements in buffer count") +# field(DTYP,"asynInt32") +# field(INP, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.elem_count") +# field(VAL, "1") +#} -record(bo,"$(P)Plg-Mtn${INDEX}-TrgCmd-RB"){ - info(asyn:READBACK,"1") - field(DESC, "Trigg command") - field(DTYP,"asynInt32") - field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.trigg") - field(ZNAM,"IDLE") - field(ONAM,"TRIGG") - field(VAL, "0") - field(HIGH, 0.001) -} +# Future use +#record(bo,"$(P)Plg-Mtn${INDEX}-TrgCmd-RB"){ +# info(asyn:READBACK,"1") +# field(DESC, "Trigg command") +# field(DTYP,"asynInt32") +# field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.trigg") +# field(ZNAM,"IDLE") +# field(ONAM,"TRIGG") +# field(VAL, "0") +# field(HIGH, 0.001) +#} -#record(longout,"$(P)Plg-Mtn${INDEX}-Mde-RB"){ +# Future use +#record(mbbo, "$(P)Plg-Mtn${INDEX}-Mde-RB"){ # info(asyn:READBACK,"1") # field(DESC, "Mode selection") # field(PINI, "1") # field(TSE, "0") # field(DTYP, "asynInt32") # field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.mode") -# field(SCAN, "Passive") +# field(ZRST, "NO_COMMAND") +# field(ZRVL, 0) +# field(ONST, "CONT") +# field(ONVL, 1) +# field(TWST, "TRIGG") +# field(TWVL, 2) +# field(VAL, 1) #} -record(mbbo, "$(P)Plg-Mtn${INDEX}-Mde-RB"){ - info(asyn:READBACK,"1") - field(DESC, "Mode selection") - field(PINI, "1") - field(TSE, "0") - field(DTYP, "asynInt32") - field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.mode") - field(ZRST, "NO_COMMAND") - field(ZRVL, 0) - field(ONST, "CONT") - field(ONVL, 1) - field(TWST, "TRIGG") - field(TWVL, 2) - field(VAL, 1) -} - -record(longout,"$(P)Plg-Mtn${INDEX}-Cmd-RB"){ - info(asyn:READBACK,"1") - field(DESC, "Command") - field(PINI, "1") - field(TSE, "0") - field(DTYP, "asynInt32") - field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.cmd") - field(SCAN, "Passive") -} +# Future use +# record(longout,"$(P)Plg-Mtn${INDEX}-Cmd-RB"){ +# info(asyn:READBACK,"1") +# field(DESC, "Command") +# field(PINI, "1") +# field(TSE, "0") +# field(DTYP, "asynInt32") +# field(OUT, "@asyn(PLUGIN.MOTION_${INDEX},$(ADDR=0),$(TIMEOUT=1000))plugin.motion_${INDEX}.cmd") +# field(SCAN, "Passive") +# } record(longin,"$(P)Plg-Mtn${INDEX}-Stat"){ info(asyn:READBACK,"1") diff --git a/README.md b/README.md index e12eacc..ad746df 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,6 @@ ecmc_plugin_motion Plugin designed for commisioning and troubleshooting of motion axes. Motion data are sampled, buffered and exposed to epics as waveforms. - - - - # Panel ``` # Plugin loaded once (MTN_ID defaults to 0) @@ -14,4 +10,7 @@ caqtdm -macro "SYS=c6025a" ecmc_plugin_motion_main.ui # If loaded more times caqtdm -macro "SYS=c6025a,MTN_ID=1" ecmc_plugin_motion_main.ui -``` \ No newline at end of file +``` + +# Python panels +In tools directory is WIP. diff --git a/qt/ecmc_plugin_motion_main.ui b/qt/ecmc_plugin_motion_main.ui index b90e461..48ed551 100644 --- a/qt/ecmc_plugin_motion_main.ui +++ b/qt/ecmc_plugin_motion_main.ui @@ -6,7 +6,7 @@ 0 0 - 1252 + 1420 893 @@ -397,8 +397,136 @@ 1 + + + + 1270 + 80 + 100 + 22 + + + + Enable + + + $(SYS):Plg-Mtn$(MTN_ID=0)-EnaCmd-RB + + + + + + 1300 + 120 + 100 + 50 + + + + 1 + + + 0 + + + 0.000000000000000 + + + $(SYS):Plg-Mtn$(MTN_ID=0)-AxCmd-RB + + + caNumeric::Alarm + + + caNumeric::User + + + true + + + caNumeric::User + + + 100.000000000000000 + + + 0.000000000000000 + + + + + + 1230 + 130 + 63 + 20 + + + + Axis ID: + + + + + + 1330 + 190 + 61 + 20 + + + + $(SYS):Plg-Mtn$(MTN_ID=0)-SmpHz + + + + + + 1230 + 190 + 63 + 20 + + + + Rate [Hz]: + + + + + + 1310 + 290 + 90 + 28 + + + + $(SYS):Plg-Mtn$(MTN_ID=0)-SmpHz + + + + caNumeric + QFrame +
caNumeric
+
+ + caToggleButton + QCheckBox +
caToggleButton
+
+ + caLabel + QLabel +
caLabel
+
+ + caLineEdit + QLineEdit +
caLineEdit
+
caStripPlot QwtPlot diff --git a/src/ecmcMotionPlg.cpp b/src/ecmcMotionPlg.cpp index 5cf7fd7..db3ca72 100644 --- a/src/ecmcMotionPlg.cpp +++ b/src/ecmcMotionPlg.cpp @@ -833,9 +833,9 @@ void ecmcMotionPlg::executeMotionObject() { return; } - if(cfgMode_==TRIGG && !bTriggInProgress_) { - return; - } + //if(cfgMode_==TRIGG && !bTriggInProgress_) { + // return; + //} // protect axis_ if axis object id is changed over asyn epicsMutexLock(axisMutex_); diff --git a/tools/ecmcMotionMainGui.py b/tools/ecmcMotionMainGui.py index 21d6699..0398b4a 100644 --- a/tools/ecmcMotionMainGui.py +++ b/tools/ecmcMotionMainGui.py @@ -334,39 +334,63 @@ class ecmcMtnMainGui(QtWidgets.QDialog): self.pv_signal_cbs['ElmCnt'].data_signal.emit(value) def on_change_PosAct_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['PosAct-Arr'].data_signal.emit(value) - def on_change_PosSet_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + def on_change_PosSet_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['PosSet-Arr'].data_signal.emit(value) def on_change_PosErr_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['PosErr-Arr'].data_signal.emit(value) def on_change_Time_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['Time-Arr'].data_signal.emit(value) def on_change_Ena_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['Ena-Arr'].data_signal.emit(value) def on_change_EnaAct_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['EnaAct-Arr'].data_signal.emit(value) def on_change_Bsy_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['Bsy-Arr'].data_signal.emit(value) def on_change_Exe_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['Exe-Arr'].data_signal.emit(value) def on_change_TrjSrc_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['TrjSrc-Arr'].data_signal.emit(value) def on_change_EncSrc_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['EncSrc-Arr'].data_signal.emit(value) def on_change_AtTrg_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['AtTrg-Arr'].data_signal.emit(value) def on_change_ErrId_Arr(self,pvname=None, value=None, char_value=None,timestamp=None, **kw): + if self.pause: + return self.pv_signal_cbs['ErrId-Arr'].data_signal.emit(value) def on_change_Mde_RB(self,pvname=None, value=None, char_value=None,timestamp=None, **kw):