GUI #70

Open
topquark12 wants to merge 17 commits from GUI into master
1 changed files with 25 additions and 9 deletions
Showing only changes of commit 8d3a7292e3 - Show all commits

View File

@ -4,6 +4,8 @@ from pyqtgraph.parametertree import Parameter, ParameterTree, ParameterItem, reg
import numpy as np import numpy as np
import pyqtgraph as pg import pyqtgraph as pg
from pytec.client import Client from pytec.client import Client
from enum import Enum
from autotune import PIDAutotune, PIDAutotuneState
rec_len = 1000 rec_len = 1000
refresh_period = 20 refresh_period = 20
@ -35,7 +37,6 @@ TECparams = [ [
]}, ]},
] for _ in range(2)] ] for _ in range(2)]
GUIparams = [[ GUIparams = [[
{'name': 'Disable Output', 'type': 'action', 'tip': 'Disable Output'}, {'name': 'Disable Output', 'type': 'action', 'tip': 'Disable Output'},
{'name': 'Constant Current', 'type': 'group', 'children': [ {'name': 'Constant Current', 'type': 'group', 'children': [
@ -57,10 +58,18 @@ GUIparams = [[
{'name': 'kP', 'type': 'float', 'value': 0, 'step': 0.1}, {'name': 'kP', 'type': 'float', 'value': 0, 'step': 0.1},
{'name': 'kI', 'type': 'float', 'value': 0, 'step': 0.1}, {'name': 'kI', 'type': 'float', 'value': 0, 'step': 0.1},
{'name': 'kD', 'type': 'float', 'value': 0, 'step': 0.1}, {'name': 'kD', 'type': 'float', 'value': 0, 'step': 0.1},
{'name': 'PID Auto Tune', 'expanded': False, 'type': 'group', 'children': [
{'name': 'Target Temperature', 'type': 'float', 'value': 20, 'step': 0.1, 'siPrefix': True, 'suffix': 'C'},
{'name': 'Test Current', 'type': 'float', 'value': 1, 'step': 0.1, 'siPrefix': True, 'suffix': 'A'},
{'name': 'Temperature Swing', 'type': 'float', 'value': 1.5, 'step': 0.1, 'siPrefix': True, 'suffix': 'C'},
{'name': 'Run', 'type': 'action', 'tip': 'Run'},
]},
]}, ]},
{'name': 'Save', 'type': 'action', 'tip': 'Save'}, {'name': 'Save to flash', 'type': 'action', 'tip': 'Save to flash'},
] for _ in range(2)] ] for _ in range(2)]
autoTuneState = [PIDAutotuneState.STATE_OFF, 'idle']
## If anything changes in the tree, print a message ## If anything changes in the tree, print a message
def change(param, changes, ch): def change(param, changes, ch):
print("tree changes:") print("tree changes:")
@ -120,7 +129,10 @@ def change(param, changes, ch):
if (childName == 'PID Config.kD'): if (childName == 'PID Config.kD'):
tec.set_param('pid', ch, 'kd', data) tec.set_param('pid', ch, 'kd', data)
if (childName == 'Save'): if (childName == 'PID Config.PID Auto Tune.Run'):
autoTuneState[ch] = 'triggered'
if (childName == 'Save to flash'):
tec.save_config() tec.save_config()
def change0(param, changes): def change0(param, changes):
@ -174,6 +186,7 @@ def TECsync():
for data in tec.report_mode(): for data in tec.report_mode():
for children in parents['children']: for children in parents['children']:
children['value'] = data[channel][children['tag']] children['value'] = data[channel][children['tag']]
print(data[channel][children['tag']])
if quit: if quit:
break break
if parents['tag'] == 'pwm': if parents['tag'] == 'pwm':
@ -190,7 +203,6 @@ def TECsync():
children['value'] = tec.get_pid()[channel]['target'] children['value'] = tec.get_pid()[channel]['target']
def refreshTreeParam(tempTree:dict, channel:int) -> dict: def refreshTreeParam(tempTree:dict, channel:int) -> dict:
# tempTree['children']['Constant Current']['value'] = not TECparams[channel][0]['children'][0]['value']
tempTree['children']['Constant Current']['children']['Set Current']['value'] = TECparams[channel][1]['children'][3]['value'] tempTree['children']['Constant Current']['children']['Set Current']['value'] = TECparams[channel][1]['children'][3]['value']
tempTree['children']['Temperature PID']['value'] = TECparams[channel][0]['children'][0]['value'] tempTree['children']['Temperature PID']['value'] = TECparams[channel][0]['children'][0]['value']
tempTree['children']['Temperature PID']['children']['Set Temperature']['value'] = TECparams[channel][4]['children'][0]['value'] tempTree['children']['Temperature PID']['children']['Set Temperature']['value'] = TECparams[channel][4]['children'][0]['value']
@ -214,6 +226,11 @@ def updateData():
ch0currentGraph.update(data, cnt) ch0currentGraph.update(data, cnt)
ch1currentGraph.update(data, cnt) ch1currentGraph.update(data, cnt)
Review

update_data, see PEP8

update_data, see PEP8
for state in autoTuneState:
if state == 'triggered':
state = 'tuning'
if quit: if quit:
break break
cnt += 1 cnt += 1
@ -238,12 +255,8 @@ if __name__ == '__main__':
paramList = [Parameter.create(name='GUIparams', type='group', children=GUIparams[0]), paramList = [Parameter.create(name='GUIparams', type='group', children=GUIparams[0]),
Parameter.create(name='GUIparams', type='group', children=GUIparams[1])] Parameter.create(name='GUIparams', type='group', children=GUIparams[1])]
paramList[0].sigTreeStateChanged.connect(change0)
print(paramList[0].children())
ch0Tree = ParameterTree() ch0Tree = ParameterTree()
Review

Should there be a feature to reset the plots and/or set a maximum number of samples to store?

Should there be a feature to reset the plots and/or set a maximum number of samples to store?
ch0Tree.setParameters(paramList[0], showTop=False) ch0Tree.setParameters(paramList[0], showTop=False)
paramList[1].sigTreeStateChanged.connect(change1)
ch1Tree = ParameterTree() ch1Tree = ParameterTree()
ch1Tree.setParameters(paramList[1], showTop=False) ch1Tree.setParameters(paramList[1], showTop=False)
Review

argparse, IP address settings

argparse, IP address settings
@ -251,6 +264,9 @@ if __name__ == '__main__':
paramList[0].restoreState(refreshTreeParam(paramList[0].saveState(), 0)) paramList[0].restoreState(refreshTreeParam(paramList[0].saveState(), 0))
paramList[1].restoreState(refreshTreeParam(paramList[1].saveState(), 1)) paramList[1].restoreState(refreshTreeParam(paramList[1].saveState(), 1))
paramList[0].sigTreeStateChanged.connect(change0)
paramList[1].sigTreeStateChanged.connect(change1)
layout.addWidget(ch0Tree, 1, 1, 1, 1) layout.addWidget(ch0Tree, 1, 1, 1, 1)
layout.addWidget(ch1Tree, 2, 1, 1, 1) layout.addWidget(ch1Tree, 2, 1, 1, 1)