WIP
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
```
|
||||
```
|
||||
|
||||
# Python panels
|
||||
In tools directory is WIP.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1252</width>
|
||||
<width>1420</width>
|
||||
<height>893</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -397,8 +397,136 @@
|
||||
<number>1</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caToggleButton" name="catogglebutton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1270</x>
|
||||
<y>80</y>
|
||||
<width>100</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(SYS):Plg-Mtn$(MTN_ID=0)-EnaCmd-RB</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caNumeric" name="canumeric">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1300</x>
|
||||
<y>120</y>
|
||||
<width>100</width>
|
||||
<height>50</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(SYS):Plg-Mtn$(MTN_ID=0)-AxCmd-RB</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caNumeric::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caNumeric::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="limitsMode">
|
||||
<enum>caNumeric::User</enum>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1230</x>
|
||||
<y>130</y>
|
||||
<width>63</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Axis ID:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1330</x>
|
||||
<y>190</y>
|
||||
<width>61</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(SYS):Plg-Mtn$(MTN_ID=0)-SmpHz</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1230</x>
|
||||
<y>190</y>
|
||||
<width>63</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rate [Hz]:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1310</x>
|
||||
<y>290</y>
|
||||
<width>90</width>
|
||||
<height>28</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(SYS):Plg-Mtn$(MTN_ID=0)-SmpHz</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caNumeric</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>caNumeric</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caToggleButton</class>
|
||||
<extends>QCheckBox</extends>
|
||||
<header>caToggleButton</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caStripPlot</class>
|
||||
<extends>QwtPlot</extends>
|
||||
|
||||
@@ -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_);
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user