├── .gitattributes ├── .github └── workflows │ ├── documentation.yml │ └── nightly.yml ├── .gitignore ├── README.md ├── doc ├── Client.md ├── Deployment.md ├── Editing-the-Wiki.md ├── Glossary.md ├── IOCs.md ├── Overview.md ├── Processes.md ├── Providing-Support.md ├── Script-Generator.md ├── ScriptGenerator.png ├── Scripting.md ├── Specific-IOCs.md ├── System-components.md ├── Systems.md ├── Tools.md ├── Web.md ├── _static │ └── css │ │ └── custom.css ├── _templates │ └── custom-module-template.rst ├── client │ ├── GUI-Building.md │ ├── GUI-CSS.md │ ├── GUI-Coding.md │ ├── GUI-Design.md │ ├── GUI-Eclipse.md │ ├── GUI-Other.md │ ├── GUI-Testing.md │ ├── GUI-Troubleshooting-remote-debugging.png │ ├── GUI-Troubleshooting.md │ ├── coding │ │ ├── Adding-a-Button-to-the-Perspective-Switcher.md │ │ ├── Adding-a-Plugin-or-Feature-to-Maven-Build.md │ │ ├── Connecting-a-View-to-a-PV.md │ │ ├── Databinding---common-mistakes.md │ │ ├── Databinding.md │ │ ├── GUI-Coding-Conventions.md │ │ ├── IBEX_complete_DAE_readonly.png │ │ ├── IBEX_complete_clean.png │ │ ├── IBEX_complete_perspective_switcher_highlighted.png │ │ ├── Instrument-switching.md │ │ ├── Migrating-or-adding-a-button-to-the-E4-perspective-switcher.md │ │ ├── PV-Switching.md │ │ ├── Static-analysis.md │ │ ├── basic_principle.png │ │ ├── eclipse_add_icons_to_build.png │ │ ├── eclipse_add_perspective_plugin1.png │ │ ├── eclipse_add_perspective_plugin2.png │ │ ├── eclipse_adding_a_View.png │ │ ├── eclipse_adding_a_package.png │ │ ├── eclipse_extensions_added1.png │ │ ├── eclipse_extensions_added2.png │ │ ├── eclipse_extensions_added3.png │ │ ├── eclipse_extensions_added4.png │ │ ├── eclipse_extensions_added5.png │ │ ├── eclipse_no_extensions.png │ │ ├── eclipse_perspective_copy_errors.png │ │ ├── eclipse_select_extension_point.png │ │ ├── new_switching.jpg │ │ ├── new_switching_writables.jpg │ │ └── parent_pom.png │ ├── compiling │ │ ├── Building-the-GUI.md │ │ ├── Maven-and-Tycho.md │ │ ├── eclipse_clear_workspace.png │ │ ├── eclipse_import_ibex_gui.png │ │ ├── eclipse_target_platform_view.png │ │ └── eclipse_workspace_selection.png │ ├── css_other │ │ ├── Debugging-CSS.md │ │ ├── Malformed-URL-errors.md │ │ └── PV-Connection-Layer.md │ ├── design_docs │ │ ├── Client-Architectural-Design.md │ │ ├── Configuration-and-Component-Architecture.md │ │ ├── IBEX_UI_New_OPI_View.ep │ │ ├── IBEX_UI_New_OPI_View.png │ │ ├── Opening-an-OPI-Outside-of-a-Synoptic.md │ │ ├── client_architecture.graphml │ │ ├── client_architecture.png │ │ └── config_architecture.png │ ├── eclipse │ │ ├── Checkstyle-setup.md │ │ ├── Common-Eclipse-Issues.md │ │ ├── Common-Eclipse-Tasks.md │ │ ├── Eclipse-RCP.md │ │ ├── Eclipse-logging.md │ │ ├── Eclipse-preferences.md │ │ ├── log_pref.png │ │ └── log_ui.png │ ├── misc │ │ ├── Designing-for-Colour-Blindness.md │ │ ├── Embedding-JavaFX-views-into-IBEX.md │ │ ├── Icon-Licences.md │ │ ├── Local-files-and-start-up.md │ │ └── Synoptic-Icons.md │ ├── opis │ │ ├── OPI-Creation.md │ │ ├── OPI-programming-tips-and-limitations.md │ │ ├── opi_script_options_1.png │ │ └── opi_script_options_2.png │ ├── testing │ │ ├── Adding-Unit-Tests.md │ │ ├── An-Introduction-to-Unit-Testing.md │ │ ├── Mockito.md │ │ ├── System-Testing-with-Squish-BDD.md │ │ ├── System-Testing-with-Squish.md │ │ ├── Test-naming.md │ │ ├── coverage_result.png │ │ ├── failed_test.png │ │ └── passed_test.png │ └── troubleshooting │ │ ├── Debugging-memory-leaks-in-the-IBEX-GUI.md │ │ ├── Java-Resource-Usage-Tools.md │ │ ├── PV-Manager-and-Observers-Logging.md │ │ ├── Pydev-autocomplete-issue.md │ │ └── Slow-reconnection-in-the-GUI.md ├── conf.py ├── deployment │ ├── Creating-a-release.md │ ├── Deploy.md │ ├── Future.md │ ├── Manual-System-Tests.md │ ├── Patch.md │ ├── deploy │ │ ├── Autostart-IBEX-on-Computer-Restart.md │ │ ├── Client-Release-Tests.md │ │ ├── Configure-Mini-Inst.md │ │ ├── Creating-a-new-branch-for-IBEX-configurations.md │ │ ├── Deploy-script-workflow.md │ │ ├── Deployment-on-an-Instrument-Control-PC.md │ │ ├── IBEX-Deployment-on-Training-machine.md │ │ ├── Installing-and-Upgrading-MySQL.md │ │ ├── Making-an-Instrument-Available-from-the-GUI.md │ │ ├── NPort-install.md │ │ ├── Reviewing-Deploy-Tickets.md │ │ ├── Server-Release-Tests.md │ │ ├── Updating-Instrument-Machines.md │ │ ├── Upgrade-ISISICP.md │ │ ├── Upgrade-Java.md │ │ └── open_jdk_install_prompt.PNG │ ├── future_workflows │ │ ├── Containerising-an-IOC.md │ │ ├── Containerising-the-Archiver-Appliance-windows-options.png │ │ ├── Containerising-the-Archiver-Appliance.md │ │ └── Mount-or-create-IBEX-VHDs.md │ ├── patch │ │ ├── Creating-a-patch-hotfix-branch.md │ │ ├── Deploying-a-DEBUG-build-IOC.md │ │ ├── Modifying-Code-on-an-instrument.md │ │ ├── Modifying-Device-on-an-Instrument.md │ │ ├── Modifying-Plugins-on-a-Deployed-Client.md │ │ ├── Patch-or-hotfix-an-IOC.md │ │ └── Release-Single-IOC.md │ └── release │ │ ├── Creating-a-script-generator-release.md │ │ └── Release-based-repository.md ├── favicon.ico ├── index.md ├── iocs │ ├── Compiling.md │ ├── Conventions.md │ ├── Creation.md │ ├── Testing.md │ ├── Tips-and-Tricks.md │ ├── Tools.md │ ├── Troubleshooting.md │ ├── compiling │ │ ├── Build-Arch.md │ │ ├── Building-multiple-architectures-(e.g.-32-&-64-bit-builds).md │ │ ├── Compile-Errors.md │ │ ├── Developer-Server-Build.md │ │ ├── Developer-Updating.md │ │ ├── IOC-Libraries-to-include-with-order.md │ │ ├── Install-Visual-Studio.md │ │ ├── Reducing-Build-Dependencies.md │ │ ├── Removing-or-Renaming-IOC-module.md │ │ ├── SpeedUpBuilding.md │ │ ├── Static-builds.md │ │ ├── Using-Visual-Studio-with-the-EPICS-build-system.md │ │ └── building-on-linux.md │ ├── conventions │ │ ├── IOC-Descriptions.md │ │ ├── IOC-Naming.md │ │ ├── IOC-Startup.md │ │ ├── ISIS-PV-Guide.md │ │ ├── Macro-Naming.md │ │ ├── Manuals.md │ │ ├── PV-Naming.md │ │ └── PV-Units-&-Standards.md │ ├── creation │ │ ├── Add-ioc-to-epics-hardware-list.md │ │ ├── Creating-IOC-wrapper-VI.md │ │ ├── Creating-New-Submodules-in-EPICS.md │ │ ├── Creating-an-ISIS-StreamDevice-IOC.md │ │ ├── Duplicating-IOCs.md │ │ ├── IOC-Finishing-Touches.md │ │ ├── IOC-Generator.md │ │ ├── Writing-An-ISIS-Stream-Device.md │ │ └── ioc-pcaspy.md │ ├── testing │ │ ├── Add-sim-records-script.md │ │ ├── Disable-records.md │ │ ├── Emulating-Devices.md │ │ ├── IOC-Testing-Framework.md │ │ ├── Record-Simulation.md │ │ ├── Running-IOCs.md │ │ ├── Setting-up-googleTest-to-work-with-EPICS-build-process.md │ │ └── ni_max.JPG │ ├── tips_tricks │ │ ├── Communication-layer-likes-and-dislikes-(protocol,-new-devices).md │ │ ├── Email-Text-Alerts-from-IOCS.md │ │ ├── Flow-control.md │ │ ├── Handling-Invalid-Values.md │ │ ├── IOC-Tips-and-Tricks.md │ │ ├── PV-with-a-limited-range.md │ │ ├── Some-Design-thoughts-for-a-serial-or-Ethernet-IOC.md │ │ ├── Stream-Device-Tips-and-Tricks.md │ │ └── Using-IP-rather-than-nport-with-MOXA-(RFC-2217).md │ ├── tools │ │ ├── Asyn-Interpose-Functions.md │ │ ├── AsynEchoDriver.md │ │ ├── Autosave.md │ │ ├── Convert-Record.md │ │ ├── Creating-a-State-Machine-(Sequencer).md │ │ ├── IOC-Utilities.md │ │ ├── IOC-access-security.md │ │ ├── ISIS-modules-for-file-handling.md │ │ ├── Labview-Remote.md │ │ ├── Lua.md │ │ ├── Serve-file-contents-over-EPICS.md │ │ ├── Template-Substitutions.md │ │ ├── Utilities-Library.md │ │ ├── aSub-records.md │ │ ├── icpconfig.md │ │ ├── loading_macros.png │ │ └── lua │ │ │ ├── LuaCheck.md │ │ │ └── Our-Lua-Utility-Functions.md │ └── troubleshooting │ │ ├── ASYN-Trace-Masks-(Debugging-IOC,-ASYN).md │ │ ├── Dependency-Walker.md │ │ ├── IOC-And-Device-Trouble-Shooting.md │ │ ├── IOC-Start-Example.md │ │ ├── IOC-crash-or-unexpected-termination-‐-Find-function-from-windows-module-offset.md │ │ ├── IOC-flow-control-settings.md │ │ ├── Log-file-location.md │ │ ├── Remote-Debugging-from-Visual-Studio.md │ │ ├── Serial-Bruteforce-script.md │ │ ├── Serial-Port-Debug.md │ │ └── TestSerialPort.md ├── logo.svg ├── overview │ ├── First-Time-Build.md │ ├── High-Level-Architectural-Design.md │ ├── Links-and-Resources.md │ ├── New-Starters.md │ ├── deployment_architecture.png │ ├── high_level_architecture.graphml │ └── high_level_architecture.png ├── processes │ ├── Admin.md │ ├── Continuous-Integration.md │ ├── Decision-Log.md │ ├── Dev-Processes.md │ ├── Git-and-GitHub.md │ ├── Instrument-Details.md │ ├── Meetings-with-Scientists.md │ ├── Meetings.md │ ├── Pm.md │ ├── Retrospective-Notes.md │ ├── admin │ │ ├── Data-Protection.md │ │ ├── Obtaining-access-to-the-Instrument-Hall.md │ │ ├── Remote-Working-vnc-cloud.png │ │ └── Remote-Working.md │ ├── continuous_integration │ │ ├── Adding-a-new-Windows-machine-to-Jenkins.md │ │ ├── Jenkins-Build-Server.md │ │ ├── Jenkins-Trouble-Shooting.md │ │ ├── RHEL-jenkins-linux-dependency-update.md │ │ ├── Running-Automated-System-Tests.md │ │ └── TestBuild-Jenkins-Build.md │ ├── dev_processes │ │ ├── Component-and-Activity-Stewards.md │ │ ├── Dependency-Updates.md │ │ ├── External-Contributions.md │ │ ├── Good-Ticket-Writing.md │ │ ├── Project-Documentation.md │ │ ├── Things-to-know-as-a-developer.md │ │ ├── Tickets-and-their-Workflow.md │ │ ├── Umbrella-Tickets.md │ │ ├── Understanding-Java-Licensing.md │ │ └── Unupdated-dependencies.md │ ├── git_and_github │ │ ├── Adding-new-modules-via-Git.md │ │ ├── Automation-Application.md │ │ ├── Getting-started-with-Git-and-GitHub.md │ │ ├── Git-Cleanup.md │ │ ├── Git-Commands.md │ │ ├── Git-workflow.md │ │ ├── Making-the-IBEX-workflow-work-with-SSH-authentication.md │ │ ├── New-Local-Git-Repository.md │ │ └── git-hub-repo-tools.md │ ├── instrument_details │ │ ├── ALF-Instrument-Details.md │ │ ├── CHIPIR-Instrument-Details.md │ │ ├── CHRONUS-Instrument-Details.md │ │ ├── CRISP-Instrument-Details.md │ │ ├── DETMON-Instrument-Details.md │ │ ├── EMMA-Instrument-Details.md │ │ ├── EMU-Instrument-Details.md │ │ ├── ENGIN-X-Instrument-Details.md │ │ ├── GEM-Instrument-Details.md │ │ ├── HIFI_CRYOMAG-Instrument-Details.md │ │ ├── HRPD-Instrument-Details.md │ │ ├── IMAT-Instrument-Details.md │ │ ├── INES-Instrument-Details.md │ │ ├── INTER-Instrument-Details.md │ │ ├── IRIS-Instrument-Details.md │ │ ├── LARMOR-Instrument-Details.md │ │ ├── LET-Instrument-Details.md │ │ ├── LOQ-Instrument-Details.md │ │ ├── MAPS-Instrument-Details.md │ │ ├── MARI-Instrument-Details.md │ │ ├── MERLIN-Instrument-Details.md │ │ ├── MUON-Front-End-Instrument-Details.md │ │ ├── MUSR-Instrument-Details.md │ │ ├── MUX-Instrument-Details.md │ │ ├── NIMROD-Instrument-Details.md │ │ ├── NIMROD__Oxford_MCP_Camera.jpg │ │ ├── OSIRIS-Instrument-Details.md │ │ ├── PEARL-Instrument-Details.md │ │ ├── PEARL-ServoStep.jpg │ │ ├── POLARIS-Instrument-Details.md │ │ ├── POLREF-Instrument-Details.md │ │ ├── RIKEN-Front-End-Instrument-Details.md │ │ ├── SANDALS-Instrument-Details.md │ │ ├── SANS2D-Instrument-Details.md │ │ ├── SURF-Instrument-Details.md │ │ ├── SXD-Instrument-Details.md │ │ ├── TOSCA-Instrument-Details.md │ │ ├── VESUVIO-Instrument-Details.md │ │ ├── WISH-Instrument-Details.md │ │ └── ZOOM-Instrument-Details.md │ ├── meetings │ │ ├── Backlog-Preparation.md │ │ ├── Code-Chats-and-Lightning-Talks.md │ │ ├── Meeting-Roles-and-Rotas.md │ │ ├── Program-Increment-Planning.md │ │ ├── Sprint-Planning.md │ │ ├── Sprint-Review-and-Retro-slides.png │ │ ├── Sprint-Review-and-Retro.md │ │ └── Technical-Debt-Stand-down.md │ ├── meetings_with_scientists │ │ ├── Demo-notes.md │ │ ├── Regular-Demos-of-IBEX-to-Scientists.md │ │ └── Training-Instrument-Scientists-in-IBEX.md │ ├── pm │ │ ├── Estimating-Sprint-Capacity.md │ │ ├── PM-Workbook.md │ │ ├── Prioritisation-of-Tickets.md │ │ └── Sprint-Burn-down-Chart.md │ └── retrospective-notes │ │ ├── Retrospective-Notes-2018.02.14.md │ │ ├── Retrospective-Notes-2018.03.14.md │ │ ├── Retrospective-Notes-2018.09.26.md │ │ ├── Retrospective-Notes-2018.10.29.md │ │ ├── Retrospective-Notes-2018.11.21.md │ │ ├── Retrospective-Notes-2018.12.20.md │ │ ├── Retrospective-Notes-2019.04.24.md │ │ ├── Retrospective-Notes-2019.09.11.md │ │ ├── Retrospective-Notes-2019.10.09.md │ │ ├── Retrospective-Notes-2019.11.06.md │ │ ├── Retrospective-Notes-2019.12.02.md │ │ ├── Retrospective-Notes-2020.01.08.md │ │ ├── Retrospective-Notes-2020.02.05.md │ │ ├── Retrospective-Notes-2020.03.04.md │ │ ├── Retrospective-Notes-2020.04.01.md │ │ ├── Retrospective-Notes-2020.05.28.md │ │ ├── Retrospective-Notes-2020.06.24.md │ │ ├── Retrospective-Notes-2020.07.22.md │ │ ├── Retrospective-Notes-2020.08.19.md │ │ ├── Retrospective-Notes-2020.09.17.md │ │ ├── Retrospective-Notes-2020.10.16.md │ │ ├── Retrospective-Notes-2020.11.11.md │ │ ├── Retrospective-Notes-2020.12.16.md │ │ ├── Retrospective-Notes-2021.01.06.md │ │ ├── Retrospective-Notes-2021.02.03.md │ │ ├── Retrospective-Notes-2021.03.03.md │ │ ├── Retrospective-Notes-2021.03.31.md │ │ ├── Retrospective-Notes-2021.05.05.md │ │ ├── Retrospective-Notes-2021.05.26.md │ │ ├── Retrospective-Notes-2021.06.23.md │ │ ├── Retrospective-Notes-2021.07.21.md │ │ ├── Retrospective-Notes-2021.08.25.md │ │ ├── Retrospective-Notes-2021.09.22.md │ │ ├── Retrospective-Notes-2021.10.28.md │ │ ├── Retrospective-Notes-2021.11.17.md │ │ ├── Retrospective-Notes-2021.12.15.md │ │ ├── Retrospective-Notes-2022.01.05.md │ │ ├── Retrospective-Notes-2022.02.02.md │ │ ├── Retrospective-Notes-2022.02.23.md │ │ ├── Retrospective-Notes-2022.03.23.md │ │ ├── Retrospective-Notes-2022.04.20.md │ │ ├── Retrospective-Notes-2022.05.18.md │ │ ├── Retrospective-Notes-2022.06.15.md │ │ ├── Retrospective-Notes-2022.08.10.md │ │ ├── Retrospective-Notes-2022.09.07.md │ │ ├── Retrospective-Notes-2022.10.05.md │ │ ├── Retrospective-Notes-2022.10.26.md │ │ ├── Retrospective-Notes-2022.11.23.md │ │ ├── Retrospective-Notes-2023.01.04.md │ │ ├── Retrospective-Notes-2023.02.01.md │ │ ├── Retrospective-Notes-2023.03.08.md │ │ ├── Retrospective-Notes-2023.04.12.md │ │ ├── Retrospective-Notes-2023.05.10.md │ │ ├── Retrospective-Notes-2023.06.07.md │ │ ├── Retrospective-Notes-2023.07.12.md │ │ ├── Retrospective-Notes-2023.08.09.md │ │ ├── Retrospective-Notes-2023.09.08.md │ │ ├── Retrospective-Notes-2023.10.04.md │ │ ├── Retrospective-Notes-2023.11.01.md │ │ ├── Retrospective-Notes-2023.11.30.md │ │ ├── Retrospective-Notes-2024.01.08.md │ │ ├── Retrospective-Notes-2024.01.31.md │ │ ├── Retrospective-Notes-2024.03.06.md │ │ ├── Retrospective-Notes-2024.04.03.md │ │ ├── Retrospective-Notes-2024.05.01.md │ │ ├── Retrospective-Notes-2024.05.22.md │ │ ├── Retrospective-Notes-2024.06.19.md │ │ ├── Retrospective-Notes-2024.07.17.md │ │ ├── Retrospective-Notes-2024.08.07.md │ │ ├── Retrospective-Notes-2024.09.04.md │ │ ├── Retrospective-Notes-2024.10.02.md │ │ ├── Retrospective-Notes-2024.10.30.md │ │ ├── Retrospective-Notes-2024.11.27.md │ │ ├── Retrospective-Notes-2024.12.18.md │ │ ├── Retrospective-Notes-2025.01.07.md │ │ ├── Retrospective-Notes-2025.02.04.md │ │ ├── Retrospective-Notes-2025.03.05.md │ │ ├── Retrospective-Notes-2025.04.03.md │ │ └── Retrospective-Notes-2025.05.07.md ├── script_generator │ ├── DynamicScripting.drawio.png │ ├── Existing-script-generators.md │ ├── Gotchas-and-Troubleshooting-for-The-IBEX-Script-Generator.md │ ├── IBEX-Script-Generator-Dynamic-Scripting.md │ ├── Script-Generator-Testing-Environment.md │ ├── Script-generator-high-level-design.md │ └── UpdateRepoFlowDiagram.png ├── scriptgen.png ├── scripting │ ├── Bluesky-scanning.md │ ├── Genie-Python.md │ ├── Matplotlib.md │ ├── genie_python │ │ ├── genie_python-Troubleshooting.md │ │ └── genie_python-linter.md │ └── instrument-scripts.md ├── searchscorer.js ├── specific_iocs │ ├── Cells.md │ ├── Choppers.md │ ├── Cryogenics.md │ ├── DAE-and-the-ICP.md │ ├── DAQ.md │ ├── DAQmx_state.png │ ├── Fluxgates.md │ ├── Gas-And-Liquid-Handling-Systems.md │ ├── Imaging-Cameras.md │ ├── Loading-Rigs.md │ ├── Magnets.md │ ├── Motors-Extensions.md │ ├── Motors.md │ ├── Multimeters.md │ ├── Other.md │ ├── PLCs.md │ ├── Polarisers-and-Analysers.md │ ├── Power-Distribution-Unit-(PDU).md │ ├── Power-Supplies.md │ ├── Pressure-Monitors.md │ ├── Reflectometry-IOC.md │ ├── Rheometers.md │ ├── Rotating_sample_changer.png │ ├── Sample-Changers.md │ ├── Sensors.md │ ├── Signal-Generators.md │ ├── Temperature-Controllers.md │ ├── cameras │ │ └── Pixelman.md │ ├── cells │ │ └── TiZr-Sample-Can.md │ ├── choppers │ │ ├── Astrium-Chopper.md │ │ ├── Astrium.svg │ │ ├── Astrium.xml │ │ ├── Astrium_Monitoring_Crate.JPG │ │ ├── FZJ_DD_Fermi_chopper.md │ │ ├── FZJ_Fermi_chopper.md │ │ ├── MK3-Chopper.md │ │ ├── SKF-MB350g3-Chopper.md │ │ └── SKF-MB4150g5-Disk-Chopper-Controllers.md │ ├── cryogenics │ │ ├── 2T-3D-Vector-magnet.md │ │ ├── 3HeFridgeOps.png │ │ ├── 3d_vector_magnet_schematic.png │ │ ├── CP2800-Compressors.md │ │ ├── Cryogenic-SMS-PSU.md │ │ ├── Cryogenics-Ltd-Helium-Level-Gauge.md │ │ ├── HLM-General.md │ │ ├── ICE-Dilution-Fridge.md │ │ ├── ITC-503.md │ │ ├── ITC503-Heliox.md │ │ ├── Mercury-Heliox.md │ │ ├── MercuryEnhancedCryo.drawio.png │ │ ├── MercuryEnhancedCryo2.drawio.png │ │ ├── MercuryEnhancedCryoDeviceScreen.png │ │ ├── MercuryiTC-Enhanced-Cryostat-Control.md │ │ ├── MercuryiTC.md │ │ ├── Oxford-Instruments-IPS.md │ │ ├── Oxford-Instruments-Mercury-IPS.md │ │ ├── SPC.png │ │ ├── Triton.md │ │ ├── comms1.jpg │ │ ├── comms2.jpg │ │ ├── cryomagnet_circuit_diagram.PNG │ │ ├── cryosms │ │ │ └── Cryogenic-SMS-PSU-design.md │ │ ├── detailed_temp_board.jpg │ │ ├── front_panel.jpg │ │ ├── heliox.png │ │ ├── hlm │ │ │ └── HLM-Web-Server-deployment.md │ │ ├── mercury_heliox_ramp_example.PNG │ │ └── triton_channel_settings.jpg │ ├── dae │ │ ├── DAE-Live-View.md │ │ ├── DAE-Normal-Log.md │ │ ├── DAE-PVs.md │ │ ├── DAE-Pre-and-Post-commands.md │ │ ├── DAE-Trouble-Shooting-corrupted-max-database.PNG │ │ ├── DAE-Trouble-Shooting.md │ │ ├── Dae-Spectra-Updating-Problem.md │ │ ├── Datastreaming.md │ │ ├── ESSDSLayout.png │ │ ├── ESSDSLayout.xml │ │ ├── Experimental-Runs.md │ │ ├── FUTUREISISDSLayout.png │ │ ├── FUTUREISISDSLayout.xml │ │ ├── ISISDSLayout.png │ │ ├── ISISDSLayout.xml │ │ ├── ISISICP---enabling-incremental-event-file-creation.md │ │ ├── LogPlotter.png │ │ ├── Shrinking-ISISICP-Memory-Usage-on-Simulated-DAE-machines.md │ │ └── datastreaming │ │ │ ├── Datastreaming---File-writing.md │ │ │ ├── Datastreaming---Sample-Environment.md │ │ │ └── Datastreaming-How-To.md │ ├── daq │ │ ├── MuSR-Rotation-control.md │ │ └── Muon-Separator-Power-Supply.md │ ├── fluxgates_magnetometers │ │ ├── Bartington.md │ │ ├── Group3-Hall-Probe.md │ │ ├── Metrolab-PT2025-Teslameter-IOC.md │ │ ├── Zero-Field-Magnetometer-IOC.md │ │ └── magnetometer_daq.png │ ├── gas_liquid_handling │ │ ├── BioLogic-MPS-70-4-(stopped-flow).md │ │ ├── DMA4500m-Density-Meter.md │ │ ├── Edwards-Turbo-Instrument-Controller.md │ │ ├── JASCO-PU--4180-HPLC-Pump.md │ │ ├── Knauer-1050-HPLC-Pump.md │ │ ├── Knauer-k-6.md │ │ ├── MKS_PR4000B.md │ │ ├── NIMA-Trough.md │ │ ├── WPI-Aladdin-Syringe-Pump.md │ │ ├── WPI-SP2XX-Syringe-Pump.md │ │ ├── WPI_aladdin_1.png │ │ ├── WPI_aladdin_2.png │ │ ├── Watson-Marlow-323-Peristaltic-Pump.md │ │ ├── dma4500m_ioc_diagram.png │ │ ├── jasco_runtime_logic_flow.png │ │ └── nimrod_gas_panel.png │ ├── loading_rigs │ │ ├── Instron-stress-rig---MiniTower.md │ │ └── Instron-stress-rig.md │ ├── magnets │ │ ├── Danfysik.md │ │ ├── HIFI-Zero-field-controller.md │ │ ├── HTS-Magnet.jpg │ │ ├── HTS-Magnet.md │ │ ├── MuSR-Steering-Magnets.md │ │ ├── Muon-Active-Compensation.md │ │ ├── Muon-NGS-Power-Supply-Firewall.md │ │ ├── Muon_Zero-Field_Auto-Feedback_Procedure_Flowchart.png │ │ ├── NGPS-PSU.md │ │ ├── RIKEN-Power-Supplies.md │ │ ├── RIKEN_RB2_Control_Boards.svg │ │ ├── RIKEN_RB2_Front_Panel.svg │ │ ├── TDK-Lambda-Genesys.md │ │ ├── Transtechnik-Power-Supply.md │ │ ├── Zero-field-controller-design.md │ │ ├── Zero-field-controller.md │ │ ├── emu_zf_compensation_comparison.png │ │ ├── musr_steering_opi.jpg │ │ └── tdk_wiring.jpg │ ├── motor_extensions │ │ ├── ALF-Goniometer-Axes.md │ │ ├── Axis.md │ │ ├── Bump-Strip.md │ │ ├── Collision-Detection-Project.md │ │ ├── Creating-soft-motors-to-control-real-motors.md │ │ ├── Fermi-Chopper-Lifter.md │ │ ├── IMAT-Lens-Adjustment.md │ │ ├── IMAT_relay.jpg │ │ ├── Jaws.md │ │ ├── MARI-Sample-Changer.md │ │ ├── MERLIN,-LET-and-WISH-Oscillating-radial-collimators.md │ │ ├── Motion-Set-points.md │ │ ├── ORC.png │ │ ├── Portable-Eulerian-Cradle.md │ │ ├── SANS2D-Front-Beam-Stop-inhibit-movement.md │ │ ├── SANS2D-apertures-and-guides.md │ │ ├── SANS2D-vacuum-tank-collision-avoidance.md │ │ ├── Sample-Changer-Support-Module.md │ │ ├── Tosca-sample-positioner.md │ │ ├── collision_detection │ │ │ ├── Grazing.PNG │ │ │ ├── Inclined.PNG │ │ │ ├── Oversize.PNG │ │ │ └── ScreenShot.png │ │ ├── jaws │ │ │ ├── Barndoors-and-Momentum-Slits-on-MUON-Front-End.md │ │ │ ├── EnginX-Jaws.md │ │ │ ├── GEM-Beamscraper-Jaws.md │ │ │ ├── Gem-Jaws-Manager.md │ │ │ ├── Jaws-Managers.md │ │ │ ├── Nimrod-Jaws-Manager.md │ │ │ ├── Polaris-Jaws.md │ │ │ └── polaris_jaws.png │ │ ├── mari_sample_changer_belt.gif │ │ ├── mari_sample_changer_joint.gif │ │ ├── motionSetpoints.png │ │ ├── split_jaws.jpg │ │ └── standard_jaws.jpg │ ├── motor_hardware_structure.JPG │ ├── motors │ │ ├── Add-support-for-motor-extras.md │ │ ├── Adding-motor-IOC-to-global-motor-moving-and-stop-all.md │ │ ├── Attocube.md │ │ ├── Beckhoff.md │ │ ├── Clearing-the-Motors-are-Moving-state.md │ │ ├── EnginX-Sample-Positioner.md │ │ ├── Galil.md │ │ ├── Linmot.md │ │ ├── McLennan-motors.md │ │ ├── Motors-Trouble-Shooting-w1-fault.png │ │ ├── Motors-Trouble-Shooting.md │ │ ├── Newport.md │ │ ├── PI-Rotation-Stage-setup.md │ │ ├── SM300.md │ │ ├── SMC100.md │ │ ├── SXD-Attocube.md │ │ ├── Set-the-raw-position-of-the-motor-without-moving-it.md │ │ ├── beckhoff │ │ │ ├── Activate.PNG │ │ │ ├── Beckhoff-commissioning.md │ │ │ ├── Beckhoff-testing-windows-features.png │ │ │ ├── Beckhoff-testing.md │ │ │ ├── Beckhoff-troubleshooting.md │ │ │ ├── Beckhoffs-‐-simulate-an-instrument.md │ │ │ ├── Login.PNG │ │ │ ├── Run.PNG │ │ │ ├── beckhoff_overview.png │ │ │ └── tcIOC_motor_support.png │ │ ├── galil │ │ │ ├── Differences-between-real-Galil-and-simulated-motor.md │ │ │ ├── Galil-Homing-Routine-Steps.md │ │ │ ├── Galil-Instrument-Configuration.md │ │ │ ├── Galil-Userdef-Records.md │ │ │ ├── Galil-default-parameters.md │ │ │ ├── Galil-homing-routines.md │ │ │ ├── IMAT-tomography-stages.md │ │ │ ├── Multi-galil-IOC.md │ │ │ ├── New-Galil-Driver.md │ │ │ ├── Resetting-HOMEVAL.md │ │ │ ├── Smoothing-Motor-Readback.md │ │ │ └── Updating-old-galil-driver.md │ │ ├── mclennan │ │ │ ├── HRPD-homing-sequence.md │ │ │ └── Vesuvio-homing-sequence.md │ │ ├── motor_details_Calibration_Set.png │ │ ├── motor_details_Calibration_Use.png │ │ ├── motor_details_Drive.png │ │ └── motor_summary.png │ ├── multimeters │ │ ├── Keithley-2000.md │ │ ├── Keithley-2001.md │ │ ├── Keithley-2400.md │ │ ├── Keithley-2420-(POLARIS-Thermoelectric-cell).md │ │ ├── Keithley-2700.md │ │ ├── Keithley-6517B.md │ │ ├── Keysight-1.jpg │ │ ├── Keysight-2.jpg │ │ └── Keysight-E4980AL-LCR-Meter.md │ ├── other │ │ ├── AnywhereUSB.md │ │ ├── Arduino-RKNDIO-PLC-control.md │ │ ├── Background-Script-IOC.md │ │ ├── CAEN-Hexagon.md │ │ ├── CAEN-v895.md │ │ ├── Catalytic-Flow-Reactor.md │ │ ├── Coherent-OBIS-Laser-Remote.md │ │ ├── Ferro-Magnetic-Resonance-equipment.jpg │ │ ├── Ferro-Magnetic_Resonance_equipment.md │ │ ├── Gamry.md │ │ ├── Hameg-HM8123.md │ │ ├── Humidity-Controller.md │ │ ├── Inhibitor.md │ │ ├── LOTQD-MSH150-Monochromator.md │ │ ├── LSi-Correlator.md │ │ ├── MOXA-e12XX.md │ │ ├── Ocean-Optics-DH-2000-Shutter-control.md │ │ ├── RAMAN-Spectrometer.md │ │ ├── Rotating-Stirrer-Rack.md │ │ ├── SDTest.md │ │ ├── SP300-Potentiostat.md │ │ ├── Stanford-SR850.md │ │ ├── Thorlabs-FW102C-Filter-Wheel.md │ │ ├── nGEM-detector.md │ │ ├── state_diagram.gif │ │ └── state_diagram.pptx │ ├── plcs │ │ ├── Helium-Recovery-PLC.md │ │ ├── Omron-FINS.md │ │ ├── RIKEN-PLC.md │ │ ├── SANS2D-vacuum-PLC.md │ │ └── Schneider-PLC.md │ ├── polarisers_and_analysers │ │ ├── CRISP-Spin-Flipper.md │ │ └── Mezei-Spin-Flipper.md │ ├── power_supplies │ │ ├── CAEN.md │ │ ├── CAENHVAsyn.png │ │ ├── Keithley-2290.md │ │ ├── Kepco.md │ │ ├── Razorbill-RP100-Strain-Cell-PSU.md │ │ ├── Technix-PSU.md │ │ ├── Thurlby-Thandar-TTI-PLP-Power-Supply.md │ │ └── Thurlby-Thandar-TTiEX355P-Power-Supply-Unit.md │ ├── pressure_monitors │ │ ├── CCD100.md │ │ ├── MEASM905-Pressure-Transducer.md │ │ ├── OERCONE.md │ │ ├── Omega_IBTHX.md │ │ ├── PACE5000.md │ │ ├── TPG26x.md │ │ ├── TPG36x.md │ │ └── TPGx00.md │ ├── reflectometry │ │ ├── Beamlines.md │ │ ├── Config-Training.md │ │ ├── Design-Docs.md │ │ ├── Reflectometers-Beam-Height-Calc.md │ │ ├── Reflectometry-Alignment.md │ │ ├── Reflectometry-Beam-Blocker.md │ │ ├── Reflectometry-Beamline-Object.md │ │ ├── Reflectometry-Beamline-Parameters.md │ │ ├── Reflectometry-Composite-Driving-Layer.md │ │ ├── Reflectometry-Configuration.md │ │ ├── Reflectometry-Geometry-Components.md │ │ ├── Reflectometry-Glossary.md │ │ ├── Reflectometry-Testing.md │ │ ├── Reflectometry-Troubleshooting-and-FAQ.md │ │ ├── beamlines │ │ │ ├── POLREF_1.jpg │ │ │ ├── POLREF_2.jpg │ │ │ ├── Reflectomtery-IOC-CRISP.md │ │ │ ├── Reflectomtery-IOC-INTER.md │ │ │ ├── Reflectomtery-IOC-POLREF.md │ │ │ ├── Reflectomtery-IOC-SURF.md │ │ │ └── tests_POLREF_2020_08_20.xlsx │ │ ├── config_training │ │ │ ├── Beamline.png │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-1.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-2.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-3.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-4.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-5.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-6.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-7.md │ │ │ ├── Reflectometry-Config-Training-‐-Exercise-8.md │ │ │ ├── Reflectometry-Config-Training-‐-Overview-&-Setup.md │ │ │ └── refl_beamline_setup.PNG │ │ ├── design_docs │ │ │ ├── Reflectometers-Science.md │ │ │ └── Reflectometers.md │ │ ├── images │ │ │ ├── AxesOnPolref.png │ │ │ ├── AxesOnPolrefVertical.png │ │ │ ├── Beamline.png │ │ │ ├── BeamlineMoveEvents.png │ │ │ ├── ComponentArchitecture.png │ │ │ ├── GeneralIntersect.png │ │ │ ├── Interpolated2DExample.png │ │ │ ├── MotorReadbackChangeEvents.png │ │ │ ├── Non-small_angle_approx.png │ │ │ ├── Non_small_angle_approx_2_angles.png │ │ │ ├── POLREF.jpg │ │ │ ├── POLREF_sketch.png │ │ │ ├── ReadbackSequenceEvents.png │ │ │ ├── Reflectometry1.vsdx │ │ │ ├── Reflectometry_IBEX_Dashboard.PNG │ │ │ ├── RelativeParameterWithMotor.png │ │ │ ├── TS1_and_TS2_nr_mode.png │ │ │ ├── beam_blocker.png │ │ │ ├── bench_movement.png │ │ │ ├── example_single_move.PNG │ │ │ ├── phi_scan.png │ │ │ ├── polarised_mode.png │ │ │ ├── refl_beamline_setup.PNG │ │ │ ├── reflectometry_basic.jpg │ │ │ ├── sp_inits.png │ │ │ └── theta_scan.png │ │ ├── phi_scan.png │ │ ├── reflectometry-bench-configuration.md │ │ ├── reflectometry_blind_script.md │ │ ├── reflectometry_blind_script_output.md │ │ └── theta_scan.png │ ├── rheometers │ │ └── Couette-Cell.md │ ├── sensors │ │ ├── Anton-Paar-L‐Dens-3300-Density-Sensor.md │ │ ├── Keyence-LK-G.md │ │ └── Micro-Epsilon-confocal-rangefinder.md │ ├── signal_generators │ │ ├── Aeroflex.md │ │ ├── Agilent-33220A.md │ │ ├── Litron-Laser-Timing-Control-(Stanford-DG645).md │ │ ├── Stanford-DG645.md │ │ ├── Tektronix-AFG3XXX.md │ │ ├── Weeder-WTDAC-M.md │ │ └── litron_opi.png │ └── temp_controllers │ │ ├── Automatic-Needle-Valve-Controller.md │ │ ├── Eurotherm.md │ │ ├── ISIS-Environment-Monitor.md │ │ ├── In-Situ-DSC.md │ │ ├── Induction-furnace.md │ │ ├── Julabo.md │ │ ├── LKSH340ExcitationsEPICS.png │ │ ├── Lakeshore336.md │ │ ├── Lakeshore340.md │ │ ├── Lakeshore350.md │ │ ├── Lakeshore372.md │ │ ├── Neocera-LTC-21.md │ │ ├── OMEGA-OME-Wise.md │ │ ├── Ral-furnaces.md │ │ ├── Temperature-Jump-Apparatus.md │ │ └── julabo_commands.xlsx ├── spelling_wordlist.txt ├── system_components │ ├── ActiveMQ.md │ ├── Alarm-preferences.png │ ├── Alarms.md │ ├── BlockServer.md │ ├── CSS-Archive-Engine.md │ ├── Central-archiver-appliance.md │ ├── DatabaseServer.md │ ├── Gateway.md │ ├── IOC-message-logging.md │ ├── Inst-etc-IOC.md │ ├── Journal-Viewer.md │ ├── LabVIEW.md │ ├── LogPreferences.png │ ├── Logging-from-the-archive.md │ ├── MySQL-Database.md │ ├── Nicos.md │ ├── PVAccess-gateways-(p4p).md │ ├── Python.md │ ├── Remote-IOCs.md │ ├── Run-control.md │ ├── Settings-and-Configurations.md │ ├── Startup-and-Shutdown.md │ ├── alarms │ │ ├── Building-the-alarm-server-for-mysql.md │ │ └── Using-the-alarm-server-with-mysql.md │ ├── archive │ │ ├── Building-the-archive-engine-for-mysql.md │ │ ├── CSS-Troubleshooting.md │ │ └── Using-the-archive-engine-with-mysql.md │ ├── blockserver │ │ ├── BlockServer-Structure.md │ │ ├── BlockServer_General.uxf │ │ ├── Blockserver-Trouble-Shooting.md │ │ ├── ConfigHolders.uxf │ │ ├── Dynamic-components-(component-switcher).md │ │ ├── channel_access_uml.png │ │ ├── config_list_uml.png │ │ ├── config_servers_uml.png │ │ ├── configs_uml.png │ │ ├── file_watcher_uml.png │ │ └── full_uml.png │ ├── configurations │ │ ├── Calibration-Files.md │ │ ├── Configuration-Rules.md │ │ ├── Dashboard.md │ │ ├── PV-Sets.md │ │ ├── PV-Values.md │ │ ├── Spangle-banner.md │ │ ├── banner_customisation.png │ │ └── dashboard.PNG │ ├── iocLogArchitecture.png │ ├── journal_viewer │ │ └── Journal-Viewer-Data.md │ ├── labview │ │ ├── Complexity-of-LabVIEW-Drivers.md │ │ ├── LabVIEW-errors.md │ │ └── LabVIEW-memory-warning-in-nagios.md │ ├── logViewer.png │ ├── mysql │ │ ├── Database-Schemas.md │ │ ├── Database-Troubleshooting.md │ │ ├── experiment_details_database.png │ │ ├── ioc_database.png │ │ └── message_log_database.png │ ├── nicos │ │ ├── Configuring-a-New-Nicos-Instrument.md │ │ ├── Design-Documents.md │ │ ├── Developing-NICOS.md │ │ ├── Installing-Nicos-on-Windows.md │ │ ├── NICOS-commands.md │ │ ├── NICOS-notes.md │ │ ├── Running-Nicos-(Script-Server).md │ │ ├── Testing-Nicos.md │ │ └── design_docs │ │ │ ├── Back_End_Design.png │ │ │ ├── Backend_Design.png │ │ │ ├── DynamicScripting.drawio.png │ │ │ ├── Nicos-evaluation.md │ │ │ ├── ProxyDesign.png │ │ │ ├── Scan_Server_Annotated.png │ │ │ ├── Scan_Server_IBEX_manual_edit_mockup.png │ │ │ ├── Scan_Server_IBEX_mockup.png │ │ │ ├── Script-Server-Back-End-Design-Document.md │ │ │ ├── Script-Server-Front-End-Design-Document.md │ │ │ ├── Script-server-design.md │ │ │ └── Scripting-use-cases.md │ ├── python │ │ ├── Building-and-installing-uktena.md │ │ ├── Graylog.md │ │ ├── Python-Circular-Dependencies-Resolution.md │ │ ├── Python-conventions.md │ │ ├── Python-dependencies.md │ │ └── graylog_screenshot.png │ ├── remoteIOCArchitecture.png │ └── startup │ │ └── Mini-inst-Troubleshooting.md ├── systems │ ├── External.md │ ├── Inst-Control.md │ ├── Nagios.md │ ├── Test-Machines.md │ ├── Webserver.md │ ├── control-svcs.md │ ├── control_svcs │ │ └── Alert-Relay.md │ ├── external │ │ ├── Beam-Status,-Shutter,-accelerator-and-moderator-information.md │ │ ├── ICAT-Troubleshooting.md │ │ └── IDAaaS.md │ ├── inst_control │ │ ├── Archive-Watcher.md │ │ ├── Automated-log-rotation.md │ │ ├── Change-Windows-Theme.md │ │ ├── Computer-Troubleshooting.md │ │ ├── Data-Generation-and-Storage-on-Instrument-PCs-(NDX's).md │ │ ├── DataVolumns_resolution.xlsx │ │ ├── Increase-VM-memory.md │ │ ├── MDT-(Microsoft-deployment-toolkit).md │ │ ├── PS-Remote.md │ │ ├── Rebuild-Performance-Counters.md │ │ ├── Register-SELOGCOM-in-COM-Plus.md │ │ ├── Script-to-connect-to-all-instruments.md │ │ ├── TreeSize-Pro.md │ │ ├── cron-jobs-and-windows-scheduled-tasks.md │ │ ├── mdt │ │ │ ├── Building-a-windows-10-MDT-build-server.md │ │ │ └── Building-a-windows-10-instrument-machine-from-MDT.md │ │ ├── rdp_smart_screen.png │ │ ├── vm-memory-change-memory.png │ │ ├── vm-memory-connect-to-vm.png │ │ ├── vm-memory-hyper-v-icon.png │ │ └── vm-memory-use-hardware-topology.png │ └── nagios │ │ └── Adding-new-cycle-for-nagios-notifications.md ├── tools │ ├── Archive-Tools.md │ ├── CA-snooper.md │ ├── Check-db-file.md │ ├── Common-config-upgrade-steps.md │ ├── Config-Checker.md │ ├── Config-IOC-Finder.md │ ├── Config-Upgrader.md │ ├── Gollum-wikis.md │ ├── Moxa-Tools.md │ ├── Network-traffic.md │ ├── Shared-utility-scripts.md │ ├── Wiki-Checks.md │ ├── archive_tools │ │ ├── Archive-Event-Log.md │ │ ├── Archive-Time-Log.md │ │ ├── Restore-Motor-Positions-from-Archive.md │ │ └── archive-rates.md │ └── moxa_tools │ │ ├── MOXAUTIL-command.md │ │ └── Moxa-configurator.md └── webdashboard │ ├── ISIS-Info-Slack.md │ ├── MCR-News-in-Teams.md │ ├── PVWS.md │ ├── Web-Dashboard.md │ ├── dataweb_ architecture.xml │ └── dataweb_architecture.png ├── pyproject.toml ├── src └── ibex_developers_manual │ ├── __init__.py │ └── sort_word_list │ ├── __init__.py │ └── __main__.py ├── testing_scripts ├── genie_python_blocks.py └── genie_python_dae.py └── tests └── test_wordlist.py /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.md text 3 | *.rst text 4 | *.rest text 5 | -------------------------------------------------------------------------------- /.github/workflows/documentation.yml: -------------------------------------------------------------------------------- 1 | name: sphinx 2 | 3 | on: [push, workflow_call] 4 | 5 | jobs: 6 | spellcheck: 7 | runs-on: "windows-latest" 8 | steps: 9 | - uses: actions/checkout@v4 10 | with: 11 | fetch-depth: 0 12 | - uses: actions/setup-python@v5 13 | with: 14 | python-version: "3.12" 15 | - name: install requirements 16 | run: pip install -e .[dev] 17 | - name: run pytest 18 | run: python -m pytest 19 | - name: run spellcheck 20 | run: sphinx-build -E -a -W --keep-going -b spelling doc _build 21 | build: 22 | uses: ISISComputingGroup/reusable-workflows/.github/workflows/sphinx.yml@main 23 | secrets: inherit 24 | with: 25 | deploy-branch: "master" 26 | -------------------------------------------------------------------------------- /.github/workflows/nightly.yml: -------------------------------------------------------------------------------- 1 | name: nightly 2 | on: 3 | schedule: 4 | - cron: "0 0 * * *" 5 | workflow_dispatch: 6 | 7 | jobs: 8 | nightly: 9 | uses: ./.github/workflows/documentation.yml 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The IBEX Developer's Manual 2 | 3 | [Click here to go to the GitHub wiki with the developer's manual.](https://isiscomputinggroup.github.io/ibex_developers_manual/) 4 | -------------------------------------------------------------------------------- /doc/Client.md: -------------------------------------------------------------------------------- 1 | # IBEX GUI (Eclipse) 2 | 3 | ## Getting Started 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | 9 | client/GUI-Building 10 | client/GUI-Coding 11 | client/GUI-Testing 12 | client/GUI-Eclipse 13 | client/GUI-CSS 14 | client/GUI-Other 15 | client/GUI-Troubleshooting 16 | client/GUI-Design 17 | ``` 18 | -------------------------------------------------------------------------------- /doc/Deployment.md: -------------------------------------------------------------------------------- 1 | # Releases & Deployment 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | deployment/Creating-a-release 8 | deployment/Manual-System-Tests 9 | deployment/Deploy 10 | deployment/Patch 11 | deployment/Future 12 | ``` 13 | -------------------------------------------------------------------------------- /doc/Processes.md: -------------------------------------------------------------------------------- 1 | # Processes 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | processes/* 8 | ``` 9 | -------------------------------------------------------------------------------- /doc/ScriptGenerator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/ScriptGenerator.png -------------------------------------------------------------------------------- /doc/Scripting.md: -------------------------------------------------------------------------------- 1 | # Scripting (Python) 2 | 3 | ```{note} 4 | These pages document user-facing scripting workflows. Looking for developer information about python? See [Python](system_components/Python). 5 | ``` 6 | 7 | ```{toctree} 8 | :glob: 9 | :titlesonly: 10 | 11 | scripting/* 12 | ``` 13 | 14 | -------------------------------------------------------------------------------- /doc/Specific-IOCs.md: -------------------------------------------------------------------------------- 1 | # Specific Devices & IOCs 2 | 3 | These are the list of categories for an IOC. There are details relating to specific device IOCs listed from within the categories where applicable. Most IOC control a device which has [manuals](iocs/conventions/Manuals). 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | :maxdepth: 1 9 | 10 | specific_iocs/* 11 | ``` 12 | -------------------------------------------------------------------------------- /doc/Systems.md: -------------------------------------------------------------------------------- 1 | # Systems Administration & Hardware 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | systems/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/Web.md: -------------------------------------------------------------------------------- 1 | # Web Dashboard & Chat 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | webdashboard/Web-Dashboard 8 | webdashboard/PVWS 9 | webdashboard/ISIS-Info-Slack 10 | webdashboard/MCR-News-in-Teams 11 | ``` 12 | 13 | ```{seealso} 14 | - [WebServer](systems/Webserver), for the physical computer on which the web dashboard is hosted. 15 | ``` 16 | -------------------------------------------------------------------------------- /doc/_static/css/custom.css: -------------------------------------------------------------------------------- 1 | .wy-table-responsive table td, .wy-table-responsive table th { 2 | white-space: inherit; 3 | } 4 | 5 | a:hover { 6 | color: #01afec; 7 | } 8 | 9 | .wy-menu-vertical p.caption { 10 | color: #01afec; 11 | } 12 | .wy-nav-content { 13 | max-width: 1200px !important; 14 | } 15 | 16 | @keyframes highlight { 17 | 0% { 18 | background: #01afec; 19 | } 20 | 100% { 21 | background: none; 22 | } 23 | } 24 | 25 | :target { 26 | animation: highlight 3s; 27 | } 28 | -------------------------------------------------------------------------------- /doc/_templates/custom-module-template.rst: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ ('``' + fullname + '``') | underline }} 4 | 5 | {%- set filtered_members = [] %} 6 | {%- for item in members %} 7 | {%- if item in functions + classes + exceptions + attributes %} 8 | {% set _ = filtered_members.append(item) %} 9 | {%- endif %} 10 | {%- endfor %} 11 | 12 | .. automodule:: {{ fullname }} 13 | :members: 14 | :show-inheritance: 15 | 16 | {% block modules %} 17 | {% if modules %} 18 | .. rubric:: Submodules 19 | 20 | .. autosummary:: 21 | :toctree: 22 | :template: custom-module-template.rst 23 | :recursive: 24 | {% for item in modules %} 25 | {{ item }} 26 | {%- endfor %} 27 | {% endif %} 28 | {% endblock %} 29 | 30 | {% block members %} 31 | {% if filtered_members %} 32 | .. rubric:: Members 33 | 34 | .. autosummary:: 35 | :nosignatures: 36 | {% for item in filtered_members %} 37 | {{ item }} 38 | {%- endfor %} 39 | {% endif %} 40 | {% endblock %} -------------------------------------------------------------------------------- /doc/client/GUI-Building.md: -------------------------------------------------------------------------------- 1 | # Building 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | compiling/* 8 | ``` 9 | -------------------------------------------------------------------------------- /doc/client/GUI-Coding.md: -------------------------------------------------------------------------------- 1 | # Coding 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | coding/* 8 | ``` -------------------------------------------------------------------------------- /doc/client/GUI-Design.md: -------------------------------------------------------------------------------- 1 | # Design Documents 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | design_docs/* 8 | ``` -------------------------------------------------------------------------------- /doc/client/GUI-Eclipse.md: -------------------------------------------------------------------------------- 1 | # Eclipse 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | eclipse/* 8 | ``` -------------------------------------------------------------------------------- /doc/client/GUI-Other.md: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | misc/* 8 | ``` -------------------------------------------------------------------------------- /doc/client/GUI-Testing.md: -------------------------------------------------------------------------------- 1 | # Testing 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | testing/* 8 | ``` -------------------------------------------------------------------------------- /doc/client/GUI-Troubleshooting-remote-debugging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/GUI-Troubleshooting-remote-debugging.png -------------------------------------------------------------------------------- /doc/client/coding/IBEX_complete_DAE_readonly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/IBEX_complete_DAE_readonly.png -------------------------------------------------------------------------------- /doc/client/coding/IBEX_complete_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/IBEX_complete_clean.png -------------------------------------------------------------------------------- /doc/client/coding/IBEX_complete_perspective_switcher_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/IBEX_complete_perspective_switcher_highlighted.png -------------------------------------------------------------------------------- /doc/client/coding/basic_principle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/basic_principle.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_add_icons_to_build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_add_icons_to_build.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_add_perspective_plugin1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_add_perspective_plugin1.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_add_perspective_plugin2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_add_perspective_plugin2.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_adding_a_View.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_adding_a_View.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_adding_a_package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_adding_a_package.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_extensions_added1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_extensions_added1.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_extensions_added2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_extensions_added2.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_extensions_added3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_extensions_added3.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_extensions_added4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_extensions_added4.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_extensions_added5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_extensions_added5.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_no_extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_no_extensions.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_perspective_copy_errors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_perspective_copy_errors.png -------------------------------------------------------------------------------- /doc/client/coding/eclipse_select_extension_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/eclipse_select_extension_point.png -------------------------------------------------------------------------------- /doc/client/coding/new_switching.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/new_switching.jpg -------------------------------------------------------------------------------- /doc/client/coding/new_switching_writables.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/new_switching_writables.jpg -------------------------------------------------------------------------------- /doc/client/coding/parent_pom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/coding/parent_pom.png -------------------------------------------------------------------------------- /doc/client/compiling/eclipse_clear_workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/compiling/eclipse_clear_workspace.png -------------------------------------------------------------------------------- /doc/client/compiling/eclipse_import_ibex_gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/compiling/eclipse_import_ibex_gui.png -------------------------------------------------------------------------------- /doc/client/compiling/eclipse_target_platform_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/compiling/eclipse_target_platform_view.png -------------------------------------------------------------------------------- /doc/client/compiling/eclipse_workspace_selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/compiling/eclipse_workspace_selection.png -------------------------------------------------------------------------------- /doc/client/css_other/Malformed-URL-errors.md: -------------------------------------------------------------------------------- 1 | # Malformed URL errors 2 | 3 | It is possible for the project files in the CS Studio application to become out of sync with what you have on disk. In this circumstance when attempting to load OPIs you will receive a malformed URL error message. 4 | 5 | To fix this you can complete the following steps: 6 | 7 | 1. Delete the project files from the project using the Navigation view on the right of the screen. Be sure you do NOT check `'Delete project contents from disk'`. 8 | 2. Right click in the Navigation view white space (same location the project files were deleted from) and select `Import...`. 9 | 3. From the Import view select `Existing Projects into Workspace` and click Next. 10 | 4. Browse to your resources directory and click Finish. 11 | 12 | The project files will now be correctly loaded and it is recommended you restart CS Studio at this point to update the GUI menus. 13 | -------------------------------------------------------------------------------- /doc/client/design_docs/Client-Architectural-Design.md: -------------------------------------------------------------------------------- 1 | # Client Architectural Design 2 | 3 | This document describes the architectural design for the IBEX client. Eventually there should be outlines of the architectural design for each part of the high level design. 4 | 5 | ### Client Design Overview 6 | 7 | ![Client Architecture](client_architecture.png) 8 | 9 | Notes on the figure: 10 | 11 | * CA - Channel Access 12 | * JDBC - Java Database Connectivity 13 | * JMS - Java Messaging Service 14 | 15 | ### Eclipse RCP 16 | 17 | The IBEX client is based on Eclipse RCP (Rich Client Platform). 18 | 19 | ### CS-Studio 20 | 21 | The client makes use of CS-Studio components such as: 22 | 23 | * Alarm Perspective 24 | * Data Browser (called Log Plotter in the IBEX Client) 25 | * OPI Views 26 | * PV Manager 27 | 28 | ... and others to be listed later. 29 | 30 | ### PyDev 31 | 32 | IBEX uses PyDev to provide the Python scripting window in the IBEX client. 33 | -------------------------------------------------------------------------------- /doc/client/design_docs/IBEX_UI_New_OPI_View.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/design_docs/IBEX_UI_New_OPI_View.png -------------------------------------------------------------------------------- /doc/client/design_docs/client_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/design_docs/client_architecture.png -------------------------------------------------------------------------------- /doc/client/design_docs/config_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/design_docs/config_architecture.png -------------------------------------------------------------------------------- /doc/client/eclipse/Eclipse-RCP.md: -------------------------------------------------------------------------------- 1 | # Eclipse RCP 2 | 3 | We have two books which should serve as a reasonable introduction to the Eclipse RCP platform: 'Eclipse Rich Client Platform' by McAffer, Lemieux and Aniszczyk, and 'Eclipse 4 Application Development' by Vogel. Most of the contents of the latter book can be found on the Vogella website along with a large number of additional Eclipse RCP and JFace tutorials. 4 | 5 | ### E4 and compatibility views (e.g. `org.eclipse.ui.console`) 6 | 7 | Although we run an E4 product, we are able to load E3-style plugins via the eclipse compatibility layer. However, [any UI element referred to via the compatibility layer must be defined as a shared element in the client E4XMI, not defined in a snippet](https://www.eclipse.org/forums/index.php/t/358552/) as this does not work correctly with certain UI actions - for example, resetting layouts. -------------------------------------------------------------------------------- /doc/client/eclipse/Eclipse-preferences.md: -------------------------------------------------------------------------------- 1 | # Eclipse preferences 2 | 3 | There are two sorts of settings. 4 | 5 | `System.getProperty("x")` will read a setting supplied on the command line as `-Dx=value`. To set in Eclipse go to "Run/Run Configurations..." and add to the "VM arguments" on the Arguments tab 6 | 7 | The second sort are Eclipse preferences. On the plugin's extensions tab under "org.eclipse.core.runtime.products/???? (product)" there should be a preferenceCustomization proper whose value is the name of the preferences file. In that file set a property like: 8 | 9 | ``` 10 | org.csstudio.isis.product/prefix = NDW1298:sjb99183: 11 | ``` 12 | 13 | To access it from org.csstudio.isis.product: 14 | 15 | ``` 16 | prefix = DefaultScope.INSTANCE.getNode(Activator.PLUGIN_ID).get("prefix", "no found"); 17 | ``` 18 | -------------------------------------------------------------------------------- /doc/client/eclipse/log_pref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/eclipse/log_pref.png -------------------------------------------------------------------------------- /doc/client/eclipse/log_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/eclipse/log_ui.png -------------------------------------------------------------------------------- /doc/client/misc/Icon-Licences.md: -------------------------------------------------------------------------------- 1 | # Icon Licences 2 | 3 | Icon licences are available to view in the IBEX GUI from the `Help -> Icon Licences` dialog on the main window. 4 | 5 | ## Crediting icon licences 6 | 7 | When adding new icons ensure that the correct licence is included in the icon licences file. This is located at `uk.ac.stfc.isis.ibex.e4.ui.help.resources/iconlicences.txt`. The icon licences file is structured so that each package has a subsection with a path to the icons resource folder. The icons name must be listed and the associated licence. 8 | -------------------------------------------------------------------------------- /doc/client/opis/opi_script_options_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/opis/opi_script_options_1.png -------------------------------------------------------------------------------- /doc/client/opis/opi_script_options_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/opis/opi_script_options_2.png -------------------------------------------------------------------------------- /doc/client/testing/coverage_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/testing/coverage_result.png -------------------------------------------------------------------------------- /doc/client/testing/failed_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/testing/failed_test.png -------------------------------------------------------------------------------- /doc/client/testing/passed_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/client/testing/passed_test.png -------------------------------------------------------------------------------- /doc/deployment/Deploy.md: -------------------------------------------------------------------------------- 1 | # Deployment 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | deploy/Updating-Instrument-Machines 8 | deploy/Deployment-on-an-Instrument-Control-PC 9 | deploy/Configure-Mini-Inst 10 | deploy/Client-Release-Tests 11 | deploy/Server-Release-Tests 12 | deploy/IBEX-Deployment-on-Training-machine 13 | deploy/Deploy-script-workflow 14 | deploy/Autostart-IBEX-on-Computer-Restart 15 | deploy/Making-an-Instrument-Available-from-the-GUI 16 | deploy/Creating-a-new-branch-for-IBEX-configurations 17 | deploy/Reviewing-Deploy-Tickets 18 | deploy/Upgrade-ISISICP 19 | deploy/Upgrade-Java 20 | deploy/Installing-and-Upgrading-MySQL 21 | deploy/NPort-install 22 | ``` -------------------------------------------------------------------------------- /doc/deployment/Future.md: -------------------------------------------------------------------------------- 1 | # Future Workflows 2 | 3 | ```{warning} 4 | The workflows in this tree are **not currently in use**. They document steps towards future deployment workflows, which have 5 | not yet been fully implemented. It is not currently possible to deploy IBEX using these workflows directly. 6 | ``` 7 | 8 | ```{toctree} 9 | :glob: 10 | :maxdepth: 1 11 | 12 | future_workflows/* 13 | ``` -------------------------------------------------------------------------------- /doc/deployment/Patch.md: -------------------------------------------------------------------------------- 1 | # Patching 2 | 3 | How to patch or hotfix a new change onto an instrument which already has IBEX. 4 | 5 | ```{toctree} 6 | :glob: 7 | :maxdepth: 1 8 | 9 | patch/* 10 | ``` 11 | 12 | :::{seealso} 13 | See also [powershell remoting](/systems/inst_control/PS-Remote) for a script to apply patches to many instruments simultaneously. 14 | ::: 15 | -------------------------------------------------------------------------------- /doc/deployment/deploy/Creating-a-new-branch-for-IBEX-configurations.md: -------------------------------------------------------------------------------- 1 | # Creating a new branch for IBEX configurations 2 | 3 | This creates the repository to save all the IBEX configurations for a new instrument. 4 | 5 | 1. Navigate to `C:\Instrument\Settings\NDXxxxx` in a git bash terminal on an IBEX developer's machine (i.e. not an instrument) 6 | 1. Note the current branch you are on, usually this is will be the name of the machine you are working on, e.g. `NDXxxxx` 7 | 1. Review and commit any changes you have on your current branch 8 | 1. Run `git checkout master` and `git pull` to get the latest copy of the base configuration 9 | 1. Remove any uncommitted changes you have on your branch 10 | * NOTE: This may delete some uncommitted changes that you may wish to keep. Ensure these are all committed before running `git clean -fdx` 11 | 1. Create and checkout a new branch for the instrument using `git checkout -b NDXyyyy` where `yyyy` is the name of the instrument in capital letters 12 | 1. Run the [config upgrader](#config_upgrade_script) to get this into an up to date state 13 | 1. Run `git push` to push your changes to the main git repository 14 | 1. `git checkout NDXxxxx` will get you back to your local configuration -------------------------------------------------------------------------------- /doc/deployment/deploy/IBEX-Deployment-on-Training-machine.md: -------------------------------------------------------------------------------- 1 | # Deploy to a training machine 2 | 3 | Training machines have there own deployment script. It is similar but not the same as the usual instrument upgrade/deployment. It removes all previous traces of IBEX on the system and then installs it as if it was a clean machine. It also installs some training material and a training config. 4 | 5 | Steps: 6 | 7 | 1. Make sure that the install script has been pulled it is in `...isis experiment controls public share\ibex_utils` 8 | 1. Open a command line inside the `installation_and_upgrade` folder 9 | 1. Run `training_update.bat` 10 | 1. Follow the steps until the end 11 | 12 | On register step 13 | Copy contents of C:\Instrument\Apps\EPICS\ICP_Binaries\isisdae\x64\visa to C:\Instrument\Apps\EPICS\ICP_Binaries\isisdae\x64\Release 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/deployment/deploy/Installing-and-Upgrading-MySQL.md: -------------------------------------------------------------------------------- 1 | # MySQL 2 | 3 | ## Installation 4 | 5 | There is a script to automatically install MySQL 8. You can find it in `\\isis\shares\ISIS_Experiment_Controls_Public\ibex_utils\installation_and_upgrade\upgrade_mysql.bat` 6 | 7 | ## Troubleshooting 8 | 9 | ### The installer is complaining that it needs a new version of the .NET framework 10 | 11 | This may just be an issue with the installer rather than with MySQL itself. There is a workaround that lets you avoid having to install a new .NET framework: 12 | 1. Use an installer for an older version of MySQL 13 | 1. Once complete, run the MySQL Community Installer from the start menu 14 | 1. Click on the "Catalog..." button. Follow the prompts to download the latest MySQL product catalog. 15 | 1. Once that is done, click on the "Upgrade" button on the MySQL installer home page. Here you can manually select the version you would like to install. 16 | 17 | ``` 18 | -------------------------------------------------------------------------------- /doc/deployment/deploy/NPort-install.md: -------------------------------------------------------------------------------- 1 | # Moxa NPort 2 | 3 | To install/upgrade NPort driver: 4 | 5 | 1. Use remote desktop because you need admin privileges 6 | 1. Open NPort admin and note the IP address, Com ports and moxa ports for the current config (NB there maybe be multiple moxas) 7 | 1. Uninstall NPort using windows add/remove programs 8 | 1. Install the latest NPort software from `...\installs\Installs\Applications\LabVIEW\Other bits\LabVIEW related\MOXA\MOXA NPort` 9 | 1. Open NPort Admin 10 | 1. Click Add 11 | 1. Search for the NPort (click stop when it times out) 12 | 1. Clear All, then select the moxa you are using 13 | 1. Click OK, do not activate ports 14 | 1. Select all ports 15 | 1. Click Settings 16 | 1. Under basic settings Click "Auto Enumerating COM Number for Selected Ports" 17 | 1. Set Com to correct port (probably port 5) 18 | 1. Click OK. 19 | 1. Click Apply. 20 | 1. Ignore the message about setting moxa to real port. 21 | 1. Close NPort administrator 22 | 23 | If the upon clicking apply you are told the port is in use, you may need to move to using NPort Driver Manager instead, it can be found here `\\isis\inst$\Kits$\CompGroup\Utilities\MOXA Nport Software` 24 | -------------------------------------------------------------------------------- /doc/deployment/deploy/Reviewing-Deploy-Tickets.md: -------------------------------------------------------------------------------- 1 | # Reviewing deploy tickets 2 | 3 | Once a deploy has been finished and the ticket requires a review the following tasks should be done to review the ticket: 4 | 5 | - Connect to the machines deployed to and check the current versions of the GUI and server. (In the gui select about, the GUI and Server version numbers should be listed). 6 | - Check that any hotfixes have appropriate tickets. 7 | - Ensure hotfixes are linked at https://github.com/ISISComputingGroup/IBEX/wiki#instrument-information--hotfixes, and versions are linked at http://beamlog.nd.rl.ac.uk/inst_summary.xml. 8 | - Ensure there is a ticket for demonstrating changes between the old version and the newly deployed version. -------------------------------------------------------------------------------- /doc/deployment/deploy/open_jdk_install_prompt.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/deployment/deploy/open_jdk_install_prompt.PNG -------------------------------------------------------------------------------- /doc/deployment/future_workflows/Containerising-the-Archiver-Appliance-windows-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/deployment/future_workflows/Containerising-the-Archiver-Appliance-windows-options.png -------------------------------------------------------------------------------- /doc/deployment/patch/Creating-a-patch-hotfix-branch.md: -------------------------------------------------------------------------------- 1 | # Creating a patch/hotfix branch 2 | 3 | If there has been an EPICS dependency update, then taking DLLs/EXE from the latest build server or your desktop for an instrument will not work as there will be library mismatches. If you need to build a new exe/dll for an existing release, this is the procedure to setup a jenkins job for this 4 | 5 | If EPICS has a git tag v14.0.0 then 6 | 7 | if first time you need to create branch 8 | ``` 9 | git checkout -b Release_14.0.0_hotfix v14.0.0 10 | git push -u origin Release_14.0.0_hotfix 11 | git submodule update --recursive 12 | ``` 13 | subsequently just change to it - either locally or if somebody else has already created it and pushed it 14 | ``` 15 | git checkout Release_14.0.0_hotfix 16 | git submodule update --recursive 17 | ``` 18 | If you just want to use master of a new module, you can just `git add` that. In more complicated setups you may need to create a `Release_14.0.0_hotfix` branch in the submodule based on its original 14.0.0, cherry pick across relevant changes, and then `git add` the submodule at the top 19 | -------------------------------------------------------------------------------- /doc/deployment/patch/Modifying-Code-on-an-instrument.md: -------------------------------------------------------------------------------- 1 | # Modifying code on an instrument 2 | 3 | What to do when you need to fix something on an Instrument or modify code on the instrument. 4 | 5 | 1. Fix the bug 6 | 1. Record the bug as a ticket; with solution done 7 | 1. Note the bug next to the instrument on the main IBEX page 8 | 1. If the bug is likely to effect other instruments inform the team using the group email 9 | 1. If it will seriously effect instruments an email can be sent round offering/organising time to fix it to all scientists 10 | 1. If it is minor it can be sent to those who are interested 11 | 1. If it is unlikely to effect anyone then it can be noted in known bugs section of the release notes 12 | 1. If the bug will seriously effect instrument scientists consult the PM 13 | 14 | The reasoning behind this procedure is so we always know what is on any instrument but don't have to create a new release to fix something. Part of the release process is to delete any changes to an instrument and then put back any noted changed. So if the changes aren't recorded then they will be lost. 15 | -------------------------------------------------------------------------------- /doc/deployment/patch/Modifying-Device-on-an-Instrument.md: -------------------------------------------------------------------------------- 1 | # Modifying devices on an instrument 2 | 3 | When visiting an instrument to modify or setup a device we should: 4 | 5 | 1. Consult the [specific IOC details page](/Specific-IOCs) to see what connection setting are likely to be needed. 6 | 1. Update the [specific IOC details page](/Specific-IOCs) 7 | -------------------------------------------------------------------------------- /doc/deployment/patch/Modifying-Plugins-on-a-Deployed-Client.md: -------------------------------------------------------------------------------- 1 | # Patching a deployed client 2 | 3 | If you need to modify a plugin on an IBEX client running on an instrument, such as OPIs, you need to go to 4 | 5 | ```/plugins/```. 6 | 7 | ## Live editing opis / non-compiled code 8 | 9 | These can be edited on the fly. If you edit a `.opi` file, the change will be seen the next time the opi is opened in IBEX. However, if you edit `opi_info.xml` (for example, to add an entirely new opi) you will need to relaunch the client as this file is only read once at startup. 10 | 11 | ## Live editing "compiled" code 12 | 13 | Plugins can be built as either folders containing `.class` files, or `.jar` files. If you need to edit the contents of a `.jar`: 14 | - Rename the plugin from `_.jar` to `_.zip` 15 | - You can now extract the files and make any necessary changes 16 | - When done, put it all back into a `.zip` archive, ensuring that the directory structure is the same as before 17 | - Rename the `.zip` back to a `.jar` 18 | - Relaunch the client and test your changes -------------------------------------------------------------------------------- /doc/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/favicon.ico -------------------------------------------------------------------------------- /doc/index.md: -------------------------------------------------------------------------------- 1 | # IBEX Developer's Manual 2 | 3 | Welcome to the structured edition of the IBEX developer's manual. 4 | 5 | New here? See [the project overview](Overview) to get started. 6 | 7 | --- 8 | 9 | ```{toctree} 10 | :caption: Overview 11 | :maxdepth: 1 12 | :titlesonly: 13 | 14 | Overview 15 | Editing-the-Wiki 16 | Glossary 17 | ``` 18 | 19 | ```{toctree} 20 | :caption: User Interfaces & Scripting 21 | :maxdepth: 1 22 | :titlesonly: 23 | 24 | Client 25 | Script-Generator 26 | Scripting 27 | Web 28 | ``` 29 | 30 | ```{toctree} 31 | :caption: IBEX Server & Systems 32 | :maxdepth: 1 33 | :titlesonly: 34 | 35 | System-components 36 | IOCs 37 | Specific-IOCs 38 | Systems 39 | ``` 40 | 41 | ```{toctree} 42 | :caption: Project Processes & Tools 43 | :maxdepth: 1 44 | :titlesonly: 45 | 46 | Providing-Support 47 | Deployment 48 | Tools 49 | Processes 50 | ``` 51 | 52 | ## External Documentation 53 | 54 | - [IBEX project wiki](https://github.com/isiscomputinggroup/ibex/wiki) 55 | - [IBEX user manual](https://github.com/isiscomputinggroup/ibex_user_manual/wiki) 56 | - [Python shared scripts (also known as shared instrument scripts)](https://github.com/ISISNeutronMuon/InstrumentScripts/wiki) 57 | - [Scientific Advisory Group (sharepoint)](https://stfc365.sharepoint.com/sites/IBEXSAG) 58 | -------------------------------------------------------------------------------- /doc/iocs/Compiling.md: -------------------------------------------------------------------------------- 1 | # Compiling 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | compiling/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Conventions.md: -------------------------------------------------------------------------------- 1 | # Conventions 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | conventions/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Creation.md: -------------------------------------------------------------------------------- 1 | # IOC Creation 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | creation/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Testing.md: -------------------------------------------------------------------------------- 1 | # Testing 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | testing/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Tips-and-Tricks.md: -------------------------------------------------------------------------------- 1 | # Tips, Tricks & Techniques 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | tips_tricks/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Tools.md: -------------------------------------------------------------------------------- 1 | # Tools & Support Modules 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | tools/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/iocs/Troubleshooting.md: -------------------------------------------------------------------------------- 1 | # Troubleshooting 2 | 3 | ```{note} 4 | This is **generic** troubleshooting information for IOCs & EPICS. 5 | 6 | For troubleshooting notes specific to a particular device, see [specific IOCs](../Specific-IOCs). 7 | ``` 8 | 9 | ```{toctree} 10 | :glob: 11 | :titlesonly: 12 | :maxdepth: 1 13 | 14 | troubleshooting/* 15 | ``` 16 | -------------------------------------------------------------------------------- /doc/iocs/compiling/Build-Arch.md: -------------------------------------------------------------------------------- 1 | # Build Arch 2 | 3 | ```{note} 4 | This page documents an advanced compilation workflow. 5 | 6 | These instructions are unnecessary for a "standard" build 7 | ``` 8 | 9 | Build a directory under a given architecture instead of the default. This will switch the architecture temporarily to a given state for building. You can build multiple architectures within the same tree of EPICS (it will be built into `bin/`). Run: 10 | 11 | ``` 12 | build_arch 13 | ``` 14 | 15 | e.g. build_arch windows-x64-static 16 | 17 | Architectures allowed are given my the files in `EPICS/base/master/configure/os/CONFIG..Common` 18 | 19 | NB You must build `EPICS/base` in the given architecture first. 20 | -------------------------------------------------------------------------------- /doc/iocs/compiling/IOC-Libraries-to-include-with-order.md: -------------------------------------------------------------------------------- 1 | # IOC Libraries to include with order 2 | 3 | The following is a list of libraries to include and their order for different record types. These are added to the build.mak in the src directory of the ioc app. The order is important in the static build. 4 | 5 | ## In general 6 | 1. seq and pv should be listed last as any module may add sequencer support at some point 7 | 1. calc now depends on sscan so must be listed before sscan (it also depends on seq and pv too) 8 | 9 | ## specific rules 10 | 11 | ### Lib section 12 | 13 | 1. `scalc`: $(APPNAME)_LIBS += calc sscan 14 | 15 | ### DBD section 16 | 1. `scalc`: $(APPNAME)_DBD += calcSupport.dbd 17 | -------------------------------------------------------------------------------- /doc/iocs/compiling/Removing-or-Renaming-IOC-module.md: -------------------------------------------------------------------------------- 1 | # Removing or renaming an IOC module 2 | 3 | If you rename or remove a support module, you will need to edit the Makefile in e.g. support/Makefile or ISIS/Makefile 4 | The Makefile contains a default list of modules for all architectures, then additional modules based on build architecture can be added e.g. modules only for Windows 5 | 6 | If you rename or remove an IOC, you will need to edit the Makefile in ioc/master/Makefile This Makefile contains a variable IOCDIRS that lists all potentially valid IOC directories, then other _NOTBUILD variables are used to remove certain builds on certain architectures. -------------------------------------------------------------------------------- /doc/iocs/compiling/SpeedUpBuilding.md: -------------------------------------------------------------------------------- 1 | # Speed Up Building 2 | 3 | ```{note} 4 | This page documents an advanced compilation workflow. 5 | 6 | These instructions are unnecessary for a "standard" build 7 | ``` 8 | 9 | On windows it takes some time to do the checkRelease part of the build, which in our case is duplicated work as we use a MASTER_RELEASE file. 10 | 11 | To disable this turn off the check release flag (DO NOT CHECK THIS CHANGE IN). Edit line 181 of `...EPICS\base\master\configure\CONFIG_site` and uncomment the line to read: 12 | 13 | CHECK_RELEASE_YES = noCheckRelease 14 | -------------------------------------------------------------------------------- /doc/iocs/compiling/Static-builds.md: -------------------------------------------------------------------------------- 1 | # Static Builds 2 | 3 | ```{note} 4 | This page documents an advanced compilation workflow. 5 | 6 | These instructions are unnecessary for a "standard" build 7 | ``` 8 | 9 | Static builds are where all the code is built into the executable and not sometimes loaded at runtime from a shared DLL. Thus statically linked executables will be much bigger than ones using DLLs, but will have less dependencies. 10 | 11 | Though we don't use them directly in IBEX, it is a future option and it is useful to keep the ability to use them. It also makes our dependencies much clearer in the following way. If IOC A depends on library B and library B depends on library C then creating a DLL for library B will hide the library C dependency from IOC A, you only need to link against B as C will be activated at runtime automatically. For a static build as everything must be put into A you must add library C to the IOC Makefile. 12 | 13 | In IBEX we will often see this when adding the "calc" module - this has a dependency on the "sscan" module, so you need to add both "calc" and "sscan" to _LIBS for windows-x64-static builds to work, the windows-x64 builds will work fine with just "calc" added to _LIBS 14 | -------------------------------------------------------------------------------- /doc/iocs/conventions/IOC-Descriptions.md: -------------------------------------------------------------------------------- 1 | # IOC Descriptions 2 | 3 | In order to make sure that IOC descriptions, and how they appear in the IOC selection list is understandable the IOC Description in the config.xml should consist of the following items, in this order: 4 | 5 | 1. Manufacturer (for example Agilent) or originating facility (typically this will be ISIS) 6 | 2. Model/Series for devices (for example E3613A), IBEX or instrument/group - this part can be omitted if it would create more confusion that it causes for a particular IOC 7 | 3. What it is/does (e.g. waveform generator, jaws manager) 8 | 9 | ### Examples of IOC Descriptions 10 | * Agilent 33220A 20MHz waveform generator 11 | * ISIS IBEX Reflectometry Server 12 | * ISIS DAE -------------------------------------------------------------------------------- /doc/iocs/conventions/IOC-Naming.md: -------------------------------------------------------------------------------- 1 | # IOC Naming 2 | 3 | An example IOC name is `HMEG8123`, to which a suffix like `_01`, `_02` is automatically appended. New IOC names should be max 8 characters long (excluding the `_01` suffix) and be in uppercase letters. The same name (with the same casing) should be used also for the top-level IOC directory under `EPICS\ioc\master`. 4 | 5 | You don't have to use the full 8 characters, use the smallest number that form a sensible truncated representation of the name that captures its overall form. Often this can be obtained by removing vowels (in general remove all the vowels not just some), generally just truncating the name as is doesn't always look good. You may also be able to shorten a model name or use the general model series if that is applicable e.g. `Eurotherm2000` -> `eurotherm2k`, `TPG3xx` etc or just TPG if it is model series independent. 6 | 7 | Support modules may have a slightly longer name if need be, but if truncated please follow guidelines above. 8 | 9 | If an IOC is *truly* instrument specific (i.e. there is absolutely no chance that this equipment will ever be used on any other instrument), the first three letters of the IOC name can indicate the instrument. E.g. EGX for Engin-X or RKN for Riken. 10 | 11 | -------------------------------------------------------------------------------- /doc/iocs/conventions/IOC-Startup.md: -------------------------------------------------------------------------------- 1 | # IOC Startup 2 | 3 | In the vast majority of cases an IOC should start up and not set values on the device. Values should only be set when the set point PV is processed. Exceptions to this are: 4 | 5 | - Format: if multiple formats can be specified the format returned can be set on startup 6 | - This may alternatively be done in a mismatch handler 7 | -------------------------------------------------------------------------------- /doc/iocs/conventions/Manuals.md: -------------------------------------------------------------------------------- 1 | # Manuals 2 | 3 | Manuals are stored on the network share, it is not always clear that they can be shared so they are just for our group. The directory name is `__`. 4 | -------------------------------------------------------------------------------- /doc/iocs/creation/Add-ioc-to-epics-hardware-list.md: -------------------------------------------------------------------------------- 1 | # Add IOC to EPICS hardware support list 2 | 3 | It would be nice to add all IOCs to the EPICS list so that other facilities do not have to rewrite a driver. Most of our IOCs are in public git hub repositories so there should be no problems doing this. We have discussed with the relevant team and we need to add licences before we can publish the link see but until then follow the procedure: 4 | 5 | 6 | 1. Visit epics page https://epics.anl.gov/modules/manufacturer.php 7 | 1. Click `To request a new entry in this table for your Hardware Support module, use this form.` 8 | 1. Add the following 9 | - Bus: the bus e.g. `RS-232 (Streams)` 10 | - Manufacturer: the manufacturer 11 | - Contact Name: `ISIS Computing Group` 12 | - Contact Email: `ISISEPICS@stfc.ac.uk` 13 | - Link URL: blank until licences are sorted out 14 | - Link Text: blank until licences are sorted out 15 | 16 | NB Make sure that the support module [has a licence files](https://github.com/ISISComputingGroup/IBEX_device_generator/blob/master/templates/support/LICENCE) -------------------------------------------------------------------------------- /doc/iocs/creation/Creating-New-Submodules-in-EPICS.md: -------------------------------------------------------------------------------- 1 | # Creating new submodules in EPICS 2 | 3 | You will want to make sure you have run [IOC Generator](IOC-Generator) first, if this is for a new device's IOC. 4 | 5 | This script will create the IOC, OPI, support (including lewis emulator and system tests), and Makefiles for these various folders as well. 6 | 7 | ## Write the IOC, OPI, emulator, system tests, etc. 8 | 9 | Consult the device's manual, as well as any documentation the instrument scientists may have on their needs/wants. More info can be found here: 10 | * [Creating an ISIS StreamDevice IOC](Creating-an-ISIS-StreamDevice-IOC) 11 | * [OPI Creation](/client/opis/OPI-Creation) 12 | * [Emulating Devices](../testing/Emulating-Devices) 13 | * [Test naming](/client/testing/Test-naming) 14 | * [IOC Test Framework Documentation](https://github.com/ISISComputingGroup/EPICS-IOC_Test_Framework/blob/master/README.md) 15 | 16 | ## Final Push to EPICS top 17 | 18 | Once everything is written, and final commits and pull requests have been created in the `EPICS-` and `EPICS-ioc` repositories, navigate to the top of EPICS, from the branch created by `device_generator.py` (Ticket_XXXX_Add_IOC_) add, commit, and push the newly added submodule -------------------------------------------------------------------------------- /doc/iocs/testing/Add-sim-records-script.md: -------------------------------------------------------------------------------- 1 | # Add sim records script 2 | 3 | Records can be added to the db files by running: 4 | 5 | `python C:\Instrument\Apps\EPICS\ISIS\DbChecker\master\add_sim_records.py -o ` 6 | 7 | this will produce sim_ which includes sim records for various values as well as a disable record for the comms on all values. To not add the disable record specify the `-nd` flag and to specify an external PV to turn on/off record sim use the `-s` flag. -------------------------------------------------------------------------------- /doc/iocs/testing/IOC-Testing-Framework.md: -------------------------------------------------------------------------------- 1 | # IOC Testing framework 2 | 3 | See documentation at [https://github.com/ISISComputingGroup/EPICS-IOC_Test_Framework/blob/master/README.md](https://github.com/ISISComputingGroup/EPICS-IOC_Test_Framework/blob/master/README.md) 4 | 5 | As of [6555](https://github.com/ISISComputingGroup/IBEX/issues/6555) IOC system tests are being moved from a single location to being next to the device they test. The tests next to the device can be run using `run_tests.bat` in `support/device/master/system_tests`. This bat file will pass through any command line arguments to the IOC_Test_Framework and so arguments documented above can still be used. You can also run `make ioctests` in the `support/device/master` to run the tests but this will not let you pass through command line arguments and will not display output until the whole test is finished. 6 | -------------------------------------------------------------------------------- /doc/iocs/testing/ni_max.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/iocs/testing/ni_max.JPG -------------------------------------------------------------------------------- /doc/iocs/tips_tricks/Email-Text-Alerts-from-IOCS.md: -------------------------------------------------------------------------------- 1 | # Email & Text alerts from IOCs 2 | 3 | See https://github.com/ISISComputingGroup/EPICS-ioc/blob/master/RUNCTRL/README.md -------------------------------------------------------------------------------- /doc/iocs/tips_tricks/PV-with-a-limited-range.md: -------------------------------------------------------------------------------- 1 | # PV with a limited range 2 | 3 | If a setpoint on a device has a range set by the device it should be set up by using DRVH and DRVL. This will limit the value that can be set and set it to the largest possible value which will allow scripts to do the best possible. [See [Decision Log 12](/processes/Decision-Log)] 4 | 5 | -------------------------------------------------------------------------------- /doc/iocs/tips_tricks/Using-IP-rather-than-nport-with-MOXA-(RFC-2217).md: -------------------------------------------------------------------------------- 1 | # Using IP rather than NPORT (RFC 2217) 2 | 3 | NPort will create serial ports on the computer and these are accessed using `drvAsynSerialPortConfigure()` in the `st.cmd` 4 | 5 | An alternative is to directly talk IP to the moxa, which bypasses the NPort windows software. This option can be configured on a port by port basis, though the moxa will restart when changes are made. 6 | 7 | To enable this option you need to change the mode of the moxa port from "Real COM" (which uses windows NPort) to "RFC 2217". On the moxa web page look under "operational settings" for the port to change the mode. 8 | 9 | Port 1 of the MOXA is served at IP port 4001, so to connect with asyn you would use something like: 10 | ``` 11 | drvAsynIPPortConfigure("L0", "130.246.49.42:4001 COM", 0, 0, 0, 0) 12 | ``` 13 | The "COM" after the address:port indicates the RFC 2217 mode, this mode means that `asynSetOption()` will work as before and there is no need to set baud etc. via the moxa web page. -------------------------------------------------------------------------------- /doc/iocs/tools/Asyn-Interpose-Functions.md: -------------------------------------------------------------------------------- 1 | # Asyn Interpose functions 2 | 3 | ASYN interpose functions can apply logic to data read from the device that is then passed to e.g. stream device. 4 | 5 | ## Throttle Interpose 6 | 7 | Sometime a device has a maximum rate at which it can accept commands and/or that commands must be separated by a minimum delay. Though it is possible to add delays into Db files and/or stream device protocol, but this can get messy or things get missed. The throttle interpose function allows you to specify a minimum time between writes to the device, if another write occurs too quickly a sleep is inserted to bring up to minimum delay. 8 | 9 | syntax is 10 | ``` 11 | asynInterposeThrottleConfig(port, address, min_delay_between_commands) 12 | ``` 13 | 14 | so you would add e.g. `asynInterposeThrottleConfig("L0", 0, 0.1)` to the `st.cmd` after port `L0` is created. 15 | 16 | To see when a delay is being inserted, enable the filter debug output as per [asyn trace masks](/iocs/troubleshooting/ASYN Trace Masks (Debugging IOC, ASYN)) so e.g. set trace mask to `0xD` rather than `0x9` 17 | 18 | -------------------------------------------------------------------------------- /doc/iocs/tools/Labview-Remote.md: -------------------------------------------------------------------------------- 1 | # LabVIEW Remote 2 | 3 | IOC to allow remote connection LabVIEW VI's via ISIS Remote LabVIEW services. 4 | 5 | ## Templates 6 | There are pre-existing templates that can be implemented via substitution files for doubles, buttons, strings, and enums. 7 | Once a DB file has been generated, create a file called `st-.cmd` in the devices folder of the ioc that loads the db, and set the `DEVCMD1` macro to the name of this file to load it. 8 | 9 | ## Ports 10 | This IOC requires two ports for full functionality, if you are only interacting with string values then it only requires TCP port 64008. if it only uses binary (i.e. doubles or booleans) then it only requires 64009, Enums and combinations of both require both ports be opened however. 11 | 12 | -------------------------------------------------------------------------------- /doc/iocs/tools/Serve-file-contents-over-EPICS.md: -------------------------------------------------------------------------------- 1 | # Serve file contents over EPICS 2 | 3 | ## FileContentsServer 4 | 5 | You can serve the raw contents of files in a directory over EPICS by using the "FileContentsServer" component of https://github.com/ISISComputingGroup/EPICS-FileServer 6 | 7 | This is done by calling `FileContentsServerConfigure()`, with an asyn port name as well as a directory path in an `st.cmd` alongside loading `FileContentsServer.db` with the same asyn port name. 8 | 9 | ## Device screen 10 | 11 | There is an accompanying device screen("File Editor" in the list) for viewing and editing the file served by this mechanism. -------------------------------------------------------------------------------- /doc/iocs/tools/Utilities-Library.md: -------------------------------------------------------------------------------- 1 | # Utilities Library 2 | 3 | The `utilities` support module contains some C/C++ functions useful to IOC and support module developers 4 | 5 | ## putDbAndWait 6 | 7 | This is based on `dbtpn` from the epics base `dbNotify.c`. It allows setting a PV from within C/C++ and waiting for a completion callback, if you do not need such a callback then using `dbNameToAddr` and `dbPutField` is sufficient. 8 | ``` 9 | putDbAndWait(const std::string& pvName, const void *value, double timeout) 10 | ``` 11 | `value` is interpreted as appropriate for the data type of `pvName` 12 | -------------------------------------------------------------------------------- /doc/iocs/tools/icpconfig.md: -------------------------------------------------------------------------------- 1 | # ICP Config 2 | 3 | ICP config is a set of C functions that are called by every IOC on startup to define the macros used within the IOC. The code for this is [here](https://github.com/ISISComputingGroup/EPICS-icpconfig). Macros can come from the following: 4 | * The current configuration 5 | * `\Instrument\Settings\globals.txt` - See [here](../testing/Running-IOCs) 6 | * `\Instrument\var\tmp\test_macros.txt` - A file create by the IOC_test_framework to create macros for testing. Only used if the environment variables `TESTDEVSIM=yes` or `TESTRECSIM=yes`. 7 | 8 | Macros are loaded in the order above, such that `globals.txt` will override macros in the configuration and test macros will override all others. See diagram below for an idea of how this works. 9 | 10 | ![](loading_macros.png) -------------------------------------------------------------------------------- /doc/iocs/tools/loading_macros.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/iocs/tools/loading_macros.png -------------------------------------------------------------------------------- /doc/iocs/troubleshooting/Dependency-Walker.md: -------------------------------------------------------------------------------- 1 | # DLL Dependency Walker 2 | 3 | To find DLL dependencies of an IOC do the following: 4 | * Open EPICS terminal (`cmd` with `config_env.bat` run) 5 | * cd to iocBoot area of IOC (where its st.cmd is) 6 | * type `depends` - this will set PATHS for this IOC and launch a GUI window 7 | * Now use File -> open and browse to the IOC exe file in the bin directory a couple of levels above 8 | * Now wait... 9 | -------------------------------------------------------------------------------- /doc/iocs/troubleshooting/Log-file-location.md: -------------------------------------------------------------------------------- 1 | # Log file locations 2 | 3 | Various log file locations: 4 | 5 | log file | location | what it shows 6 | ------ | ------- | ------------- 7 | genie_python | `..\Instrument\Var\logs\genie_python\genie-YYYY-MM-DD.log` | Every command that genie python executes (log is written before command is executed) 8 | ISIS DAE IOC Log | `..\Instrument\Var\logs\ioc\ISISDAE_01-YYYMMDD.log` | Shows what ISIS DAE IOC, this is controlling the isisicp 9 | ISIS ICP Log | `c\Data\Export only\logs\icp\log\icp-YYYY-MM-DD-Ddd.log` | Shows what the isis icp data collection program is doing 10 | ISIS ICP Putlog (Put log) | `C:\data\[instrument name][run number]_ICPputlog.txt` | Shows caputs to PV's including their new and old values -------------------------------------------------------------------------------- /doc/overview/deployment_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/overview/deployment_architecture.png -------------------------------------------------------------------------------- /doc/overview/high_level_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/overview/high_level_architecture.png -------------------------------------------------------------------------------- /doc/processes/Admin.md: -------------------------------------------------------------------------------- 1 | # Admin 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | admin/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Continuous-Integration.md: -------------------------------------------------------------------------------- 1 | # Continuous Integration 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | continuous_integration/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Dev-Processes.md: -------------------------------------------------------------------------------- 1 | # Developer Processes 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | dev_processes/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Git-and-GitHub.md: -------------------------------------------------------------------------------- 1 | # Git and Github 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | git_and_github/* 9 | ``` -------------------------------------------------------------------------------- /doc/processes/Instrument-Details.md: -------------------------------------------------------------------------------- 1 | # Instrument Migration Notes 2 | 3 | ```{warning} 4 | These instrument details pages provide historical context about the devices on a specific instrument, 5 | at the time they were migrated to IBEX. **These pages may not be up to date with the latest instrument 6 | configuration.** 7 | ``` 8 | 9 | ```{toctree} 10 | :glob: 11 | :maxdepth: 1 12 | 13 | instrument_details/* 14 | ``` 15 | -------------------------------------------------------------------------------- /doc/processes/Meetings-with-Scientists.md: -------------------------------------------------------------------------------- 1 | # Meetings - with scientists 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | meetings_with_scientists/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Meetings.md: -------------------------------------------------------------------------------- 1 | # Meetings - internal 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | meetings/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Pm.md: -------------------------------------------------------------------------------- 1 | # Project Management 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | 7 | pm/* 8 | ``` -------------------------------------------------------------------------------- /doc/processes/Retrospective-Notes.md: -------------------------------------------------------------------------------- 1 | # Retrospective Notes 2 | 3 | Notes from sprint retrospective meetings. 4 | 5 | ```{toctree} 6 | :reversed: 7 | :glob: 8 | :maxdepth: 1 9 | :titlesonly: 10 | 11 | retrospective-notes/* 12 | ``` 13 | -------------------------------------------------------------------------------- /doc/processes/admin/Obtaining-access-to-the-Instrument-Hall.md: -------------------------------------------------------------------------------- 1 | # Access to ISIS Instrument Halls 2 | 3 | To obtain access to the instrument hall, you need to have an SI10 form filled out and sent to the correct person and completed the radiation training. You can then enter the hall with a temporary dosimeter and temporary access given from MCR which lasts until the end of the month. 4 | 5 | To gain permanent access to the hall, you need to have a named dosimeter. To obtain a named dosimeter, you need to fill out a named dosimeter form which you can request from R5.5 reception. Once you have a named dosimeter, you can then gain permanent access to the hall from MCR. 6 | 7 | **N.B.** 8 | Until you have obtained a named dosimeter, you will not be able to gain permanent access to the instrument hall. -------------------------------------------------------------------------------- /doc/processes/admin/Remote-Working-vnc-cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/processes/admin/Remote-Working-vnc-cloud.png -------------------------------------------------------------------------------- /doc/processes/continuous_integration/RHEL-jenkins-linux-dependency-update.md: -------------------------------------------------------------------------------- 1 | # Updating the RHEL Jenkins Node 2 | 3 | ## Update Java 4 | 5 | * download latest jdk17 for linux and copy to a tree in /opt/jdk17 6 | * edit `build.sh` in client gui build area to set correct `JAVA_HOME` path 7 | 8 | ## Update Python 9 | 10 | * download python source 11 | * on RHEL7 there is an issue with openssl versions. Open ssl 1.1 can be installed from yum, but will not be in the right directory for python. Make sure you install the openssl11-dev and openssl11-static packages as we will link statically to it 12 | * create a `/usr/local/openssl11` with an include directory linked to /usr/include/openssl11 and a lib64 directory linked to /usr/lib64/openssl11 13 | * configure with 14 | ``` 15 | env LDFLAGS="-L/usr/local/openssl11/lib64 -Wl,-Bstatic -lssl -lcrypto -Wl,-Bdynamic" ./configure --prefix=/usr/local/python --with-openssl=/usr/local/openssl11 16 | ``` 17 | Note that passing `--enable-optimizations` lead to a subsequent build failure 18 | * now type `make` to build 19 | * finally `sudo rm -fr /usr/local/python` and `sudo make insytall` 20 | -------------------------------------------------------------------------------- /doc/processes/continuous_integration/Running-Automated-System-Tests.md: -------------------------------------------------------------------------------- 1 | # Running automated system tests 2 | 3 | Instructions for running automated system tests can be found at: https://github.com/ISISComputingGroup/system_tests/blob/master/README.md -------------------------------------------------------------------------------- /doc/processes/dev_processes/Project-Documentation.md: -------------------------------------------------------------------------------- 1 | # Project Documentation 2 | 3 | We have three wikis: 4 | 5 | 1. [IBEX wiki](https://github.com/ISISComputingGroup/IBEX/wiki) 6 | 1. [IBEX user manual](https://github.com/ISISComputingGroup/ibex_user_manual/wiki) 7 | - [on shadow](http://shadow.nd.rl.ac.uk/ibex_user_manual/Home) 8 | 1. [IBEX developer wiki](/index) 9 | 10 | ## IBEX wiki 11 | 12 | IBEX wiki this contains information at the project level for instrument scientists. Tells us about future plans, current activities, the current status of large items (e.g. version numbers) and information that instrument scientists need e.g. sprint review or instrument migrations. 13 | 14 | ## IBEX user manual 15 | 16 | The IBEX user manual is for users of the system (including scientists and instrument scientists). This is details about how to use IBEX, there is some minimal information about setting up devices and there may be links to dev manual but we try not to add this. This includes a link to genie_python. 17 | 18 | ## IBEX developer wiki 19 | 20 | The IBEX developer wiki, this is where all other information lives. It tells us how to develop and maintain IBEX and details of how we improve certain items. 21 | -------------------------------------------------------------------------------- /doc/processes/git_and_github/New-Local-Git-Repository.md: -------------------------------------------------------------------------------- 1 | # New local git repository 2 | 3 | These are created in /isis/git on control-svcs.isis.cclrc.ac.uk see [here](https://control-svcs.isis.cclrc.ac.uk/git/) 4 | 5 | When creating a new repository make sure you add 6 | 7 | [http] 8 | receivepack = true 9 | 10 | to the config file of the repository or pushes will not work 11 | 12 | Cloning is via something like 13 | 14 | git clone http://control-svcs.isis.cclrc.ac.uk/gitroot/instconfigs/common.git 15 | 16 | 17 | -------------------------------------------------------------------------------- /doc/processes/git_and_github/git-hub-repo-tools.md: -------------------------------------------------------------------------------- 1 | # Github Repository Tools 2 | 3 | These are stored in [ibex_utils](https://github.com/ISISComputingGroup/ibex_utils) and there are install instructions and help. This is a list of common tasks run under epics terminal: 4 | 5 | * List repositories belonging to ISISComputingGroup 6 | 7 | `python Scripts\change_repos.py -u John-Holt-Tessella -o ISISComputingGroup` 8 | 9 | * For the standard repositories close all old milestones (with no issues), create new milestone, ensure labels exist (adding --dry-run to this, or any command, will show you what it will do without altering the repository) 10 | 11 | `python Scripts\change_repos.py -u John-Holt-Tessella -o ISISComputingGroup --repo-file standard_repos.txt --label-file standard_labels.txt --ms-from 2016-05-19 --ms-to 2016-06-15 --ms-close` 12 | 13 | 14 | -------------------------------------------------------------------------------- /doc/processes/instrument_details/MUX-Instrument-Details.md: -------------------------------------------------------------------------------- 1 | # MUX 2 | 3 | MUX is the name of the system to run the Negative Muon items. More details to follow as the system becomes more operational. -------------------------------------------------------------------------------- /doc/processes/instrument_details/NIMROD__Oxford_MCP_Camera.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/processes/instrument_details/NIMROD__Oxford_MCP_Camera.jpg -------------------------------------------------------------------------------- /doc/processes/instrument_details/PEARL-ServoStep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/processes/instrument_details/PEARL-ServoStep.jpg -------------------------------------------------------------------------------- /doc/processes/meetings/Backlog-Preparation.md: -------------------------------------------------------------------------------- 1 | # Sprint pre-planning 2 | 3 | This meeting is often called pre-planning. This meeting is just a pre-runner to sprint planning and shares the same process see [Sprint Planning](Sprint-Planning). -------------------------------------------------------------------------------- /doc/processes/meetings/Sprint-Review-and-Retro-slides.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/processes/meetings/Sprint-Review-and-Retro-slides.png -------------------------------------------------------------------------------- /doc/processes/pm/Estimating-Sprint-Capacity.md: -------------------------------------------------------------------------------- 1 | # Estimating Sprint Capacity 2 | 3 | Sprint capacity is not used by this group to limit points in a sprint, but to track work throughput via a burndown chart. 4 | 5 | The values applied to tickets can be found in the announce channel on our teams instance. The points for a ticket should include time for reviews and any rework and reviews that may be needed. At the last update of this page these are: 6 | ``` 7 | 1 point < 1 hour 8 | 2 points < 0.5 day 9 | 3 points < 1 day 10 | 5 points < 2 days 11 | 8 points < 3 days 12 | 13 points < 5 days 13 | 20 points < 8 days 14 | 40 points < 16 days 15 | 16 | Timeboxes - pointing allows for reviews 17 | 0.5 day - 3 points 18 | 1 to 1.5 days - 5 points 19 | 2 to 2.5 days - 8 points 20 | 3 to 4.5 days - 13 points 21 | 5 to 7 days - 20 points 22 | ``` 23 | 24 | The value assigned to a sprint is `the_number_of_days_in_this_sprint * the_average_from_the_previous_three_sprints_of_(points_completed_in_sprint/the_number_of_days_in_the_sprint)` 25 | 26 | The number of days in a sprint is the sum of the days that the team members are available between the start and end date, with a multiplier to allow for the time spent not doing work on tickets which varies based on the responsibilities of different team members. -------------------------------------------------------------------------------- /doc/processes/pm/PM-Workbook.md: -------------------------------------------------------------------------------- 1 | # PM Workbook 2 | 3 | This workbook is used to support the calculations for the number of points available in a sprint, and an indication for interest in the flow of tickets. 4 | 5 | It can be found [here](https://stfc365.sharepoint.com/:x:/r/sites/ISISProjects-181/Project%20Management%20Documents/IBEX%20Pm%20calculations.xlsx?d=w44859227499244e6bf092cc7b74411a8&csf=1&web=1&e=joqvGu). 6 | 7 | Details of the tabs and what to do with that information, including milestone creation, are all in the workbook. -------------------------------------------------------------------------------- /doc/processes/pm/Prioritisation-of-Tickets.md: -------------------------------------------------------------------------------- 1 | # Prioritisation of tickets 2 | 3 | We are presently not ordering tickets to a finer detail than high/medium/low, and this is often based on overarching priorities brought in by stakeholder managers, and the group generally. 4 | 5 | These are notes on prioritisation this is not an ordered list yet: 6 | 7 | - Stops Instrument running 8 | - Impairs running instrument 9 | - Needed for user program Now 10 | - Needed for user program soon 11 | - Needed for commissioning program Now 12 | - Needed for commissioning program soon 13 | - Maintenance helper 14 | - Instrument scientist requested feature enhancement 15 | - User requested feature enhancement 16 | - Operations requested feature enhancement 17 | - Dev requested feature enhancement 18 | - New functionality (e.g. script server) 19 | 20 | Plus categories 21 | - Instrument is pure IBEX 22 | - Instrument is pure SECI 23 | - Instrument feature could work in SECI but is IBEX instrument 24 | -------------------------------------------------------------------------------- /doc/processes/retrospective-notes/Retrospective-Notes-2020.04.01.md: -------------------------------------------------------------------------------- 1 | # 2020-04-01 2 | 3 | ## We still didn't update component stewards 4 | 5 | This keeps being missed. 6 | 7 | ## We should repoint tickets before planning 8 | 9 | - Now added as step to [sprint planning](/processes/meetings/Sprint-Planning) 10 | 11 | ## At least whilst working from home retrospective notes should be put in a dedicated teams channel 12 | 13 | ## In teams we can't use ticks/crosses easily for flash reviews 14 | 15 | - Instead use shocked face emoji as looking, happy face as approved and sad as rejected. 16 | - Using a spreadsheet is too heavy so remove this 17 | 18 | ## Should we come up with a template for instrument demos? 19 | 20 | Yes, the demo ticket should include this. We should make sure that more junior members of the team have sufficient input in to doing demos. 21 | 22 | ## Reviews have slowed since moving to working from home 23 | 24 | - This could be due to people not being confident in how to review - we should make sure that PRs include instructions on how to review 25 | - We could monitor who is owing reviews but this seems a little draconian, John will look into doing it. 26 | -------------------------------------------------------------------------------- /doc/processes/retrospective-notes/Retrospective-Notes-2023.06.07.md: -------------------------------------------------------------------------------- 1 | # 2023-06-07 2 | 3 | | Chair | Timekeeper | Note Taker | 4 | | :-------- | :---------: | ----------: | 5 | | HC | LC | NR | 6 | 7 | ## Items from last retrospective: 8 | 9 | ### People other than KB leading sprint planning 10 | - Meeting instructions will be updated. 11 | - People are interested in trying to run the meeting. 12 | 13 | ## Items from this retrospective: 14 | 15 | ### Other Comments 16 | - Sprint progressed better than expected. 17 | - Check if on-site rota needs to be balanced better. -------------------------------------------------------------------------------- /doc/processes/retrospective-notes/Retrospective-Notes-2024.01.08.md: -------------------------------------------------------------------------------- 1 | # 2024-01-08 2 | 3 | | Chair | Timekeeper | Note Taker | 4 | |-------|------------|------------| 5 | | CMS | ES | IG | 6 | 7 | Present: 8 | - In person: IG GR JD TW 9 | - Online: JH KB ES CMS SC DK FA LJ 10 | 11 | ## Previous sprint 12 | 13 | ### No notes of significance 14 | 15 | ## Current Sprint 16 | 17 | ### Calendar now shows First Line Support allocations 18 | 19 | ### The Christmas meal was excellent and well organised 20 | 21 | ### PAT testing and SW Release 22 | CMS raised the forthcoming scheduled PAT testing. We should consider synchronising the next software release activities around it and also how best to restore systems to their states prior to PAT testing equipment shutdown. 23 | 24 | ## Mad/Glad/Sad 25 | - LJ Glad - Had a good break over the Christmas holidays. 26 | - KB Glad - People managed to extend the Christmas break somewhat. 27 | -------------------------------------------------------------------------------- /doc/processes/retrospective-notes/Retrospective-Notes-2025.01.07.md: -------------------------------------------------------------------------------- 1 | # 2025-01-17 2 | 3 | | Chair | Timekeeper | Note Taker | 4 | |-------|------------|------------| 5 | | CMS | ES | IG | 6 | 7 | Present: 8 | - In person: IG GR TW JD 9 | - Online: JH LJ KB ES CMS SC DK FA 10 | 11 | ## Previous sprint 12 | - Points added to project board (KB) 13 | - Calendar now shows first line support. 14 | - Christmas meal was excellent. 15 | 16 | ## Current Sprint (short) 17 | 18 | ### PAT Testing 19 | - Could cause issues with release, so need to try to synchronise activities. 20 | 21 | ## Mad/Glad/Sad 22 | - LJ Glad - Glad for a good Christmas break. 23 | - KB Glad - People managed to extend their Christmas break somewhat. 24 | -------------------------------------------------------------------------------- /doc/script_generator/DynamicScripting.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/script_generator/DynamicScripting.drawio.png -------------------------------------------------------------------------------- /doc/script_generator/UpdateRepoFlowDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/script_generator/UpdateRepoFlowDiagram.png -------------------------------------------------------------------------------- /doc/scriptgen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/scriptgen.png -------------------------------------------------------------------------------- /doc/scripting/Bluesky-scanning.md: -------------------------------------------------------------------------------- 1 | # Bluesky 2 | 3 | For information about scanning using bluesky, including information about: 4 | - The bluesky run engine, `RE` 5 | - Bluesky ophyd-async devices (for example `BlockR`, `BlockRw`, `BlockRwRbv`, `ReflParameter`, or `SimpleDae`) 6 | * If you are looking at bluesky code which uses `async def` and `await`, and imports `ophyd_async`, you're probably looking at a device. 7 | - Bluesky plans, (for example `scan`, `adaptive_scan`) 8 | * If you are looking at bluesky code with lots of `yield from` statements, you're probably looking at a plan. 9 | - Bluesky callbacks (for example `LivePlot`, `LiveFit`, `ISISCallbacks`, file-writing) 10 | 11 | **See [ibex_bluesky_core docs](https://isiscomputinggroup.github.io/ibex_bluesky_core).** 12 | 13 | --- 14 | 15 | For troubleshooting, see [ibex_bluesky_core troubleshooting guide](https://isiscomputinggroup.github.io/ibex_bluesky_core/dev/troubleshooting.html#). 16 | 17 | Please add troubleshooting information to that guide (via a pull-request on `ibex_bluesky_core`) rather than this page. -------------------------------------------------------------------------------- /doc/scripting/Genie-Python.md: -------------------------------------------------------------------------------- 1 | # Genie Python 2 | 3 | ```{note} 4 | These pages document user-facing scripting workflows. Looking for developer information about python? See [Python](../system_components/Python). 5 | ``` 6 | 7 | ```{toctree} 8 | :glob: 9 | :titlesonly: 10 | 11 | genie_python/* 12 | ``` 13 | 14 | ### User documentation 15 | 16 | - [Scripting in the user manual](https://github.com/ISISComputingGroup/ibex_user_manual/wiki/Scripting) 17 | - [genie_python reference](http://shadow.nd.rl.ac.uk/genie_python/sphinx/genie_python.html) -------------------------------------------------------------------------------- /doc/scripting/instrument-scripts.md: -------------------------------------------------------------------------------- 1 | # Shared Instrument Scripts 2 | 3 | The general instrument scripts are in this [repository](https://github.com/ISISNeutronMuon/InstrumentScripts) and include scripts like `do_sans` and `do_trans`, as well as the (old) scans library. -------------------------------------------------------------------------------- /doc/searchscorer.js: -------------------------------------------------------------------------------- 1 | var Scorer = { 2 | score: result => { 3 | var [docName, title, anchor, descr, score, filename] = result 4 | 5 | // Deprioritize instrument details (but still include them in results) 6 | if (docName.includes("instrument_details")) { 7 | score -= 100000; 8 | } 9 | 10 | // Deprioritize retrospective-notes heavily (but still include them in results) 11 | if (docName.includes("retrospective-notes")) { 12 | score -= 1000000; 13 | } 14 | 15 | return score 16 | }, 17 | 18 | // query matches the full name of an object 19 | objNameMatch: 11, 20 | // or matches in the last dotted part of the object name 21 | objPartialMatch: 6, 22 | // Additive scores depending on the priority of the object 23 | objPrio: { 24 | 0: 15, 25 | 1: 5, 26 | 2: -5, 27 | }, 28 | // Used when the priority is not in the mapping. 29 | objPrioDefault: 0, 30 | 31 | // query found in title 32 | title: 15, 33 | partialTitle: 7, 34 | 35 | // query found in terms 36 | term: 5, 37 | partialTerm: 2, 38 | }; 39 | -------------------------------------------------------------------------------- /doc/specific_iocs/Cells.md: -------------------------------------------------------------------------------- 1 | # Cells 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | cells/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Choppers.md: -------------------------------------------------------------------------------- 1 | # Choppers 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | choppers/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/DAQmx_state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/DAQmx_state.png -------------------------------------------------------------------------------- /doc/specific_iocs/Fluxgates.md: -------------------------------------------------------------------------------- 1 | # Fluxgates & Magnetometers 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | fluxgates_magnetometers/* 9 | ``` 10 | 11 | ```{seealso} 12 | For information about zero-field systems, see [Magnets](Magnets) 13 | ``` 14 | -------------------------------------------------------------------------------- /doc/specific_iocs/Gas-And-Liquid-Handling-Systems.md: -------------------------------------------------------------------------------- 1 | # Gas and liquid handling systems 2 | 3 | Systems for moving gasses and liquids on the beam line 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | :maxdepth: 0 9 | 10 | gas_liquid_handling/* 11 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Loading-Rigs.md: -------------------------------------------------------------------------------- 1 | # Loading rigs 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | loading_rigs/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Magnets.md: -------------------------------------------------------------------------------- 1 | # Magnets & Large Power Supplies 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | magnets/* 9 | ``` 10 | 11 | ```{seealso} 12 | For information about: 13 | - Cryomagnets, see [cryogenics:magnets](Cryogenics) 14 | - Other power supplies, see [power supplies](Power-Supplies) 15 | ``` 16 | -------------------------------------------------------------------------------- /doc/specific_iocs/Motors-Extensions.md: -------------------------------------------------------------------------------- 1 | # Motor Extensions 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | motor_extensions/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/Multimeters.md: -------------------------------------------------------------------------------- 1 | # Multimeters 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | multimeters/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/Other.md: -------------------------------------------------------------------------------- 1 | # Other / Miscellaneous 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | other/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Polarisers-and-Analysers.md: -------------------------------------------------------------------------------- 1 | # Polarisers & Analysers 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | polarisers_and_analysers/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Power-Supplies.md: -------------------------------------------------------------------------------- 1 | # Power supplies 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | power_supplies/* 9 | ``` 10 | 11 | ```{seealso} 12 | - For large power supplies (e.g. driving magnets), see [Magnets](Magnets) 13 | - For cryogenic power supplies (e.g. driving cryomagnets), see [cryogenics:magnets](Cryogenics) 14 | - For multimeters which may also act as current sources, see [Multimeters](Multimeters) 15 | ``` 16 | -------------------------------------------------------------------------------- /doc/specific_iocs/Pressure-Monitors.md: -------------------------------------------------------------------------------- 1 | # Pressure monitors 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | pressure_monitors/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Rheometers.md: -------------------------------------------------------------------------------- 1 | # Rheometers 2 | 3 | A rheometer is a laboratory device used to measure the way in which a liquid, suspension or slurry flows in response to applied forces. 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | :maxdepth: 1 9 | 10 | rheometers/* 11 | ``` 12 | -------------------------------------------------------------------------------- /doc/specific_iocs/Rotating_sample_changer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/Rotating_sample_changer.png -------------------------------------------------------------------------------- /doc/specific_iocs/Sample-Changers.md: -------------------------------------------------------------------------------- 1 | # Sample Changers 2 | 3 | ## Generic Sample Changers Support Module 4 | 5 | See [Sample Changers Support Module](motor_extensions/Sample-Changer-Support-Module) 6 | 7 | ## Rotating Sample Changer 8 | 9 | There a couple of specific ISIS built rotating sample changers that are mostly used on GEM, POLARIS and HRPD. The version on HRPD has slightly different firmware but basically the same hardware. The hardware consists of a carousel that can hold 20 samples. When a new sample if requested the carousel rotates to the specified position and a sample arm will push the sample down into the beam. 10 | 11 | ### Dropped samples 12 | 13 | Occasionally a sample can fall down below the beam, called a 'dropped' sample. If the device drops a sample it will tell you that it has done so as it moves on to the next sample. There is a retrieve command to collect the sample again, IBEX will attempt to retrieve the sample (as well as perform some other error checking) using the following state machine: 14 | 15 | ![state machine](Rotating_sample_changer.png) -------------------------------------------------------------------------------- /doc/specific_iocs/Sensors.md: -------------------------------------------------------------------------------- 1 | # Sensors 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | sensors/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Signal-Generators.md: -------------------------------------------------------------------------------- 1 | # Signal Generators 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | signal_generators/* 9 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/Temperature-Controllers.md: -------------------------------------------------------------------------------- 1 | # Temperature Controllers 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | temp_controllers/* 9 | ``` 10 | 11 | ```{seealso} 12 | See also [Cryogenics](Cryogenics) for low-temperature specific controllers. 13 | ``` 14 | -------------------------------------------------------------------------------- /doc/specific_iocs/choppers/Astrium_Monitoring_Crate.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/choppers/Astrium_Monitoring_Crate.JPG -------------------------------------------------------------------------------- /doc/specific_iocs/choppers/FZJ_Fermi_chopper.md: -------------------------------------------------------------------------------- 1 | # FZJ Fermi Chopper 2 | 3 | Used on MERLIN, MAPS, MARI. 4 | 5 | This material is now in the [user manual](https://github.com/ISISComputingGroup/ibex_user_manual/wiki/FZJ-Fermi-Chopper). -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/3HeFridgeOps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/3HeFridgeOps.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/3d_vector_magnet_schematic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/3d_vector_magnet_schematic.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/Cryogenics-Ltd-Helium-Level-Gauge.md: -------------------------------------------------------------------------------- 1 | # Helium Level Gauge (Cryogenics Ltd) 2 | 3 | Helium level Gauge, which attaches to a single helium level probe on circuit A and reads out the level. Has configurable alarm limits for the levels. 4 | 5 | -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/MercuryEnhancedCryo.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/MercuryEnhancedCryo.drawio.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/MercuryEnhancedCryo2.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/MercuryEnhancedCryo2.drawio.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/MercuryEnhancedCryoDeviceScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/MercuryEnhancedCryoDeviceScreen.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/Oxford-Instruments-Mercury-IPS.md: -------------------------------------------------------------------------------- 1 | # Mercury IPS 2 | 3 | The Oxford Instruments Mercury IPS is a superconducting magnet power supply. It is the successor to the [IPS](Oxford-Instruments-IPS). Much of the information on the IPS wiki page also applies to the Mercury IPS. 4 | 5 | Note: although the Mercury IPS is the successor to the "old" IPS, cryogenics prefer to run the older IPS units as they are more reliable. 6 | 7 | ## Hardware quirks 8 | 9 | The following faults can be seen when operating the magnet fully from the front panel, but it is likely that software will also run into the same conditions: 10 | * The firmware will sometimes crash/freeze. To reset it, the whole power supply needs to be power-cycled. This is obviously undesirable for a magnet power supply, and cryogenics are chasing OI about this issue. It's not clear whether this issue is general to all Mercury IPS units or whether we have one faulty unit. 11 | * The switch heater occasionally reports that it's ON when it's actually OFF 12 | * The power supply reports a voltage of ~9000V which is incorrect (a sensible voltage for this power supply would be around ~8V while ramping) -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/SPC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/SPC.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/comms1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/comms1.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/comms2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/comms2.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/cryomagnet_circuit_diagram.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/cryomagnet_circuit_diagram.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/detailed_temp_board.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/detailed_temp_board.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/front_panel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/front_panel.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/heliox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/heliox.png -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/mercury_heliox_ramp_example.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/mercury_heliox_ramp_example.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/cryogenics/triton_channel_settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/cryogenics/triton_channel_settings.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/dae/DAE-Trouble-Shooting-corrupted-max-database.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/dae/DAE-Trouble-Shooting-corrupted-max-database.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/dae/Dae-Spectra-Updating-Problem.md: -------------------------------------------------------------------------------- 1 | # Dae Spectra Updating Problem 2 | 3 | There has been a long running problem with spectra stopping updating after a certain amount of time 4 | [issue 2750](https://github.com/ISISComputingGroup/IBEX/issues/2750) this has not been reproducible on developer test machines, the only clue came recently when the related detector diagnostics display stopped and reported a message that looked a bit like thread termination. The proposed solution has been to add additional exception handling on the assumption that a windows structured exception rather than a C++ std::exception is the cause. To handle these non-C++ exceptions, the following has been done: 5 | 6 | 1. Compiling with `/EHa` which allows catch(...) to handle Structured Exceptions 7 | 2. Registering a structured exception handler to convert Structured Exceptions into C++ exceptions 8 | 9 | In theory (2) is all that is needed, but the handler needs to be installed on a per thread basis so just to be extra safe (1) has been implemented too -------------------------------------------------------------------------------- /doc/specific_iocs/dae/ESSDSLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/dae/ESSDSLayout.png -------------------------------------------------------------------------------- /doc/specific_iocs/dae/FUTUREISISDSLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/dae/FUTUREISISDSLayout.png -------------------------------------------------------------------------------- /doc/specific_iocs/dae/ISISDSLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/dae/ISISDSLayout.png -------------------------------------------------------------------------------- /doc/specific_iocs/dae/ISISICP---enabling-incremental-event-file-creation.md: -------------------------------------------------------------------------------- 1 | # ISISICP - enabling incremental event file creation 2 | 3 | The ISISICP can write an event mode NeXus data file incrementally during the run rather than replaying all events at run end, this means it will take up disk space more gradually rather than grabbing an extra large amount at the end. It will ultimately use the same amount of disk space, but it is easier to judge when to end a run. Also the data file will appear on the archive earlier. The program still needs to save the events to disk as well as write the data file incrementally as an HDF5 file can become corrupt if the program restarts. 4 | 5 | To enable incremental mode edit `isisicp.properties` in `C:\labview modules\dae` and add/uncomment lines saying 6 | ``` 7 | isisicp.incrementaleventnexus = true 8 | isisicp.kafkastream = true 9 | ``` 10 | The changes will not take effect until you restart the ISISICP program - make sure you are in SETUP and any runs have finished saving, then kill the `ISISICP` process using task manager (you can restart seci/ibex if you prefer, but that is not necessary) 11 | 12 | After this is enabled, you can also run Mantid on any computer and use the Kafka live listener to view and process events live during the run. 13 | -------------------------------------------------------------------------------- /doc/specific_iocs/dae/LogPlotter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/dae/LogPlotter.png -------------------------------------------------------------------------------- /doc/specific_iocs/dae/Shrinking-ISISICP-Memory-Usage-on-Simulated-DAE-machines.md: -------------------------------------------------------------------------------- 1 | # Reducing `ISISICP` memory use in simulation mode 2 | 3 | If you want a minimal ICP with no real DAE support then: 4 | 5 | In `c:/labview modules/dae/isisicp.properties` add the line 6 | ``` 7 | isisicp.simulation.detcards.shared = false 8 | ``` 9 | In `c:/labview modules/dae/icp_config.xml` change the CRPTSize line to a smaller value e.g. 10 | ``` 11 | CRPTSize 10000 12 | ``` 13 | 14 | Load some very simple wiring tables defining a handful of detector and specify only a few time channels (e.g. SURF monitor only tables, muon tables, ibex RPCTT tables). Number_of_spectra * number_of_time_channels * number_of_period must be less than CRPTSize above -------------------------------------------------------------------------------- /doc/specific_iocs/fluxgates_magnetometers/Bartington.md: -------------------------------------------------------------------------------- 1 | # Bartington 2 | 3 | There is a system in use by the North Side Muon beamlines from [Bartington](https://www.bartington.com) that will be used to measure the magnetic field in the sample position. These will be read in the same way as the existing magnetic sensors on those beamlines, which is via a NI DAQ 9215 card with a simple calibration to translate the Voltage output from the fluxgate into a field reading in each of three directions: X, Y, and Z. 4 | 5 | The PSU for the system is a [model PSU 1](https://www.bartington.com/psu1/) from Bartington. 6 | * an Operator's manual is here: `\\isis\shares\Manuals\Bartington\PSU1_OM2443.pdf` 7 | 8 | The Probe has the identifier MAG-13MC70 (see [MAG-13 series](https://www.bartington.com/mag-13/)) 9 | * an Operator's manual is here: `\\isis\shares\Manuals\Bartington\Mag-13_OM3143.pdf` 10 | 11 | Digital manuals have yet to be located. 12 | 13 | We are able to borrow the hardware to verify the Voltage to Gauss/Tesla relationship and to test the IOC functionality. 14 | -------------------------------------------------------------------------------- /doc/specific_iocs/fluxgates_magnetometers/Metrolab-PT2025-Teslameter-IOC.md: -------------------------------------------------------------------------------- 1 | # Metrolab PT2025 Teslameter 2 | 3 | Magnetometer for Metrolab PT2025 Teslameter. 4 | 5 | There are lots of setting that can be made from the front panel. The IOC assumes it is in the mode where the current reading is continuously written to the port. 6 | -------------------------------------------------------------------------------- /doc/specific_iocs/fluxgates_magnetometers/magnetometer_daq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/fluxgates_magnetometers/magnetometer_daq.png -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/BioLogic-MPS-70-4-(stopped-flow).md: -------------------------------------------------------------------------------- 1 | # BioLogic MPS 70-4 2 | 3 | This is not a device we support as a group (there is no obvious documentation on how it can be controlled remotely, other than with the supplied software), but is set up independently using it's own proprietary software. It was last seen on SANS2D. 4 | 5 | The following are some notes for context should a support call be received: 6 | * The device outputs a trigger signal via a cable hard wired to the DAE 7 | * The device was last used connected to a laptop in the sample area with a remote desktop connection to this from the cabin over wired ethernet. The Laptop ran the manufacturer software 8 | * The last time we saw it, it was connected by USB. a previous device used serial to the laptop. There is some suggestion the USB connection may time out if idle for too long. 9 | * In any case the device itself is not connected to the ISIS network or the moxa and is not accessed through IBEX. 10 | 11 | See [here](https://github.com/ISISComputingGroup/IBEX/issues/8528) for some further details. -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/Edwards-Turbo-Instrument-Controller.md: -------------------------------------------------------------------------------- 1 | # Edwards TIC 2 | 3 | The Edwards turbo instrument controller (TIC) is a relatively straightforward turbo pump controller. In addition to the turbo pump controls, it also has three measurement gauges which can be read back into the OPI. Each gauge can be disabled via macros to prevent disconnected errors appearing. 4 | 5 | This driver was given to us by the Daresbury lab. This was added to the IBEX codebase with a few changes to adhere to IBEX coding standards. -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/Knauer-k-6.md: -------------------------------------------------------------------------------- 1 | # Knauer K-6 2 | 3 | ## Documentation 4 | 5 | Documentation is available for the pump at `\\ISIS\Shares\ISIS_Experiment_Controls\Manuals\Knauer K-6 Valve Drive` 6 | 7 | The Knauer Electric Valve Drives K-6 is designed for automatic control of the 8 | 6-port/3-channel-injection valve, 6-port/2-channel-switching valve, 7-port/1- 9 | channel-switching valve by K-6 drive 10 | 11 | ## Valve head 12 | 13 | The 7-port/1-channel-switching valve can be switched to 6 positions. Each switch 14 | command will result in a 60° turn, so that the 6th switch command returns to the 15 | first position. 16 | 17 | ## Specifications 18 | 19 | | RS-232C Specifications | | 20 | |---------------|------------------| 21 | | Baud rate | 9600 Baud | 22 | | Stop bits | 1 bit | 23 | | Start bits | 1 bit | 24 | | Parity | None | 25 | | Data length | 8 bit | 26 | | Flow control | XON/XOFF | 27 | 28 | Notes: 29 | - Communication command is terminated with CR. 30 | - Communication return is terminated with CR. 31 | -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/WPI-SP2XX-Syringe-Pump.md: -------------------------------------------------------------------------------- 1 | # WPI SP2XX Syringe Pump 2 | 3 | The WPI SP2XX series syringe pump simply infuses and withdraws liquid from the target. 4 | 5 | ## Connecting the pump 6 | 7 | The device requires a specific cable to be connected to a moxa or PC. The cable is grey and has RJ11 to DB9 (female) connections. You should be able to then connect this to a moxa DB9 (male) to RJ45 to communicate with it. The devices front panel will automatically switch to a "Remote" dialog, confirming it is being controlled by the driver. 8 | 9 | -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/WPI_aladdin_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/gas_liquid_handling/WPI_aladdin_1.png -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/WPI_aladdin_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/gas_liquid_handling/WPI_aladdin_2.png -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/Watson-Marlow-323-Peristaltic-Pump.md: -------------------------------------------------------------------------------- 1 | # Watson-Marlow 323 Peristaltic Pump 2 | 3 | ## Documentation 4 | 5 | Documentation is available for the pump at `\\ISIS\shares\ISIS_Experiment_Controls\Manuals\Watson-Marlow__323` 6 | 7 | ## Connection Details 8 | 9 | | RS-232 Settings | | 10 | |---------------|------------------| 11 | | Baud rate | 9600 Baud | 12 | | Stop bits | 2 bit | 13 | | Parity | None | 14 | | Data length | 8 bit | 15 | | Flow control | None | 16 | 17 | Notes: 18 | - Communication command is terminated with CR. 19 | - Communication return is terminated with CR. 20 | 21 | ## Pump Control 22 | 23 | The device has the ability to control a number of parameters for a pump: 24 | 25 | - Rotation speed (in rpm with minimum of 3 and maximum of 400): `SPEED` 26 | - Direction (Clockwise or Anti-Clockwise): `DIRECTION` 27 | - Status (Running or Stopped): `STATUS` 28 | 29 | 30 | The user can also start the pump by using the `START:SP` record. The pump can be stopped using the `STOP:SP` record. 31 | -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/dma4500m_ioc_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/gas_liquid_handling/dma4500m_ioc_diagram.png -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/jasco_runtime_logic_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/gas_liquid_handling/jasco_runtime_logic_flow.png -------------------------------------------------------------------------------- /doc/specific_iocs/gas_liquid_handling/nimrod_gas_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/gas_liquid_handling/nimrod_gas_panel.png -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/HTS-Magnet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/magnets/HTS-Magnet.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/MuSR-Steering-Magnets.md: -------------------------------------------------------------------------------- 1 | # MuSR Steering Magnets 2 | 3 | MuSR has two steering magnets, for horizontal and vertical steering of muons. 4 | 5 | An OPI exists for this (`musr_steering.opi`) which takes two Kepco Power supplies as macros for the respective magnet. 6 | 7 | This OPI contains a `STOP` and `START` button as pictured - this sends a PV write to the `IN:NDXMUSR:MUSR_STEERING_OFF` PV. This gets loaded by `INSTETC` on MuSR from `custom_records.db` file in the configurations area. This is stored on the `NDXMUSR` branch. 8 | 9 | ![musr_steering_opi](musr_steering_opi.jpg) 10 | 11 | The OPI also offers "saving" and "loading" functionality for the steering magnets and their 'default' values - these point to fields specified in `custom_records.db`. These records effectively trigger a manual autosave for the Kepco current setpoint values and load them back in when the load button is pressed. The OPI shows the current defaults above the buttons used for loading and saving. -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/Muon_Zero-Field_Auto-Feedback_Procedure_Flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/magnets/Muon_Zero-Field_Auto-Feedback_Procedure_Flowchart.png -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/emu_zf_compensation_comparison.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/magnets/emu_zf_compensation_comparison.png -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/musr_steering_opi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/magnets/musr_steering_opi.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/magnets/tdk_wiring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/magnets/tdk_wiring.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/Axis.md: -------------------------------------------------------------------------------- 1 | # Axis 2 | 3 | Axis records add a layer of indirection between the user and the low level motor. This means if the underlying motor needs to change it only need to change in one place, all blocks, motion set points etc use this axis and so don't need to change. 4 | 5 | The record is setup in the configuration directory in the motor directory in a file called axes.cmd (e.g. for galil it would by `galil/axes.cmd` for SM300 it would be `SM300_01/axes.cmd` (NB Galil are not based on the IOC number so you need an extra macro to make sure you only add the axis to the correct galil). 6 | 7 | An example of adding an axis to a galil is: 8 | 9 | ``` 10 | $(IFIOC_GALIL_01) dbLoadRecords("$(AXIS)/db/axis.db","P=$(MYPVPREFIX)MOT:,AXIS=MOT:APERTURE,mAXIS=MTR0101") 11 | ``` 12 | 13 | More examples can be found motion [set points directory](https://github.com/ISISComputingGroup/EPICS-motionSetPoints/tree/master/settings). 14 | 15 | The parameters needed are: 16 | 17 | * `P` - prefix of the axis 18 | * `AXIS` - name of the axis 19 | * `mAXIS` - underlying motor from the table of motors 20 | -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/Bump-Strip.md: -------------------------------------------------------------------------------- 1 | # Bump Strips 2 | 3 | Some instruments use bump strips as a safety feature. These are sensors placed on the physical beamline, which "trip" when touched, killing all motion immediately. They can plug into digital input ports on the Galil which then reads `0` for TRIPPED and `1` for NOT TRIPPED. Which port this is is specific to the instrument and you may have to talk to the scientists to find out. 4 | 5 | At the moment, we do not handle the safety aspect of it in software (i.e. disable setting positions on axes), we just provide indicators in the GUI. 6 | 7 | ### Setup 8 | 9 | The GUI gets the status from the PV `MOT:BUMP_STOP` which is always loaded by IOC `GALIL_01`. At the moment, we only have one PV for the overall bump strip status of the instrument, i.e. we do not support a signal per controller. 10 | 11 | If no input source is configured, this PV will default to "UNAVAILABLE". The input source can be set via macro by creating a file `\configurations\galil\bumpStop.cmd`. 12 | 13 | This should contain a single line followed by a blank line e.g. 14 | ``` 15 | epicsEnvSet "BUMPSTOP_IN" "MOT:DMC03:Galil0Bi4_STATUS" 16 | 17 | ``` 18 | In this case this expects the signal to come from digital input port 4 (*Bi04*) on Galil controller 3 (*DMC03*) -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/Fermi-Chopper-Lifter.md: -------------------------------------------------------------------------------- 1 | # Fermi chopper lifter 2 | 3 | The fermi chopper lifter is a single-axis Galil-controlled system which lifts the fermi chopper in and out of the beam on the EMMA beamline. It runs without an encoder and relies solely on limit switches at each end of its travel. A program running inside the controller moves the lifter between the limits and this is communicated with by a specific OPI. 4 | 5 | A bi-directional interlock exists between the chopper controller (an [SKF MB5150g5](../choppers/SKF-MB4150g5-Disk-Chopper-Controllers), aka G3) and Galil. This uses the inhibit input on the axis amplifier card to prevent motion if the chopper is levitated. Likewise, the chopper is prevented from being levitated if the lifter is in motion. 6 | 7 | There is further documentation in the Motion Control Group's SharePoint site: Beamline Motion -> IDD Motion Control -> Technical Files -> EMMA -> EMMA chopper lifter - Handover.docx 8 | 9 | [Direct link to document](https://stfc365.sharepoint.com/:w:/r/sites/ISISExperimentControls/_layouts/15/Doc.aspx?sourcedoc=%7BAFC19324-E335-4636-B5AB-702A140668AA%7D&file=EMMA%20chopper%20lifter%20-%20Handover.docx&action=default&mobileredirect=true&DefaultItemOpen=1) 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/IMAT_relay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/IMAT_relay.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/ORC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/ORC.png -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/Portable-Eulerian-Cradle.md: -------------------------------------------------------------------------------- 1 | # Portable Eulerian Cradle 2 | 3 | The portable Eulerian cradle is a motion control device with two spinning axes, one that goes around the other that rotates at 90 degrees to that. 4 | 5 | ## Troubleshooting 6 | 7 | ### Motion is Jerky 8 | 9 | When it was first setup it seemed that the motion was jerky. While we were there the instrument scientists cleaned the outer ring metal; this helped. Moving the two rings through all there motion helped too. After this there seemed to be no problems, except outer at 90 degrees, the scientist has talked with electronics about this. 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/SANS2D-apertures-and-guides.md: -------------------------------------------------------------------------------- 1 | # SANS2D Apertures and Guides 2 | 3 | The SANS2D apertures and guides are a set of 5 apertures, driven by a Galil, and 5 guides that are controlled by a [Beckhoff](../motors/Beckhoff). The Beckhoff is controlling a set of Stober drives to actually move the devices. A [motion set points](Motion-Set-points) configuration is used to set all apertures/guides to go to set positions. They use absolute encoders and so do not need to be homed. -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/SANS2D-vacuum-tank-collision-avoidance.md: -------------------------------------------------------------------------------- 1 | # SANS2D vacuum tank collision avoidance 2 | 3 | SANS2D's vacuum tank contains 4 primary axes that can potentially collide with each other: 4 | - Front detector 5 | - Front baffle 6 | - Rear baffle 7 | - Rear detector 8 | 9 | There is a collision avoidance check implement in DB records in the `motorExtensions` module. These DB records does the following things: 10 | - Checks if the `SP` between 4 primary axes are above the minimum threshold 11 | - `.SPMG` is set to `Pause` after axis has stopped moving and after `STOP ALL` button is pressed 12 | - `.DISP` is set to `1` in axis and motor layer during movement and set back to `0` after axis is no longer moving 13 | - `.DISP` is set to `MOVE_ALL` pv if movement is not allowed due to potential collision 14 | 15 | The minimum distance between axes can be controlled using the pvs: 16 | 17 | - front detector to front baffle: `%MYPVPREFIX%MOT:SANS2DVAC:FDFB:MINIMUM_INTERVAL` 18 | - front baffle to rear baffle: `%MYPVPREFIX%MOT:SANS2DVAC:FBRB:MINIMUM_INTERVAL` 19 | - rear baffle to rear detector: `%MYPVPREFIX%MOT:SANS2DVAC:RBRD:MINIMUM_INTERVAL` 20 | 21 | -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/Tosca-sample-positioner.md: -------------------------------------------------------------------------------- 1 | # TOSCA sample positioner 2 | 3 | This is a very simple device controlled via a McLennan motor. There is no readback from the motor - the scientists use a web cam as a readback. 4 | 5 | The scientists only require a very basic level of control: coarse and fine relative moves, plus a "stop" button. The distances moved by "coarse" and "fine" relative moves do need to be configurable, however. 6 | 7 | The webcam is not always switched on so may not be accessible when testing the OPI. -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/collision_detection/Grazing.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/collision_detection/Grazing.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/collision_detection/Inclined.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/collision_detection/Inclined.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/collision_detection/Oversize.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/collision_detection/Oversize.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/collision_detection/ScreenShot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/collision_detection/ScreenShot.png -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/jaws/polaris_jaws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/jaws/polaris_jaws.png -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/mari_sample_changer_belt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/mari_sample_changer_belt.gif -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/mari_sample_changer_joint.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/mari_sample_changer_joint.gif -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/motionSetpoints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/motionSetpoints.png -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/split_jaws.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/split_jaws.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/motor_extensions/standard_jaws.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_extensions/standard_jaws.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/motor_hardware_structure.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motor_hardware_structure.JPG -------------------------------------------------------------------------------- /doc/specific_iocs/motors/Add-support-for-motor-extras.md: -------------------------------------------------------------------------------- 1 | # Add support for motor extras 2 | 3 | Look at Beckhoff and copy the file `motor_extras_from_config.cmd`. Also add needed libraries in make file and release. These include: 4 | 5 | - transform 6 | - calc 7 | - axis 8 | - sample_changer 9 | - tiny_xml 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/motors/Clearing-the-Motors-are-Moving-state.md: -------------------------------------------------------------------------------- 1 | # Clearing the "motors moving" state 2 | 3 | If a motor controller is disconnected during a move, then the moving flag is left in a moving state. This can cause scripts to fail to run. Each motor controller can supply the moving state information for the global `CS:MOT:MOVING` flag, so while you can caput to the specific record to reset this a server restart can be the quickest way to remedy this issue. -------------------------------------------------------------------------------- /doc/specific_iocs/motors/Motors-Trouble-Shooting-w1-fault.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/Motors-Trouble-Shooting-w1-fault.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/PI-Rotation-Stage-setup.md: -------------------------------------------------------------------------------- 1 | # PI Rotation Stage 2 | 3 | The PI rotation stage is run over serial from a MOXA and should be as simple as just plugging it in. After a power on, **the first thing you must do is HOME the device**. The IOC to run is called PIMOT_01 and the following macros need to be specified in either the configuration or globals.txt 4 | 5 | ``` 6 | PORT # COM port to use 7 | MTRCTRL # motor controller number for the motor record 8 | ``` 9 | 10 | For ENGINX I have used globals.txt and set: 11 | 12 | ``` 13 | PIMOT_01__PORT=COM22 14 | PIMOT_01__MTRCTRL=11 15 | ``` 16 | 17 | So the stage was on COM22 (which was physical port 2 of the MOXA in the counting house), and on EPICS would show as MTR1101 in the table of motors. The PORT number will need changing when it moves into the blockhouse, but everything else should be OK. 18 | 19 | If you have trouble communicating, see the `README_baud.txt` document in the `EPICS/ioc/PIMOT` directory for how to check the dip switch settings. We normally use 38400 baud, I've only ever had problems with 115200 but if there was a particularly long run to the MOXA you might need to drop this below 38400 I guess. 20 | 21 | The is a macro called `BAUD` that defaults to 38400, so you only need to set the `BAUD` macro if you are using a different speed. 22 | -------------------------------------------------------------------------------- /doc/specific_iocs/motors/SMC100.md: -------------------------------------------------------------------------------- 1 | # SMC100 2 | 3 | Newport SMC100 Single-Axis Motor controller. Used with the [HTS magnet system](../magnets/HTS-Magnet), along with the Smartmonitor and two Kepco PSUs in master/slave configuration. 4 | 5 | It has a peculiar startup and homing behaviour - after powering up it must be homed and once homed it cannot be homed again. Unless... 6 | 7 | ... If the motor refuses to move despite not returning an error code, and an orange/red LED is shown on the front panel, then it simply needs to be re-homed. This is explained on the diagram and table on the cover of the controller. 8 | 9 | If running asyn trace, when it is working you may have nothing printed, so I guess It doesn't look to regularly poll. but all a bit confusion. If you want to run asyn trace, note that the port is called `serial1` rather than `L0` 10 | 11 | ### Connection 12 | 13 | DLS system: connected to laptop via a gender changer. It does not seem to need a null modem. 14 | 15 | If using correct-gender cable (female cable), then the device *does* need a null modem. 16 | -------------------------------------------------------------------------------- /doc/specific_iocs/motors/SXD-Attocube.md: -------------------------------------------------------------------------------- 1 | # SXD Attocube 2 | 3 | The Attocube device is used on SXD and controlled by a Galil, the code running on the Galil can be found [here](https://github.com/ISISComputingGroup/IBEX/issues/6056#issuecomment-2102666963). It has been [migrated from SECI](https://github.com/ISISComputingGroup/IBEX/issues/6056). 4 | 5 | On initialisation the following commands should be sent (in this order): 6 | 7 | ``` 8 | VERBOSE=0 9 | AB0 10 | MO 11 | XQ #SXD 12 | MG "stop 1" {P2} 13 | ``` 14 | 15 | BUSY is determined by comparing the response to BUSY= with \s0.0000\r\n:, if they match the system is not busy. 16 | ATANGLE= returns the Angle Position 17 | Y= returns the Arc Position 18 | If setting the angle send ATTO= with a double between +170 and -170, followed by ATGO=1 19 | If setting the arc send ARK= with a double between -19 and +19, followed by ARGO=1 20 | If stop has been requested send the same set of commands as on initialisation, AB0, MO, XQ #SXD, MG "stop 1" {P2} -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/Activate.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/Activate.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/Beckhoff-testing-windows-features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/Beckhoff-testing-windows-features.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/Login.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/Login.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/Run.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/Run.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/beckhoff_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/beckhoff_overview.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/beckhoff/tcIOC_motor_support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/beckhoff/tcIOC_motor_support.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/galil/Differences-between-real-Galil-and-simulated-motor.md: -------------------------------------------------------------------------------- 1 | # Differences between real Galil & Simulated motor 2 | 3 | ## Galil behaviour: 4 | 5 | 1. Set high limit (HLM) to 100 6 | 2. Begin move to 100 7 | 3. Whilst moving, set HLM to 50 8 | 4. When motor reaches 50, motor will begin to decelerate to a stop (some overshoot) 9 | 5. If motor has already reached 50, motor will begin to decelerate to a stop (some overshoot) 10 | 11 | This is consistent with the Galil docs for the "BL" and "FL" commands 12 | 13 | 14 | ## Simulated behaviour: 15 | 16 | 1. Set high limit (HLM) to 100 17 | 2. Begin move to 100 18 | 3. Whilst moving, set HLM to 50 19 | 4. Motor will continue past the limit, to the commanded position of 100 -------------------------------------------------------------------------------- /doc/specific_iocs/motors/galil/Galil-Instrument-Configuration.md: -------------------------------------------------------------------------------- 1 | # Galil Instrument Configuration 2 | 3 | On startup, Galil IOCs are configured at a higher level by reading from files that live in the instrument config area under `/configuration/galil`. 4 | 5 | The following settings are configured in this way: 6 | 7 | ## Required: 8 | - [Galil Controller Config](#galil_startup) 9 | 10 | ## Optional extensions: 11 | - [Axis (Alias)](../../motor_extensions/Axis) 12 | - [Barn Doors](../../motor_extensions/jaws/Barndoors-and-Momentum-Slits-on-MUON-Front-End) 13 | - [Bump Strip](../../motor_extensions/Bump-Strip) 14 | - [Jaws](../../motor_extensions/Jaws) 15 | - [Motion Set Points](../../motor_extensions/Motion-Set-points) 16 | - [Sample Changer](../../motor_extensions/Sample-Changer-Support-Module) -------------------------------------------------------------------------------- /doc/specific_iocs/motors/galil/IMAT-tomography-stages.md: -------------------------------------------------------------------------------- 1 | # IMAT Tomography Stages 2 | 3 | To switch between different resolutions on IMAT's tomography stages, you need to: 4 | - Stop the galil_08 ioc 5 | - Copy the contents of either `C:\instrument\var\autosave\galil_08_2_axis` or `C:\instrument\var\autosave\galil_08_3_axis` into `C:\instrument\var\autosave\galil_08` 6 | - restart the galil ioc -------------------------------------------------------------------------------- /doc/specific_iocs/motors/mclennan/HRPD-homing-sequence.md: -------------------------------------------------------------------------------- 1 | # HRPD Homing Sequence 2 | 3 | There is a [special homing sequence for HRPD low temperature sample changer](HRPD-homing-sequence) because it doesn't work this is until ticket [5739](https://github.com/ISISComputingGroup/IBEX/issues/5739) is done 4 | 5 | ## Homing 6 | 7 | Do not home in ibex 8 | 9 | Goto the motor details page in ibex 10 | 11 | - Drive the foil to the lower limit by setting a large negative value (within the limits) in the motor opi 12 | - Check the led is red next to the appropriate limit to indicate it is on the limit switch 13 | 14 | - in the calibration section: 15 | - Don’t change the Off: value 16 | - Set calibration to frozen 17 | - Push “set” 18 | - Type 0 into the Move Abs Dial column (the corresponding “user” column value should update automatically) 19 | - Push “use” 20 | - (it is ok to leave calibration as frozen – no need to set back to variable) 21 | -------------------------------------------------------------------------------- /doc/specific_iocs/motors/motor_details_Calibration_Set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/motor_details_Calibration_Set.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/motor_details_Calibration_Use.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/motor_details_Calibration_Use.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/motor_details_Drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/motor_details_Drive.png -------------------------------------------------------------------------------- /doc/specific_iocs/motors/motor_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/motors/motor_summary.png -------------------------------------------------------------------------------- /doc/specific_iocs/multimeters/Keithley-2400.md: -------------------------------------------------------------------------------- 1 | # Keithley 2400 2 | 3 | The Keithley 2400 is a multimeter, there are various Keithleys with different models numbers which do different tasks. 4 | 5 | ## Troubleshooting 6 | 7 | ### Termination character 8 | 9 | If a new Keithley won't talk to you then maybe you have one with a different terminating character. There is a configuration macro for setting it set both `IEOS` and `OEOS` options are `\\r` or `\\r\\n` (the extra slash is because of macro substitutions). 10 | 11 | ### Voltage, current and resistance aren't reading 12 | 13 | The Keithleys output mode needs to be set to on. This can be done by setting Source On, on the Source mode OPI tab or doing `caput %MYPVPREFIX%KHL2400_0X:OUTPUT:MODE:SP ON`. 14 | -------------------------------------------------------------------------------- /doc/specific_iocs/multimeters/Keithley-6517B.md: -------------------------------------------------------------------------------- 1 | # Keithley 6517B 2 | 3 | ## About 4 | 5 | The Keithley 6517B is an electrometer, it's location is here to be easily found next to the family of Keithley devices. 6 | 7 | ## Troubleshooting 8 | 9 | - Keithley 6517B uses \\r\\n as termination characters. 10 | - Default BAUD rate in IOC is currently 9600. BAUD rate can be adjusted on the device and so it should be adjusted accordingly. 11 | 12 | ## IOC functionality 13 | 14 | The IOC is currently covering functionality from VI which can be viewed here: https://github.com/ISISComputingGroup/IBEX/issues/6030 15 | 16 | ## Manual 17 | 18 | A copy of manual can be found in support module for the Keithley's IOC or in \\isis\shares\ISIS_Experiment_Controls\Manuals\Keithley_6517B -------------------------------------------------------------------------------- /doc/specific_iocs/multimeters/Keysight-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/multimeters/Keysight-1.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/multimeters/Keysight-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/multimeters/Keysight-2.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/multimeters/Keysight-E4980AL-LCR-Meter.md: -------------------------------------------------------------------------------- 1 | # Keysight (previously Agilent) E4980AL LCR Meter 2 | 3 | The Keysight E4980AL is an LCR (inductance, capacitance and resistance) meter used on WISH. 4 | It uses USB, GPIB or ethernet(TCP IP) for communication and follows the SCPI protocol. 5 | 6 | this device can perform several functions, all of these give back two readings/measurements. these are shown on the front panel. 7 | 8 | 9 | ![](Keysight-1.jpg) 10 | 11 | ![](Keysight-2.jpg) -------------------------------------------------------------------------------- /doc/specific_iocs/other/AnywhereUSB.md: -------------------------------------------------------------------------------- 1 | # AnywhereUSB 2 | 3 | These are used to connect USB devices to NDX computers - they translate USB to TCP/IP. 4 | 5 | ## AnywhereUSB configuration tool 6 | 7 | - In `\\isis\inst$\Kits$\CompGroup\Utilities\Anywhere USB`. 8 | - In the configuration tool, it will auto-detect AnywhereUSBs on the same subnet, you will need to "connect" to the right device in the configuration tool. 9 | - Once connected, the USB device should appear on the NDX as if it was connected locally. 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/other/Catalytic-Flow-Reactor.md: -------------------------------------------------------------------------------- 1 | # Catalytic Flow Reactor 2 | 3 | The Catalytic Flow Reactor equipment is a bespoke piece of user equipment that is going to be used on POLARIS. 4 | 5 | It sends a readout (with no command) over serial every 10 seconds, containing 3 numbers - a state number, block number and an indicator on whether or not to start taking data. There is no write control available for this device. 6 | 7 | It has a sub D-9 port for communication, using RS232. 8 | 9 | 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/other/Coherent-OBIS-Laser-Remote.md: -------------------------------------------------------------------------------- 1 | # Coherent OBIS Laser Remote 2 | 3 | The Coherent OBIS Laser Remote is a small box which connects to a single laser and provides status and fault information via LEDs on the front panel. Much more information is provided via the remote interface. 4 | 5 | **NB** This device does not allow the laser itself to be controlled remotely due to safety regulations (a physical key is required). It simply reports its current state, that of the laser, its controller and enclosure interlocks. 6 | -------------------------------------------------------------------------------- /doc/specific_iocs/other/Ferro-Magnetic-Resonance-equipment.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/other/Ferro-Magnetic-Resonance-equipment.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/other/Gamry.md: -------------------------------------------------------------------------------- 1 | # Gamry 2 | 3 | The Gamry IOC controls and in-house developed device. This device controls a Gamry via its interface communication port. This was last used on IMAT and work can be seen in the following issue: [#2642](https://github.com/ISISComputingGroup/IBEX/issues/2642) 4 | 5 | Currently there is no specific device driver for these series of devices. 6 | 7 | 8 | -------------------------------------------------------------------------------- /doc/specific_iocs/other/Hameg-HM8123.md: -------------------------------------------------------------------------------- 1 | # Hameg HM8123 programmable counter 2 | 3 | The Hameg (now Rhode and Schwartz) HM8123 counter is a device used for counting electrical pulses. 4 | 5 | It is used by [CHIPIR](/processes/instrument_details/CHIPIR-Instrument-Details) to measure a resistive element and count neutron "hits" on a sample. 6 | 7 | This device has a few different functions for measuring other elements. 8 | 9 | ## Quirks 10 | we'll find out when we test our IOC against it... -------------------------------------------------------------------------------- /doc/specific_iocs/other/Humidity-Controller.md: -------------------------------------------------------------------------------- 1 | # Humidity Controller 2 | 3 | This program is running on the `imat-messina-detect` pc, it reads the humidity via DDE and writes it into a user pv `IN:IMAT:PARS:USER:R0`. If the `imat-messina-detect` pc reboots the program will need restarting, the procedure is: 4 | 5 | - On `messina` PC open the directory `c:\Instrument\Apps\EPICS` in windows explorer 6 | - Double click on `start_rhcontroller.bat` 7 | 8 | This will create a new window with the program running inside it, this window can then be minimised 9 | 10 | (NOTE: this was a temporary workaround and will be replaced by a proper WinDDE client solution #4065) -------------------------------------------------------------------------------- /doc/specific_iocs/other/LOTQD-MSH150-Monochromator.md: -------------------------------------------------------------------------------- 1 | # LOTQD MSH150 Monochromator 2 | 3 | 4 | This is a partially created device. It was created for the NURF experiment and ran on an ESS laptop. It needs USB driver software so probably will not be run directly from IBEX server. 5 | 6 | ## Notes 7 | 8 | LOT.substitutions is generated by the IOC on startup, it reads the XML configuration of what is present and then creates it. The xml file location is set in st.cmd: 9 | 10 | ``` 11 | LOTConfigure("L0", "", "$(TOP)/db/LOT.substitutions", 0) 12 | ``` 13 | 14 | There is a test file in `data`. 15 | 16 | IOC will not run without the device connected to the USB port. 17 | -------------------------------------------------------------------------------- /doc/specific_iocs/other/Ocean-Optics-DH-2000-Shutter-control.md: -------------------------------------------------------------------------------- 1 | # Ocean Optics DH-2000 2 | 3 | The only the shutter of the Ocean Optics DH-2000 light source is controlled by IBEX, not the operation of the light source itself. The shutter is controlled by TTL pulses, which are supplied by an Arduino board. The EPICS IOC communicates with this Arduino to open/close the shutter, and to get the status of the interlock. -------------------------------------------------------------------------------- /doc/specific_iocs/other/Stanford-SR850.md: -------------------------------------------------------------------------------- 1 | # Stanford SR850 Lock In Amplifier 2 | 3 | The SR850 is a digital lock-in amplifier based on an innovative DSP (Digital Signal Processing) architecture. The SR850 boasts a number of significant performance advantages over traditional lock-in amplifiers—higher dynamic reserve, lower drift, lower distortion, and dramatically higher phase resolution. 4 | 5 | A copy of the user manual is available here: \isis\shares\ISIS_Experiment_Controls\Manuals\Stanford_Research_SR850_Lock-In_Amplifier 6 | 7 | The manufacturer's web-site describes the [Stanford RS SR850](https://www.thinksrs.com/products/sr850.html) 8 | 9 | ## Troubleshooting 10 | 11 | ### Can't talk to device after it has been power cycled 12 | 13 | Symptoms: commands are received and acted on by the box, but no replies come. 14 | 15 | The device defaults to sending it's output to GPIB after a reboot. It still *listens* for commands via RS232, but no replies will be sent on RS232. 16 | 17 | To fix: 18 | - Stop IOC or pull serial cable from back of device (to prevent the device from being "stuck" in remote mode due to commands from IOC) 19 | - Reboot physical device 20 | - In device setup menu on the front of the box, choose "RS232" as the communication mode 21 | - Plug serial cable back in / start IOC if it was stopped -------------------------------------------------------------------------------- /doc/specific_iocs/other/state_diagram.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/other/state_diagram.gif -------------------------------------------------------------------------------- /doc/specific_iocs/other/state_diagram.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/other/state_diagram.pptx -------------------------------------------------------------------------------- /doc/specific_iocs/plcs/SANS2D-vacuum-PLC.md: -------------------------------------------------------------------------------- 1 | # SANS2D Vacuum PLC 2 | 3 | ## Vacuum Status 4 | 5 | Currently, we get a tank vacuum status from the PLC. This was not available in SECI. There are 4 different states, ATMOSPHERE, AT VACUUM, VAC DOWN, VENTING, but if we cannot get a state the PV goes into major alarm and has the string ERROR: STATUS UNKNOWN. This is displayed on the OPI in both the regular and advanced tab. 6 | 7 | ## Front beamstop inhibit 8 | 9 | Done as part of motorExtensions. See [here](../motor_extensions/SANS2D-Front-Beam-Stop-inhibit-movement). -------------------------------------------------------------------------------- /doc/specific_iocs/plcs/Schneider-PLC.md: -------------------------------------------------------------------------------- 1 | # Schneider PLC 2 | 3 | These are controlled by the `SCHNDR` iocs and are used on various instruments, such as to monitor value status or pressure (a TPG300 can for example feed data into the PLC inputs). Communication is by modbus protocol using EPICS modbus support. 4 | 5 | Relevant IOC config macros are: 6 | 7 | * `MODE`: `TCP`, `RTU` or `ASCII` to specify PLC connection mode. We generally use either `TCP` or `RTU`. 8 | * `PORT`: Serial COM Port of PLC for `RTU` or `ASCII` mode 9 | * `IPADDR`: IP address of PLC for `TCP` mode 10 | * `IPPORT`: TCP will connect on default modbus 502 port, set this if different. 11 | 12 | To configure EPICS records for PLC specific variables, set macros such as `DEVCMD1` to a CMD file base name in the `devices` subdirectory which should be loaded. For example on GEM we set `DEVCMD1` to `GEMGateValve` to load `devices/GEMGateValve.cmd`. Currently there is only `DEVCMD1` but if there were cross instrument files that were useful to load, or a plc talked to multiple separate devices, then adding `DEVCMD2` may be useful in future 13 | 14 | [PLC IOC files](https://github.com/ISISComputingGroup/EPICS-ioc/tree/master/SCHNDR/iocBoot/iocSCHNDR-IOC-01) 15 | -------------------------------------------------------------------------------- /doc/specific_iocs/polarisers_and_analysers/CRISP-Spin-Flipper.md: -------------------------------------------------------------------------------- 1 | # CRISP Spin Flipper 2 | 3 | The [CRISP Spin Flipper](https://github.com/ISISComputingGroup/EPICS-Flipprps) is generally referred to as 'FLIPPRPS' in IOC and support files. It is a simple device for running polarised neutron experiments that can be set to either "up" or "down", presumably to polarise neutrons in one of those directions. The IOC is a stream device. 4 | 5 | The current polarity setting cannot be read from the device, so the value of the POLARITY PV is used to display the current polarity on the wiki. This may result in the GUI and the device becoming out-of-sync if the PV is set to something whilst the device is disconnected. 6 | 7 | The spin flipper is run from a script and coordination with the Kepco is done in that script. 8 | 9 | CRISP Spin Flipper Support Repository: https://github.com/ISISComputingGroup/EPICS-Flipprps 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/power_supplies/CAENHVAsyn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/power_supplies/CAENHVAsyn.png -------------------------------------------------------------------------------- /doc/specific_iocs/power_supplies/Kepco.md: -------------------------------------------------------------------------------- 1 | # Kepco 2 | 3 | Summary of use is now in the [user manual](https://github.com/ISISComputingGroup/ibex_user_manual/wiki/Kepco-Power-Supply). 4 | 5 | ## Remote connection details 6 | 7 | See [HTS magnet](../magnets/HTS-Magnet) for information. 8 | 9 | ## Remote Command 10 | 11 | Most of the KEPCOs at ISIS which are BOPs (Bipolar Operational Power) do not have the REM command to switch the PSU to remote mode, only the more recent digital display ones, and possibly some of the dial display ones that were bought more recently (hence there being a manual labelled "firmware not in use"). 12 | 13 | ## Calibrating Current to a Field 14 | 15 | The KEPCO can also use a calibration file to set and readback a field instead of a current. This is currently only used for the [HTS magnet](../magnets/HTS-Magnet). It looks in `Setting\config\common\magnets` for this file. 16 | -------------------------------------------------------------------------------- /doc/specific_iocs/power_supplies/Thurlby-Thandar-TTI-PLP-Power-Supply.md: -------------------------------------------------------------------------------- 1 | # Thurlby Thandar TTI-PLP 2 | 3 | The Thurlby Thandar TTI PLP series are simple generic bench power supplies. 4 | 5 | Items that can be set include : 6 | 7 | 1. Output voltage. 8 | 1. Output current. 9 | 1. Output On/Off. 10 | 1. Voltage limit. 11 | 1. Current limit. 12 | 13 | * There are two switches on the rear of the unit to control whether the two modes, constant voltage and constant current, are controlled locally or 14 | remotely. Set these switches according to the experiment requirements. 15 | 16 | * The serial connection is made using a standard MOXA 9-pin cable. 17 | 18 | * The device has an address based on whether there are 1 or 2 independent power supplies in the same unit (c.f. Eurotherm). This is mirrored in the IOC with an ADDRESS macro. Currently, ISIS only has single power supply units. 19 | -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/MEASM905-Pressure-Transducer.md: -------------------------------------------------------------------------------- 1 | # MEASM905 Pressure Transducer 2 | 3 | This device is used on PEARL as a read-only pressure monitor, as part of the larger pressure control rig. 4 | 5 | In its current implementation, the device uses ASCII protocol to receive a simple command for a pressure reading. A bespoke db25 to Moxa cable has been created, as it uses a different protocol from RS232. 6 | 7 | The PEARL handbook specifies that this device can use three different protocols: It currently uses the "M905 Protocol 1" to talk to the device. 8 | 9 | ## update 10 | 11 | there are a set of standalone units created for other beamlines, ioc works well, just requires a male DB9 moxa cable 12 | -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/OERCONE.md: -------------------------------------------------------------------------------- 1 | # OERCONE 2 | 3 | The Oerlikon Centre-One pressure gauge is used to monitor pressure for NIMROD. 4 | 5 | COM settings are a single port, 9600,8,None,1, Line Feed as termination character, No flow control. 6 | 7 | Pressures are read by sending "PR1", waiting 100ms, then sending "05" in Hex and reading back the response in the format %d,%f into a status and Gauge value respectively. The gauge value is then displayed and plotted on a graph. 8 | 9 | Units can be either mbar (Default), Torr, Pascal or Micron. These are read using by sending "UNI", waiting 100ms, then sending "05" in Hex and reading back the response which will contain 0 for mbar, 1 for Torr, 2 for Pascal and 3 for Micron. 10 | 11 | Units can also be set. To do this the IOC sends "UNI,{0|1|2|3}", (with the numbers corresponding to mbar, Torr, Pascal and Micron as above), waiting 100ms, then sending "05" in Hex and reading back the response which will contain 0 for mbar, 1 for Torr, 2 for Pascal and 3 for Micron. -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/Omega_IBTHX.md: -------------------------------------------------------------------------------- 1 | # Omega IBTHX 2 | 3 | Device communicates via TCP 4 | 5 | There are connection issues with this device - these show up with a ping to the IP so are independent of any driver being used (whether it be LabVIEW or epics). -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/PACE5000.md: -------------------------------------------------------------------------------- 1 | # PACE5000 2 | 3 | The PACE 5000/6000 pressure controller is a device used on PEARL. We currently do not have an IOC for this. It can be communicated with via GPIB, RS-232 or Ethernet, using the same SCPI interface. 4 | 5 | For more info see https://github.com/ISISComputingGroup/IBEX/issues/6044 -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/TPG26x.md: -------------------------------------------------------------------------------- 1 | # TPG26x 2 | 3 | The TPG26x is shorthand for multiple devices with the same interface. They all measure pressure based on sensors that are plugged in. See https://www.pfeiffer-vacuum.com/en/products/measurement/activeline/controllers/?detailPdoId=5724 manual is also in `C:\LabVIEW Modules\Drivers\Pfeiffer TPG26x\Documentation`. 4 | 5 | ## Simulator 6 | 7 | Simulator PVs are: 8 | 9 | | Name | Description | 10 | | --- | --- | 11 | | `SIM ` | 1 to switch simulation on, 0 off | 12 | | `SIM:UNITS ` | 1-3 for the different units | 13 | | `SIM:X:PRESSURE` | To set the pressure readback (X is 1 or 2) | 14 | | `SIM:X:ERROR ` | To set the error, 0 - 6; 0 is no error (X is 1 or 2) | 15 | 16 | ## Emulator 17 | 18 | Set up the port with in the st.cmd and run the simulator. There are several backdoor command to set the internal state, telnet to the emulator and then issue: 19 | 20 | | Command | Argument | Description | 21 | | --- | --- | --- | 22 | | `emulator:set:pressureX` | | Set the pressure of sensor X (X 1 or 2) | 23 | | `emulator:set:errorX` | | Set the error of sensor X (X 1 or 2) | 24 | | `emulator:set:units` | | Set the units | 25 | 26 | -------------------------------------------------------------------------------- /doc/specific_iocs/pressure_monitors/TPG36x.md: -------------------------------------------------------------------------------- 1 | # TPG36x 2 | 3 | The TPG36x IOC controls a series a pressure gauges. The TPG36x device is *very* similar to the [TPG26x](TPG26x) device: the main difference is that the TPG36x uses different communication terminators, and uses RS485 as opposed to RS232. 4 | 5 | ## Difference between 361 and 362 6 | 7 | The 361 is single gauge whereas the 362 is dual gauge. This means the two devices have a different protocol in regards to pressure return values. The 362 returns 2 values whereas the 361 returns 1 value. 8 | 9 | The drivers protocol defaults to the 362 protocol by having a default value of N for the macro IS361. If you have a 361 device this will cause a protocol mismatch and the **driver record will go into alarm**. 10 | 11 | To change this for a 361 device set IS361 to Y in globals.txt or in an IBEX configuration. -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/Beamlines.md: -------------------------------------------------------------------------------- 1 | # Beamline-specific information 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | beamlines/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/Config-Training.md: -------------------------------------------------------------------------------- 1 | # Reflectometry Config Training 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | config_training/Reflectometry-Config-Training-‐-Overview-&-Setup 9 | config_training/Reflectometry-Config-Training-‐-Exercise-* 10 | ``` -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/Design-Docs.md: -------------------------------------------------------------------------------- 1 | # Reflectometry Design Documents 2 | 3 | ```{toctree} 4 | :glob: 5 | :maxdepth: 1 6 | :titlesonly: 7 | 8 | design_docs/* 9 | ``` 10 | -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/beamlines/POLREF_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/beamlines/POLREF_1.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/beamlines/POLREF_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/beamlines/POLREF_2.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/beamlines/Reflectomtery-IOC-SURF.md: -------------------------------------------------------------------------------- 1 | # Reflectometry IOC - SURF 2 | 3 | Specific information about SURF. 4 | 5 | ### Blocks 6 | 7 | Unlike some reflectometers there is only a single sample height and it is defined by the block: 8 | 9 | - `Height`: Distance between the beam and the centre of rotation; usually set to 0. This parameter moves the height stage tracking the beam. 10 | 11 | {#refl_surf_beam_blocker} 12 | ### Slit 3/Beam blocker 13 | 14 | There is no [beam blocker](../Reflectometry-Beam-Blocker) setup on SURF. 15 | -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/beamlines/tests_POLREF_2020_08_20.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/beamlines/tests_POLREF_2020_08_20.xlsx -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/config_training/Beamline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/config_training/Beamline.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/config_training/refl_beamline_setup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/config_training/refl_beamline_setup.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/AxesOnPolref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/AxesOnPolref.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/AxesOnPolrefVertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/AxesOnPolrefVertical.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Beamline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Beamline.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/BeamlineMoveEvents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/BeamlineMoveEvents.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/ComponentArchitecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/ComponentArchitecture.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/GeneralIntersect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/GeneralIntersect.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Interpolated2DExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Interpolated2DExample.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/MotorReadbackChangeEvents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/MotorReadbackChangeEvents.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Non-small_angle_approx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Non-small_angle_approx.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Non_small_angle_approx_2_angles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Non_small_angle_approx_2_angles.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/POLREF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/POLREF.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/POLREF_sketch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/POLREF_sketch.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/ReadbackSequenceEvents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/ReadbackSequenceEvents.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Reflectometry1.vsdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Reflectometry1.vsdx -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/Reflectometry_IBEX_Dashboard.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/Reflectometry_IBEX_Dashboard.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/RelativeParameterWithMotor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/RelativeParameterWithMotor.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/TS1_and_TS2_nr_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/TS1_and_TS2_nr_mode.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/beam_blocker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/beam_blocker.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/bench_movement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/bench_movement.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/example_single_move.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/example_single_move.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/phi_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/phi_scan.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/polarised_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/polarised_mode.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/refl_beamline_setup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/refl_beamline_setup.PNG -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/reflectometry_basic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/reflectometry_basic.jpg -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/sp_inits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/sp_inits.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/images/theta_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/images/theta_scan.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/phi_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/phi_scan.png -------------------------------------------------------------------------------- /doc/specific_iocs/reflectometry/theta_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/reflectometry/theta_scan.png -------------------------------------------------------------------------------- /doc/specific_iocs/rheometers/Couette-Cell.md: -------------------------------------------------------------------------------- 1 | # Couette Cell 2 | 3 | A Couette cell is a device for measuring properties of fluids see (https://www.isis.stfc.ac.uk/Pages/Unilever-Extensional-Shear-Cell.aspx). It is based on a Mclennan motor running in one of three modes: 4 | 5 | 1. Go to a position (either relative to the current position or an absolute position 6 | 1. Spin at a constant velocity 7 | 1. Move between two positions (in this mode the readbacks will stop working because the Mclennan is busy) 8 | 9 | This is currently an LVDCOM device. -------------------------------------------------------------------------------- /doc/specific_iocs/sensors/Anton-Paar-L‐Dens-3300-Density-Sensor.md: -------------------------------------------------------------------------------- 1 | # Anton Paar L-Dens 3300 Density Sensor 2 | 3 | - This device has no commands and asynchronously sends readings. 4 | - Which readings it sends depends on which application is loaded onto the device, at ISIS we use the `Live Raw Data` application at the moment with room to expand, meaning it is safe to assume the device will send data in the following format `T= 24.74 <°C> D= 0.8 <\r><\n>`; a temperature of the fluid and the density of the fluid in degrees Celsius and kilograms per metre cubed respectively. 5 | - If a different application is loaded then the temperature and density PVs sit in `INVALID` alarm. 6 | - To account for the device's asynchronous behaviour we use I/O interrupt AI records which trigger when the input it is pointing to changes. 7 | - If 10 seconds pass and no messages are received in the expected format then the temperature and density PVs go into `INVALID` alarm. 8 | 9 | The IOC to facilitate use of this was implemented under https://github.com/ISISComputingGroup/IBEX/issues/8413. 10 | 11 | Baud = 9600 12 | 13 | Data = 8 14 | 15 | Parity = None 16 | 17 | Stop = 1 18 | 19 | The manual can be found at `\\ISIS\Shares\ISIS_Experiment_Controls\Manuals\AntonParr_L-Dens3300`. (With the operator and admin pass codes on page 16) -------------------------------------------------------------------------------- /doc/specific_iocs/sensors/Micro-Epsilon-confocal-rangefinder.md: -------------------------------------------------------------------------------- 1 | # Micro-epsilon confocal range finder 2 | 3 | **IOC Name: MECFRF** 4 | 5 | This device is used on CRISP to measure distances. It is an ethernet device. It has an IP address assigned by DHCP, but only after is explicitly told to do so. If the device is power cycled you will need to tell it to reacquire an address. 6 | 7 | ## Protocols 8 | 9 | The manual specifies several different protocols on several buses (RS485, Ethernet, EtherCAT). The protocol we are using is documented in the manufacturer manual under a section called "Measurement Data Transmission to a Server via Ethernet" 10 | 11 | It streams data continuously rather than having an explicit read command. 12 | 13 | The IOC attempts to detect if the messages from the device don't start with the expected header, and if that is the case, resets the TCP connection to try and get the messages back in sync. -------------------------------------------------------------------------------- /doc/specific_iocs/signal_generators/Aeroflex.md: -------------------------------------------------------------------------------- 1 | # Aeroflex 2 | 3 | Previous logic of the ioc had this logic for sending mode params: 4 | 5 | This logic is probably in connection with changing from PULSE to none PULSE versions of the MODE setpoint. The calculation part 6 | *probably* takes care of switching to the right mode with respect to the specified order of modes in the mbbo in record MODE:SP 7 | 8 | ## Model 2023A 9 | 10 | In db file at `aeroflexSup\aeroflex_2023A.db` 11 | ``` 12 | record(calcout, "$(P)SEND_MODE_PARAMS") 13 | { 14 | field(DESC, "Set modulation button") 15 | field(SCAN, "Passive") 16 | field(INPA, "$(P)MODE:SP_NO_ACTION") 17 | field(INPB, "$(P)PULSE_CHECK:SP") 18 | field(CALC, "(B = 0) ? ((2 * A) + 1) : (2 * A)") 19 | field(OUT, "$(P)MODE:SP PP") 20 | } 21 | ``` 22 | 23 | ## Model 2030 24 | 25 | In db file at `aeroflexSup\aeroflex_2030.db` 26 | ``` 27 | record(calcout, "$(P)SEND_MODE_PARAMS") 28 | { 29 | field(DESC, "Set modulation button") 30 | field(SCAN, "Passive") 31 | field(INPA, "$(P)MODE:SP_NO_ACTION") 32 | field(INPB, "$(P)PULSE_CHECK:SP") 33 | field(CALC, "((B=1)&&(A>2))?(A-3):(A+2)") 34 | field(OUT, "$(P)MODE:SP PP") 35 | } 36 | ``` 37 | 38 | These are now removed. -------------------------------------------------------------------------------- /doc/specific_iocs/signal_generators/Agilent-33220A.md: -------------------------------------------------------------------------------- 1 | # Agilent 33220A 2 | 3 | The Agilent 33220A is a signal generator. Currently this only has an IOC, no OPI but should work. The IOC should also work with the 33210A. 4 | 5 | -------------------------------------------------------------------------------- /doc/specific_iocs/signal_generators/Tektronix-AFG3XXX.md: -------------------------------------------------------------------------------- 1 | # Tektronix AFG3XXX 2 | 3 | The Tektronix AFG3XXX is a signal generator. 4 | 5 | It has an OPI for very basic controls, such as a trigger button and readbacks/setters for frequency, voltage and voltage offset. The underlying IOC provides many other commands however an arbitrary function generator is a very complex device to control remotely and therefore not all SCPI commands have been ported through to EPICS. 6 | 7 | The trigger PV is a `bo` type but calls `*TRG` on the device which generates a trigger event. 8 | 9 | It is an ethernet device (ignore bits of log which mention GPIB - we are talking to it via ethernet). They respond to ping when on the network, and are usually set to use DHCP. The IP address can be found from front panel of the device. 10 | 11 | If plugged into network after being turned on, the physical device & ioc might need a power cycle in order to talk properly from IBEX. -------------------------------------------------------------------------------- /doc/specific_iocs/signal_generators/litron_opi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/signal_generators/litron_opi.png -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/LKSH340ExcitationsEPICS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/temp_controllers/LKSH340ExcitationsEPICS.png -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/Lakeshore350.md: -------------------------------------------------------------------------------- 1 | # Lakeshore 350 2 | 3 | The Lakeshore 350 is a temperature controller which is very similar to the [Lakeshore 336](Lakeshore336) - the 336 IOC should cater for it. Currently the OPI supports 2 control loops however an expansion card can be used to allow another 2 control loops to be used with the IOC. 4 | 5 | -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/Lakeshore372.md: -------------------------------------------------------------------------------- 1 | # Lakeshore 372 2 | 3 | The Lakeshore 372 is a temperature controller used to control the temperature on dilution fridges - mostly triton fridges. At ISIS, these are only in use on the muon beamlines, as they operate the fridges with a "weak thermal link" which means that the sample would otherwise take a long time to warm up again. The Lakeshore 372 provides a small heater which sits on the sample, and all of the temperature control is done via this heater. 4 | 5 | ### Connection details 6 | 7 | The Lakeshore 372 is an ethernet device. By default it communicates on port 7777. All messages are terminated with `\r\n`. To connect to the device make sure it is in DHCP mode. 8 | 9 | ### PID settings 10 | 11 | The Lakeshore 372 only accepts integers for the I (integral) & D (derivative) PID parameters. Floating-point numbers are only acceptable for the P (Proportional) parameter. -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/OMEGA-OME-Wise.md: -------------------------------------------------------------------------------- 1 | # OMEGA OME-Wise 2 | 3 | ## Web-server 4 | 5 | The device has an internal web-server accessible on its IP address but it can only be read using internet explorer (not chrome, Firefox or edge) 6 | -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/Ral-furnaces.md: -------------------------------------------------------------------------------- 1 | # RAL Furnaces 2 | 3 | ### RAL Furnace 3 4 | 5 | RAL furnace 3 is a composite device, part of which is a Turbotronik NT 10 talking to a Eurotherm, the other part is a Pfeiffer vacuum gauge 6 | That vacuum gauge is a TPG26X_01 referred to on both GEM (furnace pressure component) and POLARIS (Eurotherms with barotrons component). 7 | 8 | -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/Temperature-Jump-Apparatus.md: -------------------------------------------------------------------------------- 1 | # Temperature Jump Apparatus 2 | 3 | The device has been designed and built in house. 4 | 5 | There are two temperature blocks, which are set to a temperature using a standard controller. The cell is pressed against one, a length of time is allowed to pass to set the temperature, the block in contact with the cell is then swapped for the other block, which will be at a different temperature. 6 | 7 | ### Communication 8 | - Device uses 9-way male moxa with null modem. 9 | - Needs longer timeouts to correctly read the status command. 10 | 11 | Note: the Temperature Jump apparatus IOC will be included in the release after `v12.0.1`. If anyone needs to use it before the next is deployed we can easily patch the fixed protocol file over for it. -------------------------------------------------------------------------------- /doc/specific_iocs/temp_controllers/julabo_commands.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/specific_iocs/temp_controllers/julabo_commands.xlsx -------------------------------------------------------------------------------- /doc/system_components/Alarm-preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/Alarm-preferences.png -------------------------------------------------------------------------------- /doc/system_components/Inst-etc-IOC.md: -------------------------------------------------------------------------------- 1 | # `INSTETC` IOC 2 | 3 | PVs which are for instrument level, e.g. motors moving and security pvs 4 | 5 | 6 | ## User variables 7 | 8 | There are a host of user variables which are autosaved for the users to set. The number of these is controlled with the macro `NUM_USER_VARS`. There are 3 types: 9 | 10 | - Integer in `IN::PARS:USER:IX` (X is index) 11 | - Reals in `IN::PARS:USER:RX` (X is index) 12 | - Strings in `IN::PARS:USER:SX` (X is index), NB these are maximum of 40 characters 13 | 14 | ## User Buttons 15 | 16 | There are a group of user buttons which can be setup using the [add buttons shared utility script](https://github.com/ISISNeutronMuon/InstrumentScripts/wiki/Button-Functions). The number of these is controlled with `NUM_USER_BUTTONS` macro. 17 | 18 | ## Instrument specific records 19 | Records that are specific to an instrument can be placed in the `custom_records.db` in the configurations directory which are then loaded by INSTETC. [Macros can also be passed through to these records](Settings-and-Configurations) 20 | -------------------------------------------------------------------------------- /doc/system_components/LabVIEW.md: -------------------------------------------------------------------------------- 1 | # LabVIEW 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | 8 | labview/* 9 | ``` -------------------------------------------------------------------------------- /doc/system_components/LogPreferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/LogPreferences.png -------------------------------------------------------------------------------- /doc/system_components/Nicos.md: -------------------------------------------------------------------------------- 1 | # NICOS 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | :maxdepth: 1 7 | :hidden: 8 | 9 | nicos/* 10 | ``` 11 | 12 | 13 | NICOS is a Python based control system developed at FRM-II. The general software documentation can be found [here](http://cdn.frm2.tum.de/fileadmin/stuff/services/ITServices/nicos-master/dirhtml/). Although NICOS is a fully fledged control system ISIS are currently only using it as a script server. 14 | 15 | - [Getting Started](nicos/Installing-Nicos-on-Windows): How to install Nicos on Windows. 16 | - [Running Nicos](nicos/Running-Nicos-(Script-Server)): How to run Nicos. 17 | - [Instrument Configuration](nicos/Configuring-a-New-Nicos-Instrument): How to set up and configure a new Nicos instrument. 18 | - [Script server design](nicos/Design-Documents): The original design documents for what a script server at ISIS would be required to do. 19 | - [Initial evaluation](nicos/design_docs/Nicos-evaluation): An evaluation of Nicos and its suitability for integration into the IBEX project. 20 | 21 | ## Developer notes 22 | 23 | - [Testing Nicos](nicos/Testing-Nicos) 24 | - [Nicos commands](nicos/NICOS-commands) 25 | - [Developing nicos-core](nicos/Developing-NICOS) 26 | - [Nicos notes](nicos/NICOS-notes): Issues and developer items around NICOS including the git window it uses 27 | -------------------------------------------------------------------------------- /doc/system_components/Python.md: -------------------------------------------------------------------------------- 1 | # Python (Uktena) 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | python/* 8 | ``` -------------------------------------------------------------------------------- /doc/system_components/archive/CSS-Troubleshooting.md: -------------------------------------------------------------------------------- 1 | # Archive Engine Troubleshooting 2 | 3 | ## CSS components won't start (IDE, Block Archiver, Inst Archiver, Alarm server) 4 | 5 | Ensure Java 8 is **NOT** installed on the system. If java 8 is installed, uninstall it and reboot. A java 8 installation will prevent CSS components from starting correctly, as they will detect this and attempt to use it, but they are incompatible with java 8 and require java 11+. 6 | 7 | For the IDE: 8 | - Symptom is either a hang at IDE startup (on splash screen, loading bar will never display) or an immediate pop-up saying java 8 is being used and is incompatible. 9 | - Make sure java 8 (or any earlier java) is not installed on system and you have the current recommended IBEX java version installed. 10 | - restart your machine 11 | - run `git clean -fqdx` in the css directory 12 | - run `create_icp_binaries.bat` 13 | - run `setup_css.bat` 14 | -------------------------------------------------------------------------------- /doc/system_components/blockserver/channel_access_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/channel_access_uml.png -------------------------------------------------------------------------------- /doc/system_components/blockserver/config_list_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/config_list_uml.png -------------------------------------------------------------------------------- /doc/system_components/blockserver/config_servers_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/config_servers_uml.png -------------------------------------------------------------------------------- /doc/system_components/blockserver/configs_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/configs_uml.png -------------------------------------------------------------------------------- /doc/system_components/blockserver/file_watcher_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/file_watcher_uml.png -------------------------------------------------------------------------------- /doc/system_components/blockserver/full_uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/blockserver/full_uml.png -------------------------------------------------------------------------------- /doc/system_components/configurations/PV-Values.md: -------------------------------------------------------------------------------- 1 | # PV Values 2 | 3 | PV values are set by the `icpconfig` code in two phases: 4 | 5 | ### Static DB access 6 | 7 | This attempts to run between autosave and PINI. This phase is **only** important for records with PINI=YES. 8 | 9 | Note: internally, the static PV access library required you to specify the field - it will not default to .VAL for you. There is some code in icpconfig to do this. 10 | 11 | ### Dynamic DB access 12 | 13 | This attempts to run after the IOC is started. However, it works inconsistently for records with PINI=YES because you get a race condition between PINI running and the value being set. -------------------------------------------------------------------------------- /doc/system_components/configurations/banner_customisation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/configurations/banner_customisation.png -------------------------------------------------------------------------------- /doc/system_components/configurations/dashboard.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/configurations/dashboard.PNG -------------------------------------------------------------------------------- /doc/system_components/iocLogArchitecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/iocLogArchitecture.png -------------------------------------------------------------------------------- /doc/system_components/logViewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/logViewer.png -------------------------------------------------------------------------------- /doc/system_components/mysql/Database-Schemas.md: -------------------------------------------------------------------------------- 1 | # Database Schemas 2 | 3 | This document describes the high level design for IBEX. Eventually there should be outlines of the architectural design for each part of the high level design. 4 | 5 | ### Experiment Details Database 6 | 7 | ![Experiment Details Database](experiment_details_database.png) 8 | 9 | ### IOC Database 10 | 11 | ![IOC Database](ioc_database.png) 12 | 13 | ### Message Log Database 14 | 15 | ![Message Log Database](message_log_database.png) 16 | 17 | ### Notes 18 | 19 | The figures are made in [Visio](https://products.office.com/en-gb/visio/flowchart-software), and are stored in the images folder when you check out the Wiki. 20 | 21 | -------------------------------------------------------------------------------- /doc/system_components/mysql/experiment_details_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/mysql/experiment_details_database.png -------------------------------------------------------------------------------- /doc/system_components/mysql/ioc_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/mysql/ioc_database.png -------------------------------------------------------------------------------- /doc/system_components/mysql/message_log_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/mysql/message_log_database.png -------------------------------------------------------------------------------- /doc/system_components/nicos/Design-Documents.md: -------------------------------------------------------------------------------- 1 | # Script Server design documents 2 | 3 | ```{note} 4 | These documents summarise the requirements gathered when originally implementing the script server. 5 | 6 | They may be useful as a historical reference, but are not necessarily up-to-date with the latest design. 7 | ``` 8 | 9 | ```{toctree} 10 | :glob: 11 | :titlesonly: 12 | :maxdepth: 1 13 | 14 | design_docs/* 15 | ``` -------------------------------------------------------------------------------- /doc/system_components/nicos/NICOS-commands.md: -------------------------------------------------------------------------------- 1 | # NICOS Commands 2 | 3 | IBEX interacts with the NICOS back-end using pre-defined commands that are sent to the NICOS daemon via ZeroMQ. These are formatted in JSON as [`command`, [`arg_1`, ... , `arg_n`] ]. 4 | 5 | You can find the available commands in `EPICS\ISIS\ScriptServer\master\nicos\services\daemon\handler.py` -------------------------------------------------------------------------------- /doc/system_components/nicos/Running-Nicos-(Script-Server).md: -------------------------------------------------------------------------------- 1 | # Running NICOS 2 | 3 | As of [issue 7135](https://github.com/IsisComputingGroup/ibex/issues/7135), NICOS is no longer started automatically as part of a default instrument startup. Instead, the `NICOSDAEMON` ioc must be added to the configuration. On instruments, adding this IOC to their "base" component is likely to be best. 4 | 5 | To test the script server is working, open the "Script Server" perspective in the ibex client. Check that the connection status label says "No Error". Write a simple script and send it to the server. You should be able to see the output from NICOS in the output text field. 6 | 7 | For testing purposes you can also start the Nicos GUI by navigating to the `bin/` directory and run `python nicos-gui` and connect to the local daemon. However, as the NICOS GUI does not use ZeroMQ you will have to comment out `servercls='nicos.services.daemon.proto.zeromq.Server'` in `nicos-core/master/custom/demo/setups/special`. Both `nicos-daemon` and `nicos-gui` need to be restarted for this change to take effect. -------------------------------------------------------------------------------- /doc/system_components/nicos/Testing-Nicos.md: -------------------------------------------------------------------------------- 1 | # Testing Nicos 2 | 3 | In order to run the unit tests on Nicos, you first need to set up your Python packages. Install the packages listed in the `README` document in your `nicos-core` directory. At time of writing these are: 4 | 5 | - pytest 6 | - mock 7 | - coverage (optional) 8 | - sphinx (for generating doc) 9 | 10 | This can be done simply by running `pip install [package-names]` from your `...\Python\Scripts` directory. 11 | 12 | Now you can go ahead and run the tests. Go to `...\nicos-core\test` and run `...\Python\Scripts\pytest.exe`. Pytest will detect all the tests in the directory and run them. Note that it is important to run it from the `test` directory or some tests will fail to do some relative imports. 13 | 14 | Alternatively, you can run the tests in PyCharm by creating a pytest run configuration in Run|Edit Configurations.. then right clicking on the `test` directory and clicking `Run 'Pytests in test'` or `Debug 'Pytests in test'`. (See [here](https://www.gowrishankarnath.com/using-pytest-testing-tool-to-test-python-code-by-configuring-pycharm-ide.html) for more detail) -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/Back_End_Design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/Back_End_Design.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/Backend_Design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/Backend_Design.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/DynamicScripting.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/DynamicScripting.drawio.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/ProxyDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/ProxyDesign.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/Scan_Server_Annotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/Scan_Server_Annotated.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/Scan_Server_IBEX_manual_edit_mockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/Scan_Server_IBEX_manual_edit_mockup.png -------------------------------------------------------------------------------- /doc/system_components/nicos/design_docs/Scan_Server_IBEX_mockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/nicos/design_docs/Scan_Server_IBEX_mockup.png -------------------------------------------------------------------------------- /doc/system_components/python/Python-Circular-Dependencies-Resolution.md: -------------------------------------------------------------------------------- 1 | # Python Circular Dependencies Resolution 2 | 3 | It is possible to get circular dependencies in python the normal way to resolve this is to take the circular dependent items into another file. However now with typing it is possible to get circular references only through typing it is possible to resolve this by: 4 | 5 | 1. Instead of the type use the text version of the type 6 | 1. Import the type using: 7 | ``` 8 | if TYPE_CHECKING: 9 | from XXX import XXXX 10 | ``` 11 | 12 | For example: 13 | 14 | ``` 15 | from x import ArgType 16 | def myfun(arg: ArgType): 17 | ``` 18 | 19 | replace with: 20 | ``` 21 | if TYPE_CHECKING: 22 | from x import ArgType 23 | 24 | def myfun(arg: 'ArgType'): 25 | ``` 26 | 27 | Typical Error you see is: 28 | 29 | ``` 30 | ImportError: cannot import name '' from partially initialized module '' (most likely due to a circular import) () 31 | ``` 32 | -------------------------------------------------------------------------------- /doc/system_components/python/graylog_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/python/graylog_screenshot.png -------------------------------------------------------------------------------- /doc/system_components/remoteIOCArchitecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/system_components/remoteIOCArchitecture.png -------------------------------------------------------------------------------- /doc/system_components/startup/Mini-inst-Troubleshooting.md: -------------------------------------------------------------------------------- 1 | # Mini-inst troubleshooting 2 | 3 | Issues that arise when running a mini-inst. 4 | 5 | ## IOC will not start and console is not available for IOC I have put in startup.txt 6 | 7 | If you want to start an IOC but it doesn't appear to have a console even though it is in `startup.txt`. It is likely that the `proc serve` has not been created to make the list of proc server running small. To fix this run `make iocstartups` in the base epics folder. If you can not restart IBEX then start the IOC manually. 8 | -------------------------------------------------------------------------------- /doc/systems/External.md: -------------------------------------------------------------------------------- 1 | # External systems/services 2 | 3 | This information documents the computers on which parts of IBEX may depend, but are not directly within the team's control. 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | 9 | external/* 10 | ``` -------------------------------------------------------------------------------- /doc/systems/Inst-Control.md: -------------------------------------------------------------------------------- 1 | # Instrument control computers 2 | 3 | The physical host machines, and the virtual machines which run on them, for controlling each individual instrument. 4 | 5 | ```{toctree} 6 | :glob: 7 | :titlesonly: 8 | 9 | inst_control/* 10 | ``` -------------------------------------------------------------------------------- /doc/systems/Nagios.md: -------------------------------------------------------------------------------- 1 | # Nagios 2 | 3 | For information about the setup of the nagios server see [here](https://stfc365.sharepoint.com/sites/ISISExperimentControls/_layouts/15/Doc.aspx?sourcedoc=%7BA6F9D67A-4FC8-493C-9834-995CF4044F27%7D&file=nagios_server.docx&action=default&mobileredirect=true&DefaultItemOpen=1). 4 | 5 | 6 | ```{toctree} 7 | :glob: 8 | :titlesonly: 9 | 10 | nagios/* 11 | ``` 12 | -------------------------------------------------------------------------------- /doc/systems/Test-Machines.md: -------------------------------------------------------------------------------- 1 | # Test Machines 2 | 3 | Test machines are currently virtual machines running on ... to access them: 4 | 5 | 1. Run Hyper-V Manager using your admin account (you may have to install it) 6 | 1. Connect to the server ndhspare70 (use right click, I think I used my admin credentials and Chris had to enable access for me) 7 | 8 | ## To reset them 9 | 10 | 1. Click on the server (left) 11 | 1. Click the Virtual machine you want to reset (middle) 12 | 1. Right click on the Clean for Clone check point and click `apply ...` 13 | 1. Click Apply yes I do 14 | 1. Right click and delete checkpoint sub tree (above clean for clone) - this removes history 15 | 1. Bring up the machine console (double click on the machine name) 16 | 1. Click power on (green button left on toolbar) 17 | 1. Wait for boot 18 | 1. Task Sequence: Build Basic W7 19 | 1. Computer Details: Set machine name and next 20 | 1. Move Data and Settings: Do not move 21 | 1. User Data: Do not restore 22 | 1. Administration Password: Leave as is 23 | 1. Ready: Begin 24 | 1. Leave to boot 25 | -------------------------------------------------------------------------------- /doc/systems/Webserver.md: -------------------------------------------------------------------------------- 1 | # Webserver 2 | 3 | NDAEXTWEB is a central Windows 2019 server that runs a number of the web services associated with IBEX. The login credentials for this are in sharepoint. The server holds: 4 | 5 | * The [IBEX web dashboard](/webdashboard/Web-Dashboard) 6 | * The [Automation application](/processes/git_and_github/Automation-Application) 7 | * [MCR news](https://www.isis.stfc.ac.uk/Pages/MCR-News.aspx) 8 | * The SECI web dashboard 9 | * The central proxy created [here](https://github.com/ISISComputingGroup/IBEX/issues/5112) 10 | * WAP access to SECI web dashboard 11 | 12 | 13 | Most of these services can be started and stopped by the [IIS Manager](https://www.iis.net/). To access the IIS Manager, select IIS in the Server Manager, then click on Manage in the top right hand corner of that screen. 14 | 15 | There should be 2 sites, Dataweb and WAP, which provide the above. 16 | 17 | If a new server is setup, then ciphers and old TLS versions may need to be disabled e.g. tls 1.0 and 1.1 as per https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/manage-ssl-protocols-in-ad-fs 18 | 19 | -------------------------------------------------------------------------------- /doc/systems/control_svcs/Alert-Relay.md: -------------------------------------------------------------------------------- 1 | # Alert Relay 2 | 3 | This is a python file `/isis/cgi/sendmess.py` living on control-svcs and invoked as `http://control-svcs.isis.cclrc.ac.uk/isiscgi/sendmess.py` 4 | 5 | It is only possible to invoke this file when on RAL site, and you also need to pass a correct passcode (see IBEX access sharepoint) as one of the parameters for it to send a message. The parameters passed are: 6 | ``` 7 | mobiles: a semicolon separated mobiles list for sms text 8 | emails: a semicolon separated email list 9 | pw: correct passcode 10 | inst: instrument name for slack/teams alerts 11 | message: the message 12 | ``` 13 | 14 | An IOC usually posts to this service from the :AC: (alert control) system loaded by the run control IOC 15 | 16 | To do the alerting it will use `sendAlert.db` from `support/webget`. This combines several PVs with mobiles, emails etc. and encodes into the format required for a http POST using the aSub function `webFormURLEncode`. It then sends this to control-svcs using the aSub function `webPOSTRequest` 17 | 18 | To see the debug output of what `sendAlerts.db` is sending set `epicsEnvSet("WEBGET_POST_DEBUG","1")` in the `st.cmd` of the runcontrol IOC. This is suppressed by default as it may contain sensitive user data. -------------------------------------------------------------------------------- /doc/systems/external/ICAT-Troubleshooting.md: -------------------------------------------------------------------------------- 1 | # ICAT / TopCAT 2 | 3 | **ICAT** is a metadata catalogue of ISIS (and other facilities' data). **TopCAT** is the web interface to this catalogue. 4 | 5 | For more information, see the [ICAT Project Website](https://icatproject.org/). 6 | 7 | Occasionally, the process which ingests ISIS data into the ICAT catalogue stops and the main symptom of this is that new data isn't available via TopCAT. This is what users notice and may call us about. 8 | 9 | Unfortunately, the server that runs the ingestion process is managed by SCD and we have no control over it (although it is on the ISIS network). There are various NAGIOS checks provided by SCD that we run on our server which notify the relevant people of any problems. 10 | 11 | There is an ICAT/TopCAT entry in the category dropdown box on the [error reporting page](http://sparrowhawk.nd.rl.ac.uk/footprints/) that can be used to submit a problem (will be forwarded to Computing Group), or the SCD team can be contacted directly via their [email address](mailto:isisdata@stfc.ac.uk). -------------------------------------------------------------------------------- /doc/systems/external/IDAaaS.md: -------------------------------------------------------------------------------- 1 | # IDAaaS 2 | 3 | To access IDAaaS see details at https://www.isis.stfc.ac.uk/Pages/Connecting-to-isiscomputendrlacuk-using-NoMachine.aspx 4 | 5 | You need to login with user office credentials, which can be you fed id or user@stfc.ac.uk email address. However you need to make sure you have a user office account id and that this is linked to your fed id. 6 | 7 | If you haven't signed up for a User Office account before, you should be able to request one using your stfc email address at https://users.facilities.rl.ac.uk/ Once you have done that, if you login, select "My Details" at the top of the page, you should see a button on the left hand side saying "Request Fed ID". This will give you an option to link it to your Federal ID. -------------------------------------------------------------------------------- /doc/systems/inst_control/Change-Windows-Theme.md: -------------------------------------------------------------------------------- 1 | # Change Windows Theme 2 | 3 | To change from Windows Classic mode to a more modern look on a Windows 7 PC 4 | 5 | 1. From the Windows Start menu, select Control Panel 6 | 1. If viewing the Control Panel by category 7 | 1. Choose Appearance & Personalisation 8 | 1. Select Change the Theme from the Personalisation section 9 | 1. Select the Windows 7 theme 10 | 1. If viewing the Control Panel by icons (large or small) 11 | 1. Choose Personalisation 12 | 1. Select the Windows 7 theme. 13 | 1. Now set the background to the standard neutral Instrument background (Grey) 14 | 1. Select Desktop Background (Harmony) 15 | 1. From the Dropdown, select `Solid Colors` (instead of Windows desktop backgrounds). 16 | 1. Select the third cell in from the top (a light grey) and "Save Changes" 17 | -------------------------------------------------------------------------------- /doc/systems/inst_control/DataVolumns_resolution.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/DataVolumns_resolution.xlsx -------------------------------------------------------------------------------- /doc/systems/inst_control/Script-to-connect-to-all-instruments.md: -------------------------------------------------------------------------------- 1 | # Script to connect to all instruments 2 | 3 | This is in the private repository on the shares. To use it clone as normal but use the path to the repo instead. 4 | 5 | This is a script for general use change it as needed. Currently the following functions are implemented by putting the right functions in the main of the script. 6 | 7 | Implement functions: 8 | 9 | - can be used to get versions of all instruments 10 | - can be used to list usage of genie functions 11 | - can be used to update files on drive 12 | -------------------------------------------------------------------------------- /doc/systems/inst_control/rdp_smart_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/rdp_smart_screen.png -------------------------------------------------------------------------------- /doc/systems/inst_control/vm-memory-change-memory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/vm-memory-change-memory.png -------------------------------------------------------------------------------- /doc/systems/inst_control/vm-memory-connect-to-vm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/vm-memory-connect-to-vm.png -------------------------------------------------------------------------------- /doc/systems/inst_control/vm-memory-hyper-v-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/vm-memory-hyper-v-icon.png -------------------------------------------------------------------------------- /doc/systems/inst_control/vm-memory-use-hardware-topology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/systems/inst_control/vm-memory-use-hardware-topology.png -------------------------------------------------------------------------------- /doc/systems/nagios/Adding-new-cycle-for-nagios-notifications.md: -------------------------------------------------------------------------------- 1 | # Adding new cycle for Nagios notifications 2 | 3 | Nagios has a file that lists time periods that notifications will be emailed in, many are "all the time" but some are set to be within cycle only, particularly ones that notify scientists e.g. muon pulse width or kicker check. The service will always go red in nagios web display and say that notifications are enabled, but not send an email alert unless the current time is within the linked timeperiod (it actually queues up the email and sends it once a timeperiod starts, hence it claims they are enabled). So this file needs to be updated with new isis cycle dates as appropriate. To do this: 4 | * log onto control-mon.isis.cclrc.ac.uk linux machine 5 | * cd /usr/local/nagios/etc/objects 6 | * edit `timeperiods.cfg` with your favourite linux editor. At the bottom of the file there is a timeperiod called `isis_cycle` and add a new line to this in the same format as the rest of the define. We use Friday before start of user run for our start time - the web page https://www.isis.stfc.ac.uk/Pages/Beam-Status.aspx lists start of user run which is the Tuesday, so count back 4 days from that 7 | * run `sudo service nagios reload` to load changes - you will be prompted for the password of the account you are logged in as 8 | 9 | -------------------------------------------------------------------------------- /doc/tools/Archive-Tools.md: -------------------------------------------------------------------------------- 1 | # Archive Tools 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | archive_tools/* 8 | ``` -------------------------------------------------------------------------------- /doc/tools/Check-db-file.md: -------------------------------------------------------------------------------- 1 | # Check db file script 2 | 3 | The check_db_file script checks that a db file conforms to the ISIS format. Usage: 4 | 5 | ``` 6 | python.exe check_db_file.py -f test_file.db 7 | 8 | optional arguments: 9 | -d --directory = specify a directory to check ALL the db files in 10 | -r --recursive = check all db files below the specified directory 11 | -v --verbose = shows more detailed information 12 | ``` -------------------------------------------------------------------------------- /doc/tools/Config-IOC-Finder.md: -------------------------------------------------------------------------------- 1 | # Config IOC Finder 2 | 3 | Print all IOCs over all configs and components on an instrument or list instruments with a given IOC. 4 | 5 | To use first check out the [config checker repository](https://github.com/ISISComputingGroup/ConfigChecker). 6 | 7 | To list all IOCs on all instruments use: 8 | 9 | get_ioc_usage.bat 10 | 11 | To list all IOCs on a limited number of instruments: 12 | 13 | get_ioc_usage.bat --instrument 14 | 15 | To list all instruments with a IOC starting with ``: 16 | 17 | get_ioc_usage.bat --ioc 18 | -------------------------------------------------------------------------------- /doc/tools/Config-Upgrader.md: -------------------------------------------------------------------------------- 1 | {#config_upgrade_script} 2 | # Config Upgrader 3 | 4 | See https://github.com/ISISComputingGroup/EPICS-upgrade 5 | -------------------------------------------------------------------------------- /doc/tools/Moxa-Tools.md: -------------------------------------------------------------------------------- 1 | # Moxa Tools 2 | 3 | ```{toctree} 4 | :glob: 5 | :titlesonly: 6 | 7 | moxa_tools/* 8 | ``` -------------------------------------------------------------------------------- /doc/tools/Network-traffic.md: -------------------------------------------------------------------------------- 1 | # Networking tools 2 | 3 | ## View Network Traffic using Wireshark 4 | 5 | To see packets to and from the machine simply install Wireshark and use. To look at packets on localhost. Install npcap (https://nmap.org/npcap/) with compatible for winpcap. Then afterwards install Wireshark it should recognise ncap. 6 | To capture network traffic: 7 | 8 | 1. Start Wireshark 9 | 1. Select capture interface (for localhost use Npcap Loopback Adapter) 10 | 1. Click the fin to start, stop button to stop and fin with reload to restart. 11 | 1. It is often useful to filter your traffic. Filters I have used: 12 | 13 | - `(data.data contains "TE:NDW1407:CS:SB" || data.data contains 00:06:00:08)` look at all packets containing block on my machine or the EPICS search for channel message 14 | - `udp.dstport == 55691 || udp.srcport == 55691` get all UDP data from and to port 55691 15 | - `tcp.srcport == 51679` get all tcp data from port 51679 16 | 17 | ## Look at Open Ports 18 | 19 | To see open ports as an admin type: 20 | ``` 21 | netstat -abon 22 | ``` -------------------------------------------------------------------------------- /doc/tools/Wiki-Checks.md: -------------------------------------------------------------------------------- 1 | # Wiki Checker 2 | 3 | We have a Jenkins pipeline for tests that check if our wikis are grammatically correct, that they reference valid links, and so on. It checks the developer's Wiki, the IBEX User's manual and the IBEX Wiki. 4 | 5 | ## Wiki Checks Repository 6 | Further detail, including on how to run the Wiki Checker locally can be found in the read me of the repository. 7 | https://github.com/ISISComputingGroup/ibex_wiki_checker 8 | -------------------------------------------------------------------------------- /doc/tools/archive_tools/archive-rates.md: -------------------------------------------------------------------------------- 1 | # Archive Rates 2 | 3 | To find what the current archiver rate is on a given machine use `...EPICS/utils/archive_rates.py` in an EPICS terminal. 4 | 5 | ``` 6 | usage: archive_rates.py [-h] [--host HOST] [--poll POLL] [--sum] [--show SHOW] 7 | 8 | Set query options 9 | 10 | optional arguments: 11 | -h, --help show this help message and exit 12 | --host HOST Host (default: localhost) 13 | --poll POLL Poll rate (default: 30) 14 | --sum Sum values (default: False) 15 | --show SHOW How many pvs to show (default: all) 16 | ``` 17 | -------------------------------------------------------------------------------- /doc/tools/moxa_tools/MOXAUTIL-command.md: -------------------------------------------------------------------------------- 1 | # `moxautil` command 2 | 3 | The `moxautil` command will allow you to control a moxa box in a limited way. Type: 4 | ``` 5 | moxautil.exe --help 6 | ``` 7 | for full details. Examples are: 8 | ``` 9 | moxautil.exe --ip=130.246.49.42 --resetserver --password=themoxapassword 10 | ``` 11 | to reboot the server or 12 | ``` 13 | moxautil.exe --ip=130.246.49.42 --alive 14 | ``` 15 | To check an IP is alive and really a moxa. 16 | 17 | ## Interrogate Specific ports 18 | 19 | The command also supports interrogating individual ports: 20 | ``` 21 | moxautil.exe --ip=130.246.49.42 --port=1 --resetport --password=themoxapassword 22 | ``` 23 | and 24 | ``` 25 | moxautil.exe --ip=130.246.49.42 --port=1 --status --password=themoxapassword 26 | ``` 27 | Unfortunately these do not work unless the the COM port in "TCP server" mode. We normally run in "real com" and may also run in "RFC2217". -------------------------------------------------------------------------------- /doc/tools/moxa_tools/Moxa-configurator.md: -------------------------------------------------------------------------------- 1 | # Moxa configurator 2 | 3 | Note: this page relates to the python service which allows users to configure allowed IPs on MOXA NPORT devices by hostname, not the built-in moxa configuration web pages. 4 | 5 | ### Setup 6 | 7 | - Clone the moxa configuration repository from [here](https://github.com/ISISComputingGroup/moxa-configurator). 8 | - Install python (genie_python may be used, but is not required) 9 | - `python -m pip install -r requirements.txt` from the repository above to install dependencies 10 | - Set up necessary environment variables: 11 | * `MOXA_IP` - the IP address of the moxa this webserver will manage (displayed on front of moxa) 12 | * `MOXA_PW` - the password for the moxa this webserver will manage (same password as for the moxa web interface) 13 | * `ISIS_DEFAULT_NETMASK` - the netmask for the ISIS network (to find this out, type `ipconfig` on any computer connected to the ISIS network) 14 | - cd into `moxa_configurator/web` and then run `python manage.py runserver` to start the webserver 15 | 16 | The server will then be available at `localhost:8000`. -------------------------------------------------------------------------------- /doc/webdashboard/ISIS-Info-Slack.md: -------------------------------------------------------------------------------- 1 | # ISIS Info (Slack) 2 | 3 | The ISIS info Slack system is detailed in the "ISIS Info Slack" document on Teams General -------------------------------------------------------------------------------- /doc/webdashboard/MCR-News-in-Teams.md: -------------------------------------------------------------------------------- 1 | # MCR News (Microsoft Teams) 2 | 3 | MCR news and beam information is available in Microsoft teams for isis staff 4 | 5 | * ISIS Staff Details [word](https://stfc365.sharepoint.com/:w:/r/sites/ISISExperimentControls/ICP%20Discussions/MCR%20News%20and%20Beam%20information%20in%20Microsoft%20Teams.docx?d=w79783f105d7945aabf33501408768a27&csf=1&web=1&e=cjl8XE) [pdf](https://control-svcs.isis.cclrc.ac.uk/msteams.pdf) 6 | * [Developer support details](https://stfc365.sharepoint.com/:w:/r/sites/ISISExperimentControls/ICP%20Discussions/MCR%20News%20Teams%20support.docx?d=w33ffb5d1fccd42fa8a0f9c531af306f2&csf=1&web=1&e=eZTeLE) 7 | -------------------------------------------------------------------------------- /doc/webdashboard/PVWS.md: -------------------------------------------------------------------------------- 1 | # PVWS (PV Web socket) 2 | 3 | PVWS is a tool which lets you get EPICS PV information and expose it via a websocket. We use this for the [web dashboard.](https://github.com/ISISComputingGroup/WebDashboard?tab=readme-ov-file#web-dashboard) 4 | 5 | Information on how we run this can be found [here.](https://github.com/ISISComputingGroup/pvws-config?tab=readme-ov-file#pvws-config) -------------------------------------------------------------------------------- /doc/webdashboard/dataweb_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/doc/webdashboard/dataweb_architecture.png -------------------------------------------------------------------------------- /src/ibex_developers_manual/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ISISComputingGroup/ibex_developers_manual/6c932282cfbc68d7fa8614f34fac6a9174f0ab15/src/ibex_developers_manual/__init__.py -------------------------------------------------------------------------------- /src/ibex_developers_manual/sort_word_list/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def read_word_list() -> list[str]: 5 | with open(os.path.join("doc", "spelling_wordlist.txt"), "r", encoding="utf-8") as f: 6 | return f.read().splitlines() 7 | 8 | 9 | def sort_words(words: list[str]) -> list[str]: 10 | return sorted(words, key=str.casefold) 11 | 12 | 13 | def write_word_list(words: list[str]) -> None: 14 | with open(os.path.join("doc", "spelling_wordlist.txt"), "w", encoding="utf-8") as f: 15 | f.writelines([f"{word}\n" for word in words]) 16 | -------------------------------------------------------------------------------- /src/ibex_developers_manual/sort_word_list/__main__.py: -------------------------------------------------------------------------------- 1 | from ibex_developers_manual.sort_word_list import read_word_list, sort_words, write_word_list 2 | 3 | 4 | def main() -> None: 5 | words = read_word_list() 6 | sorted_words = sort_words(words) 7 | write_word_list(sorted_words) 8 | 9 | 10 | if __name__ == "__main__": 11 | main() 12 | --------------------------------------------------------------------------------