--- tags: minutes, motion --- # Motion Meeting Minutes | BaPSF | May 31, 2022 ## Agenda 1. ... ## Attendees * Erik * Rishabh ## Minutes * first take at... * `RunManger` class * interfacing functions for LV to call which commands `RunManager` * How should data be passed from Pyton to LabView 1. Have one Py factory function that LV communates with * will likely need to have the same return type for every request * a possible retrun type would be a string represenation of `json` data * then LV would have to parse the string based on known/diven data types * CON: would likely force us to use a 3rd party LV pkg * PR0: would likely be "easily" extensible `json` string data with single value ```json= response_data : true ``` `json` string with multiple key-value pairs ```json= response_data : { "position": [1, 2, 3], "moving": true, } ``` 2. have LV call multiple python files specific to the given request * each python file would return a different data type * PRO: no parsing of `json` strings required * PRO: no additional dependence on 3rd part LV pkgs * CON: might not be as "easily" extensible 3. **Hybrid approach...have one py facotry function that is called by LV, but on the LV side the "request" goes through a case structure that calls the py factory function with a given data type** * PRO: no dependence of 3rd party LV pkgs * PRO: not additional parsing of string * PRO: keeps a py factory function * PRO: to extend functionality a case structure entry needs to be added on the LV side (along w/ associated data type) and a new callable needs to by added to the py factory function * CON: 🤔 ... * `RunManager` class ```python= from .motion_group import MotorMovement class RunMangaer: _motion_groups = None def __init__(self, filename=None, config=None): if filename is not None and config is not None: raise ValueError if filename is not None: self.load_file(filename): elif config is not None: self._validate_config(config) self._init_motion_groups(config) def load_file(self, filname): # reads the toml file config = ... # from toml file self._validate_config(config) self._init_motion_groups(config) def _validate_config(self, config) # go through config and make sure it's structured correctly ... # idnetify motion group and validate it's data MotorMovement()._validate_config(mg_config) ... def _init_motion_groups(config): # create all the motion groups defined by config ... ``` ```python= class MotionGroup: _toml_dict: None def __init__(self, filename=None, config=None): if filename is not None and config is not None: raise ValueError if filename is not None: self.load_file(filename): elif config is not None: self._validate_config(config) self._init_drive(config) def load_file(self, filname): # reads the toml file config = ... # from toml file self._validate_config(config) self._init_drive(config) def _validate_config(self, config) # go through config and make sure it's structured correctly ... def _init_drive(config): # similar to ConnectDrive # initialize and connect the probe drive ... @property def x_ip(self): return self._toml_dict["Drive"]["xIP"] ``` * rescheduling meeting for Steve * Test on LaPD DAQ (week of July 4th)...what needs to be done to get there?