HWP PID Agent

usage: python3 agent.py [-h] [--ip IP] [--port PORT] [--verbose] [--mode MODE]

Agent Options

--ip
--port
--verbose, -v

PID Controller verbosity level.

Default: 0

--mode

Configuration File Examples

Below are configuration examples for the ocs config file and for running the Agent in a docker container.

OCS Site Config

An example site-config-file block:

{'agent-class': 'HWPPIDAgent',
 'instance-id': 'hwp-pid',
 'arguments': [['--ip', '10.10.10.101'],
               ['--port', '2000']]},

Docker Compose

An example docker-compose configuration:

ocs-hwp-pid:
  image: simonsobs/socs:latest
  hostname: ocs-docker
  network_mode: "host"
  environment:
    - INSTANCE_ID=hwp-pid
    - SITE_HUB=ws://127.0.0.1:8001/ws
    - SITE_HTTP=http://127.0.0.1:8001/call
  volumes:
    - ${OCS_CONFIG_DIR}:/config:ro

Note

Since the Agent container needs network_mode: "host", it must be configured to connect to the crossbar server as if it was on the host system. In this example the crossbar server is running on localhost, 127.0.0.1, but on your network this may be different.

Agent API

class socs.agents.hwp_pid.agent.HWPPIDAgent(agent, ip, port, verbosity)[source]

Agent to PID control the rotation speed of the CHWP

Parameters:
  • ip (str) – IP address for the PID controller

  • port (str) – Port for the PID controller

  • verbosity (str) – Verbosity of PID controller output

main()[source]
Process - Main Process for PID agent. Periodically queries PID

controller for data, and executes requested actions.

Notes

The most recent data collected is stored in the session data in the structure:

>>> response.session['data']
{'current_freq': 0,
 'target_freq': 0,
 'direction': 1,
 'last_updated': 1649085992.719602}
tune_stop()[source]

Task - Reverse the drive direction of the PID controller and optimize the PID parameters for deceleration.

tune_freq()[source]

Task - Tune the PID controller setpoint to the rotation frequency and optimize the PID parameters for rotation.

declare_freq(freq=0)[source]

Task - Store the entered frequency as the PID setpoint when tune_freq() is next called.

Parameters:

freq (float) – Desired HWP rotation frequency

Notes

Session data is structured as follows:

>>> response.session['data']
{'declared_freq': 2.0}
set_pid(p=0.2, i=63, d=0.)[source]

Task - Set the PID parameters. Note these changes are for the current session only and will change whenever the agent container is reloaded.

Parameters:
  • p (float) – Proportional PID value

  • i (int) – Integral PID value

  • d (float) – Derivative PID value

set_direction(direction='0')[source]

Task - Set the HWP rotation direction.

Parameters:

direction (str) – ‘0’ for forward and ‘1’ for reverse.

set_scale(slope=1, offset=0.1)[source]

Task - Set the PID’s internal conversion from input voltage to rotation frequency.

Parameters:
  • slope (float) – Slope of the “rotation frequency vs input voltage” relationship

  • offset (float) – y-intercept of the “rotation frequency vs input voltage” relationship

get_state()[source]

Task - Polls hardware for the current the PID state.

Notes

Session data for this operation is as follows:

>>> response.session['data']
{'current_freq': 0,
 'target_freq': 0,
 'direction': 1}