Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Catalytic Flow Reactor provisional driver #7601

Closed
1 task
KathrynBaker opened this issue Feb 1, 2023 · 6 comments
Closed
1 task

Catalytic Flow Reactor provisional driver #7601

KathrynBaker opened this issue Feb 1, 2023 · 6 comments
Assignees

Comments

@KathrynBaker
Copy link
Member

KathrynBaker commented Feb 1, 2023

As someone conducting an experiment with the catalytic flow reactor I want to be able to do some rough synchronisation of the behaviour of the reactor with the beamline at ISIS

Acceptance Criteria

  • There is a stream IOC that can be run up which will respond to an interrupt when data is available to update the appropriate PVs (see notes)

Notes

  • This is a bespoke piece of user equipment
  • We are only reading it, there is no control of the device, but there is a need to split runs based on the behaviour of the reactor
  • The data sent from the system consists of the following as a comma separated string: a state number, a block number (this is the cycle that the reactor is in), a "take data" indicator (start data collecting when it is a 1, stop data collecting when 0)
  • The data will be updated roughly every 10 seconds without us sending a command
  • All three will need blocks (our kind of block, which is used as a label to indicate the information), with the third one being used in scripting to define some suitable wait_for states before undertaking a begin or end as appropriate
  • An experiment is scheduled for this on POLARIS in March 2023, this adds value, and simplifies the experiment and data analysis
  • It is a sub D-9 COM port, using RS232 (other details not available at this point in time)
  • This does not need a GUI
@KathrynBaker
Copy link
Member Author

It may be achievable using SD TEST, so check that and the interrupt nature of being sent data every 10 seconds within that framework IOC

@KathrynBaker KathrynBaker added the 5 label Feb 2, 2023
@github-actions github-actions bot added ready and removed proposal labels Feb 2, 2023
@KathrynBaker KathrynBaker added this to the SPRINT_2023_02_02 milestone Feb 2, 2023
@rerpha
Copy link
Contributor

rerpha commented Feb 13, 2023

if we dont have a device in the office that will send data over serial, this could be very easily achieved with an arduino overriding its primary serial interface (through usb showing up as a virtual com port)

@KathrynBaker
Copy link
Member Author

I don't think we do have anything that just spits data at us, so yes via an Arduino/similar is probably a good plan for us for testing. We should also consider getting the equipment to run an adruino through a moxa nport for similar testing (I have done it before, but I'm pretty sure that for once I have no notes, only the recollection that I used a hat that I bought myself and brought home in 2020 and I'm not sure where it is)

@rerpha rerpha self-assigned this Feb 20, 2023
@rerpha
Copy link
Contributor

rerpha commented Feb 20, 2023

SDTEST can quite happily cope with serial data being thrown at it despite no command sent to the device.

Unfortunately it doesn't seem to have a nice way of splitting the output to three separate pvs or fields on a waveform/calc. I can get the output from :P1:ASYNREC.TINP however if i set the asyn record scan to I/O Intr. I think we are probably going to have to write a basic stream device db to do this as i can't see a nice way of doing it otherwise.

PS my "emulator" is an arduino nano every (on COM5) running this code:

void setup() {
  Serial.begin(9600);
}
void loop() {
  for (int i=0;i<8;i++) {
    char s[6];
    sprintf(s, "%d,%d,%d\r", i, i+1, i%2);
    Serial.print(s);
    delay(10000);
  }
}

to effectively fake the output of the CFR.

@Tom-Willemsen
Copy link
Contributor

PS my "emulator" is an arduino nano [...]

Can we make sure we also write a normal lewis emulator please so that we can test using ioc test framework etc? If you need an example of sending a constant stream of unsolicited messages from lewis, see the mecfrf stream interface for an example.

@rerpha
Copy link
Contributor

rerpha commented Feb 20, 2023

ISISComputingGroup/EPICS-Catflwr#1
ISISComputingGroup/EPICS-ioc#775
https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Catalytic-Flow-Reactor
#7630

sounds like no OPI is needed so think this is sufficient. Will create task in task board to actually hook the thing up and set blocks etc. up on POLARIS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants