diff --git a/.github/workflows/buiild.yml b/.github/workflows/buiild.yml index 4e9c483..67b7ffa 100644 --- a/.github/workflows/buiild.yml +++ b/.github/workflows/buiild.yml @@ -61,4 +61,8 @@ jobs: # ioc folder is found in the super module usually so for testing # on github we need to copy it above the root of the repo cp -r ioc .. + for test in tests/test*.sh; do + echo "RUNNING TEST SCRIPT ${test}" + ${test} + done tests/_test_support_build.sh diff --git a/.gitignore b/.gitignore index 6350e98..6b94bef 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .coverage +# generate schemas for tests but don't commit them +schemas/ diff --git a/ADAravis/ADAravis.ibek.support.yaml b/ADAravis/ADAravis.ibek.support.yaml index bf27d77..ba6c54c 100644 --- a/ADAravis/ADAravis.ibek.support.yaml +++ b/ADAravis/ADAravis.ibek.support.yaml @@ -1,95 +1,117 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json +# yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json module: ADAravis defs: - - name: ADAravis - description: Defines an ADAravis camera (requires associated ADGenicam instance) + - name: aravisCamera + description: |- + Creates a aravisCamera camera areaDetector driver args: - - type: id - name: PORT - description: Port Name for teh camera - - type: str name: P - description: The PV prefix + description: |- + PV Prefix - type: str name: R - description: The PV suffix + description: |- + PV Suffix + + - type: id + name: PORT + description: |- + Port name for the camera - type: str name: ID - description: | - Cam ip address, hostname, MAC address, or ID -, - (e.g. Prosilica-02-2166A-06844) + description: |- + Cam ip address, hostname, MAC address, or ID -, (e.g. Prosilica-02-2166A-06844) + + - type: enum + name: CLASS + description: |- + Camera class for custom commands + values: + Basler_piA640_210gm: + AVT_Manta_G319B: + AVT_Manta_G2460C: + AVT_Mako_G125B: + AVT_Mako_G125C: + AVT_Prosilica_GC1280M: + AVT_Mako_1_52: + AVT_Manta_G507B: + AVT_Manta_G145B: + AVT_Mako_G507B: + AVT_Mako_G507C: + AVT_Prosilica_GT5120: + AVT_Mako_G319C: + AVT_Manta_G419C: + AVT_Prosilica_GC1020C: + AVT_Prosilica_GC655C: + Prosilica_GC: + AVT_Manta_G125B: + AVT_Manta_G125C: + AVT_Manta_G040B: + AVT_Manta_G895B: + AVT_Mako_G158B: + AVT_Mako_G158C: + AVT_Manta_G235B: + AVT_Manta_G235C: + AVT_Manta_1_44: + AVT_Mako_G234C: + AVT_Mako_G234B: + AVT_Manta_G609B: + + - type: enum + name: PV_ALIAS + description: |- + Use alias template to keep some key PV names the same + values: + "1": + "0": - type: int name: BUFFERS - description: Max NDArray buffers to be created for plugin callbacks + description: |- + Maximum number of NDArray buffers to be created for plugin callbacks default: 50 - type: int name: MEMORY - description: | - Max memory to allocate, should be maxw*maxh*nbuffer - for driver and all attached plugins or -1 for unlimited + description: |- + Max memory to allocate, should be maxw*maxh*nbuffer for driver and all attached plugins default: -1 - - type: int + - type: str name: TIMEOUT - description: timeout for communication with camera - default: 1 + description: |- + Timeout, default 1 + default: "1" - type: str - name: PV_ALIAS - description: | - TODO this need to look into the purpose of this in builder.py - determine its function and see if we can do the equivalent in ibek - default: "" - - pre_init: - - type: function - name: aravisConfig - args: - AsynPortName: "{{ PORT }}" - IpAddressOrName: "{{ ID }}" - MaxMemory: "{{ MEMORY }}" - Priority: 0 - StackSize: 1 - - databases: - - file: aravisCamera.template - args: { P, R, PORT, TIMEOUT, CHANNEL: "0" } - - - name: MantaG235B - description: Defines a Manta G-235B camera instance - args: - - type: object - name: camera - description: reference to ADAravis.ADAravis instance + name: ADDR + description: |- + Asyn Port address, default 0 + default: "0" databases: - - file: AVT_Manta_G235B.template + - file: $(ADARAVIS)/db/aravisCamera.template args: - P: "{{ camera.P }}" - R: "{{ camera.R }}" - PORT: "{{ camera.PORT }}" - TIMEOUT: "{{ camera.TIMEOUT }}" - ADDR: "0" - - - name: Mako_G234B - description: Defines a Mako G-234B camera instance - args: - - type: object - name: camera - description: reference to ADAravis.ADAravis instance - - databases: - - file: AVT_Mako_G234B.template + P: + R: + PORT: + TIMEOUT: + ADDR: + # TODO replace AVT_Mako_G234B and make is so ibek will substitue CLASS in + - file: $(ADGENICAM)/db/AVT_Mako_G234B.template args: - P: "{{ camera.P }}" - R: "{{ camera.R }}" - PORT: "{{ camera.PORT }}" - TIMEOUT: "{{ camera.TIMEOUT }}" - ADDR: "0" + P: + R: + PORT: + TIMEOUT: + ADDR: + + pre_init: + - value: | + aravisConfig(const char *portName, const char *cameraName, size_t maxMemory, int priority, int stackSize) + aravisConfig("{{PORT}}", "{{ID}}", {{MEMORY}}, 0, 1) diff --git a/ADAravis/ADAravis.sh b/ADAravis/install.sh old mode 100644 new mode 100755 similarity index 79% rename from ADAravis/ADAravis.sh rename to ADAravis/install.sh index 47c8c41..bee7f45 --- a/ADAravis/ADAravis.sh +++ b/ADAravis/install.sh @@ -14,7 +14,6 @@ set -xe # install required system dependencies ibek support apt-install --only=dev \ - libboost-all-dev \ libxext-dev \ libglib2.0-dev \ libusb-1.0 \ @@ -31,7 +30,7 @@ ibek support apt-install --only=run libglib2.0-bin libusb-1.0 libxml2 # build aravis library ( cd /usr/local && - git clone -b ARAVIS_0_8_1 --depth 1 https://github.com/AravisProject/aravis && + git clone -b "0.8.29" --depth 1 https://github.com/AravisProject/aravis && cd aravis && meson build && cd build && @@ -39,13 +38,14 @@ ibek support apt-install --only=run libglib2.0-bin libusb-1.0 libxml2 ninja install && rm -fr /usr/local/aravis echo /usr/local/lib64 > /etc/ld.so.conf.d/usr.conf && + cd && ldconfig - # is this necessary? - pip install telnetlib3 ) # get the source and fix up the configure/RELEASE files -ibek support git-clone ${NAME} ${VERSION} +ibek support git-clone ADGenICam R1-9 --org http://github.com/areaDetector/ +ibek support register ADGenICam +ibek support git-clone ${NAME} ${VERSION} --org http://github.com/areaDetector/ ibek support register ${NAME} # declare the libs and DBDs that are required in ioc/iocApp/src/Makefile @@ -54,7 +54,8 @@ ibek support add-dbds ADAravisSupport.dbd # add any required changes to CONFIG_SITE CONFIG=' -AREA_DETECTOR=$(SUPPORT) +CHECK_RELEASE=WARN +AREA_DETECTOR=/epics/support CROSS_COMPILER_TARGET_ARCHS = GLIBPREFIX=/usr USR_INCLUDES += -I$(GLIBPREFIX)/include/glib-2.0 @@ -64,14 +65,11 @@ ARAVIS_INCLUDE = /usr/local/include/aravis-0.8/ ' ibek support add-to-config-site ${NAME} "${CONFIG}" - -# TODO may need -# ioc_SYS_LIBS += aravis-0.8 -# in the Makefile +ibek support add-to-config-site ADGenICam "${CONFIG}" # compile the support module +ibek support compile ADGenICam ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} - +ibek support generate-links diff --git a/ADCore/ADCore.ibek.support.yaml b/ADCore/ADCore.ibek.support.yaml index a8d7800..f67bdf4 100644 --- a/ADCore/ADCore.ibek.support.yaml +++ b/ADCore/ADCore.ibek.support.yaml @@ -1,181 +1,2974 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json module: ADCore defs: - - name: NDRoi - description: Defines a ROI Plugin for an AreaDetector instance - args: - - type: id - name: PORT - description: Port for this plugin - - - type: object - name: NDARRAY_PORT - description: Port Name for input NDArray plugin - - - type: str - name: P - description: The PV prefix - - - type: str - name: R - description: The PV suffix - - - type: int - name: TIMEOUT - description: Timeout for ASYN communications - default: 1 - - - type: int - name: ADDR - description: ASYN Address this plugin - default: 0 - - - type: int - name: NDARRAY_ADDR - description: ASYN Address for input NDArray plugin - default: 0 - - - type: bool - name: ENABLED - description: Enable/Disable this plugin at startup - default: true - - - type: str - name: SCANRATE - description: Epics record scan rate - default: I/O Intr - - - type: int - name: QUEUE - description: Number of NDArray buffers to be created for plugin callbacks - default: 2 - - - type: bool - name: BLOCK - description: blocking callbacks? - default: false - - - type: int - name: MAX_THREADS - description: Maximum number of threads to use - default: 1 - - pre_init: - - type: function - name: NDROIConfigure - args: - AsynPortName: "{{ PORT }}" - QueueSize: "{{ QUEUE }}" - BlockingCallbacks: "{{ BLOCK | int }}" - NDArrayPort: "{{ NDARRAY_PORT }}" - NDArrayAddr: "{{ NDARRAY_ADDR }}" - MaxBuffers: 0 - MaxMemory: 0 - Priority: 0 - StackSize: 0 - MaxThreads: "{{ MAX_THREADS }}" - - databases: - - file: NDROI.template - args: - { - P, - R: "{{ R }}:{{ REPEAT }}", - PORT, - TIMEOUT, - ADDR, - NDARRAY_PORT, - NDARRAY_ADDR, - ENABLED: "{{ ENABLED | int }}", - SCANRATE, - } - - - name: NDStats - description: Defines a Stats Plugin for an AreaDetector instance - args: - - type: id - name: PORT - description: Port for this plugin - - - type: str - name: NDARRAY_PORT - description: Port Name for input NDArray plugin - - - type: str - name: P - description: The PV prefix - - - type: str - name: R - description: The PV suffix - - - type: int - name: TIMEOUT - description: Timeout for ASYN communications - default: 1 - - - type: int - name: ADDR - description: ASYN Address this plugin - default: 0 - - - type: int - name: NDARRAY_ADDR - description: ASYN Address for input NDArray plugin - default: 0 - - - type: bool - name: ENABLED - description: Enable/Disable this plugin at startup - default: true - - - type: str - name: SCANRATE - description: Epics record scan rate - default: I/O Intr - - - type: int - name: QUEUE - description: Number of NDArray buffers to be created for plugin callbacks - default: 2 - - - type: bool - name: BLOCK - description: blocking callbacks? - default: false - - - type: int - name: MAX_THREADS - description: Maximum number of threads to use - default: 1 - - pre_init: - - type: function - name: NDStatsConfigure - args: - { - A, - B, - C: "{{ xxx }}", - D, - E: "{{ yyy }}", - G: "{{ yyy }}", - F: "{{ zzz }}", - } - - databases: - - file: NDStats.template - args: - { - P, - R, - PORT, - TIMEOUT, - ADDR, - NDARRAY_PORT, - NDARRAY_ADDR, - ENABLED: "{{ ENABLED | int }}", - SCANRATE, - } + +- name: NDFileNexus + description: |- + This plugin can compress NDArrays to Nexus and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDFileNexus plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileNexus.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileNexusConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileNexusConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDFFT + description: |- + This plugin is used to calculate the FFT of a time series + args: + + - type: str + name: P + description: |- + Device prefix + + - type: str + name: R + description: |- + Device suffix + + - type: id + name: PORT + description: |- + Port name for the NDTimeSeries plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: NCHANS + description: |- + Length of time series waveform + + - type: str + name: TIMEOUT + description: |- + Asyn port timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: TIME_LINK + description: |- + Time in seconds between points (Can point to a record - use CP) + default: '0.1' + + - type: int + name: NAME + description: |- + Label for signal + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: PRIORITY + description: |- + Thread priority if ASYN_CANBLOCK is set + + - type: int + name: STACKSIZE + description: |- + Stack size if ASYN_CANBLOCK is set + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDFFT.template + args: + NDARRAY_PORT: + NAME: + TIME_LINK: + NDARRAY_ADDR: + NCHANS: + ENABLED: + PORT: + P: + R: + TIMEOUT: + SCANRATE: + ADDR: + + pre_init: + - value: | + # NDFFTConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDFFTConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, {{PRIORITY}}, {{STACKSIZE}}, {{MAX_THREADS}}) + +- name: NDAttrPlot + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device prefix + + - type: str + name: R + description: |- + Device suffix + + - type: id + name: PORT + description: |- + Asyn port name + + - type: object + name: NDARRAY_PORT + description: |- + Asyn port of the callback source + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Asyn address of the callback source + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 10000 + + - type: int + name: N_CACHE + description: |- + Number of NDArrays to store in cache + default: 10000 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: str + name: ATTR_IND + description: |- + Attribute index + + - type: str + name: AXIS + description: |- + Axis name + + - type: str + name: DATA_IND + description: |- + Data index + + - type: str + name: DATA_ADDR + description: |- + Asyn address for this data array + + databases: + - file: $(ADCORE)/db/NDAttrPlotAttr.template + args: + P: + R: + PORT: + ATTR_IND: + - file: $(ADCORE)/db/NDAttrPlot.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + - file: $(ADCORE)/db/NDAttrPlotData.template + args: + DATA_ADDR: + P: + DATA_IND: + R: + N_CACHE: + PORT: + AXIS: + + pre_init: + - value: | + NDAttrPlotConfig("{{PORT}}", {{N_ATTRS}}, {{N_CACHE}}, + # TODO - MISSING ARGS: N_ATTRS + +- name: NDOverlay + description: |- + This plugin writes overlays on the array, like cursors and boxes + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDOverlay plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: int + name: TIMEOUT + description: |- + Timeout + default: 1 + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + - type: str + name: O + description: |- + NDOverlay Device Suffix + + - type: str + name: NAME + description: |- + Name for the overlay + + - type: str + name: SHAPE + description: |- + Shape of the overlay + + - type: str + name: XPOS + description: |- + Link for the XPos of the overlay + + - type: str + name: YPOS + description: |- + Link for the YPos of the overlay + + - type: str + name: XCENT + description: |- + Link for the XCent of the overlay + + - type: str + name: YCENT + description: |- + Link for the YCent of the overlay + + - type: str + name: XSIZE + description: |- + Link for the XSize of the overlay + + - type: str + name: YSIZE + description: |- + Link for the YSize of the overlay + + - type: str + name: XWIDTH + description: |- + Link for the XWidth of the overlay + + - type: str + name: YWIDTH + description: |- + Link for the YWdith of the overlay + + databases: + - file: $(ADCORE)/db/NDOverlayN.template + args: + XPOS: + NAME: + YWIDTH: + YSIZE: + YPOS: + O: + PORT: + P: + SHAPE: + R: + TIMEOUT: + XCENT: + XWIDTH: + XSIZE: + YCENT: + ADDR: + - file: $(ADCORE)/db/NDOverlay.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDOverlayConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, NOverlays, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDOverlayConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, {{NOverlays}}, 0, 0, 0, 0, {{MAX_THREADS}}) + # TODO - MISSING ARGS: NOverlays + +- name: NDColorConvert + description: |- + This plugin converts arrays from one colour type to another, e.g. Bayer -> RGB1 + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDColorConvert plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDColorConvert.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDColorConvertConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDColorConvertConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + +- name: NDFileHDF5 + description: |- + This plugin can compress NDArrays to HDF5 and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDFileHDF5 plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Asyn Port timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: XMLSIZE + description: |- + Number of elements of the XML layout waveform record + default: '2048' + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileHDF5.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + XMLSIZE: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileHDF5Configure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileHDF5Configure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDStdArrays + description: |- + This plugin provides a waveform record that can display the NDArrays + produced by its NDARRAY_PORT + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDStdArrays plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TYPE + description: |- + Asyn Type e.g. Int32 + + - type: enum + name: FTVL + description: |- + Field Type of Value + values: + ENUM: + SHORT: + STRING: + ULONG: + UCHAR: + DOUBLE: + USHORT: + LONG: + FLOAT: + CHAR: + + - type: str + name: NELEMENTS + description: |- + Number of elements + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDStdArrays.template + args: + NDARRAY_PORT: + FTVL: + ADDR: + SCANRATE: + NELEMENTS: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + TYPE: + PORT: + + pre_init: + - value: | + # NDStdArraysConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDStdArraysConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + +- name: _NDCircularBuff + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: str + name: PORT + description: |- + Asyn Port name + + - type: str + name: NDARRAY_PORT + description: |- + Input Array Port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: str + name: NDARRAY_ADDR + description: |- + Input Array Address + default: '0' + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: PRECOUNT + description: |- + Pre-trigger frame count + default: '100' + + - type: str + name: POSTCOUNT + description: |- + Post-trigger frame count + default: '100' + + databases: + - file: $(ADCORE)/db/NDCircularBuff.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + PRECOUNT: + NDARRAY_ADDR: + ENABLED: + P: + POSTCOUNT: + R: + TIMEOUT: + PORT: + +- name: NDFileMagick + description: |- + This plugin can compress NDArrays to a range of formats supported by + graphics magick and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDFileMagick plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileMagick.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileMagickConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileMagickConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDCircularBuff + description: |- + This plugin provides a pre and post external trigger frame capture buffer + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the FFT_calc plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: int + name: ENABLED + description: |- + Plugin Enabled at startup? + default: 1 + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: PRECOUNT + description: |- + Pre-trigger frame count + default: '100' + + - type: str + name: POSTCOUNT + description: |- + Post-trigger frame count + default: '100' + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 50 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_BUFFERS + description: |- + Max buffer size in number of frames + default: 128 + + databases: + - file: $(ADCORE)/db/NDCircularBuff.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + PRECOUNT: + NDARRAY_ADDR: + ENABLED: + P: + POSTCOUNT: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDCircularBuffConfigure(portName, queueSize, blockingCallbacks, + NDCircularBuffConfigure( + +- name: NDPosPlugin + description: |- + This plugin attaches position information to NDArrays + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDPosPlugin plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Asyn timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: PRIORITY + description: |- + Max buffers to allocate + + - type: int + name: STACKSIZE + description: |- + Max buffers to allocate + + databases: + - file: $(ADCORE)/db/NDPosPlugin.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDPosPluginConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize) + NDPosPluginConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, {{PRIORITY}}, {{STACKSIZE}}) + +- name: NDCodec + description: |- + This plugin can compress or decompress NDArrays + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDCodec plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Asyn timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDCodec.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDCodecConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDCodecConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + +- name: NDGather + description: |- + This plugin is used to gather NDArrays from multiple upstream plugins and merge them into a single stream + args: + + - type: str + name: NDARRAY_PORT + description: |- + Input Array Port + + - type: id + name: PORT + description: |- + Port name for the NDGather plugin + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: str + name: NDARRAY_ADDR + description: |- + Input Array Address + default: '0' + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_PORTS + description: |- + Maximum number of ports that this plugin can connect to for callbacks + default: 5 + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + databases: + - file: $(ADCORE)/db/NDGather.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + MAX_PORTS: + PORT: + + pre_init: + - value: | + # NDGatherConfigure(portName, queueSize, blockingCallbacks, maxPorts) + NDGatherConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{MAX_PORTS}}") + +- name: NDROI + description: |- + This plugin selects a region of interest and optionally scales it to + fit in a particular data type + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDROI plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDROI.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDROIConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDROIConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + +- name: NDAttribute + description: |- + This plugin displays NDArray attributes + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDAttribute plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: int + name: TIMEOUT + description: |- + Timeout + default: 1 + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_ATTRIBUTES + description: |- + Maximum number of attributes in this plugin + default: 8 + + - type: int + name: NCHANS + description: |- + Number of points in the arrays + default: 4096 + + - type: str + name: TS_PORT + description: |- + Asyn Port of Time Series plugin + default: $(PORT)_TS + + databases: + - file: $(ADCORE)/db/NDAttributeN.template + args: + ADDR: + NCHANS: + P: + R: + TIMEOUT: + TS_PORT: + PORT: + - file: $(ADCORE)/db/NDAttribute.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - when: first + value: | + # ADCore path for manual NDTimeSeries.template to find base plugin template + epicsEnvSet "EPICS_DB_INCLUDE_PATH", "$(ADCORE)/db"\n + - value: | + # NDAttrConfigure(portName, queueSize, blockingCallbacks, + NDAttrConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, + # NDTimeSeriesConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxSignals) + NDTimeSeriesConfigure("{{PORT}}_TS", {{QUEUE}}, {{BLOCK}}, "{{PORT}}", 1, {{MAX_ATTRIBUTES}}) + # Load time series records + dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template","P={{P}},R={{R_TS}},PORT={{PORT}}_TS,ADDR=0,TIMEOUT={{TIMEOUT}},NDARRAY_PORT={{PORT}},NDARRAY_ADDR=1,NCHANS={{MAX_ATTRIBUTES}},ENABLED=1") + # TODO - MISSING ARGS: R_TS + +- name: NDStats + description: |- + This plugin calculates statistics like X and Y profile, centroid, and plots a histogram of binned pixels + args: + + - type: id + name: PORT + description: |- + Port name for the NDStats plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: int + name: HIST_SIZE + description: |- + Maximum size of Pixel binning histogram (e.g. 256 for Int8) + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: int + name: XSIZE + description: |- + XSIZE, Maximum size of X histograms (e.g. 1024) + + - type: int + name: YSIZE + description: |- + Maximum size of Y histograms (e.g. 768) + + - type: int + name: ENABLED + description: |- + Plugin Enabled at startup? + + - type: int + name: NCHANS + description: |- + Maximum length of time series (initialises waveform NELM, fixed on IOC boot) + default: 2048 + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: int + name: TIMEOUT + description: |- + Timeout + default: 1 + + - type: int + name: ADDR + description: |- + Asyn Port address + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: TS_PORT + description: |- + TS port + default: $(PORT)_TS + + databases: + - file: $(ADCORE)/db/NDStats.template + args: + NDARRAY_PORT: + XSIZE: + NCHANS: + NDARRAY_ADDR: + YSIZE: + ENABLED: + HIST_SIZE: + PORT: + P: + R: + TIMEOUT: + TS_PORT: + SCANRATE: + ADDR: + + pre_init: + - when: first + value: | + # ADCore path for manual NDTimeSeries.template to find base plugin template + epicsEnvSet "EPICS_DB_INCLUDE_PATH", "$(ADCORE)/db"\n + - value: | + # NDStatsConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDStatsConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + # NDTimeSeriesConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxSignals) + NDTimeSeriesConfigure("{{PORT}}_TS", {{QUEUE}}, {{BLOCK}}, "{{PORT}}", 1, 23) + # Load time series records + dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P={{P}},R={{R}}, PORT={{PORT}} ,ADDR={{ADDR}},TIMEOUT={{TIMEOUT}},NDARRAY_PORT={{NDARRAY_PORT}},NDARRAY_ADDR={{NDARRAY_ADDR}},NCHANS={{NCHANS}},ENABLED={{ENABLED}}") + +- name: NDTimeSeries + description: |- + This plugin creates time series arrays from callback data + args: + + - type: str + name: P + description: |- + Device prefix + + - type: str + name: R + description: |- + Device suffix + + - type: id + name: PORT + description: |- + Port name for the NDTimeSeries plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: NCHANS + description: |- + Length of time series waveform + + - type: int + name: TIMEOUT + description: |- + Timeout + default: 1 + + - type: str + name: ADDR + description: |- + Asyn port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: str + name: TIME_LINK + description: |- + Time between points (Can point to a record - use CP) + default: '0.1' + + - type: int + name: NSIGNALS + description: |- + Maximum number of time series signals + default: 1 + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: PRIORITY + description: |- + Thread priority if ASYN_CANBLOCK is set + + - type: int + name: STACKSIZE + description: |- + Stack size if ASYN_CANBLOCK is set + + - type: str + name: NAME + description: |- + Name of the signal + + databases: + - file: $(ADCORE)/db/NDTimeSeries.template + args: + NDARRAY_PORT: + ADDR: + TIME_LINK: + NDARRAY_ADDR: + NCHANS: + ENABLED: + PORT: + P: + R: + TIMEOUT: + SCANRATE: + - file: $(ADCORE)/db/NDTimeSeriesN.template + args: + ADDR: + NCHANS: + P: + R: + TIMEOUT: + PORT: + NAME: + + pre_init: + - value: | + # NDTimeSeriesConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxSignals, maxBuffers, maxMemory, priority, stackSize) + NDTimeSeriesConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, {{NSIGNALS}}, 0, 0, {{PRIORITY}}, {{STACKSIZE}}) + +- name: NDAttributes + description: |- + Add an attribute to the NDAttributes file for a particular ADDriver or + NDPlugin, and associate it with the NDAttributes file + args: + + - type: object + name: port + description: |- + ADDriver or NDPlugin to attach xml file to + + - type: str + name: source + description: |- + The EPICS PV (if type=EPICS_PV) or attribute name (if type=PARAM) + + - type: id + name: name + description: |- + Object name. You do not need to specify this + + - type: str + name: attrname + description: |- + Name of the attribute. If you leave this blank it defaults to + + - type: enum + name: type + description: |- + Where the data should be picked up from + default: EPICS_PV + values: + EPICS_PV: + PARAM: + + - type: enum + name: dbrtype + description: |- + DBR type (only used if type=EPICS_PV) + default: DBR_NATIVE + values: + DBR_STRING: + DBR_INT: + DBR_NATIVE: + DBR_SHORT: + DBR_CHAR: + DBR_ENUM: + DBR_LONG: + DBR_FLOAT: + + - type: enum + name: datatype + description: |- + Data type (only used if type=PARAM) + default: INT + values: + INT: + DOUBLE: + STRING: + + - type: str + name: description + description: |- + Description of the attribute + + - type: int + name: addr + description: |- + Asyn address of the parameter (only used if type=PARAM) + + post_init: + - value: | + dbpf %s%sNDAttributesFile, %s/%s.xml + +- name: NDProcess + description: |- + This plugin does image processing like flat field correction, background + subtraction, and recursive filtering + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDProcess plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDProcess.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDProcessConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDProcessConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDFileTIFF + description: |- + This plugin can compress NDArrays to TIFF and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: id + name: PORT + description: |- + Port name for the NDFileTIFF plugin + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileTIFF.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileTIFFConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileTIFFConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDGather8 + description: |- + This plugin is used to gather NDArrays from multiple upstream plugins and merge them into a single stream + args: + + - type: str + name: NDARRAY_PORT + description: |- + Input Array Port + + - type: id + name: PORT + description: |- + Port name for the NDGather plugin + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: str + name: NDARRAY_ADDR + description: |- + Input Array Address + default: '0' + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: str + name: N + description: |- + Port number (1 - maxPorts) + + - type: str + name: MAX_PORTS + description: |- + Maximum number ports + + databases: + - file: $(ADCORE)/db/NDGatherN.template + args: + NDARRAY_PORT: + ADDR: + NDARRAY_ADDR: + N: + P: + R: + TIMEOUT: + PORT: + - file: $(ADCORE)/db/NDGather.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + MAX_PORTS: + PORT: + +- name: NDROIStat + description: |- + This plugin calculates statistics of ROIs + args: + + - type: str + name: P + description: |- + First part of base PV name + + - type: str + name: R + description: |- + Second part of base PV name + + - type: id + name: PORT + description: |- + Port name for the NDPluginROIStat plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: int + name: TIMEOUT + description: |- + Timeout + default: 1 + + - type: str + name: ADDR + description: |- + asyn address on port + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_ROIS + description: |- + Maximum number of ROIs in this plugin + default: 8 + + - type: int + name: NCHANS + description: |- + Number of points in the arrays + default: 4096 + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDROIStat.template + args: + NDARRAY_PORT: + ADDR: + NCHANS: + NDARRAY_ADDR: + ENABLED: + PORT: + P: + R: + TIMEOUT: + SCANRATE: + - file: $(ADCORE)/db/NDROIStatN.template + args: + ADDR: + NCHANS: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDROIStatConfigure(portName, queueSize, blockingCallbacks, + NDROIStatConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, + +- name: NDFileNetCDF + description: |- + This plugin can compress NDArrays to NetCDF and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: id + name: PORT + description: |- + Port name for the NDFileNetCDF plugin + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileNetCDF.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileNetCDFConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileNetCDFConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDPvaPlugin + description: |- + This plugin makes NDArrays available through PVAccess + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDPosPlugin plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: PVNAME + description: |- + Name of the PV to post NDArray out on + + - type: str + name: TIMEOUT + description: |- + Asyn timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: PRIORITY + description: |- + Max buffers to allocate + + - type: int + name: STACKSIZE + description: |- + Max buffers to allocate + + databases: + - file: $(ADCORE)/db/NDPva.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDPvaConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, pvName, maxBuffers, maxMemory, priority, stackSize) + NDPvaConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, {{PVNAME}}, 0, 0, {{PRIORITY}}, {{STACKSIZE}}) + startPVAServer + +- name: NDTransform + description: |- + This plugin selects a region of interest and optionally scales it to fit in a particular data type + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDTransform plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + - type: int + name: MAX_THREADS + description: |- + Maximum number threads + default: 1 + + databases: + - file: $(ADCORE)/db/NDTransform.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDTransformConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr, maxBuffers, maxMemory, priority, stackSize, maxThreads) + NDTransformConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}, 0, 0, 0, 0, {{MAX_THREADS}}) + +- name: NDFileJPEG + description: |- + This plugin can compress NDArrays to JPEG and write them to file + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDFileJPEG plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDFileJPEG.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDFileJPEGConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDFileJPEGConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) + +- name: NDScatter + description: |- + This plugin is used to distribute processing of NDArrays to multiple downstream plugins + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: R + description: |- + Device Suffix + + - type: id + name: PORT + description: |- + Port name for the NDTimeSeries plugin + + - type: object + name: NDARRAY_PORT + description: |- + Input array port + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: int + name: NDARRAY_ADDR + description: |- + Input array port address + + - type: str + name: ENABLED + description: |- + Plugin Enabled at startup? + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: NAME + description: |- + Label for signal + + - type: int + name: QUEUE + description: |- + Input array queue size + default: 2 + + - type: int + name: BLOCK + description: |- + Blocking callbacks? + + databases: + - file: $(ADCORE)/db/NDScatter.template + args: + NDARRAY_PORT: + ADDR: + SCANRATE: + NDARRAY_ADDR: + ENABLED: + P: + R: + TIMEOUT: + PORT: + + pre_init: + - value: | + # NDScatterConfigure(portName, queueSize, blockingCallbacks, NDArrayPort, NDArrayAddr) + NDScatterConfigure("{{PORT}}", {{QUEUE}}, {{BLOCK}}, "{{NDARRAY_PORT}}", {{NDARRAY_ADDR}}) diff --git a/ADCore/install.sh b/ADCore/install.sh index 9b32d24..fd373d4 100755 --- a/ADCore/install.sh +++ b/ADCore/install.sh @@ -74,6 +74,6 @@ ibek support add-to-config-site ${NAME} "${CONFIG}" ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/ADSimDetector/ADSimDetector.ibek.support.yaml b/ADSimDetector/ADSimDetector.ibek.support.yaml new file mode 100644 index 0000000..cc2e210 --- /dev/null +++ b/ADSimDetector/ADSimDetector.ibek.support.yaml @@ -0,0 +1,60 @@ +# yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.1.0/ibek.support.schema.json + +module: ADSimDetector + +defs: + - name: simDetector + description: |- + Creates a simulation detector + + args: + - type: str + name: P + description: Device Prefix + - type: str + name: R + description: Device Suffix + - type: id + name: PORT + description: Port name for the detector + - type: str + name: TIMEOUT + description: Timeout + - type: str + name: ADDR + description: Asyn Port address + - type: int + name: WIDTH + description: Image Width + - type: int + name: HEIGHT + description: Image Height + - type: int + name: DATATYPE + description: Datatype + default: 1 + - type: int + name: BUFFERS + description: Maximum number of NDArray buffers to be created for plugin callbacks + default: 50 + - type: int + name: MEMORY + description: + Max memory to allocate, should be maxw*maxh*nbuffer for driver and + all attached plugins + default: 0 + + databases: + - file: $(ADSIMDETECTOR)/db/simDetector.template + args: + P: + R: + PORT: + TIMEOUT: + ADDR: + + pre_init: + - type: text + value: | + # simDetectorConfig(portName, maxSizeX, maxSizeY, dataType, maxBuffers, maxMemory) + simDetectorConfig("{{PORT}}", {{WIDTH}}, {{HEIGHT}}, {{DATATYPE}}, {{BUFFERS}}, {{MEMORY}}) diff --git a/ADSimDetector/install.sh b/ADSimDetector/install.sh index a552f21..e31db19 100755 --- a/ADSimDetector/install.sh +++ b/ADSimDetector/install.sh @@ -22,6 +22,6 @@ ibek support add-dbds simDetectorSupport.dbd # compile the support module ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/_global/epics.ibek.support.yaml b/_global/epics.ibek.support.yaml index 7bfb8d0..dcc9b11 100644 --- a/_global/epics.ibek.support.yaml +++ b/_global/epics.ibek.support.yaml @@ -1,4 +1,5 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json +# yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + module: epics defs: - name: EpicsCaMaxArrayBytes @@ -33,11 +34,7 @@ defs: name: value description: Value to set post_init: - - type: function - name: dbpf - args: - pv: "{{ pv }}" - value: "{{ value }}" + - value: dbpf "{{ pv }}" "{{ value }}" - name: EpicsEnvSet description: Set an environment variable in the ioc Shell diff --git a/_global/ibek.support.schema.json b/_global/ibek.support.schema.json new file mode 100644 index 0000000..3bde4fe --- /dev/null +++ b/_global/ibek.support.schema.json @@ -0,0 +1,560 @@ +{ + "$defs": { + "BoolArg": { + "additionalProperties": false, + "description": "An argument with an bool value", + "properties": { + "type": { + "const": "bool", + "default": "bool", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "BoolArg", + "type": "object" + }, + "Comment": { + "additionalProperties": false, + "description": "A script snippet that will have '# ' prepended to every line\nfor insertion into the startup script", + "properties": { + "type": { + "const": "comment", + "default": "comment", + "title": "Type" + }, + "when": { + "allOf": [ + { + "$ref": "#/$defs/When" + } + ], + "default": "every", + "description": "One of first / every / last" + }, + "value": { + "default": "", + "description": "A comment to add into the startup script", + "title": "Value", + "type": "string" + } + }, + "title": "Comment", + "type": "object" + }, + "Database": { + "additionalProperties": false, + "description": "A database file that should be loaded by the startup script and its args", + "properties": { + "file": { + "description": "Filename of the database template in /db", + "title": "File", + "type": "string" + }, + "args": { + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": "Dictionary of args and values to pass through to database. A value of None is equivalent to ARG: '{{ ARG }}'", + "title": "Args", + "type": "object" + } + }, + "required": [ + "file", + "args" + ], + "title": "Database", + "type": "object" + }, + "Definition": { + "additionalProperties": false, + "description": "A single definition of a class of Entity that an IOC instance may instantiate", + "properties": { + "name": { + "description": "Publish Definition as type . for IOC instances", + "title": "Name", + "type": "string" + }, + "description": { + "description": "A description of the Support module defined here", + "title": "Description", + "type": "string" + }, + "args": { + "default": [], + "description": "The arguments IOC instance should supply", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/FloatArg" + }, + { + "$ref": "#/$defs/StrArg" + }, + { + "$ref": "#/$defs/IntArg" + }, + { + "$ref": "#/$defs/BoolArg" + }, + { + "$ref": "#/$defs/ObjectArg" + }, + { + "$ref": "#/$defs/IdArg" + }, + { + "$ref": "#/$defs/EnumArg" + } + ] + }, + "title": "Args", + "type": "array" + }, + "values": { + "default": [], + "description": "The values IOC instance should supply", + "items": { + "$ref": "#/$defs/Value" + }, + "title": "Values", + "type": "array" + }, + "databases": { + "default": [], + "description": "Databases to instantiate", + "items": { + "$ref": "#/$defs/Database" + }, + "title": "Databases", + "type": "array" + }, + "pre_init": { + "default": [], + "description": "Startup script snippets to add before iocInit()", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Text" + }, + { + "$ref": "#/$defs/Comment" + } + ] + }, + "title": "Pre Init", + "type": "array" + }, + "post_init": { + "default": [], + "description": "Startup script snippets to add post iocInit(), such as dbpf", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Text" + }, + { + "$ref": "#/$defs/Comment" + } + ] + }, + "title": "Post Init", + "type": "array" + }, + "env_vars": { + "default": [], + "description": "Environment variables to set in the boot script", + "items": { + "$ref": "#/$defs/EnvironmentVariable" + }, + "title": "Env Vars", + "type": "array" + } + }, + "required": [ + "name", + "description" + ], + "title": "Definition", + "type": "object" + }, + "EnumArg": { + "additionalProperties": false, + "description": "An argument with an enum value", + "properties": { + "type": { + "const": "enum", + "default": "enum", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + }, + "values": { + "description": "provides a list of values to make this argument an Enum", + "title": "Values", + "type": "object" + } + }, + "required": [ + "name", + "description", + "values" + ], + "title": "EnumArg", + "type": "object" + }, + "EnvironmentVariable": { + "additionalProperties": false, + "description": "An environment variable that should be set in the startup script", + "properties": { + "name": { + "description": "Name of environment variable", + "title": "Name", + "type": "string" + }, + "value": { + "description": "Value to set", + "title": "Value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "title": "EnvironmentVariable", + "type": "object" + }, + "FloatArg": { + "additionalProperties": false, + "description": "An argument with a float value", + "properties": { + "type": { + "const": "float", + "default": "float", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "FloatArg", + "type": "object" + }, + "IdArg": { + "additionalProperties": false, + "description": "Explicit ID argument that an object can refer to", + "properties": { + "type": { + "const": "id", + "default": "id", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "IdArg", + "type": "object" + }, + "IntArg": { + "additionalProperties": false, + "description": "An argument with an int value", + "properties": { + "type": { + "const": "int", + "default": "int", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "IntArg", + "type": "object" + }, + "ObjectArg": { + "additionalProperties": false, + "description": "A reference to another entity defined in this IOC", + "properties": { + "type": { + "const": "object", + "default": "object", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "ObjectArg", + "type": "object" + }, + "StrArg": { + "additionalProperties": false, + "description": "An argument with a str value", + "properties": { + "type": { + "const": "str", + "default": "str", + "title": "Type" + }, + "name": { + "description": "Name of the argument that the IOC instance should pass", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the argument will be used for", + "title": "Description", + "type": "string" + }, + "default": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + } + }, + "required": [ + "name", + "description" + ], + "title": "StrArg", + "type": "object" + }, + "Text": { + "additionalProperties": false, + "description": "A script snippet to insert into the startup script", + "properties": { + "type": { + "const": "text", + "default": "text", + "title": "Type" + }, + "when": { + "default": "every", + "description": "One of first / every / last", + "title": "When", + "type": "string" + }, + "value": { + "default": "", + "description": "raw text to add to the startup script", + "title": "Value", + "type": "string" + } + }, + "title": "Text", + "type": "object" + }, + "Value": { + "additionalProperties": false, + "description": "A calculated string value for a definition", + "properties": { + "name": { + "description": "Name of the value that the IOC instance will expose", + "title": "Name", + "type": "string" + }, + "description": { + "description": "Description of what the value will be used for", + "title": "Description", + "type": "string" + }, + "value": { + "description": "The contents of the value", + "title": "Value", + "type": "string" + } + }, + "required": [ + "name", + "description", + "value" + ], + "title": "Value", + "type": "object" + }, + "When": { + "enum": [ + "first", + "every", + "last" + ], + "title": "When", + "type": "string" + } + }, + "additionalProperties": false, + "description": "Lists the definitions for a support module, this defines what Entities it supports\n\nProvides the deserialize entry point.", + "properties": { + "module": { + "description": "Support module name, normally the repo name", + "title": "Module", + "type": "string" + }, + "defs": { + "description": "The definitions an IOC can create using this module", + "items": { + "$ref": "#/$defs/Definition" + }, + "title": "Defs", + "type": "array" + } + }, + "required": [ + "module", + "defs" + ], + "title": "Support", + "type": "object" +} \ No newline at end of file diff --git a/asyn/asyn.ibek.support.yaml b/asyn/asyn.ibek.support.yaml index f63802a..e0d42a6 100644 --- a/asyn/asyn.ibek.support.yaml +++ b/asyn/asyn.ibek.support.yaml @@ -1,110 +1,460 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + module: asyn defs: - - name: AsynSerial - description: defines a serial port asyn device - args: - - type: str - name: port - description: The port name for this asyn object - - type: str - name: input_eos - description: Input end of string (terminator) - default: null - - type: str - name: output_eos - description: Output end of string (terminator) - default: null - - type: int - name: priority - description: Priority - default: 100 - - type: bool - name: no_auto_connect - description: Set to stop auto connect - default: - - type: bool - name: no_process_eos - description: Set to avoid processing end of string - default: null - - type: str - name: simulation - description: IP port to connect to if in simulation mode - default: null - - type: int - name: baud - description: Baud Rate - default: null - - type: int - name: bits - # TODO we should add enums to ibek's allowed data types - # TODO this would require we define the enum values int 'type:' too - description: Bits [8,7,6,5] - default: null - - type: str - name: parity - description: Parity [null,even,odd] - default: null - - type: int - name: stop - description: Stop Bits [1,2] - default: null - # note the Asyn API uses Y, N but we will tidy anomalies like this and - # hide them in the Jinja instead - - type: bool - name: crtscts - description: Set hardware flow control on - default: null - pre_init: - - type: comment - value: | - ASYNSerial Startup ENTRY - TODO provide Jinja to generate ASYN Startup Entries - note this is interesting because builder.py has a few if clauses - for generating the necessary script - - # TODO potentially we could break out the common arguments into another object - # TODO like AsynPort in builder.py. This would require a change that allows - # TODO us to embed definition of one object within another - # TODO the above change is done - need to revisit this YAML. - - name: AsynIP - description: defines an asyn device for IP communication - args: - - type: str - name: port - description: Serial port tty name / IP address optionally followed by protocol - - type: str - name: name - description: Name for the Asyn Port - - type: str - name: input_eos - description: Input end of string (terminator) - default: null - - type: str - name: output_eos - description: Output end of string (terminator) - default: null - - type: int - name: priority - description: Priority - default: 100 - - type: bool - name: no_auto_connect - description: Set to stop auto connect - default: - - type: bool - name: no_process_eos - description: Set to avoid processing end of string - default: null - - type: str - name: simulation - description: IP port to connect to if in simulation mode - default: null - pre_init: - - type: comment - value: | - ASYNSerial Startup ENTRY - TODO provide Jinja to generate ASYN Startup Entries - note this is interesting because builder.py has a few if clauses - for generating the necessary script + +- name: _AsynOctetInterface + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: port + description: |- + Serial port tty name / IP address optionally followed by protocol + + - type: id + name: name + description: |- + Override name + + - type: str + name: input_eos + description: |- + Input end of string (terminator) + + - type: str + name: output_eos + description: |- + Output end of string (terminator) + + - type: int + name: priority + description: |- + Priority + default: 100 + + - type: bool + name: noAutoConnect + description: |- + Set to stop autoconnect + + - type: bool + name: noProcessEos + description: |- + Set to avoid processing end of string + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: int + name: baud + description: |- + Baud Rate + + - type: enum + name: parity + description: |- + Parity + values: + even: + none: + odd: + + - type: enum + name: crtscts + description: |- + Set hardware flow control on + values: + Y: + N: + + - type: enum + name: stop + description: |- + Stop Bits + values: + '1': + '2': + + - type: enum + name: disconnectOnReadTimeout + description: |- + Disconnect when a read times out + values: + Y: + N: + + - type: enum + name: bits + description: |- + Bits + values: + '8': + '5': + '7': + '6': + + pre_init: + - value: | + %sConfigure("%s", "%s", %d, %d, %d) + asynSetOption("%s", 0, "%s", "%s") + asynOctetSetInputEos("%s", 0, %s) + asynOctetSetOutputEos("%s", 0, %s) + +- name: AsynIP + description: |- + Asyn IP Port + args: + + - type: str + name: port + description: |- + Serial port tty name / IP address optionally followed by protocol + + - type: id + name: name + description: |- + Override name + + - type: str + name: input_eos + description: |- + Input end of string (terminator) + + - type: str + name: output_eos + description: |- + Output end of string (terminator) + + - type: int + name: priority + description: |- + Priority + default: 100 + + - type: bool + name: noAutoConnect + description: |- + Set to stop autoconnect + + - type: bool + name: noProcessEos + description: |- + Set to avoid processing end of string + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: int + name: baud + description: |- + Baud Rate + + - type: enum + name: parity + description: |- + Parity + values: + even: + none: + odd: + + - type: enum + name: crtscts + description: |- + Set hardware flow control on + values: + Y: + N: + + - type: enum + name: stop + description: |- + Stop Bits + values: + '1': + '2': + + - type: enum + name: disconnectOnReadTimeout + description: |- + Disconnect when a read times out + values: + Y: + N: + + - type: enum + name: bits + description: |- + Bits + values: + '8': + '5': + '7': + '6': + + pre_init: + - value: | + %sConfigure("%s", "%s", %d, %d, %d) + asynSetOption("%s", 0, "%s", "%s") + asynOctetSetInputEos("%s", 0, %s) + asynOctetSetOutputEos("%s", 0, %s) + +- name: AsynIPServer + description: |- + Asyn IP Server Port + args: + + - type: str + name: port + description: |- + Serial port tty name / IP address optionally followed by protocol + + - type: id + name: name + description: |- + Override name + + - type: str + name: input_eos + description: |- + Input end of string (terminator) + + - type: str + name: output_eos + description: |- + Output end of string (terminator) + + - type: int + name: priority + description: |- + Priority + default: 100 + + - type: bool + name: noAutoConnect + description: |- + Set to stop autoconnect + + - type: bool + name: noProcessEos + description: |- + Set to avoid processing end of string + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: int + name: baud + description: |- + Baud Rate + + - type: enum + name: parity + description: |- + Parity + values: + even: + none: + odd: + + - type: enum + name: crtscts + description: |- + Set hardware flow control on + values: + Y: + N: + + - type: enum + name: stop + description: |- + Stop Bits + values: + '1': + '2': + + - type: enum + name: disconnectOnReadTimeout + description: |- + Disconnect when a read times out + values: + Y: + N: + + - type: enum + name: bits + description: |- + Bits + values: + '8': + '5': + '7': + '6': + + pre_init: + - value: | + %sConfigure("%s", "%s", %d, %d, %d) + asynSetOption("%s", 0, "%s", "%s") + asynOctetSetInputEos("%s", 0, %s) + asynOctetSetOutputEos("%s", 0, %s) + +- name: Vxi11 + description: |- + Asyn vxi11 Port + args: + + - type: str + name: port + description: |- + IP address + + - type: bool + name: noAutoConnect + description: |- + Set to stop autoconnect + + - type: int + name: priority + description: |- + Priority + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: id + name: name + description: |- + Asyn Port name + + - type: int + name: flags + description: |- + flags (lock devices : recover with IFC) + + - type: float + name: timeout + description: |- + default timeout + default: '0.0' + + - type: str + name: vxiName + description: |- + vxi name + default: gpib0 + + pre_init: + - value: | + vxi11Configure("%s", "%s", %d, %s, "%s", %d, %d) + +- name: AsynSerial + description: |- + Asyn Serial Port + args: + + - type: str + name: port + description: |- + Serial port tty name / IP address optionally followed by protocol + + - type: id + name: name + description: |- + Override name + + - type: str + name: input_eos + description: |- + Input end of string (terminator) + + - type: str + name: output_eos + description: |- + Output end of string (terminator) + + - type: int + name: priority + description: |- + Priority + default: 100 + + - type: bool + name: noAutoConnect + description: |- + Set to stop autoconnect + + - type: bool + name: noProcessEos + description: |- + Set to avoid processing end of string + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: int + name: baud + description: |- + Baud Rate + + - type: enum + name: parity + description: |- + Parity + values: + even: + none: + odd: + + - type: enum + name: crtscts + description: |- + Set hardware flow control on + values: + Y: + N: + + - type: enum + name: stop + description: |- + Stop Bits + values: + '1': + '2': + + - type: enum + name: disconnectOnReadTimeout + description: |- + Disconnect when a read times out + values: + Y: + N: + + - type: enum + name: bits + description: |- + Bits + values: + '8': + '5': + '7': + '6': + + pre_init: + - value: | + %sConfigure("%s", "%s", %d, %d, %d) + asynSetOption("%s", 0, "%s", "%s") + asynOctetSetInputEos("%s", 0, %s) + asynOctetSetOutputEos("%s", 0, %s) diff --git a/asyn/install.sh b/asyn/install.sh index 8286fd6..3f6611d 100755 --- a/asyn/install.sh +++ b/asyn/install.sh @@ -35,6 +35,6 @@ fi ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/autosave/autosave.ibek.support.yaml b/autosave/autosave.ibek.support.yaml new file mode 100644 index 0000000..2ce3eba --- /dev/null +++ b/autosave/autosave.ibek.support.yaml @@ -0,0 +1,92 @@ + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + +module: autosave + +defs: + +- name: Autosave + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: iocName + description: |- + IOC Name EPICS prefix + + - type: int + name: debug + description: |- + Debug level + + - type: bool + name: skip_1 + description: |- + If True, don't restore file 1 + + - type: str + name: server + description: |- + NFS server name (vxWorks bl=False only) + + - type: str + name: ip + description: |- + NFS server ip (vsWorks only), or blgateway ip if bl=True + + - type: str + name: path + description: |- + Root of path to put autosave files in, ioc name will be appended to this + + - type: id + name: name + description: |- + Object name + + - type: int + name: vx_uid + description: |- + UID of vxWorks autosave user + default: 37134 + + - type: int + name: vx_gid + description: |- + GID of vxWorks autosave group + default: 500 + + - type: bool + name: bl + description: |- + If True, then assume we are on a beamline, that ip=blgateway machine ip and make sure the relevant storage server or directory is up before booting. + + databases: + - file: $(AUTOSAVE)/db/dlssrfile.template + args: + device: + file: + - file: $(AUTOSAVE)/db/dlssrstatus.template + args: + device: + name: + + pre_init: + - value: | + # Autosave and restore initialisation + save_restoreSet_status_prefix "%s" + save_restoreSet_Debug %d + save_restoreSet_NumSeqFiles 3 + save_restoreSet_SeqPeriodInSeconds 600 + save_restoreSet_DatedBackupFiles 1 + save_restoreSet_IncompleteSetsOk 1 + set_pass0_restoreFile "%s_0.sav" + set_pass0_restoreFile "%s_1.sav" + set_pass1_restoreFile "%s_1.sav" + set_pass1_restoreFile "%s_2.sav" + + post_init: + - value: | + create_monitor_set "%s_0.req", 5, "" + create_monitor_set "%s_1.req", 30, "" + create_monitor_set "%s_2.req", 30, "" diff --git a/autosave/install.sh b/autosave/install.sh index cab7785..6ac9e31 100755 --- a/autosave/install.sh +++ b/autosave/install.sh @@ -37,6 +37,6 @@ fi # compile the support module ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/build_support.sh b/build_support.sh new file mode 100755 index 0000000..e01975d --- /dev/null +++ b/build_support.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# This script is used to generate support YAML for ibek from the latest +# released versions of builder support modules at DLS +# as of 26/09/2023 + +# assumes ibek is a peer to this folder's parent (as ibek-support is usually +# a submodule of an ioc-xxxx) Adjust Path if this is not the case. +set -xe + +cd $(realpath $(dirname $0)) +PATH=$PATH:$(realpath ../../ibek) + + +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/ADCore/3-9dls3alpha/ ADCore/ADCore.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/ADAravis/2-2-1dls9/ ADAravis/ADAravis.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/zebra/2-9-2 zebra/zebra.ibek.support.yaml + + +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/motor/7-0dls9-1 motor/motor.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/pmac/2-5-23beta1/ pmac/pmac.ibek.support.yaml -o '14:A+B 474:A+B 801:1 805:1.0 804:1.0' + +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/asyn/4-41dls2 asyn/asyn.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/calc/3-7-3/ calc/calc.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/autosave/5-9dls2/ autosave/autosave.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/busy/1-7-2dls6 busy/busy.ibek.support.yaml +builder2ibek.support.py /dls_sw/prod/R3.14.12.7/support/devIocStats/3-1-14dls3-3/ iocStats/iocStats.ibek.support.yaml diff --git a/busy/install.sh b/busy/install.sh index b6d3dfb..ef62f11 100755 --- a/busy/install.sh +++ b/busy/install.sh @@ -22,7 +22,7 @@ ibek support add-dbds busySupport.dbd # compile the support module ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/ioc/liveness.sh b/ioc/liveness.sh index 861e5c4..b0f5c0c 100755 --- a/ioc/liveness.sh +++ b/ioc/liveness.sh @@ -1,11 +1,11 @@ #!/bin/bash -TOP=/repos/epics/ioc +TOP=/epics/ioc cd ${TOP} CONFIG_DIR=${TOP}/config set -ex -CONFIG_DIR=/repos/epics/ioc/config +CONFIG_DIR=/epics/ioc/config THIS_SCRIPT=$(realpath ${0}) override=${CONFIG_DIR}/liveness.sh diff --git a/ioc/stop.sh b/ioc/stop.sh index 9d92a1e..d8ad48f 100644 --- a/ioc/stop.sh +++ b/ioc/stop.sh @@ -1,6 +1,6 @@ #!/bin/bash -TOP=/repos/epics/ioc +TOP=/epics/ioc cd ${TOP} CONFIG_DIR=${TOP}/config diff --git a/iocStats/install.sh b/iocStats/install.sh index d9d0a19..5dc8ff8 100755 --- a/iocStats/install.sh +++ b/iocStats/install.sh @@ -23,5 +23,5 @@ ibek support add-dbds devIocStats.dbd ibek support compile ${NAME} # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. -ibek support generate-links ${NAME} +ibek support generate-links diff --git a/iocStats/iocStats.ibek.support.yaml b/iocStats/iocStats.ibek.support.yaml index 1072c2e..6f28278 100644 --- a/iocStats/iocStats.ibek.support.yaml +++ b/iocStats/iocStats.ibek.support.yaml @@ -1,16 +1,136 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json module: devIocStats defs: - - name: IocAdminSoft - description: adds IOC statistics PVs to an IOC + +- name: devIocStatsHelper + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: ioc + description: |- + ioc name + + - type: id + name: name + description: |- + gui element name + + - type: bool + name: scanMonitor + description: |- + choice to include scan monitor + default: true + + - type: bool + name: guiTags + description: |- + choice to include gui tags + default: true + + - type: str + name: screen + description: |- + edm file for gui tags + default: ioc_stats_softdls.edl + + - type: str + name: EDM_FILE + description: |- + edm screen, defaults to ioc_stats_softdls.edl + default: ioc_stats_softdls.edl + + - type: str + name: IOC + description: |- + ioc name + + databases: + - file: $(DEVIOCSTATS)/db/iocGui.db + args: + IOC: + name: + EDM_FILE: + - file: $(DEVIOCSTATS)/db/iocAdminSoft.db + args: + IOC: + - file: $(DEVIOCSTATS)/db/iocAdminScanMon.db + args: + IOC: + +- name: iocAdminVxWorks + description: |- + Create some records for reading IOC statistics and details. + args: + + - type: str + name: IOC + description: |- + Device prefix + + databases: + - file: $(DEVIOCSTATS)/db/iocAdminVxWorks.db + args: + IOC: + +- name: iocAdminScanMon + description: |- + Create some records for reading IOC statistics and details. + args: + + - type: str + name: IOC + description: |- + Device prefix + + databases: + - file: $(DEVIOCSTATS)/db/iocAdminScanMon.db + args: + IOC: + +- name: iocGui + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + name for gui elements + default: None + + - type: str + name: EDM_FILE + description: |- + edm screen, defaults to ioc_stats_softdls.edl + default: ioc_stats_softdls.edl + + - type: str + name: IOC + description: |- + ioc name + + databases: + - file: $(DEVIOCSTATS)/db/iocGui.db + args: + IOC: + name: + EDM_FILE: + +- name: iocAdminSoft + description: |- + Create some records for reading IOC statistics and details. + args: + + - type: str + name: IOC + description: |- + Device prefix + + databases: + - file: $(DEVIOCSTATS)/db/iocAdminSoft.db args: - - type: str - name: ioc - description: Device Prefix for this IOC - - databases: - - file: iocAdminSoft.db - args: - IOC: "{{ ioc }}" + IOC: diff --git a/make_global_schemas.sh b/make_global_schemas.sh index b95960b..301efc1 100755 --- a/make_global_schemas.sh +++ b/make_global_schemas.sh @@ -7,10 +7,22 @@ # all.ibek.support.schema.json is a global schema for **ibek.ioc.yaml files # which includes all the support schemas. -THIS_DIR="$(realname "$(dirname "$0")" +set -xe + +THIS_DIR=$(realpath $(dirname ${0})) cd $THIS_DIR +mkdir -p schemas + # Create the global schemas -ibek ibek-schema _global/ibek.defs.schema.json -ibek ioc-schema */*.support.yaml _global/all.ibek.support.schema.json +ibek support generate-schema --output schemas/ibek.support.schema.json + + +# first do each support module's ioc schema individually to easily pick out errors +for i in */*.ibek.support.yaml; do + ibek ioc generate-schema $i --output schemas/$(basename $i .ibek.support.yaml).ibek.ioc.schema.json +done + +# now make a global ioc schema for all the support modules combined +ibek ioc generate-schema */*.ibek.support.yaml --output schemas/all.ibek.ioc.schema.json diff --git a/motor/motor.ibek.support.yaml b/motor/motor.ibek.support.yaml new file mode 100644 index 0000000..44b7bb0 --- /dev/null +++ b/motor/motor.ibek.support.yaml @@ -0,0 +1,499 @@ + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + +module: motor + +defs: + +- name: motorUtil + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device Prefix + + databases: + - file: $(MOTOR)/db/motorUtil.template + args: + P: + + post_init: + - value: | + motorUtilInit("{{P}}") + +- name: basic_asyn_motor + description: |- + Basic template, including motor record and associated tags + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: M + description: |- + Device Suffix + + - type: object + name: PORT + description: |- + Asyn port for motor record + + - type: str + name: ADDR + description: |- + Address on controller + + - type: str + name: DESC + description: |- + Description, displayed on EDM screen + + - type: str + name: MRES + description: |- + Motor Step Size (EGU) + + - type: str + name: VELO + description: |- + Velocity (EGU/s) + + - type: str + name: PREC + description: |- + Display Precision + + - type: str + name: EGU + description: |- + Engineering Units + + - type: str + name: TWV + description: |- + Tweak Step Size (EGU) + + - type: str + name: DTYP + description: |- + DTYP of record + default: asynMotor + + - type: str + name: DIR + description: |- + User Direction + default: '0' + + - type: str + name: VBAS + description: |- + Base Velocity (EGU/s) + default: '0' + + - type: str + name: VMAX + description: |- + Max Velocity (EGU/s), defaults to VELO + default: $(VELO) + + - type: str + name: ACCL + description: |- + Seconds to Velocity + default: '0.5' + + - type: str + name: BDST + description: |- + BL Distance (EGU) + default: '0' + + - type: str + name: BVEL + description: |- + BL Velocity (EGU/s) + default: '0' + + - type: str + name: BACC + description: |- + BL Seconds to Veloc. + + - type: str + name: DHLM + description: |- + Dial High Limit + + - type: str + name: DLLM + description: |- + Dial Low Limit + + - type: str + name: HLM + description: |- + User High Limit + + - type: str + name: LLM + description: |- + User Low Limit + + - type: str + name: HLSV + description: |- + HW Lim. Violation Svr + default: MAJOR + + - type: str + name: INIT + description: |- + Startup commands + + - type: str + name: SREV + description: |- + Steps per Revolution + default: '1000' + + - type: str + name: RRES + description: |- + Readback Step Size (EGU) + + - type: str + name: ERES + description: |- + Encoder Step Size (EGU) + + - type: str + name: JAR + description: |- + Jog Acceleration (EGU/s^2) + + - type: str + name: UEIP + description: |- + Use Encoder If Present + default: '0' + + - type: str + name: URIP + description: |- + Use RDBL If Present + default: '0' + + - type: str + name: RDBL + description: |- + Readback Location, set URIP = 1 if you specify this + + - type: str + name: RLNK + description: |- + Readback output link + + - type: str + name: RTRY + description: |- + Max retry count + default: '0' + + - type: str + name: DLY + description: |- + Readback settle time (s) + default: '0' + + - type: str + name: OFF + description: |- + User Offset (EGU) + default: '0' + + - type: str + name: RDBD + description: |- + Retry Deadband (EGU) + + - type: str + name: FOFF + description: |- + Freeze Offset, 0=variable, 1=frozen + default: '0' + + - type: str + name: ADEL + description: |- + Alarm monitor deadband (EGU) + default: '0' + + - type: str + name: NTM + description: |- + New Target Monitor, only set to 0 for soft motors + default: '1' + + - type: str + name: FEHIGH + description: |- + HIGH limit for following error + default: '0' + + - type: str + name: FEHIHI + description: |- + HIHI limit for following error + default: '0' + + - type: str + name: FEHHSV + description: |- + HIHI alarm severity for following error + default: NO_ALARM + + - type: str + name: FEHSV + description: |- + HIGH alarm severity for following error + default: NO_ALARM + + - type: str + name: SCALE + description: |- + Scale factor, if pmacSetAxisScale is used this should be set + default: '1' + + - type: str + name: HOMEVIS + description: |- + If 1 then home is visible on the gui + default: '1' + + - type: str + name: HOMEVISSTR + description: |- + If HOMEVIS=0, then display this text on the gui instead + default: Use motor summary screen + + - type: id + name: name + description: |- + Object name and gui association name + + - type: str + name: alh + description: |- + set to '#' to comment out alh lines + default: None + + - type: str + name: gda_name + description: |- + Name to export this as to GDA + + - type: str + name: gda_desc + description: |- + Description to export this as to GDA + default: $(DESC) + + databases: + - file: $(MOTOR)/db/basic_asyn_motor.template + args: + VELO: + ACCL: + SCALE: + BACC: + alh: + gda_name: + DHLM: + HOMEVIS: + M: + EGU: + FEHSV: + VBAS: + VMAX: + BDST: + PORT: + SREV: + DTYP: + FEHIGH: + DLLM: + INIT: + RDBL: + DIR: + LLM: + ADEL: + DESC: + RDBD: + URIP: + ADDR: + RTRY: + OFF: + ERES: + FEHIHI: + FEHHSV: + JAR: + P: + BVEL: + MRES: + DLY: + HLSV: + UEIP: + name: + RRES: + PREC: + RLNK: + FOFF: + HLM: + NTM: + TWV: + gda_desc: + HOMEVISSTR: + +- name: softMotorForPiezo + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: Q + description: |- + Device Suffix + + - type: str + name: DESC + description: |- + Description, displayed on EDM screen + + - type: str + name: RDBL + description: |- + Readback link + + - type: str + name: OUT + description: |- + Output link + + - type: str + name: MOVEDLY + description: |- + Approximate move time (seconds) + + - type: str + name: EGU + description: |- + Engineering Units + + - type: str + name: DHLM + description: |- + Dial High Limit + + - type: str + name: DLLM + description: |- + Dial Low Limit + + - type: str + name: MRES + description: |- + Motor Step Size (EGU) + default: '1' + + - type: str + name: RRES + description: |- + Readback Step Size (EGU) + default: '1' + + - type: str + name: RDBD + description: |- + Retry deadband (EGU) + default: '1' + + - type: id + name: name + description: |- + Object name and gui association name + + - type: str + name: gda_name + description: |- + Name to export this as to GDA + + - type: str + name: gda_desc + description: |- + Description to export this as to GDA + + databases: + - file: $(MOTOR)/db/softMotorForPiezo.template + args: + name: + gda_name: + DHLM: + OUT: + RRES: + DLLM: + EGU: + Q: + P: + RDBL: + MRES: + gda_desc: + MOVEDLY: + RDBD: + DESC: + +- name: MotorSim + description: |- + Simulated controller Device - instantiate one per controller ''' + args: + + - type: id + name: name + description: |- + Asyn port for motor record + + - type: int + name: AXES + description: |- + Number of Axes + default: 8 + + - type: int + name: ACTIVEPOLL + description: |- + polling period when motors are moving + default: 50 + + - type: int + name: IDLEPOLL + description: |- + polling period when all motors are idle + default: 500 + + pre_init: + - when: first + value: | + # Create simulator: ( start card , start axis , hard low limit, + motorSimCreate( 0, 1, -15000000, 15000000, 0, {{}}, 32 ) + # TODO - MISSING ARGS: + - value: | + drvAsynMotorConfigure("{{}}", "motorSim", {{}}, {{}}) + # TODO - MISSING ARGS: diff --git a/pmac/pmac.ibek.support.yaml b/pmac/pmac.ibek.support.yaml index 83adae4..b28ecd7 100644 --- a/pmac/pmac.ibek.support.yaml +++ b/pmac/pmac.ibek.support.yaml @@ -1,936 +1,3775 @@ -# yaml-language-server: $schema=../_global/ibek.defs.schema.json + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + module: pmac defs: - - name: PmacAsynSSHPort - description: | - Add a Power PMAC asyn port to the IOC - This port uses SSH to connect to the Power PMAC - args: - - type: id - name: name - description: Asyn port name - - - type: str - name: IP - description: IP address of Power pmac - - - type: str - name: USERNAME - description: Username for login - default: root - - - type: str - name: PASSWORD - description: Password for login - default: deltatau - - - type: int - name: PRIORITY - description: Priority of the port - default: 0 - - - type: int - name: NOAUTOCONNECT - description: Disables autoconnect if set to 1 - default: 0 - - - type: int - name: NOEOS - description: No EOS used if set to 1 - default: 0 - - pre_init: - - type: function - name: drvAsynPowerPMACPortConfigure - args: - AsynPortName: "{{name}}" - IPAddress: "{{IP}}" - Username: "{{USERNAME}}" - Password: "{{PASSWORD}}" - Priority: "{{PRIORITY}}" - NoAutoConnect: "{{NOAUTOCONNECT}}" - NoEOS: "{{NOEOS}}" - - - name: PmacAsynIPPort - description: | - Add a Turbo PMAC asyn port to the IOC - This port uses TCP to connect to the PMAC - args: - - type: id - name: name - description: Asyn port name - - - type: str - name: IP - description: IP address of pmac - - - type: int - name: PORT - description: TCP port for connection - default: 1025 - - pre_init: - - type: function - name: pmacAsynIPConfigure - args: - AsynPortName: "{{name}}" - IPAddress: "{{IP}}:{{PORT}}" - - - name: Geobrick - description: Add a geobrick to the IOC - args: - - type: id - name: name - description: Name to use for the geobrick's asyn port - - - type: object - name: PORT - description: Asyn port name for PmacAsynIPPort to connect to - - - type: str - name: P - description: PV Prefix for all pmac db templates - - - type: int - name: numAxes - description: number of axes to initialize for the controller - default: 8 - - - type: int - name: idlePoll - description: Idle Poll Period in ms - default: 500 - - - type: int - name: movingPoll - description: Moving Poll Period in ms - default: 100 - - - type: int - name: TIMEOUT - description: timeout in seconds for asyn - default: 4 - - - type: int - name: FEEDRATE - description: feedrate below which we go into error - default: 100 - - - type: str - name: CSG0 - description: Name for Coordinate System Group 0 - default: "" - - - type: str - name: CSG1 - description: Name for Coordinate System Group 1 - default: "" - - - type: str - name: CSG2 - description: Name for Coordinate System Group 2 - default: "" - - - type: str - name: CSG3 - description: Name for Coordinate System Group 3 - default: "" - - - type: str - name: CSG4 - description: Name for Coordinate System Group 3 - default: "" - - # numAxes must be supplied for geobrick (but builder.py counted the axes created) - # TODO is counting num_axes is an example of something hard to do in this new approach? - pre_init: - - type: function - name: pmacCreateController - args: - AsynPortName: "{{name}}" - PmacAsynPort: "{{PORT.name}}" - Address: 0 - NumAxes: "{{numAxes}}" - MovingPollPeriod: "{{movingPoll}}" - IdlePollPeriod: "{{idlePoll}}" - - - type: function - name: pmacCreateAxes - args: - AsynPortName: "{{name}}" - NumberOfAxes: "{{numAxes}}" - - databases: - - file: pmacController.template - args: - NAXES: "{{numAxes}}" - PORT: "{{name}}" - P: - idlePoll: - movingPoll: - TIMEOUT: - CSG0: - CSG1: - CSG2: - CSG3: - CSG4: - - file: pmacStatus.template - args: - PORT: "{{name}}" - P: - - - name: DlsPmacAsynMotor - description: Add a motor to a motor controller - args: - # IMPORTANT: all non-defaulted args must come first - - - type: str - name: name - description: Object name and gui association name - - - type: object - name: Controller - description: PMAC Controller to attach to - - - type: int - name: axis - description: which axis number this motor drives - - - type: str - name: P - description: PV prefix name for this motor - - - type: str - name: M - description: PV motor name for this motor - - - type: str - name: DESC - description: Description, displayed on EDM screen - default: "" - - - type: float - name: MRES - description: Motor Step Size (EGU) - default: 0.0001 - - - type: float - name: VELO - description: axis Velocity (EGU/s) - default: 1.0 - - - type: int - name: PREC - - description: Display Precision - default: 3 - - - type: str - name: EGU - description: Engineering Units - default: mm - - - type: float - name: TWV - description: Tweak Step Size (EGU) - default: 1 - - - type: str - name: DTYP - description: Datatype of record - default: asynMotor - - - type: int - name: DIR - description: User direction - default: 0 - - - type: float - name: VBAS - description: Base Velocity (EGU/s) - default: 1.0 - - # TODO type float - - type: str - name: VMAX - description: Max Velocity (EGU/s) - # TODO make default a UNION of type and str (for jinja) - default: "{{VELO}}" - - - type: float - name: ACCL - description: Seconds to Velocity - default: 0.5 - - - type: float - name: BDST - description: BL Distance (EGU) - default: 0 - - - type: float - name: BVEL - description: BL Velocity(EGU/s) - default: 0 - - - type: float - name: BACC - description: BL Seconds to Veloc - default: 0 - - - type: float - name: DHLM - description: Dial High Limit - default: 10000 - - - type: float - name: DLLM - description: Dial low limit - default: -10000 - - - type: float - name: HLM - description: User High Limit - default: 0 - - - type: float - name: LLM - description: User Low Limit - default: 0 - - - type: str - name: HLSV - description: HW Lim, Violation Svr - default: MAJOR - - - type: str - name: INIT - description: Startup commands - default: "" - - - type: int - name: SREV - description: Steps per Revolution - default: 1000 - - - type: float - name: RRES - description: Readback Step Size (EGU - default: 0 - - - type: float - name: ERES - description: Encoder Step Size (EGU) - default: 0 - - - type: float - name: JAR - description: Jog Acceleration (EGU/s^2) - default: 0 - - - type: int - name: UEIP - description: Use Encoder If Present - default: 0 - - - type: int - name: URIP - description: Use RDBL If Present - default: 0 - - - type: str - name: RDBL - description: Readback Location, set URIP =1 if you specify this - default: "0" - - - type: str - name: RLNK - description: Readback output link - default: "" - - - type: int - name: RTRY - description: Max retry count - default: 0 - - - type: float - name: DLY - description: Readback settle time (s) - default: 0 - - - type: float - name: "OFF" - description: User Offset (EGU) - default: 0 - - - type: float - name: RDBD - description: Retry Deadband (EGU) - default: 0 - - - type: int - name: FOFF - description: Freeze Offset, 0=variable, 1=frozen - default: 0 - - - type: float - name: ADEL - description: Alarm monitor deadband (EGU) - default: 0 - - - type: int - name: NTM - description: New Target Monitor, only set to 0 for soft motors - default: 1 - - - type: float - name: FEHIGH - description: HIGH limit for following error - default: 0 - - - type: float - name: FEHIHI - description: HIHI limit for following error - default: 0 - - - type: str - name: FEHHSV - description: HIHI alarm severity for following error - default: NO_ALARM - - - type: str - name: FEHSV - description: HIGH alarm severity for following error - default: NO_ALARM - - - type: int - name: SCALE - description: "" - default: 1 - - - type: int - name: HOMEVIS - description: If 1 then home is visible on the gui - default: 1 - - - type: str - name: HOMEVISSTR - description: "" - default: Use motor summary screen - - - type: str - name: alh - description: Set this to alh to add the motor to the alarm handler and send emails - default: "" - - - type: str - name: HOME - description: Prefix for autohome instance. Defaults to $(P) If unspecified - default: "{{P}}" - - - type: str - name: ALLOW_HOMED_SET - description: Set to a blank to allow this axis to have its homed - default: "#" - - - type: str - name: RLINK - description: not sure what this is - default: "" - - databases: - - file: dls_pmac_asyn_motor.template - args: - ADDR: "{{ axis }}" - PMAC: "{{ Controller.P }}" - PORT: "{{ Controller.name }}" - SPORT: "{{ Controller.PORT.name }}" - P: - M: - DESC: - MRES: - VELO: - PREC: - EGU: - TWV: - DTYP: - DIR: - VBAS: - VMAX: - ACCL: - BDST: - BVEL: - BACC: - DHLM: - DLLM: - HLM: - LLM: - HLSV: - INIT: - SREV: - RRES: - ERES: - JAR: - UEIP: - RDBL: - RLINK: - RTRY: - DLY: - OFF: - RDBD: - FOFF: - ADEL: - NTM: - FEHIGH: - FEHIHI: - FEHHSV: - FEHSV: - SCALE: - HOMEVIS: - HOMEVISSTR: - name: - alh: - HOME: - ALLOW_HOMED_SET: - - - name: DlsCsPmacAsynMotor - description: add a DLS Coordinate system motor - args: - - type: str - name: name - description: Object name and gui association name - - - type: object - name: CsController - description: Coordinate system controller to attach to - - - type: int - name: axis - description: which axis number this motor drives - - - type: str - name: P - description: PV prefix name for this motor - - - type: str - name: M - description: PV motor name for this motor - - - type: str - name: DESC - description: Description, displayed on EDM screen - default: "" - - - type: float - name: MRES - description: Motor Step Size (EGU) - default: 0.0001 - - - type: float - name: VELO - description: axis Velocity (EGU/s) - default: 1.0 - - - type: int - name: PREC - description: Display Precision - default: 3 - - - type: str - name: EGU - description: Engineering Units - default: mm - - - type: float - name: TWV - description: Tweak Step Size (EGU) - default: 1 - - - type: str - name: DTYP - description: Datatype of record - default: asynMotor - - - type: int - name: DIR - description: User direction - default: 0 - - - type: float - name: VBAS - description: Base Velocity (EGU/s) - default: 1.0 - - - type: str - name: VMAX - description: Max Velocity (EGU/s) - default: "{{VELO}}" - - - type: float - name: ACCL - description: Seconds to Velocity - default: 0.5 - - - type: float - name: BDST - description: BL Distance (EGU) - default: 0 - - - type: float - name: BVEL - description: BL Velocity(EGU/s) - default: 0 - - - type: float - name: BACC - description: BL Seconds to Veloc - default: 0 - - - type: float - name: DHLM - description: Dial High Limit - default: 10000 - - - type: float - name: DLLM - description: Dial low limit - default: -10000 - - - type: float - name: HLM - description: User High Limit - default: 0 - - - type: float - name: LLM - description: User Low Limit - default: 0 - - - type: str - name: HLSV - description: HW Lim, Violation Svr - default: MAJOR - - - type: str - name: INIT - description: Startup commands - default: "" - - - type: int - name: SREV - description: Steps per Revolution - default: 1000 - - - type: float - name: RRES - description: Readback Step Size (EGU - default: 0 - - - type: float - name: ERES - description: Encoder Step Size (EGU) - default: 0 - - - type: float - name: JAR - description: Jog Acceleration (EGU/s^2) - default: 0 - - - type: int - name: UEIP - description: Use Encoder If Present - default: 0 - - - type: int - name: URIP - description: Use RDBL If Present - default: 0 - - - type: str - name: RDBL - description: Readback Location, set URIP =1 if you specify this - default: "0" - - - type: str - name: RLNK - description: Readback output link - default: "" - - - type: int - name: RTRY - description: Max retry count - default: 0 - - - type: float - name: DLY - description: Readback settle time (s) - default: 0 - - - type: float - name: "OFF" - description: User Offset (EGU) - default: 0 - - - type: float - name: RDBD - description: Retry Deadband (EGU) - default: 0 - - - type: int - name: FOFF - description: Freeze Offset, 0=variable, 1=frozen - default: 0 - - - type: float - name: ADEL - description: Alarm monitor deadband (EGU) - default: 0 - - - type: int - name: NTM - description: New Target Monitor, only set to 0 for soft motors - default: 1 - - - type: float - name: FEHEIGH - description: HIGH limit for following error - default: 0 - - - type: float - name: FEHIHI - description: HIHI limit for following error - default: 0 - - - type: str - name: FEHHSV - description: HIHI alarm severity for following error - default: NO_ALARM - - - type: str - name: FEHSV - description: HIGH alarm severity for following error - default: NO_ALARM - - - type: int - name: SCALE - description: "" - default: 1 - - - type: int - name: HOMEVIS - description: If 1 then home is visible on the gui - default: 1 - - - type: str - name: HOMEVISSTR - description: "" - default: Use motor summary screen - - - type: str - name: alh - description: Set this to alh to add the motor to the alarm handler and send emails - default: "" - - - type: str - name: HOME - description: Prefix for autohome instance. Defaults to $(P) If unspecified - default: "{{P}}" - - - type: str - name: ALLOW_HOMED_SET - description: Set to a blank to allow this axis to have its homed - default: "#" - - databases: - - file: dls_pmac_cs_asyn_motor.template - args: - ADDR: "{{ axis }}" - PORT: "{{ CsController.name }}" - CS=C: "{{ CsController.CS }}" - PMAC: "{{ CsController.Controller.name }}" - P: - M: - DESC: - MRES: - VELO: - PREC: - EGU: - TWV: - DTYP: - DIR: - VBAS: - VMAX: - ACCL: - BDST: - BVEL: - BACC: - DHLM: - DLLM: - HLM: - LLM: - HLSV: - INIT: - SREV: - RRES: - ERES: - JAR: - UEIP: - RDBL: - RLINK: - RTRY: - DLY: - OFF: - RDBD: - FOFF: - ADEL: - NTM: - FEHIGH: - FEHIHI: - FEHHSV: - FEHSV: - SCALE: - HOMEVIS: - HOMEVISSTR: - name: - alh: - HOME: - ALLOW_HOMED_SET: - - - name: pmacDisableLimitsCheck - description: disable the limits check on an axis - args: - - type: object - name: Controller - description: Geobrick on which to disable limits - - - type: int - name: Axis - description: Axis to have limits disabled - - pre_init: - - type: function - name: pmacDisableLimitsCheck - when: last - args: - AsynPortName: "{{Controller.name}}" - Axis: "{{Axis}}" - AllAxes: False - - - name: autohome - description: setup auto home groups - args: - - type: object - name: Controller - description: the PMAC Controller - - - type: int - name: PLC - description: PLC number of the auto home PLC - - - type: str - name: P - description: Prefix for auto home PVs - - - type: str - name: GRP1 - description: name of the 'ALL' group of auto home axes - default: All - - type: str - name: GRP2 - description: name of the second group of auto home axes - default: "" - - type: str - name: GRP3 - description: name of the third group of auto home axes - default: "" - - type: str - name: GRP4 - description: name of the fourth group of auto home axes - default: "" - - type: str - name: GRP5 - description: name of the fourth group of auto home axes - default: "" - - type: str - name: GRP6 - description: name of the fourth group of auto home axes - default: "" - - type: str - name: GRP7 - description: name of the fourth group of auto home axes - default: "" - - type: str - name: GRP8 - description: name of the fourth group of auto home axes - default: "" - - type: str - name: GRP9 - description: name of the fourth group of auto home axes - default: "" - - databases: - - file: autohome.template - args: - { - PORT: "{{Controller.name}}", - CTRL: "{{Controller.P}}", - P, - PLC, - GRP1, - GRP2, - GRP3, - GRP4, - GRP5, - GRP6, - GRP7, - GRP8, - GRP9, - } - - - name: CS - description: Create a coordinate system - args: - - type: id - name: name - description: Asyn port name for this object - - - type: object - name: Controller - description: the PMAC Controller - - - type: int - name: CS - description: Coordinate system number - - - type: int - name: NAxes - description: number of CS axes - default: 9 - - - type: int - name: Program - description: PROG number for CS motion - default: 10 - - pre_init: - - type: function - name: pmacCreateCS - args: - AsynPortName: "{{name}}" - PmacAsynPort: "{{Controller.name}}" - CSNumber: "{{CS}}" - PLCNumber: "{{Program}}" - - type: function - name: pmacCreateCSAxes - args: - AsynPortName: "{{name}}" - NumberOfAxes: "{{NAxes}}" - - databases: - - file: pmacCsController.template - args: - PORT: "{{name}}" - TIMEOUT: "{{Controller.TIMEOUT}}" - PARENTPORT: "{{Controller.name}}" - PMAC: "{{Controller.P}}" - CS: + +- name: PowerPMAC + description: |- + This will create an asyn motor port for a PowerPMAC that we can attach + motor records to using the model 3 driver + args: + + - type: object + name: Port + description: |- + pmacAsynSSHPort to connect to + + - type: str + name: P + description: |- + PV Prefix + + - type: id + name: name + description: |- + Name to use for the asyn port + + - type: int + name: NAxes + description: |- + Number of axes + default: 8 + + - type: int + name: IdlePoll + description: |- + Idle Poll Period in ms + default: 1000 + + - type: int + name: MovingPoll + description: |- + Moving Poll Period in ms + default: 100 + + - type: str + name: NAXES + description: |- + Number of axes + default: '8' + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + - type: str + name: FEEDRATE + description: |- + feedrate below which we go into error + default: '100' + + - type: str + name: PMAC + description: |- + Pmac/Geobrick name + + - type: str + name: AXIS + description: |- + Axis number + + - type: str + name: PORT + description: |- + Asyn port + + - type: str + name: CSG0 + description: |- + Name for Coordinate System Group 0 + + - type: str + name: CSG1 + description: |- + Name for Coordinate System Group 1 + + - type: str + name: CSG2 + description: |- + Name for Coordinate System Group 2 + + - type: str + name: CSG3 + description: |- + Name for Coordinate System Group 3 + + - type: str + name: CSG4 + description: |- + Name for Coordinate System Group 4 + + - type: str + name: CSG5 + description: |- + Name for Coordinate System Group 5 + + - type: str + name: CSG6 + description: |- + Name for Coordinate System Group 6 + + - type: str + name: CSG7 + description: |- + Name for Coordinate System Group 7 + + databases: + - file: $(PMAC)/db/pmacStatusAxis.template + args: + AXIS: + PORT: + PMAC: + - file: $(PMAC)/db/powerPmacStatus.template + args: + P: + PORT: + - file: $(PMAC)/db/pmacController.template + args: + FEEDRATE: + CSG7: + CSG6: + CSG5: + CSG4: + CSG3: + CSG2: + CSG1: + CSG0: + P: + TIMEOUT: + NAXES: + PORT: + + pre_init: + - value: | + # Configure Model 3 Controller Driver (ControlerPort, LowLevelDriverPort, Address, Axes, MovingPoll, IdlePoll) + pmacCreateController("{{name}}", "{{PortName}}", 0, {{NAxes}}, {{MovingPoll}}, {{IdlePoll}}) + # Configure Model 3 Axes Driver (Controler Port, Axis Count) + pmacCreateAxes("{{name}}", {{NAxes}}) + # TODO - MISSING ARGS: PortName + +- name: CS_2jack + description: |- + Supporting template that allows setting of variables for a + 2jack CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: str + name: J1PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J1 + default: $(P):J1 + + - type: str + name: J2PV + description: |- + Pv of real Jack2 motor, e.g. $(P):J2 + default: $(P):J2 + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/2jack.template + args: + PREC: + J1PV: + COORD: + P: + J2PV: + PORT: + name: + +- name: _GeoBrickCSST + description: |- + Creates GUI tags for CSS screens + args: + + - type: str + name: NAME + description: |- + Object name + + - type: str + name: P + description: |- + PV prefix + + - type: str + name: Description + description: |- + Geobrick description + + - type: str + name: ControlIP + description: |- + dls-pmac-control.py IP or HostName + + - type: str + name: ControlPort + description: |- + dls-pmac-control.py Port + + - type: str + name: ControlMode + description: |- + dls-pmac-control.py Mode (tcp/ip or terminal server) + + databases: + - file: $(PMAC)/db/pmacCSS.template + args: + Description: + ControlPort: + ControlIP: + P: + ControlMode: + NAME: + +- name: CS_aperture_slits + description: |- + Supporting template that allows setting of variables for a + set of aperture slits + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: APPV + description: |- + Pv of real AP motor, e.g. $(P):XA + + - type: str + name: AMPV + description: |- + Pv of real AM motor, e.g. $(P):XB + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/aperture_slits.template + args: + name: + APPV: + COORD: + P: + PREC: + AMPV: + PORT: + +- name: CS_3jack + description: |- + Supporting template that allows setting of variables for a + 3jack CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: str + name: J1PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J1 + default: $(P):J1 + + - type: str + name: J2PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J2 + default: $(P):J2 + + - type: str + name: J3PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J3 + default: $(P):J3 + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/3jack.template + args: + PREC: + J1PV: + COORD: + P: + J2PV: + J3PV: + PORT: + name: + +- name: CS_symetrie_hexapod + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + Object name + + - type: str + name: P + description: |- + Device prefix + + - type: object + name: PORT + description: |- + GeoBrick object + + - type: int + name: COORD + description: |- + Coordinate system number + + - type: str + name: RX + description: |- + GUI label for RX axis (axis 4) + default: RX + + - type: str + name: RY + description: |- + GUI label for RY axis (axis 5) + default: RY + + - type: str + name: RZ + description: |- + GUI label for RZ axis (axis 6) + default: RZ + + - type: int + name: PREC + description: |- + Precision of records + default: 3 + + - type: str + name: BRICK + description: |- + PV prefix for brick + + databases: + - file: $(PMAC)/db/symetrie_hexapod.template + args: + name: + RX: + RY: + PREC: + P: + COORD: + BRICK: + RZ: + PORT: + + pre_init: + - value: | + pmacNoCsVelocity("{{PORT}}") + +- name: pmacVariableReadLED + description: |- + Simple template that reads an integer variable on a PMAC or + GeoBrick which can have a value of 1 or 0 and uses an LED widget. + args: + + - type: str + name: P + description: |- + PV prefix + + - type: str + name: Q + description: |- + PV suffix + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: VAR + description: |- + Variable on PMAC to read from, e.g. P700 + + - type: str + name: SPEED + description: |- + Speed to read at (F=motor scan rates, M=medium (2s), S=slow (5s)) + default: M + + - type: str + name: ONAM + description: |- + One name + default: On + + - type: str + name: ZNAM + description: |- + Zero name + default: Off + + - type: str + name: OSV + description: |- + One severity + default: NO_ALARM + + - type: str + name: ZSV + description: |- + Zero severity + default: NO_ALARM + + - type: id + name: name + description: |- + Template argument + + - type: str + name: LABEL + description: |- + Label for GUI + + databases: + - file: $(PMAC)/db/pmacVariableReadLED.template + args: + ZSV: + name: + P: + ZNAM: + OSV: + Q: + ONAM: + VAR: + LABEL: + SPEED: + PORT: + +- name: dls_pmac_cs_asyn_motor + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: M + description: |- + Device Suffix + + - type: object + name: PORT + description: |- + Coordinate System object that this motor belongs to + + - type: str + name: ADDR + description: |- + Address on controller + + - type: str + name: DESC + description: |- + Description, displayed on EDM screen + + - type: str + name: MRES + description: |- + Motor Step Size (EGU) + + - type: str + name: VELO + description: |- + Velocity (EGU/s) + + - type: str + name: PREC + description: |- + Display Precision + + - type: str + name: EGU + description: |- + Engineering Units + + - type: str + name: TWV + description: |- + Tweak Step Size (EGU) + + - type: str + name: DTYP + description: |- + DTYP of record + default: asynMotor + + - type: str + name: DIR + description: |- + User Direction + default: '0' + + - type: str + name: VBAS + description: |- + Base Velocity (EGU/s) + default: '0' + + - type: str + name: VMAX + description: |- + Max Velocity (EGU/s), defaults to VELO + default: $(VELO) + + - type: str + name: ACCL + description: |- + Seconds to Velocity + default: '0.5' + + - type: str + name: BDST + description: |- + BL Distance (EGU) + default: '0' + + - type: str + name: BVEL + description: |- + BL Velocity (EGU/s) + default: '0' + + - type: str + name: BACC + description: |- + BL Seconds to Veloc. + + - type: str + name: DHLM + description: |- + Dial High Limit + + - type: str + name: DLLM + description: |- + Dial Low Limit + + - type: str + name: HLM + description: |- + User High Limit + + - type: str + name: LLM + description: |- + User Low Limit + + - type: str + name: HLSV + description: |- + HW Lim. Violation Svr + default: MAJOR + + - type: str + name: INIT + description: |- + Startup commands + + - type: str + name: SREV + description: |- + Steps per Revolution + default: '1000' + + - type: str + name: RRES + description: |- + Readback Step Size (EGU) + + - type: str + name: ERES + description: |- + Encoder Step Size (EGU) + + - type: str + name: JAR + description: |- + Jog Acceleration (EGU/s^2) + + - type: str + name: UEIP + description: |- + Use Encoder If Present + default: '0' + + - type: str + name: URIP + description: |- + Use RDBL If Present + default: '0' + + - type: str + name: RDBL + description: |- + Readback Location, set URIP = 1 if you specify this + + - type: str + name: RLNK + description: |- + Readback output link + + - type: str + name: RTRY + description: |- + Max retry count + default: '0' + + - type: str + name: DLY + description: |- + Readback settle time (s) + default: '0' + + - type: str + name: OFF + description: |- + User Offset (EGU) + default: '0' + + - type: str + name: RDBD + description: |- + Retry Deadband (EGU) + + - type: str + name: FOFF + description: |- + Freeze Offset, 0=variable, 1=frozen + default: '0' + + - type: str + name: ADEL + description: |- + Alarm monitor deadband (EGU) + default: '0' + + - type: str + name: NTM + description: |- + New Target Monitor, only set to 0 for soft motors + default: '1' + + - type: str + name: FEHIGH + description: |- + HIGH limit for following error + default: '0' + + - type: str + name: FEHIHI + description: |- + HIHI limit for following error + default: '0' + + - type: str + name: FEHHSV + description: |- + HIHI alarm severity for following error + default: NO_ALARM + + - type: str + name: FEHSV + description: |- + HIGH alarm severity for following error + default: NO_ALARM + + - type: str + name: SCALE + description: |- + Scale factor, if pmacSetAxisScale is used this should be set + default: '1' + + - type: str + name: HOMEVIS + description: |- + If 1 then home is visible on the gui + default: '1' + + - type: str + name: HOMEVISSTR + description: |- + If HOMEVIS=0, then display this text on the gui instead + default: Use motor summary screen + + - type: id + name: name + description: |- + Object name and gui association name + + - type: str + name: alh + description: |- + set to '#' to comment out alh lines + default: None + + - type: str + name: gda_name + description: |- + Name to export this as to GDA + + - type: str + name: gda_desc + description: |- + Description to export this as to GDA + default: $(DESC) + + databases: + - file: $(PMAC)/db/dls_pmac_cs_asyn_motor.template + args: + VELO: + ACCL: + SCALE: + BACC: + alh: + gda_name: + DHLM: + HOMEVIS: + M: + EGU: + FEHSV: + VBAS: + VMAX: + BDST: + PORT: + SREV: + DTYP: + FEHIGH: + DLLM: + INIT: + RDBL: + DIR: + LLM: + ADEL: + DESC: + RDBD: + URIP: + ADDR: + RTRY: + OFF: + ERES: + FEHIHI: + FEHHSV: + JAR: + P: + BVEL: + MRES: + DLY: + HLSV: + UEIP: + name: + RRES: + PREC: + RLNK: + FOFF: + HLM: + NTM: + TWV: + gda_desc: + HOMEVISSTR: + +- name: CS_zform + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: id + name: name + description: |- + This associates an edm screen with the template + + - type: str + name: P + description: |- + Pv Prefix + + databases: + - file: $(PMAC)/db/zform.template + args: + P: + PORT: + name: + +- name: autohome + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: PLC + description: |- + PLC number + + - type: object + name: PORT + description: |- + Delta tau motor controller port + + - type: str + name: GRP1 + description: |- + Optional. Homing group 1 description. Defaults to "All". + default: All + + - type: str + name: GRP2 + description: |- + Optional. Homing group 2 description. Defaults to give empty description string. + + - type: str + name: GRP3 + description: |- + Optional. Homing group 3 description. Defaults to give empty description string. + + - type: str + name: GRP4 + description: |- + Optional. Homing group 4 description. Defaults to give empty description string. + + - type: str + name: GRP5 + description: |- + Optional. Homing group 5 description. Defaults to give empty description string. + + - type: str + name: GRP6 + description: |- + Optional. Homing group 6 description. Defaults to give empty description string. + + - type: str + name: GRP7 + description: |- + Optional. Homing group 7 description. Defaults to give empty description string. + + - type: str + name: GRP8 + description: |- + Optional. Homing group 8 description. Defaults to give empty description string. + + - type: str + name: GRP9 + description: |- + Optional. Homing group 9 description. Defaults to give empty description string. + + - type: str + name: GRP10 + description: |- + Optional. Homing group 10 description. Defaults to give empty description string. + + - type: str + name: STATE11 + description: |- + Optional. Homing state 11 description. Defaults to give empty description string. + + - type: str + name: STATE12 + description: |- + Optional. Homing state 12 description. Defaults to give empty description string. + + - type: str + name: STATE13 + description: |- + Optional. Homing state 13 description. Defaults to give empty description string. + + - type: str + name: STATE14 + description: |- + Optional. Homing state 14 description. Defaults to give empty description string. + + - type: str + name: STATE15 + description: |- + Optional. Homing state 15 description. Defaults to give empty description string. + + - type: str + name: STATUS11 + description: |- + Optional. Homing status 11 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS12 + description: |- + Optional. Homing status 12 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS13 + description: |- + Optional. Homing status 13 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS14 + description: |- + Optional. Homing status 14 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS15 + description: |- + Optional. Homing status 15 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUSSV11 + description: |- + Optional. Homing status 11 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV12 + description: |- + Optional. Homing status 12 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV13 + description: |- + Optional. Homing status 13 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV14 + description: |- + Optional. Homing status 14 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV15 + description: |- + Optional. Homing status 15 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: id + name: name + description: |- + This associates an edm screen with the template + + - type: str + name: DESC + description: |- + Description + + databases: + - file: $(PMAC)/db/autohome.template + args: + GRP10: + PORT: + GRP9: + GRP8: + GRP3: + GRP2: + GRP1: + GRP7: + GRP6: + GRP5: + GRP4: + STATUS11: + STATUSSV11: + STATUS13: + STATUS12: + STATUS15: + STATUS14: + DESC: + name: + P: + STATE13: + STATE12: + STATE11: + STATUSSV12: + STATE15: + STATE14: + STATUSSV13: + PLC: + STATUSSV14: + STATUSSV15: + +- name: CS_IDT_sagittal_dcm + description: |- + Supporting template that allows setting of variables for an + IDT sagittal DCM CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/IDT_sagittal_dcm.template + args: + P: + PORT: + COORD: + name: + +- name: GeoBrickTrajectoryControlT + description: |- + Creates some PVs for executing trajectory scans on the pmac controller by + instantiating an instance of pmacTrajectoryAxis.template for each axis + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller + + - type: str + name: NPOINTS + description: |- + Number of points that can be built at any time + + - type: str + name: MAXPOINTS + description: |- + Maximum number of points in a scan + default: '4000000' + + - type: str + name: PREC + description: |- + precision of axis defnitions + default: '3' + + databases: + - file: $(PMAC)/db/pmacControllerTrajectory.template + args: + NPOINTS: + MAXPOINTS: + PORT: + PREC: + +- name: _CsControlT + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: PORT + description: |- + The asyn port for the pmac cs controller + + - type: str + name: PARENTPORT + description: |- + The asyn port for the parent pmac controller + + - type: str + name: PMAC + description: |- + PV Prefix for the motor controller + + - type: int + name: CS + description: |- + Coordinate System Number for the cs controller + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + databases: + - file: $(PMAC)/db/pmacCsController.template + args: + CS: + PARENTPORT: + PORT: + TIMEOUT: + PMAC: + +- name: CS_qcm + description: |- + Use this template with CS_qcm.pmc to implement + a mode for changing energy that only moves Bragg1. + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: RADMRES1 + description: |- + Scale factor to turn B1 units into Rads + + - type: str + name: RADMRES2 + description: |- + Scale factor to turn B2 units into Rads + + - type: str + name: SCALE + description: |- + the same as pmacSetAxisScale (usually 1 but may be 32) + default: '32' + + - type: str + name: gda_name + description: |- + GDA name + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/qcm.template + args: + SCALE: + RADMRES1: + RADMRES2: + gda_name: + COORD: + P: + PORT: + name: + +- name: _automhomeT + description: |- + Provides PVs to start and monitor homing via homing PLCs + that conform to the DLS standard. If you use custom homing states then be + sure to label them here + args: + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: PLC + description: |- + PLC number + + - type: object + name: PORT + description: |- + Delta tau motor controller port + + - type: str + name: CTRL + description: |- + Controller record name prefix for disabling axis writes + + - type: str + name: GRP1 + description: |- + Optional. Homing group 1 description. Defaults to "All". + default: All + + - type: str + name: GRP2 + description: |- + Optional. Homing group 2 description. Defaults to give empty description string. + + - type: str + name: GRP3 + description: |- + Optional. Homing group 3 description. Defaults to give empty description string. + + - type: str + name: GRP4 + description: |- + Optional. Homing group 4 description. Defaults to give empty description string. + + - type: str + name: GRP5 + description: |- + Optional. Homing group 5 description. Defaults to give empty description string. + + - type: str + name: GRP6 + description: |- + Optional. Homing group 6 description. Defaults to give empty description string. + + - type: str + name: GRP7 + description: |- + Optional. Homing group 7 description. Defaults to give empty description string. + + - type: str + name: GRP8 + description: |- + Optional. Homing group 8 description. Defaults to give empty description string. + + - type: str + name: GRP9 + description: |- + Optional. Homing group 9 description. Defaults to give empty description string. + + - type: str + name: GRP10 + description: |- + Optional. Homing group 10 description. Defaults to give empty description string. + + - type: str + name: STATE11 + description: |- + Optional. Homing state 11 description. Defaults to give empty description string. + + - type: str + name: STATE12 + description: |- + Optional. Homing state 12 description. Defaults to give empty description string. + + - type: str + name: STATE13 + description: |- + Optional. Homing state 13 description. Defaults to give empty description string. + + - type: str + name: STATE14 + description: |- + Optional. Homing state 14 description. Defaults to give empty description string. + + - type: str + name: STATE15 + description: |- + Optional. Homing state 15 description. Defaults to give empty description string. + + - type: str + name: STATUS11 + description: |- + Optional. Homing status 11 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS12 + description: |- + Optional. Homing status 12 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS13 + description: |- + Optional. Homing status 13 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS14 + description: |- + Optional. Homing status 14 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUS15 + description: |- + Optional. Homing status 15 description (e.g. for custom limit checks). Defaults to give empty description string. + + - type: str + name: STATUSSV11 + description: |- + Optional. Homing status 11 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV12 + description: |- + Optional. Homing status 12 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV13 + description: |- + Optional. Homing status 13 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV14 + description: |- + Optional. Homing status 14 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: str + name: STATUSSV15 + description: |- + Optional. Homing status 15 severity. Defaults to NO_ALARM. + default: NO_ALARM + + - type: id + name: name + description: |- + This associates an edm screen with the template + + - type: str + name: DESC + description: |- + Description + + databases: + - file: $(PMAC)/db/autohome.template + args: + CTRL: + GRP10: + PORT: + GRP9: + GRP8: + GRP3: + GRP2: + GRP1: + GRP7: + GRP6: + GRP5: + GRP4: + STATUS11: + STATUSSV11: + STATUS13: + STATUS12: + STATUS15: + STATUS14: + DESC: + name: + P: + STATE13: + STATE12: + STATE11: + STATUSSV12: + STATE15: + STATE14: + STATUSSV13: + PLC: + STATUSSV14: + STATUSSV15: + +- name: pmacVariableWrite + description: |- + Simple template that reads and writes to a variable on a + PMAC or geoBrick via dynamic parameters. + args: + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: Q + description: |- + Pv Suffix + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: VAR + description: |- + Variable on PMAC to write to, e.g. P700 + + - type: str + name: EGU + description: |- + Engineering units + + - type: str + name: VARIABLE_PREC + description: |- + Variable Record precision + + - type: id + name: name + description: |- + Object name and gui association name + + - type: str + name: DTYP + description: |- + asyn DTYP (e.g., asynFloat64, asynInt32) + default: asynFloat64 + + - type: str + name: TYPE + description: |- + PMAC variable type (D=double, I=integer, H=hex, S=string) + default: D + + - type: str + name: LABEL + description: |- + Label for GUI + + databases: + - file: $(PMAC)/db/pmacVariableWrite.template + args: + Q: + name: + DTYP: + EGU: + LABEL: + VARIABLE_PREC: + P: + VAR: + TYPE: + PORT: + +- name: _pmacStatusT + description: |- + Creates some PVs for monitoring status of the pmac controller, + not compatible with power Pmac + args: + + - type: str + name: PORT + description: |- + The asyn port for the pmac controller + + - type: str + name: P + description: |- + PV Prefix + + databases: + - file: $(PMAC)/db/pmacStatus.template + args: + P: + PORT: + +- name: moveAxesToSafeSlave + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: MASTER + description: |- + Master + + - type: str + name: AXIS + description: |- + Axis PV + + - type: int + name: POSITION + description: |- + Safe Position + + - type: float + name: THRESHOLD + description: |- + In safe position threshold in EGUs + +- name: pmacAsynSSHPort + description: |- + This will create an AsynPort connecting to a PowerPMAC over SSH + args: + + - type: id + name: name + description: |- + Port Name, normally something like SSH_PORT + + - type: str + name: IP + description: |- + IP address of the powerPMAC + + - type: str + name: USERNAME + description: |- + Username for the SSH connection + default: root + + - type: str + name: PASSWORD + description: |- + Password for the SSH connection + default: deltatau + + - type: int + name: PRIORITY + description: |- + Priority of the port + + - type: int + name: NOAUTOCONNECT + description: |- + Disable autoconnect if set to 1 + + - type: int + name: NOEOS + description: |- + No EOS used if set to 1 + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + pre_init: + - value: | + # Create SSH Port (PortName, IPAddress, Username, Password, Priority, DisableAutoConnect, noProcessEos) + drvAsynPowerPMACPortConfigure("{{name}}", "{{IP}}", "{{USERNAME}}", "{{PASSWORD}}", "{{PRIORITY}}", "{{NOAUTOCONNECT}}", "{{NOEOS}}") + +- name: EncoderReadback + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + Object name + + - type: str + name: P + description: |- + PV prefix + + - type: str + name: Q + description: |- + PV suffix + + - type: object + name: PORT + description: |- + Controller port + + - type: int + name: AXIS + description: |- + Axis number + + - type: str + name: DESC + description: |- + Description + + - type: str + name: EGU + description: |- + Engineering units + + - type: float + name: ERES + description: |- + Encoder resolution + + - type: int + name: PREC + description: |- + Readback precision + + - type: enum + name: SCAN + description: |- + Scan rate + default: 0.1 second + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + + databases: + - file: $(PMAC)/db/encoder_readback.template + args: + ERES: + name: + SCAN: + EGU: + Q: + P: + PREC: + DESC: + PORT: + AXIS: + +- name: RunCommand + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + Object name + + - type: str + name: P + description: |- + PV prefix + + - type: str + name: R + description: |- + PV prefix + + - type: object + name: BRICK + description: |- + Geobrick/PMAC + + - type: str + name: COMMAND + description: |- + Command + + - type: str + name: DESC + description: |- + Description + + - type: str + name: PORT + description: |- + PMAC controller Port + + databases: + - file: $(PMAC)/db/run_command.template + args: + name: + P: + R: + COMMAND: + PORT: + DESC: + +- name: _moveAxesToSafeTrig + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: A1 + description: |- + Template argument + + - type: str + name: A2 + description: |- + Template argument + + - type: str + name: A3 + description: |- + Template argument + + - type: str + name: A4 + description: |- + Template argument + + - type: str + name: A5 + description: |- + Template argument + + - type: str + name: A6 + description: |- + Template argument + + - type: str + name: P + description: |- + Template argument + + - type: str + name: INPOS1 + description: |- + Template argument + + - type: str + name: INPOS2 + description: |- + Template argument + + - type: str + name: INPOS3 + description: |- + Template argument + + - type: str + name: INPOS4 + description: |- + Template argument + + - type: str + name: INPOS5 + description: |- + Template argument + + - type: str + name: INPOS6 + description: |- + Template argument + + - type: str + name: INPOS_CALC + description: |- + Template argument + +- name: CS_IDT_sagittal_bender + description: |- + Supporting template that allows setting of variables for an + IDT sagittal DCM CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/IDT_sagittal_bender.template + args: + P: + PORT: + COORD: + name: + +- name: pmacDisableLimitsCheck + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: Controller + description: |- + Underlying PMAC or GeoBrick object + + - type: int + name: Axis + description: |- + Axis number to disable limit check, defaults to all + + pre_init: + - value: | + pmacDisableLimitsCheck("{{ControllerPort}}", {{Axis}}, 0) + # TODO - MISSING ARGS: ControllerPort + +- name: RunPlc + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + Object name + + - type: object + name: BRICK + description: |- + Geobrick/PMAC + + - type: int + name: PLC + description: |- + PLC number + + - type: str + name: DESC + description: |- + Description + + - type: str + name: P + description: |- + PV Prefix + + - type: str + name: PORT + description: |- + PMAC controller Port + + databases: + - file: $(PMAC)/db/run_plc.template + args: + P: + DESC: + PLC: + PORT: + name: + +- name: dls_pmac_asyn_motor + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Device Prefix + + - type: str + name: M + description: |- + Device Suffix + + - type: object + name: PORT + description: |- + Delta tau motor controller + + - type: str + name: ADDR + description: |- + Address on controller + + - type: str + name: DESC + description: |- + Description, displayed on EDM screen + + - type: str + name: MRES + description: |- + Motor Step Size (EGU) + + - type: str + name: VELO + description: |- + Velocity (EGU/s) + + - type: str + name: PREC + description: |- + Display Precision + + - type: str + name: EGU + description: |- + Engineering Units + + - type: str + name: TWV + description: |- + Tweak Step Size (EGU) + + - type: object + name: SPORT + description: |- + Delta tau motor controller comms port + + - type: str + name: DTYP + description: |- + DTYP of record + default: asynMotor + + - type: str + name: DIR + description: |- + User Direction + default: '0' + + - type: str + name: VBAS + description: |- + Base Velocity (EGU/s) + default: '0' + + - type: str + name: VMAX + description: |- + Max Velocity (EGU/s), defaults to VELO + default: $(VELO) + + - type: str + name: ACCL + description: |- + Seconds to Velocity + default: '0.5' + + - type: str + name: BDST + description: |- + BL Distance (EGU) + default: '0' + + - type: str + name: BVEL + description: |- + BL Velocity (EGU/s) + default: '0' + + - type: str + name: BACC + description: |- + BL Seconds to Veloc. + + - type: str + name: DHLM + description: |- + Dial High Limit + + - type: str + name: DLLM + description: |- + Dial Low Limit + + - type: str + name: HLM + description: |- + User High Limit + + - type: str + name: LLM + description: |- + User Low Limit + + - type: str + name: HLSV + description: |- + HW Lim. Violation Svr + default: MAJOR + + - type: str + name: INIT + description: |- + Startup commands + + - type: str + name: SREV + description: |- + Steps per Revolution + default: '1000' + + - type: str + name: RRES + description: |- + Readback Step Size (EGU) + + - type: str + name: ERES + description: |- + Encoder Step Size (EGU) + + - type: str + name: JAR + description: |- + Jog Acceleration (EGU/s^2) + + - type: str + name: UEIP + description: |- + Use Encoder If Present + default: '0' + + - type: str + name: URIP + description: |- + Use RDBL If Present + default: '0' + + - type: str + name: RDBL + description: |- + Readback Location, set URIP = 1 if you specify this + + - type: str + name: RLNK + description: |- + Readback output link + + - type: str + name: RTRY + description: |- + Max retry count + default: '0' + + - type: str + name: DLY + description: |- + Readback settle time (s) + default: '0' + + - type: str + name: OFF + description: |- + User Offset (EGU) + default: '0' + + - type: str + name: RDBD + description: |- + Retry Deadband (EGU) + + - type: str + name: FOFF + description: |- + Freeze Offset, 0=variable, 1=frozen + default: '0' + + - type: str + name: ADEL + description: |- + Alarm monitor deadband (EGU) + default: '0' + + - type: str + name: NTM + description: |- + New Target Monitor, only set to 0 for soft motors + default: '1' + + - type: str + name: FEHIGH + description: |- + HIGH limit for following error + default: '0' + + - type: str + name: FEHIHI + description: |- + HIHI limit for following error + default: '0' + + - type: str + name: FEHHSV + description: |- + HIHI alarm severity for following error + default: NO_ALARM + + - type: str + name: FEHSV + description: |- + HIGH alarm severity for following error + default: NO_ALARM + + - type: str + name: SCALE + description: |- + Scale factor, if pmacSetAxisScale is used this should be set + default: '1' + + - type: str + name: HOMEVIS + description: |- + If 1 then home is visible on the gui + default: '1' + + - type: str + name: HOMEVISSTR + description: |- + If HOMEVIS=0, then display this text on the gui instead + default: Use motor summary screen + + - type: id + name: name + description: |- + Object name and gui association name + + - type: str + name: alh + description: |- + set to '#' to comment out alh lines + default: None + + - type: str + name: gda_name + description: |- + Name to export this as to GDA + + - type: str + name: gda_desc + description: |- + Description to export this as to GDA + default: $(DESC) + + - type: str + name: HOME + description: |- + the template contains enough records to keep the motor record happy + default: $(P) + + - type: str + name: ALLOW_HOMED_SET + description: |- + status manually. This is set to a comment character by default. + default: '#' + + databases: + - file: $(PMAC)/db/dls_pmac_asyn_motor.template + args: + VELO: + ACCL: + SCALE: + BACC: + alh: + gda_name: + DHLM: + HOMEVIS: + M: + EGU: + FEHSV: + VBAS: + VMAX: + HOME: + BDST: + PORT: + DIR: + DTYP: + FEHIGH: + DLLM: + INIT: + ALLOW_HOMED_SET: + RDBL: + SREV: + LLM: + ADEL: + SPORT: + RDBD: + URIP: + ADDR: + RTRY: + OFF: + ERES: + FEHIHI: + FEHHSV: + JAR: + P: + DESC: + BVEL: + MRES: + DLY: + HLSV: + UEIP: + name: + RRES: + PREC: + RLNK: + FOFF: + HLM: + NTM: + TWV: + gda_desc: + HOMEVISSTR: + +- name: CS_multi_beamstop_on_platform + description: |- + Supporting template that allows setting of variables for a + multi beamstop on platform CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/multi_beamstop_on_platform.template + args: + P: + PORT: + COORD: + name: + +- name: pmacSetCoordStepsPerUnit + description: |- + Apply an integer scale factor to an axis on the PMAC + args: + + - type: int + name: CS + description: |- + Underlying CS object + + - type: int + name: Axis + description: |- + Axis number to apply scale to + + - type: float + name: Scale + description: |- + Scale factor the cts will be multiplied by before being passed to motor record + + pre_init: + - value: | + pmacSetCoordStepsPerUnit("{{Ref}}", {{Axis}}, {{Scale}}) + # TODO - MISSING ARGS: Ref + +- name: _eloss_kill_autohome_records + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: SPORT + description: |- + usually PMAC_S for pmacs, the name of the pmacAsynIpPort for bricks + + - type: str + name: P + description: |- + Template argument + + - type: str + name: M + description: |- + Template argument + + - type: str + name: PORT + description: |- + Template argument + + - type: str + name: ADDR + description: |- + Template argument + + - type: str + name: DESC + description: |- + Template argument + + - type: str + name: PREC + description: |- + Template argument + + - type: str + name: EGU + description: |- + Template argument + + - type: str + name: HOME + description: |- + the template contains enough records to keep the motor record happy + default: $(P) + + - type: str + name: PMAC + description: |- + onto pmacStatusAxis screen + default: $(P) + + - type: str + name: ALLOW_HOMED_SET + description: |- + status manually. This is set to a comment character by default. + default: '#' + + - type: id + name: name + description: |- + Template argument + + databases: + - file: $(PMAC)/db/eloss_kill_autohome_records.template + args: + ADDR: + M: + PREC: + P: + ALLOW_HOMED_SET: + EGU: + DESC: + PMAC: + HOME: + SPORT: + PORT: + name: + +- name: CS_flexure_slits + description: |- + Supporting template that allows setting of variables for a + set of flexure slits + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/flexure_slits.template + args: + PREC: + P: + name: + COORD: + PORT: + +- name: pmacCsGroupAddAxis + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: Controller + description: |- + Underlying PMAC or GeoBrick object + + - type: int + name: GroupNumber + description: |- + Unique Group number to describe this group + + - type: int + name: AxisNumber + description: |- + Axis number of axis to add to the group + + - type: str + name: AxisDef + description: |- + CS Axis definition for this axis i.e. one of I A B C U V W X Y Z (or may include linear equations) + + - type: int + name: CoordSysNumber + description: |- + Axis number of axis to add to the group + + pre_init: + - value: | + pmacCsGroupAddAxis({{Controller}}, {{GroupNumber}}, {{AxisNumber}}, {{AxisDef}}, {{CoordSysNumber}}) + +- name: _pmacStatusAxis + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: PMAC + description: |- + Pmac/Geobrick name + + - type: str + name: AXIS + description: |- + Axis number + + - type: str + name: PORT + description: |- + Asyn port + + databases: + - file: $(PMAC)/db/pmacStatusAxis.template + args: + AXIS: + PORT: + PMAC: + +- name: GeoBricketteMStop + description: |- + To read the motion stop info and interpret the status for a pmac GeoBrickette. They do motion stop in firmware and (unlike earlier pmac models like GeoBricks and pmac/umac systems) do not need PLC2. + args: + + - type: str + name: P + description: |- + Mandatory. The PV device name prefix for the GeoBrickette for the motion stop. + + - type: str + name: PORT + description: |- + Mandatory. The PMAC GeoBrickette serial comms port. + + - type: str + name: TIMEOUT + description: |- + Optional. Defaults to 5. The asyn timeout - the EPICS aysn record TMOT fields. + default: '5' + + - type: str + name: SCAN + description: |- + Optional. Defaults to 5 second. The scan rate on the status records - the EPICS record SCAN fields. + default: 5 second + + - type: str + name: mstop_VAR + description: |- + Optional. Defaults to M7647. The pmac variable containing the Motion stop status. + default: M7647 + + - type: str + name: active_VAR + description: |- + Optional. Defaults to I35. The pmac variable containing the Motion stop active status. If this is not set to active then the GeoBrickette will IGNORE its motion stop input signal. While it is sometimes made inactive during commissioning, it should not be the case during operation when it should be active. + default: I35 + + - type: str + name: mstop_R + description: |- + Optional. Defaults to :MOTIONSTOP The record prefix for motion stop. + default: :MOTIONSTOP + + - type: str + name: mstop_DESC + description: |- + Optional. Defaults to motion stop. The description of the motion stop signal. + default: motion stop + + - type: str + name: mstop_ZNAM + description: |- + Optional. Defaults to Stopped. The zero value string label for the Motion Stop status - the EPICS record ZNAM field. + default: Stopped + + - type: str + name: mstop_ONAM + description: |- + Optional. Defaults to Not Stopped. The one value string label for the Motion Stop status - the EPICS record ONAM field. + default: Not Stopped + + - type: str + name: mstop_ZSV + description: |- + Optional. Defaults to MAJOR. The zero value motion stop alarm severity - the EPICS record ZSV field. + default: MAJOR + + - type: str + name: mstop_OSV + description: |- + Optional. Defaults to NO_ALARM. The one value motion stop alarm severity - the EPICS record OSV field. + default: NO_ALARM + + - type: str + name: active_R + description: |- + Optional. Defaults to :MOTIONSTOP_ACTIVE The record prefix for active status. + default: :MOTIONSTOP_ACTIVE + + - type: str + name: active_DESC + description: |- + Optional. Defaults to mstop active. The description of the motion stop signal. + default: mstop active + + - type: str + name: active_ZNAM + description: |- + Optional. Defaults to Not Active. The zero value string label for the active status - the EPICS record ZNAM field. + default: Not Active + + - type: str + name: active_ONAM + description: |- + Optional. Defaults to Active. The one value string label for the active status - the EPICS record ONAM field. + default: Active + + - type: str + name: active_ZSV + description: |- + Optional. Defaults to MINOR. The zero value alarm severity for the active status - the EPICS record ZSV field. + default: MINOR + + - type: str + name: active_OSV + description: |- + Optional. Defaults to NO_ALARM. The one value alarm severity for the active status - the EPICS record OSV field. + default: NO_ALARM + + databases: + - file: $(PMAC)/db/geobrickette_motion_stop.template + args: + mstop_ZNAM: + mstop_OSV: + active_VAR: + SCAN: + mstop_ZSV: + mstop_R: + active_ONAM: + active_R: + PORT: + active_ZNAM: + mstop_DESC: + mstop_VAR: + active_DESC: + TIMEOUT: + active_ZSV: + mstop_ONAM: + P: + active_OSV: + +- name: _powerPmacStatusT + description: |- + Creates some PVs for monitoring status of the power pmac controller, + not compatible with pmac + args: + + - type: str + name: PORT + description: |- + The asyn port for the pmac controller + + - type: str + name: P + description: |- + PV Prefix + + databases: + - file: $(PMAC)/db/powerPmacStatus.template + args: + P: + PORT: + +- name: pmacAsynIPPort + description: |- + This will create an AsynPort connecting to a PMAC or GeoBrick over IP + args: + + - type: id + name: name + description: |- + Port Name, normally something like BRICK1port + + - type: str + name: IP + description: |- + IP address of the geobrick + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + pre_init: + - value: | + # Create IP Port (PortName, IPAddr) + pmacAsynIPConfigure("{{name}}", "{{IP}}") + +- name: pmacVariableRead + description: |- + Simple template that reads a variable on a + PMAC or geoBrick via dynamic parameters. + args: + + - type: str + name: P + description: |- + PV prefix + + - type: str + name: Q + description: |- + PV suffix + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: VAR + description: |- + Variable on PMAC to read from, e.g. P700 + + - type: str + name: EGU + description: |- + Engineering units + + - type: str + name: VARIABLE_PREC + description: |- + Variable Record precision + + - type: str + name: DTYP + description: |- + asyn DTYP (e.g., asynFloat64, asynInt32) + default: asynFloat64 + + - type: str + name: TYPE + description: |- + PMAC variable type (D=double, I=integer, H=hex, S=string) + default: D + + - type: str + name: SPEED + description: |- + Speed to read at (F=motor scan rates, M=medium (2 s), S=slow (5 s)) + default: M + + - type: id + name: name + description: |- + Template argument + + - type: str + name: LABEL + description: |- + Label for GUI + + databases: + - file: $(PMAC)/db/pmacVariableRead.template + args: + Q: + name: + DTYP: + TYPE: + EGU: + LABEL: + VARIABLE_PREC: + P: + VAR: + SPEED: + PORT: + +- name: _motor_in_cs_records + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: P + description: |- + Template argument + + - type: str + name: M + description: |- + Template argument + + - type: str + name: PORT + description: |- + Template argument + + - type: str + name: ADDR + description: |- + Template argument + + databases: + - file: $(PMAC)/db/motor_in_cs.template + args: + P: + M: + PORT: + ADDR: + +- name: moveAxesToSafeMaster + description: |- + TODO:ADD DESCRIPTION + args: + + - type: id + name: name + description: |- + Name + + - type: str + name: P + description: |- + Device Prefix + + - type: enum + name: NO_OF_AXES + description: |- + Number of axes + values: + '1': + '3': + '2': + '5': + '4': + '6': + +- name: CS_blade_slits + description: |- + Supporting template that allows setting of variables for a + set of blade slits + args: + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: BPPV + description: |- + Pv of real BP motor, e.g. $(P):X:PLUS + + - type: str + name: BMPV + description: |- + Pv of real BM motor, e.g. $(P):X:MINUS + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/blade_slits.template + args: + P: + BPPV: + name: + BMPV: + +- name: PMAC + description: |- + This will create an asyn motor port for a PMAC that we can attach + motor records to using the model 3 driver + args: + + - type: object + name: Port + description: |- + pmacAsynSSHPort to connect to + + - type: str + name: P + description: |- + PV Prefix + + - type: id + name: name + description: |- + Name to use for the asyn port + + - type: int + name: NAxes + description: |- + Number of axes + default: 32 + + - type: int + name: IdlePoll + description: |- + Idle Poll Period in ms + default: 1000 + + - type: int + name: MovingPoll + description: |- + Moving Poll Period in ms + default: 100 + + - type: str + name: NAXES + description: |- + Number of axes + default: '8' + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + - type: str + name: FEEDRATE + description: |- + feedrate below which we go into error + default: '100' + + - type: str + name: PMAC + description: |- + Pmac/Geobrick name + + - type: str + name: AXIS + description: |- + Axis number + + - type: str + name: PORT + description: |- + Asyn port + + - type: str + name: CSG0 + description: |- + Name for Coordinate System Group 0 + + - type: str + name: CSG1 + description: |- + Name for Coordinate System Group 1 + + - type: str + name: CSG2 + description: |- + Name for Coordinate System Group 2 + + - type: str + name: CSG3 + description: |- + Name for Coordinate System Group 3 + + - type: str + name: CSG4 + description: |- + Name for Coordinate System Group 4 + + - type: str + name: CSG5 + description: |- + Name for Coordinate System Group 5 + + - type: str + name: CSG6 + description: |- + Name for Coordinate System Group 6 + + - type: str + name: CSG7 + description: |- + Name for Coordinate System Group 7 + + databases: + - file: $(PMAC)/db/pmacStatusAxis.template + args: + AXIS: + PORT: + PMAC: + - file: $(PMAC)/db/pmacController.template + args: + FEEDRATE: + CSG7: + CSG6: + CSG5: + CSG4: + CSG3: + CSG2: + CSG1: + CSG0: + P: + TIMEOUT: + NAXES: + PORT: + + pre_init: + - value: | + # Configure Model 3 Controller Driver (ControlerPort, LowLevelDriverPort, Address, Axes, MovingPoll, IdlePoll) + pmacCreateController("{{name}}", "{{PortName}}", 0, {{NAxes}}, {{MovingPoll}}, {{IdlePoll}}) + # Configure Model 3 Axes Driver (Controler Port, Axis Count) + pmacCreateAxes("{{name}}", {{NAxes}}) + # TODO - MISSING ARGS: PortName + +- name: GeoBrick + description: |- + This will create an asyn motor port for a GeoBrick that we can attach + motor records to using the model 3 driver + args: + + - type: object + name: Port + description: |- + pmacAsynIPPort/pmacVmeConfig to connect to + + - type: str + name: P + description: |- + PV Prefix + + - type: id + name: name + description: |- + Name to use for the asyn port + + - type: int + name: IdlePoll + description: |- + Idle Poll Period in ms + default: 500 + + - type: int + name: MovingPoll + description: |- + Moving Poll Period in ms + default: 100 + + - type: str + name: ControlIP + description: |- + IP/Hostname for dls-pmac-control (CSS) + + - type: str + name: ControlPort + description: |- + Port for dls-pmac-control (CSS) + + - type: enum + name: ControlMode + description: |- + Terminal server or Ethernet for dls-pmac-control (CSS) + values: + ts: + tcpip: + + - type: str + name: Description + description: |- + Description for pmac status screen (CSS) + + - type: str + name: NAXES + description: |- + Number of axes + default: '8' + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + - type: str + name: FEEDRATE + description: |- + feedrate below which we go into error + default: '100' + + - type: str + name: PORT + description: |- + The asyn port for the pmac controller + + - type: str + name: NAME + description: |- + Object name + + - type: str + name: PMAC + description: |- + Pmac/Geobrick name + + - type: str + name: AXIS + description: |- + Axis number + + - type: str + name: CSG0 + description: |- + Name for Coordinate System Group 0 + + - type: str + name: CSG1 + description: |- + Name for Coordinate System Group 1 + + - type: str + name: CSG2 + description: |- + Name for Coordinate System Group 2 + + - type: str + name: CSG3 + description: |- + Name for Coordinate System Group 3 + + - type: str + name: CSG4 + description: |- + Name for Coordinate System Group 4 + + - type: str + name: CSG5 + description: |- + Name for Coordinate System Group 5 + + - type: str + name: CSG6 + description: |- + Name for Coordinate System Group 6 + + - type: str + name: CSG7 + description: |- + Name for Coordinate System Group 7 + + databases: + - file: $(PMAC)/db/pmacStatus.template + args: + P: + PORT: + - file: $(PMAC)/db/pmacCSS.template + args: + Description: + ControlPort: + ControlIP: + P: + ControlMode: + NAME: + - file: $(PMAC)/db/pmacStatusAxis.template + args: + AXIS: + PORT: + PMAC: + - file: $(PMAC)/db/pmacController.template + args: + FEEDRATE: + CSG7: + CSG6: + CSG5: + CSG4: + CSG3: + CSG2: + CSG1: + CSG0: + P: + TIMEOUT: + NAXES: + PORT: + + pre_init: + - value: | + # Configure Model 3 Controller Driver (ControlerPort, LowLevelDriverPort, Address, Axes, MovingPoll, IdlePoll) + pmacCreateController("{{name}}", "{{PortName}}", 0, {{NAxes}}, {{MovingPoll}}, {{IdlePoll}}) + # Configure Model 3 Axes Driver (Controler Port, Axis Count) + pmacCreateAxes("{{name}}", {{NAxes}}) + # TODO - MISSING ARGS: PortName, NAxes + +- name: _moveAxesToSafe + description: |- + TODO:ADD DESCRIPTION + args: + + - type: str + name: POSITION + description: |- + Template argument + + - type: str + name: P + description: |- + Template argument + + - type: str + name: N + description: |- + Template argument + + - type: str + name: THRESHOLD + description: |- + Template argument + + - type: str + name: AXIS + description: |- + Template argument + +- name: _GeoBrickControllerT + description: |- + Creates some PVs for global control of the pmac controller, + namely global feed rate and axis coordinate system assignment + args: + + - type: str + name: PORT + description: |- + The asyn port for the pmac controller + + - type: str + name: P + description: |- + PV Prefix + + - type: str + name: NAXES + description: |- + Number of axes + default: '8' + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + - type: str + name: FEEDRATE + description: |- + feedrate below which we go into error + default: '100' + + - type: str + name: CSG0 + description: |- + Name for Coordinate System Group 0 + + - type: str + name: CSG1 + description: |- + Name for Coordinate System Group 1 + + - type: str + name: CSG2 + description: |- + Name for Coordinate System Group 2 + + - type: str + name: CSG3 + description: |- + Name for Coordinate System Group 3 + + - type: str + name: CSG4 + description: |- + Name for Coordinate System Group 4 + + - type: str + name: CSG5 + description: |- + Name for Coordinate System Group 5 + + - type: str + name: CSG6 + description: |- + Name for Coordinate System Group 6 + + - type: str + name: CSG7 + description: |- + Name for Coordinate System Group 7 + + databases: + - file: $(PMAC)/db/pmacController.template + args: + FEEDRATE: + CSG7: + CSG6: + CSG5: + CSG4: + CSG3: + CSG2: + CSG1: + CSG0: + P: + TIMEOUT: + NAXES: + PORT: + +- name: pmacVmeConfig + description: |- + This will create an AsynPort connecting to a PMAC or GeoBrick over VME + args: + + - type: str + name: Prefix + description: |- + Prefix for asyn port name, Default of PMAC_S will give PMAC_S0, PMAC_S1, etc. + default: PMAC_S + + - type: str + name: simulation + description: |- + IP port to connect to if in simulation mode + + - type: int + name: priority + description: |- + Priority to give the asyn serial ports + + pre_init: + - value: | + pmacVmeDebug=1 + drvPmacDebug=1 + # Configure %d PMAC cards + pmacVmeConfig(%d, 0x%dfa000, 0x%d00000, 0xC%d, %d) + # Startup driver for DPRAM ASCII buffer + pmacDrv() + pmacVmeDebug=0 + drvPmacDebug=0 + pmacAsynConfig(0, "%s", %d) + +- name: CS_B22_Optics_Box + description: |- + Supporting template that allows setting of variables for a + B22 optics box CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/B22_optics_box.template + args: + PREC: + P: + name: + COORD: + PORT: + +- name: pmacSetOpenLoopEncoderAxis + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: Controller + description: |- + Underlying PMAC or GeoBrick object + + - type: int + name: Axis + description: |- + Motor axis number + + - type: int + name: Encoder_axis + description: |- + Encoder axis number + + pre_init: + - value: | + pmacSetOpenLoopEncoderAxis("{{ControllerPort}}", {{Axis}}, {{Encoder_axis}}) + # TODO - MISSING ARGS: ControllerPort + +- name: pmacMonitorVariables + description: |- + TODO:ADD DESCRIPTION + args: + + - type: object + name: Controller + description: |- + Underlying PMAC or GeoBrick object + + - type: str + name: Variables + description: |- + Space separated list of pmac variables to monitor + + pre_init: + - value: | + pmacMonitorVariables("{{ControllerPort}}", "{{Variables}}") + # TODO - MISSING ARGS: ControllerPort + +- name: pmacCreateCsGroup + description: |- + Create a group of axis mappings to coordinate systems. Instantating a GeoBrickGlobalControl + will create a PV for switching between these groups + args: + + - type: object + name: Controller + description: |- + Underlying PMAC3 or GeoBrick3 object + + - type: int + name: GroupNumber + description: |- + Unique Group number to describe this group + + - type: str + name: GroupName + description: |- + Description of the group + + - type: int + name: AxisCount + description: |- + Number of CS axes in this group + + pre_init: + - value: | + pmacCreateCsGroup("{{Controller}}", {{GroupNumber}}, "{{GroupName}}", {{AxisCount}}) + +- name: CS_gap_and_centre_slits + description: |- + Supporting template that allows setting of variables for a + set of gap and slits + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/gap_and_centre_slits.template + args: + P: + PORT: + COORD: + name: + +- name: CS_accel_dcm + description: |- + Supporting template that allows setting of variables for an + accel DCM CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/accel_dcm.template + args: + P: + PORT: + COORD: + name: + +- name: CS_3jack_mirror + description: |- + Supporting template that allows setting of variables for a + 3jack mirror CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: str + name: AEGU + description: |- + EGU for angular variables + default: deg + + - type: str + name: J1PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J1 + default: $(P):J1 + + - type: str + name: J2PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J2 + default: $(P):J2 + + - type: str + name: J3PV + description: |- + Pv of real Jack1 motor, e.g. $(P):J3 + default: $(P):J3 + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/3jack_mirror.template + args: + PREC: + J1PV: + COORD: + P: + AEGU: + J3PV: + J2PV: + PORT: + name: + +- name: CS_bender + description: |- + Supporting template that allows setting of variables for a + bender CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/bender.template + args: + P: + PORT: + COORD: + name: + +- name: CS + description: |- + Creates some PVs for global control of the pmac controller, + namely programmed move time and deferred move control + args: + + - type: id + name: name + description: |- + CS Name (for asyn port that motor records are connected to) + + - type: object + name: Controller + description: |- + Underlying PMAC or GeoBrick object + + - type: int + name: CS + description: |- + Coordinate System Number for the cs controller + + - type: str + name: PARENTPORT + description: |- + The asyn port for the parent pmac controller + + - type: int + name: PLCNum + description: |- + PLC Number, defaults to CS + 15 + + - type: int + name: NAxes + description: |- + Number of axes + default: 9 + + - type: int + name: Program + description: |- + Motion Program to run + default: 10 + + - type: int + name: IdlePoll + description: |- + Idle Poll Period in ms + default: 500 + + - type: int + name: MovingPoll + description: |- + Moving Poll Period in ms + default: 100 + + - type: str + name: TIMEOUT + description: |- + Timeout for controller communication + default: '4' + + - type: str + name: PORT + description: |- + The asyn port for the pmac cs controller + + - type: str + name: PMAC + description: |- + PV Prefix for the motor controller + + databases: + - file: $(PMAC)/db/pmacCsController.template + args: + CS: + PARENTPORT: + PORT: + TIMEOUT: + PMAC: + + pre_init: + - value: | + # Create CS (CSPortName, ControllerPort, CSNumber, ProgramNumber) + pmacCreateCS("{{name}}", "{{PortName}}", {{CS}}, {{Program}}) + # Configure Model 3 CS Axes Driver (CSPortName, CSAxisCount) + pmacCreateCSAxes("{{name}}", {{NAxes}}) + # TODO - MISSING ARGS: PortName + +- name: CS_1jack_compensated + description: |- + Supporting template that allows setting of variables for a + 2jack CS + args: + + - type: object + name: PORT + description: |- + Delta tau motor controller comms port + + - type: str + name: P + description: |- + Pv Prefix + + - type: str + name: COORD + description: |- + Co-ordinate system number + + - type: str + name: PREC + description: |- + Precision to display variables + default: '3' + + - type: str + name: JPV + description: |- + Pv of real Jack motor, e.g. $(P):JACK + default: $(P):JACK + + - type: str + name: TPV + description: |- + Pv of real Translation motor, e.g. $(P):Y + default: $(P):Y + + - type: id + name: name + description: |- + This associates an edm screen with the template + + databases: + - file: $(PMAC)/db/1jack_compensated.template + args: + name: + TPV: + PREC: + P: + COORD: + PORT: + JPV: diff --git a/tests/Dockerfile.adsimdetector b/tests/Dockerfile.adsimdetector index 5bdce4e..4a8db72 100644 --- a/tests/Dockerfile.adsimdetector +++ b/tests/Dockerfile.adsimdetector @@ -1,7 +1,7 @@ ##### build stage ############################################################## ARG TARGET_ARCHITECTURE -ARG BASE=23.9.3 +ARG BASE=7.0.7+ec1 ARG REGISTRY=ghcr.io/epics-containers FROM ${REGISTRY}/epics-base-${TARGET_ARCHITECTURE}-developer:${BASE} AS developer diff --git a/tests/Verify.adsimdetector.sh b/tests/Verify.adsimdetector.sh deleted file mode 100755 index 9158e60..0000000 --- a/tests/Verify.adsimdetector.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -set -xe - -tmpdir=$(mktemp -d) - -# TODO - we should really be sending ibek IOC YAML here instead of -# a hand coded startup script - baby steps ... -echo ' -cd "$(TOP)" - -dbLoadDatabase "dbd/ioc.dbd" -ioc_registerRecordDeviceDriver(pdbbase) -simDetectorConfig("TEST.CAM", 2560, 2160, 1, 50, 0) - -dbLoadRecords (simDetector.template, "P=TEST, R=:CAM:, PORT=TEST.CAM, TIMEOUT=1, ADDR=0") - -iocInit -' > ${tmpdir}/st.cmd - -$docker cp ${tmpdir}/st.cmd test_me:/epics/ioc/config/st.cmd -$docker exec -dit test_me bash -c "cd /epics/ioc; ./start.sh" - -# verify that the IOC is running -$docker exec test_me caget TEST:CAM:Acquire -# now try and run the simdetector and verify that it delivers some frames -$docker exec test_me caput TEST:CAM:Acquire 1 - -first=$($docker exec test_me caget TEST:CAM:ArrayCounter_RBV) -second=$($docker exec test_me caget TEST:CAM:ArrayCounter_RBV) -if [[ $first == 0 || $first == $second ]] ; then - echo "ERROR: simdetector did not deliver any frames" - exit 1 -fi - - diff --git a/tests/Verify.asyn.sh b/tests/Verify.asyn.sh deleted file mode 100755 index 92d2dda..0000000 --- a/tests/Verify.asyn.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -# TODO add tests for asyn here see adsimdetector example \ No newline at end of file diff --git a/tests/Verify.busy.sh b/tests/Verify.busy.sh deleted file mode 100755 index 92d2dda..0000000 --- a/tests/Verify.busy.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -# TODO add tests for asyn here see adsimdetector example \ No newline at end of file diff --git a/tests/_test_support_build.sh b/tests/_test_support_build.sh index b11a204..f812f10 100755 --- a/tests/_test_support_build.sh +++ b/tests/_test_support_build.sh @@ -8,7 +8,7 @@ # # INPUTS: # CACHE: Where to put buildx cache for build cache between CI runs -# ARCH: Target architecture linux or rtems currently +# ARCH: Target architecture linux or rtems currently # PLATFORM: the platform to build for (linux/amd64 or linux/arm64) set -xe @@ -18,7 +18,7 @@ THIS_FOLDER=$(dirname ${0}) # pass the container context as the folder above the ibek-support folder CONTEXT=$(realpath ${THIS_FOLDER}/../..) -BASE_VERSION="23.9.3" +BASE_VERSION="7.0.7ec2" ARCH=${ARCH:-linux} PLATFORM=${PLATFORM:-linux/amd64} @@ -100,21 +100,10 @@ for dockerfile in ${DOCKERFILES}; do fi done + $docker stop -t0 test_me + # The above check is sufficient to show that the generic IOC will load and # run and that all the necessary runtime libraries are in place. - # - # for more detailed testing add a Verify.xxx.sh script where xxx is the - # the same as the suffix on the Dockerfile. See Verify.asyn for an example. - VERIFY=Verify."${dockerfile#*.}" - if [[ -f ${THIS_FOLDER}/${VERIFY} ]] ; then - $THIS_FOLDER/${VERIFY} test_me - fi - $docker stop -t0 test_me - - if [[ $retry == 10 ]] ; then - echo "ERROR: IOC for ${dockerfile} did not start" - exit 1 - fi done diff --git a/tests/ioc.yaml b/tests/ioc.yaml new file mode 100644 index 0000000..015fc56 --- /dev/null +++ b/tests/ioc.yaml @@ -0,0 +1,44 @@ +# yaml-language-server: $schema=https://github.com/epics-containers/ioc-adaravis/releases/download/23.9.1/adaravis.ibek.ioc.schema.json + +ioc_name: bl45p-ea-ioc-01 +description: Sample and overview cameras IOC for BL45P +generic_ioc_image: ghcr.io/epics-containers/ioc-adaravis-linux-runtime:23.9.1 + +entities: + - type: epics.EpicsCaMaxArrayBytes + max_bytes: 6000000 + + - type: ADAravis.aravisCamera + CLASS: AVT_Mako_G234B + PORT: DET.DET + P: BL45P-EA-MAP-01 + R: ":DET:" + ID: 172.23.59.11 + PV_ALIAS: "0" # TODO this ARG should have default + + - type: ADCore.NDPvaPlugin + PORT: DET.PVA + PVNAME: BL45P-EA-MAP-01:PVA:OUTPUT + P: BL45P-EA-MAP-01 + R: ":PVA:" + NDARRAY_PORT: DET.DET + BLOCK: 1 # TODO remaining ARGS should have defaults + PRIORITY: 0 + STACKSIZE: 0 + NDARRAY_ADDR: 0 + + - type: ADCore.NDFileHDF5 + PORT: DET.HDF5 + P: BL45P-EA-MAP-01 + R: ":HDF5:" + NDARRAY_PORT: DET.DET + BLOCK: 1 + NDARRAY_ADDR: 0 + + - type: ADAravis.aravisCamera + CLASS: AVT_Mako_G234B + PORT: DIFF.DET + P: BL45P-EA-DIFF-01 + R: ":DET:" + ID: 172.23.59.12 + PV_ALIAS: "0" diff --git a/tests/test_ioc_generate.sh b/tests/test_ioc_generate.sh new file mode 100755 index 0000000..d36e544 --- /dev/null +++ b/tests/test_ioc_generate.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +THIS_FOLDER=$(realpath $(dirname ${0})) +IBEK_SROOT=${THIS_FOLDER}/../ + + +# make a global ioc schema for all the support modules combined +echo generating all support schema +ibek ioc generate-schema ${IBEK_SROOT}*/*.ibek.support.yaml --output /tmp/all.ibek.ioc.schema.json + +# make ioc instance files for an ADAravis IOC instance using all the support modules +echo generating ioc instance files +ibek startup generate ${THIS_FOLDER}/ioc.yaml ${IBEK_SROOT}*/*.ibek.support.yaml --out /tmp/st.cmd --db-out /tmp/ioc.db diff --git a/Hy8401ip/Hy8401ip.ibek.support.yaml b/todo/Hy8401ip/Hy8401ip.ibek.support.yaml similarity index 100% rename from Hy8401ip/Hy8401ip.ibek.support.yaml rename to todo/Hy8401ip/Hy8401ip.ibek.support.yaml diff --git a/Hy8403ip/Hy8403ip.ibek.support.yaml b/todo/Hy8403ip/Hy8403ip.ibek.support.yaml similarity index 100% rename from Hy8403ip/Hy8403ip.ibek.support.yaml rename to todo/Hy8403ip/Hy8403ip.ibek.support.yaml diff --git a/PT100/pt100.ibek.support.yaml b/todo/PT100/pt100.ibek.support.yaml similarity index 100% rename from PT100/pt100.ibek.support.yaml rename to todo/PT100/pt100.ibek.support.yaml diff --git a/TimingTemplates/TimingTemplates.ibek.support.yaml b/todo/TimingTemplates/TimingTemplates.ibek.support.yaml similarity index 100% rename from TimingTemplates/TimingTemplates.ibek.support.yaml rename to todo/TimingTemplates/TimingTemplates.ibek.support.yaml diff --git a/TimingTemplates/TimingTemplates.sh b/todo/TimingTemplates/TimingTemplates.sh similarity index 100% rename from TimingTemplates/TimingTemplates.sh rename to todo/TimingTemplates/TimingTemplates.sh diff --git a/ipac/ipac.ibek.support.yaml b/todo/ipac/ipac.ibek.support.yaml similarity index 100% rename from ipac/ipac.ibek.support.yaml rename to todo/ipac/ipac.ibek.support.yaml diff --git a/mrfTiming/mrfTiming.ibek.support.yaml b/todo/mrfTiming/mrfTiming.ibek.support.yaml similarity index 100% rename from mrfTiming/mrfTiming.ibek.support.yaml rename to todo/mrfTiming/mrfTiming.ibek.support.yaml diff --git a/psc/psc.ibek.support.yaml b/todo/psc/psc.ibek.support.yaml similarity index 100% rename from psc/psc.ibek.support.yaml rename to todo/psc/psc.ibek.support.yaml diff --git a/psc/psc.sh b/todo/psc/psc.sh similarity index 100% rename from psc/psc.sh rename to todo/psc/psc.sh diff --git a/zebra/zebra.ibek.support.yaml b/zebra/zebra.ibek.support.yaml new file mode 100644 index 0000000..274eee4 --- /dev/null +++ b/zebra/zebra.ibek.support.yaml @@ -0,0 +1,257 @@ + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.2.0/ibek.support.schema.json + +module: zebra + +defs: + +- name: zebraLastDivDiff + description: |- + Makes a record pointing to DIV$(DIV) that will display the difference + between the last two DIV readings in position compare mode + args: + + - type: str + name: P + description: |- + Device prefix + + - type: str + name: Q + description: |- + Device suffix + + - type: str + name: DIV + description: |- + DIV number + + - type: id + name: name + description: |- + Object and gui association name + + databases: + - file: $(ZEBRA)/db/zebraLastDivDiff.template + args: + Q: + P: + DIV: + name: + +- name: zebra + description: |- + Controls the zebra signal converter box + args: + + - type: str + name: P + description: |- + Device prefix + + - type: id + name: PORT + description: |- + Driver port name + + - type: str + name: Q + description: |- + Device suffix + + - type: object + name: serialPort + description: |- + Serial port name + + - type: str + name: TIMEOUT + description: |- + Timeout + default: '1' + + - type: str + name: ADDR + description: |- + Asyn Port address + default: '0' + + - type: enum + name: SCANRATE + description: |- + Specified scan rate for cpu intensive PVs + default: I/O Intr + values: + .1 second: + 1 second: + 10 second: + 5 second: + Passive: + 2 second: + .2 second: + .5 second: + Event: + I/O Intr: + + - type: int + name: NELM + description: |- + Number of elements in position capture arrays + default: 100000 + + - type: str + name: PREC + description: |- + Precision to show position compare gate and pulse fields + default: '4' + + - type: str + name: M1 + description: |- + Motor 1 PV + default: $(P)$(Q):NOMOTOR + + - type: str + name: M1DIR + description: |- + Set to - if motor inverted in geobrick (decode control = 3 instead of 7) + default: + + + - type: str + name: M1MULT + description: |- + Multiplier to account for DT scaling. E.g. if *4 encoder decode, set to 0.25 + default: '1' + + - type: str + name: M1HOMESETTLE + description: |- + Time to wait after an autohome before setting zebra pos to readback pos + default: '5' + + - type: str + name: M2 + description: |- + Motor 2 PV + default: $(P)$(Q):NOMOTOR + + - type: str + name: M2DIR + description: |- + Set to - if motor inverted in geobrick (decode control = 3 instead of 7) + default: + + + - type: str + name: M2MULT + description: |- + Multiplier to account for DT scaling. E.g. if *4 encoder decode, set to 0.25 + default: '1' + + - type: str + name: M2HOMESETTLE + description: |- + Time to wait after an autohome before setting zebra pos to readback pos + default: '5' + + - type: str + name: M3 + description: |- + Motor 3 PV + default: $(P)$(Q):NOMOTOR + + - type: str + name: M3DIR + description: |- + Set to - if motor inverted in geobrick (decode control = 3 instead of 7) + default: + + + - type: str + name: M3MULT + description: |- + Multiplier to account for DT scaling. E.g. if *4 encoder decode, set to 0.25 + default: '1' + + - type: str + name: M3HOMESETTLE + description: |- + Time to wait after an autohome before setting zebra pos to readback pos + default: '5' + + - type: str + name: M4 + description: |- + Motor 4 PV + default: $(P)$(Q):NOMOTOR + + - type: str + name: M4DIR + description: |- + Set to - if motor inverted in geobrick (decode control = 3 instead of 7) + default: + + + - type: str + name: M4MULT + description: |- + Multiplier to account for DT scaling. E.g. if *4 encoder decode, set to 0.25 + default: '1' + + - type: str + name: M4HOMESETTLE + description: |- + Time to wait after an autohome before setting zebra pos to readback pos + default: '5' + + - type: int + name: MAXBUF + description: |- + Maximum number of buffers (areaDetector) + default: 5 + + - type: int + name: MAXMEM + description: |- + Maximum memory (areaDetector) + + - type: str + name: R + description: |- + Device Suffix + + - type: str + name: EMPTY + description: |- + Empty macro to satisfy VDCT + + databases: + - file: $(ZEBRA)/db/zebra.template + args: + M3: + M1DIR: + M3HOMESETTLE: + NELM: + M4MULT: + M4: + M1: + TIMEOUT: + M2: + PORT: + EMPTY: + SCANRATE: + M2HOMESETTLE: + M3MULT: + M4HOMESETTLE: + Q: + P: + R: + M1HOMESETTLE: + M2MULT: + ADDR: + M4DIR: + PREC: + M3DIR: + M1MULT: + M2DIR: + + pre_init: + - value: | + #zebraConfig(Port, SerialPort, MaxPosCompPoints, MaxBuffers, MaxMemory) + zebraConfig("{{PORT}}", "{{serialPort}}", {{NELM}}, {{MAXBUF}}, {{MAXMEM}})