From 1b4a030e7e4dbc099b99b6e992fc2a0da59e199a Mon Sep 17 00:00:00 2001 From: Astro Date: Thu, 1 Oct 2020 00:21:43 +0200 Subject: [PATCH] pytec: more methods, doc --- pytec/plot.py | 1 + pytec/pytec/client.py | 85 ++++++++++++++++++++++++++++++++++++++++--- pytec/test.py | 4 +- 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/pytec/plot.py b/pytec/plot.py index 343f142..593bb7c 100644 --- a/pytec/plot.py +++ b/pytec/plot.py @@ -34,6 +34,7 @@ series = { 'i_set': Series(), 'pid_output': Series(), 'vref': Series(), + 'dac_value': Series(), 'dac_feedback': Series(), 'i_tec': Series(), 'tec_i': Series(), diff --git a/pytec/pytec/client.py b/pytec/pytec/client.py index 430d1b1..03014e7 100644 --- a/pytec/pytec/client.py +++ b/pytec/pytec/client.py @@ -34,24 +34,92 @@ class Client: return result def get_pwm(self): + """Retrieve PWM limits for the TEC + + Example:: + [{'channel': 0, + 'center': 'vref', + 'i_set': {'max': 2.9802790335151985, 'value': -0.02002179650216762}, + 'max_i_neg': {'max': 3.0, 'value': 3.0}, + 'max_v': {'max': 5.988, 'value': 5.988}, + 'max_i_pos': {'max': 3.0, 'value': 3.0}}, + {'channel': 1, + 'center': 'vref', + 'i_set': {'max': 2.9802790335151985, 'value': -0.02002179650216762}, + 'max_i_neg': {'max': 3.0, 'value': 3.0}, + 'max_v': {'max': 5.988, 'value': 5.988}, + 'max_i_pos': {'max': 3.0, 'value': 3.0}} + ] + """ return self._get_conf("pwm") def get_pid(self): + """Retrieve PID control state + + Example:: + [{'channel': 0, + 'parameters': { + 'kp': 10.0, + 'ki': 0.02, + 'kd': 0.0, + 'output_min': 0.0, + 'output_max': 3.0, + 'integral_min': -100.0, + 'integral_max': 100.0}, + 'target': 37.0, + 'integral': 38.41138597026372}, + {'channel': 1, + 'parameters': { + 'kp': 10.0, + 'ki': 0.02, + 'kd': 0.0, + 'output_min': 0.0, + 'output_max': 3.0, + 'integral_min': -100.0, + 'integral_max': 100.0}, + 'target': 36.5, + 'integral': nan}] + """ return self._get_conf("pid") def get_steinhart_hart(self): + """Retrieve Steinhart-Hart parameters for resistance to temperature conversion + + Example:: + [{'params': {'b': 3800.0, 'r0': 10000.0, 't0': 298.15}, 'channel': 0}, + {'params': {'b': 3800.0, 'r0': 10000.0, 't0': 298.15}, 'channel': 1}] + """ return self._get_conf("s-h") def get_postfilter(self): + """Retrieve DAC postfilter configuration + + Example:: + [{'rate': None, 'channel': 0}, + {'rate': 21.25, 'channel': 1}] + """ return self._get_conf("postfilter") def report_mode(self): """Start reporting measurement values - + Example of yielded data:: + {'channel': 0, + 'time': 2302524, + 'adc': 0.6199188965423515, + 'sens': 6138.519310282602, + 'temperature': 36.87032392655527, + 'pid_engaged': True, + 'i_set': 2.0635816680889123, + 'vref': 1.494, + 'dac_value': 2.527790834044456, + 'dac_feedback': 2.523, + 'i_tec': 2.331, + 'tec_i': 2.0925, + 'tec_u_meas': 2.5340000000000003, + 'pid_output': 2.067581958092247} """ self._command("report mode", "on") - self._read_line() while True: line = self._read_line() @@ -69,9 +137,16 @@ class Client: value = str(value) self._command(topic, str(channel), field, value) - # read response line - self._read_line() - def power_up(self, channel, target): + """Start closed-loop mode""" self.set_param("pid", channel, "target", value=target) self.set_param("pwm", channel, "pid") + + def save_config(self): + """Save current configuration to EEPROM""" + self._command("save") + + def load_config(self): + """Load current configuration from EEPROM""" + self._command("load") + diff --git a/pytec/test.py b/pytec/test.py index bf80518..b519532 100644 --- a/pytec/test.py +++ b/pytec/test.py @@ -1,6 +1,8 @@ from pytec.client import Client tec = Client() #(host="localhost", port=6667) -tec.set_param("s-h", 0, "t", 20) +tec.set_param("s-h", 1, "t0", 20) +print(tec.get_pid()) +print(tec.get_steinhart_hart()) for data in tec.report_mode(): print(data)