Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0afbe66229 | |||
| 612785f51a | |||
| 7dbf09e9a5 | |||
| ee64d43de1 | |||
| 60b91f0c1e | |||
| 8ac01bdf54 | |||
| 0f90b16b6e | |||
| 76e0a150d1 | |||
| ecd4b9325d | |||
| 978b1254f0 | |||
| 26e02f2d40 | |||
| 257958768f |
@@ -1585,6 +1585,9 @@ class ControlAPI(metaclass=Router):
|
||||
|
||||
def stop_project(self, project) -> bool:
|
||||
raise NotImplementedError()
|
||||
|
||||
def show_device_data(self, device) -> bool:
|
||||
raise NotImplementedError()
|
||||
|
||||
# noinspection PyAbstractClass
|
||||
class ControlClient(SocketClient, ControlAPI, metaclass=SocketClientMacro(ControlAPI)):
|
||||
|
||||
@@ -130,6 +130,14 @@ class DataAPI(metaclass=abc.ABCMeta):
|
||||
def hardware_test(self) -> JSON_OBJECT:
|
||||
""""""
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def show_data(self, device: Union[int, Device]):
|
||||
"""show device data
|
||||
|
||||
:param device: device ID
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
# noinspection PyAbstractClass
|
||||
@@ -191,6 +199,9 @@ class DataClient(SocketClient, DataAPI, metaclass=SocketClientMacro(DataAPI)):
|
||||
|
||||
def stop_sync(self, *device: Union[int, Device]):
|
||||
self.send_command('stop_sync', *self._to_device_id(*device))
|
||||
|
||||
def show_data(self, device: int):
|
||||
self.send_command('show_data', device)
|
||||
|
||||
@staticmethod
|
||||
def _to_device_id(*device: Union[int, Device]) -> Tuple[int, ...]:
|
||||
|
||||
@@ -853,7 +853,7 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
|
||||
|
||||
__slots__ = ('_message', '_cycle_number', '_start_return_data', '_time_stamp',
|
||||
'_total_time_stamp', '_mode', '_cycle_start_time',
|
||||
'_mode_stop')
|
||||
'_mode_stop', '_show_data')
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
@@ -868,6 +868,8 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
|
||||
self._mode = 0
|
||||
self._cycle_start_time = []
|
||||
|
||||
self._show_data = False
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return self.NAME
|
||||
@@ -915,9 +917,10 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
|
||||
print("error timeStamp full data:", list(data), datetime.now(), '\n')
|
||||
return None
|
||||
else:
|
||||
# print('|', time_stamp, '|', delta, '|', int(time_stamp * 1000 / 2),
|
||||
# '|', current, '|', voltage, '|', impedance,
|
||||
# '|', cycle_number, '|', finishMode, '@', str(self.device))
|
||||
if self._show_data:
|
||||
print('|', time_stamp, '|', delta, '|', int(time_stamp * 1000 / 2),
|
||||
'|', current, '|', voltage, '|', impedance,
|
||||
'|', cycle_number, '|', finishMode, '@', str(self.device))
|
||||
|
||||
# print('|', '{:10}'.format(time_stamp),
|
||||
# '|', '{:4}'.format(delta),
|
||||
@@ -1335,7 +1338,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
||||
'_total_time_stamp', '_mode', '_cycle_start_time',
|
||||
'_mode_stop', '_last_time_stamp', '_last_delta', '_cali_coeff',
|
||||
'cali_coeff', '_ac_amp', '_mode', '_freq_start', '_freq_stop',
|
||||
'_freq_direction', '_last_phase', '_first_phase_flag')
|
||||
'_freq_direction', '_last_phase', '_first_phase_flag', '_show_data')
|
||||
|
||||
def __init__(self, cali_coeff: bytes = None):
|
||||
super().__init__()
|
||||
@@ -1359,6 +1362,8 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
||||
self._cali_coeff: Optional[bytes] = None
|
||||
self.cali_coeff: Optional[List[Tuple[int, int]]] = None
|
||||
|
||||
self._show_data = False
|
||||
|
||||
if cali_coeff is not None:
|
||||
self._cali_coeff = cali_coeff
|
||||
self.cali_coeff = self._decode_cali_coeff(cali_coeff)
|
||||
@@ -1543,34 +1548,34 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
||||
imag_after_cal = impedance * math.sin(round(phase) * math.pi / 180)
|
||||
real_after_cal = impedance * math.cos(round(phase) * math.pi / 180)
|
||||
|
||||
|
||||
if (self._mode == 0):
|
||||
# print('|', '{:10}'.format(time_stamp),
|
||||
# '|', '{:5}'.format(delta),
|
||||
# '|', '{:6}'.format(ch1),
|
||||
# '|', '{:6}'.format(ch2),
|
||||
# '|', '{:8}'.format(ch3 / 100),
|
||||
# '|', '{:6}'.format(round(voltage_mag)),
|
||||
# '|', '{:5}'.format(int(imag_after_cal)),
|
||||
# '|', '{:5}'.format(int(real_after_cal)),
|
||||
# '|', '{:5}'.format(round(impedance)),
|
||||
# '|', '{:5}'.format(round(phase, 1)),
|
||||
# '|', '{:5}'.format(round(current, 3)),
|
||||
# '|', '{:1}'.format(gain),
|
||||
# '|', '{:1}'.format(finishMode),
|
||||
# '@', str(self.device), '|')
|
||||
pass
|
||||
else:
|
||||
# print('|', '{:10}'.format(time_stamp),
|
||||
# '|', '{:5}'.format(delta),
|
||||
# '|', '{:5}'.format(ch1),
|
||||
# '|', '{:5}'.format(ch2),
|
||||
# '|', '{:5}'.format(ch3),
|
||||
# '|', '{:5}'.format(cycle_number),
|
||||
# '|', '{:1}'.format(gain),
|
||||
# '|', '{:1}'.format(finishMode),
|
||||
# '@', str(self.device), '|')
|
||||
pass
|
||||
if self._show_data:
|
||||
if (self._mode == 0):
|
||||
print('|', '{:10}'.format(time_stamp),
|
||||
'|', '{:5}'.format(delta),
|
||||
'|', '{:6}'.format(ch1),
|
||||
'|', '{:6}'.format(ch2),
|
||||
'|', '{:8}'.format(ch3 / 100),
|
||||
'|', '{:6}'.format(round(voltage_mag)),
|
||||
'|', '{:5}'.format(int(imag_after_cal)),
|
||||
'|', '{:5}'.format(int(real_after_cal)),
|
||||
'|', '{:5}'.format(round(impedance)),
|
||||
'|', '{:5}'.format(round(phase, 1)),
|
||||
'|', '{:5}'.format(round(current, 3)),
|
||||
'|', '{:1}'.format(gain),
|
||||
'|', '{:1}'.format(finishMode),
|
||||
'@', str(self.device), '|')
|
||||
pass
|
||||
else:
|
||||
print('|', '{:10}'.format(time_stamp),
|
||||
'|', '{:5}'.format(delta),
|
||||
'|', '{:5}'.format(ch1),
|
||||
'|', '{:5}'.format(ch2),
|
||||
'|', '{:5}'.format(ch3),
|
||||
'|', '{:5}'.format(cycle_number),
|
||||
'|', '{:1}'.format(gain),
|
||||
'|', '{:1}'.format(finishMode),
|
||||
'@', str(self.device), '|')
|
||||
pass
|
||||
|
||||
if finishMode == True:
|
||||
print("finishMode full data:", list(data), datetime.now())
|
||||
|
||||
@@ -1105,8 +1105,6 @@ class CompletedDevice(Device):
|
||||
return self._configuration.get_parameter(name, False)
|
||||
|
||||
def set_multi_parameters(self, parameter):
|
||||
if len(parameter) == 0:
|
||||
return
|
||||
for (name, value) in parameter[0].items():
|
||||
if name != 'target':
|
||||
self.set_parameter(name, value)
|
||||
|
||||
@@ -56,8 +56,7 @@ class Condition():
|
||||
return getattr(self, self.type)(**kwargs)
|
||||
|
||||
def absolute_time(self, **kwargs):
|
||||
# now = int(time())
|
||||
now = round(time(), 1)
|
||||
now = int(time())
|
||||
time_condition = round(self.datetime_to_timestamp(self.str_to_datetime(self._value)))
|
||||
|
||||
return self.compareWith(self.comparsion, now, time_condition)
|
||||
@@ -66,9 +65,8 @@ class Condition():
|
||||
project_start_time = kwargs['project_start_time']
|
||||
delay_time = kwargs['delay_time']
|
||||
|
||||
# time_diff = int(time() - project_start_time - delay_time)
|
||||
time_diff = round(time() - project_start_time - delay_time, 1)
|
||||
return self.compareWith(self.comparsion, time_diff, round(int(self._value), 1))
|
||||
time_diff = int(time() - project_start_time - delay_time)
|
||||
return self.compareWith(self.comparsion, time_diff, int(self._value))
|
||||
|
||||
def after_task_run(self, **kwargs):
|
||||
# print('relative_time_from_task', kwargs,kwargs['task_start_time'],kwargs['delay_time'])
|
||||
@@ -77,37 +75,19 @@ class Condition():
|
||||
task_start_time = kwargs['task_start_time'][-1]
|
||||
delay_time = kwargs['delay_time']
|
||||
|
||||
time_diff = round(time() - task_start_time - delay_time, 1)
|
||||
return self.compareWith(self.comparsion, time_diff, round(int(self._value), 1))
|
||||
time_diff = int(time() - task_start_time - delay_time)
|
||||
# print('time_diff', time_diff)
|
||||
return self.compareWith(self.comparsion, time_diff, int(self._value))
|
||||
|
||||
def device(self, **kwargs):
|
||||
print('device')
|
||||
|
||||
""" def previous_task_done(self, **kwargs):
|
||||
def previous_task_done(self, **kwargs):
|
||||
running_task = kwargs['running_task']
|
||||
if running_task.status == 2 and self._active == False:
|
||||
self._active = True
|
||||
return True
|
||||
return False """
|
||||
|
||||
def previous_task_done(self, **kwargs):
|
||||
running_task = kwargs['running_task']
|
||||
self_task = kwargs['self_task']
|
||||
# print('\nprevious_task_done: ', running_task.status, ' ', self._active)
|
||||
if running_task != self_task:
|
||||
if running_task.status == 2 and self._active == False:
|
||||
# self._active = True
|
||||
return True
|
||||
return False
|
||||
|
||||
""" def cycle(self, **kwargs):
|
||||
running_task = kwargs['running_task']
|
||||
self_task = kwargs['self_task']
|
||||
if running_task != self_task:
|
||||
if running_task.status == 2 and self._active == False:
|
||||
# self._active = True
|
||||
return True
|
||||
return False """
|
||||
|
||||
def str_to_datetime(self, time_str):
|
||||
return datetime.strptime(time_str,'%Y-%m-%dT%H:%M')
|
||||
|
||||
@@ -24,7 +24,7 @@ class Project(threading.Thread):
|
||||
self._project = project
|
||||
self._device_manager = device_manager
|
||||
self._mqtt_thread = mqttThread
|
||||
self._time_interval = 0.1
|
||||
self._time_interval = 1
|
||||
self._start_time = None
|
||||
self._end_time = None
|
||||
|
||||
@@ -139,39 +139,23 @@ class Project(threading.Thread):
|
||||
project_start_time = self._start_time,
|
||||
delay_time = delay_time,
|
||||
running_task= self._task_manager.running_task,
|
||||
previous_task = self._task_manager.prev_task,
|
||||
self_task = task
|
||||
previous_task = self._task_manager.prev_task
|
||||
)
|
||||
# print('match_condition_list', match_condition_list)
|
||||
for condition in match_condition_list:
|
||||
# print('\ncondition.type: ', condition.type)
|
||||
match_action_list = task.get_match_action(condition.id)
|
||||
# print('match_action_list', match_action_list)
|
||||
for action in match_action_list:
|
||||
# print('action type', action.type)
|
||||
# print('match_action_list len: ', len(match_action_list))
|
||||
# print('match_action', action.type, action.target)
|
||||
if action.type == 'start' and task.status != 1:
|
||||
self._task_manager.set_running_task(task)
|
||||
# Trace
|
||||
self.mqtt_thread.broadcast_command('project:task ' + task.name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
|
||||
elif action.type == 'cycle' and task.status != 1:
|
||||
# TODO: directly goto next without swich cycle as running task
|
||||
""" if task._cycle_count < task._cycle - 1:
|
||||
task._cycle_count += 1
|
||||
cycle_target = self._task_manager.task_list[task._cycle_next - 1] # TODO: not sure deep or shallow
|
||||
cycle_target.reset()
|
||||
task = cycle_target """
|
||||
self._task_manager.set_running_task(task)
|
||||
elif action.type == 'stop' and len(self._task_manager.running_task.parameter_set) == 0:
|
||||
self.mqtt_thread.broadcast_command('project:task ' + str(self._task_manager.running_task.name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
|
||||
self._task_manager.running_task.stop()
|
||||
|
||||
device = self._complete_device[action.target]
|
||||
task_info = task.get_task_info(action)
|
||||
instruction_set = getattr(self._instruction_set, action.type, None)
|
||||
# print('instruction_set', instruction_set, '\n', action.type)
|
||||
# if instruction_set != None and task.cycle == -1:
|
||||
if instruction_set != None and len(task.parameter_set) > 0:
|
||||
# print('instruction_set',instruction_set)
|
||||
|
||||
if instruction_set != None:
|
||||
for instruction in instruction_set:
|
||||
args = list(map(lambda arg: task_info[arg], instruction['arguments']))
|
||||
threading.Thread(target=getattr(device, instruction['method'])(*args))
|
||||
@@ -180,8 +164,7 @@ class Project(threading.Thread):
|
||||
|
||||
# check task not running then stop
|
||||
if self.check_running_task_not_run() == True:
|
||||
if self._task_manager.running_task.cycle == -1:
|
||||
self.mqtt_thread.broadcast_command('project:task ' + str(self._task_manager.running_task.name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
|
||||
self.mqtt_thread.broadcast_command('project:task ' + str(self._task_manager.running_task.name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
|
||||
self._task_manager.running_task.stop()
|
||||
|
||||
# check project done then close project
|
||||
@@ -221,12 +204,7 @@ class Project(threading.Thread):
|
||||
# if no running task
|
||||
if self._task_manager.running_task == None:
|
||||
return False
|
||||
|
||||
for key in self._task_manager.running_task.action:
|
||||
# print('action key', key, self._task_manager.running_task, self._task_manager.running_task.action[key])
|
||||
if len(self._task_manager.running_task.parameter_set) == 0 and self._task_manager.running_task.action[key]['type'] == 'stop':
|
||||
return False
|
||||
|
||||
|
||||
for device in self._task_manager.running_task.device:
|
||||
if self._complete_device[device].status == 1:
|
||||
return False
|
||||
|
||||
@@ -15,9 +15,6 @@ class Task:
|
||||
self._name = None
|
||||
self._parent = None
|
||||
self._cycle = None
|
||||
self._cycle_count = 0
|
||||
self._cycle_next = None
|
||||
self._cycle_next_uuid = None
|
||||
self._device = None
|
||||
self._event = None
|
||||
self._trigger = None
|
||||
@@ -103,31 +100,6 @@ class Task:
|
||||
@cycle.setter
|
||||
def cycle(self, new_cycle):
|
||||
self._cycle = new_cycle
|
||||
|
||||
# TODO: not sure needed?
|
||||
@property
|
||||
def cycle_count(self) -> int:
|
||||
return self._cycle_count
|
||||
|
||||
@cycle_count.setter
|
||||
def cycle_count(self, new_cycle_count):
|
||||
self._cycle_count = new_cycle_count
|
||||
|
||||
@property
|
||||
def cycle_next(self) -> str:
|
||||
return self._cycle_next
|
||||
|
||||
@cycle_next.setter
|
||||
def cycle_next(self, new_cycle_next):
|
||||
self._cycle_next = new_cycle_next
|
||||
|
||||
@property
|
||||
def cycle_next_uuid(self) -> str:
|
||||
return self._cycle_next_uuid
|
||||
|
||||
@cycle_next_uuid.setter
|
||||
def cycle_next_uuid(self, new_cycle_next_uuid):
|
||||
self._cycle_next_uuid = new_cycle_next_uuid
|
||||
|
||||
@property
|
||||
def device(self) -> dict:
|
||||
@@ -235,10 +207,6 @@ class Task:
|
||||
|
||||
def stop(self):
|
||||
self.status = 2
|
||||
|
||||
def reset(self):
|
||||
self.status = -1
|
||||
# self.status = 0
|
||||
|
||||
def get_match_action_list(self, match_condition_list):
|
||||
return map(lambda condition: [x for x in self._action_list if condition.id in x.get_condition_list()], match_condition_list)
|
||||
@@ -273,9 +241,6 @@ class Task:
|
||||
'name': self.name,
|
||||
'parent': self.parent,
|
||||
'cycle': self.cycle,
|
||||
'cycle_count': self.cycle_count,
|
||||
'cycle_next': self.cycle_next,
|
||||
'cycle_next_uuid': self.cycle_next_uuid,
|
||||
'device': self.device,
|
||||
'event': self.event,
|
||||
'trigger': self.trigger,
|
||||
|
||||
@@ -57,8 +57,7 @@ class TaskManager():
|
||||
task = Task(task)
|
||||
self._task_list.append(task)
|
||||
|
||||
# original version
|
||||
""" def set_running_task(self, task):
|
||||
def set_running_task(self, task):
|
||||
try:
|
||||
# if there is task running & same task active ,then reject
|
||||
if self._running_task != None and self._running_task.uuid == task.uuid:
|
||||
@@ -81,44 +80,6 @@ class TaskManager():
|
||||
_task = next((task for task in self._task_list if task.uuid == task_uuid), None)
|
||||
if _task != None:
|
||||
self._next_task.append(_task)
|
||||
except RuntimeError as e:
|
||||
print(e) """
|
||||
|
||||
def set_running_task(self, task):
|
||||
try:
|
||||
# if there is task running & same task active ,then reject
|
||||
if self._running_task != None and self._running_task.uuid == task.uuid:
|
||||
# print('set_running_task return false: ', self._running_task.name)
|
||||
return False
|
||||
|
||||
# save running task
|
||||
self._prev_task = self._running_task
|
||||
# clear next task list
|
||||
self._next_task.clear()
|
||||
self._running_task = task
|
||||
self._running_task.run()
|
||||
|
||||
if self._prev_task != None:
|
||||
# if previous task is still running, then need to close
|
||||
if self._prev_task.status == 1:
|
||||
self._prev_task.stop()
|
||||
print('prev', 'run', self._prev_task.name, self._running_task.name)
|
||||
|
||||
# print(f'!!@#!set_running_task\n\n\n{task._cycle_count}\n{task._cycle}\n\n\n')
|
||||
if task._cycle_count < task._cycle - 1:
|
||||
task._cycle_count += 1
|
||||
# use uuid to get the cycle next task
|
||||
cycle_target = [_task_next for _task_next in self._task_list if _task_next.uuid == task._cycle_next_uuid]
|
||||
# cycle_target = self._task_list[task._cycle_next - 1] # original use index version
|
||||
cycle_target[0].reset()
|
||||
self._next_task.append(cycle_target[0])
|
||||
else:
|
||||
task._cycle_count = 0
|
||||
for task_uuid in self._running_task.next:
|
||||
_task = next((task for task in self._task_list if task.uuid == task_uuid), None)
|
||||
if _task != None:
|
||||
_task.reset()
|
||||
self._next_task.append(_task)
|
||||
except RuntimeError as e:
|
||||
print(e)
|
||||
|
||||
|
||||
@@ -699,6 +699,9 @@ class DataServer(SocketServer, DataAPI):
|
||||
self.mqtt_thread.publish('device_instruction', json_stringify(content), inter = True)
|
||||
|
||||
return True
|
||||
|
||||
def show_data(self, device):
|
||||
self._configurations[device].put_rec_queue('show_data')
|
||||
|
||||
class DataRuntime(metaclass=abc.ABCMeta):
|
||||
__slots__ = ('_server', '_device', '_meta_file', '_data_format',
|
||||
|
||||
@@ -1015,7 +1015,6 @@ class ControlServer(SocketServer, ControlServerAPI):
|
||||
@logging_info
|
||||
def run_project(self, project) -> bool:
|
||||
if project is not None:
|
||||
# print(project)
|
||||
project = self._project_manager.create(project)
|
||||
self._project_manager.run_project(project)
|
||||
return project.as_json()
|
||||
@@ -1340,6 +1339,13 @@ class ControlServer(SocketServer, ControlServerAPI):
|
||||
def _hardware_send_test_set(self, options: Dict[str, str]) -> bool:
|
||||
# TODO write options files
|
||||
return False
|
||||
|
||||
@logging_info
|
||||
def show_device_data(self, device: int):
|
||||
client = self.data_server.client()
|
||||
if client is not None:
|
||||
with client:
|
||||
client.show_data(device)
|
||||
|
||||
class _RandomCrashThread(ServerThread):
|
||||
def __init__(self):
|
||||
|
||||
@@ -185,6 +185,8 @@ class RecordingProcess(Process):
|
||||
self.final_write()
|
||||
self.is_closed = True
|
||||
return False
|
||||
elif q == 'show_data':
|
||||
self._decoder._show_data = not self._decoder._show_data
|
||||
else:
|
||||
self.rec_update()
|
||||
self.sync_data(q)
|
||||
|
||||
@@ -1203,7 +1203,7 @@
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"X07;",
|
||||
"X0C;",
|
||||
"B>va;4B>vb;2B>vc;2B>vd;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>pc;4b>pd;",
|
||||
|
||||
@@ -671,6 +671,17 @@
|
||||
},
|
||||
"on_change": "set_para_DAC_VOLT"
|
||||
},
|
||||
"DAC_VOLT_SCROLL": {
|
||||
"description": "DAC scroll output Voltage",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
65536
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"ADC_VALUE_I": {
|
||||
"description": "ADC value current value",
|
||||
"domain": "int"
|
||||
@@ -836,6 +847,18 @@
|
||||
],
|
||||
"on_change": "set_dac_gain_Vout"
|
||||
},
|
||||
"DAC_VOLT_BUTTON": {
|
||||
"description": "DAC volt",
|
||||
"record_meta": true,
|
||||
"initial": 1,
|
||||
"value": [
|
||||
"10000",
|
||||
"25000",
|
||||
"50000",
|
||||
"60000"
|
||||
],
|
||||
"on_change": "cali_Vout"
|
||||
},
|
||||
"CTRL_HIGH_Z_15": {
|
||||
"description": "ctrl highZ level",
|
||||
"record_meta": true,
|
||||
@@ -851,7 +874,8 @@
|
||||
"initial": 0,
|
||||
"value": [
|
||||
"Iin",
|
||||
"Vin"
|
||||
"Vin",
|
||||
"Vout"
|
||||
]
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
@@ -912,11 +936,13 @@
|
||||
"_notify(True)",
|
||||
"set_adc_gain_I",
|
||||
"set_adc_gain_Vin",
|
||||
"set_dac_gain_Vout",
|
||||
{
|
||||
"expression": "ADC_DAC_CHANNEL_15",
|
||||
"when": {
|
||||
"0": "cali_Iin",
|
||||
"1": "cali_Vin"
|
||||
"1": "cali_Vin",
|
||||
"2": "cali_Vout"
|
||||
}
|
||||
},
|
||||
"_sync(True)",
|
||||
@@ -1007,12 +1033,6 @@
|
||||
"XE0;2B>va"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_adc_gain_I": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1025,6 +1045,12 @@
|
||||
"XE1;X01;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_ctrl_highZ": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1052,6 +1078,15 @@
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"cali_Vout": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"v": "DAC_VOLT_BUTTON"
|
||||
},
|
||||
"data": [
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>v"
|
||||
]
|
||||
},
|
||||
"curve_iv": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
@@ -1203,7 +1238,7 @@
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"X07;",
|
||||
"X0C;",
|
||||
"B>va;4B>vb;2B>vc;2B>vd;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>pc;4b>pd;",
|
||||
|
||||
@@ -671,6 +671,17 @@
|
||||
},
|
||||
"on_change": "set_para_DAC_VOLT"
|
||||
},
|
||||
"DAC_VOLT_SCROLL": {
|
||||
"description": "DAC scroll output Voltage",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
65536
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"ADC_VALUE_I": {
|
||||
"description": "ADC value current value",
|
||||
"domain": "int"
|
||||
@@ -836,6 +847,18 @@
|
||||
],
|
||||
"on_change": "set_dac_gain_Vout"
|
||||
},
|
||||
"DAC_VOLT_BUTTON": {
|
||||
"description": "DAC volt",
|
||||
"record_meta": true,
|
||||
"initial": 1,
|
||||
"value": [
|
||||
"10000",
|
||||
"25000",
|
||||
"50000",
|
||||
"60000"
|
||||
],
|
||||
"on_change": "cali_Vout"
|
||||
},
|
||||
"CTRL_HIGH_Z_15": {
|
||||
"description": "ctrl highZ level",
|
||||
"record_meta": true,
|
||||
@@ -851,7 +874,8 @@
|
||||
"initial": 0,
|
||||
"value": [
|
||||
"Iin",
|
||||
"Vin"
|
||||
"Vin",
|
||||
"Vout"
|
||||
]
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
@@ -912,11 +936,13 @@
|
||||
"_notify(True)",
|
||||
"set_adc_gain_I",
|
||||
"set_adc_gain_Vin",
|
||||
"set_dac_gain_Vout",
|
||||
{
|
||||
"expression": "ADC_DAC_CHANNEL_15",
|
||||
"when": {
|
||||
"0": "cali_Iin",
|
||||
"1": "cali_Vin"
|
||||
"1": "cali_Vin",
|
||||
"2": "cali_Vout"
|
||||
}
|
||||
},
|
||||
"_sync(True)",
|
||||
@@ -1007,12 +1033,6 @@
|
||||
"XE0;2B>va"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_adc_gain_I": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1025,6 +1045,12 @@
|
||||
"XE1;X01;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_ctrl_highZ": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1052,6 +1078,15 @@
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"cali_Vout": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"v": "DAC_VOLT_BUTTON"
|
||||
},
|
||||
"data": [
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>v"
|
||||
]
|
||||
},
|
||||
"curve_iv": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
@@ -1203,7 +1238,7 @@
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"X07;",
|
||||
"X0C;",
|
||||
"B>va;4B>vb;2B>vc;2B>vd;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>pc;4b>pd;",
|
||||
|
||||
@@ -671,6 +671,17 @@
|
||||
},
|
||||
"on_change": "set_para_DAC_VOLT"
|
||||
},
|
||||
"DAC_VOLT_SCROLL": {
|
||||
"description": "DAC scroll output Voltage",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
65536
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"ADC_VALUE_I": {
|
||||
"description": "ADC value current value",
|
||||
"domain": "int"
|
||||
@@ -836,6 +847,18 @@
|
||||
],
|
||||
"on_change": "set_dac_gain_Vout"
|
||||
},
|
||||
"DAC_VOLT_BUTTON": {
|
||||
"description": "DAC volt",
|
||||
"record_meta": true,
|
||||
"initial": 1,
|
||||
"value": [
|
||||
"10000",
|
||||
"25000",
|
||||
"50000",
|
||||
"60000"
|
||||
],
|
||||
"on_change": "cali_Vout"
|
||||
},
|
||||
"CTRL_HIGH_Z_15": {
|
||||
"description": "ctrl highZ level",
|
||||
"record_meta": true,
|
||||
@@ -851,7 +874,8 @@
|
||||
"initial": 0,
|
||||
"value": [
|
||||
"Iin",
|
||||
"Vin"
|
||||
"Vin",
|
||||
"Vout"
|
||||
]
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
@@ -912,11 +936,13 @@
|
||||
"_notify(True)",
|
||||
"set_adc_gain_I",
|
||||
"set_adc_gain_Vin",
|
||||
"set_dac_gain_Vout",
|
||||
{
|
||||
"expression": "ADC_DAC_CHANNEL_15",
|
||||
"when": {
|
||||
"0": "cali_Iin",
|
||||
"1": "cali_Vin"
|
||||
"1": "cali_Vin",
|
||||
"2": "cali_Vout"
|
||||
}
|
||||
},
|
||||
"_sync(True)",
|
||||
@@ -1007,12 +1033,6 @@
|
||||
"XE0;2B>va"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_adc_gain_I": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1025,6 +1045,12 @@
|
||||
"XE1;X01;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"set_dac_gain_Vout": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
"XE1;X02;B>DAC_LEVEL_V_OUT_15"
|
||||
]
|
||||
},
|
||||
"set_ctrl_highZ": {
|
||||
"type": "RIS",
|
||||
"data": [
|
||||
@@ -1052,6 +1078,15 @@
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>ADC_LEVEL_V_IN_15"
|
||||
]
|
||||
},
|
||||
"cali_Vout": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"v": "DAC_VOLT_BUTTON"
|
||||
},
|
||||
"data": [
|
||||
"XF1;B>ADC_DAC_CHANNEL_15;B>v"
|
||||
]
|
||||
},
|
||||
"curve_iv": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
"value": [
|
||||
"EIS CURVE",
|
||||
"Cyclic Voltammetry",
|
||||
"Chronoamperometric",
|
||||
"Dev Mode"
|
||||
]
|
||||
},
|
||||
@@ -265,6 +266,17 @@
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"VOLT_VSCAN": {
|
||||
"description": "Voltage of VScan",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
"VOLT_MAX"
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
"description": "send msg to elite",
|
||||
"domain": {
|
||||
@@ -295,20 +307,23 @@
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_I"
|
||||
"1": "set_adc_gain_I",
|
||||
"2": "set_adc_gain_I"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_Vin"
|
||||
"1": "set_adc_gain_Vin",
|
||||
"2": "set_adc_gain_Vin"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"0": "curve_eis",
|
||||
"1": "curve_cv3"
|
||||
"1": "curve_cv3",
|
||||
"2": "curve_const_vscan"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -424,6 +439,23 @@
|
||||
"1XD2;1X02;4B>ve;2B>vf;2B>cn"
|
||||
]
|
||||
},
|
||||
"curve_const_vscan": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"va": "VOLT_VSCAN",
|
||||
"pa": "ADC_LEVEL_I_15",
|
||||
"pb": "ADC_LEVEL_V_IN_15",
|
||||
"pd": "CTRL_HIGH_Z_15",
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"1XD3;",
|
||||
"2B>va;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>0;4b>pd;",
|
||||
"2B>pe"
|
||||
]
|
||||
},
|
||||
"ble_instru_send": [
|
||||
"ble_write",
|
||||
"_cdr('20X>ADC_VALUE_I')"
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
"value": [
|
||||
"EIS CURVE",
|
||||
"Cyclic Voltammetry",
|
||||
"Chronoamperometric",
|
||||
"Dev Mode"
|
||||
]
|
||||
},
|
||||
@@ -265,6 +266,17 @@
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"VOLT_VSCAN": {
|
||||
"description": "Voltage of VScan",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
"VOLT_MAX"
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
"description": "send msg to elite",
|
||||
"domain": {
|
||||
@@ -295,20 +307,23 @@
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_I"
|
||||
"1": "set_adc_gain_I",
|
||||
"2": "set_adc_gain_I"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_Vin"
|
||||
"1": "set_adc_gain_Vin",
|
||||
"2": "set_adc_gain_Vin"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"0": "curve_eis",
|
||||
"1": "curve_cv3"
|
||||
"1": "curve_cv3",
|
||||
"2": "curve_const_vscan"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -424,6 +439,23 @@
|
||||
"1XD2;1X02;4B>ve;2B>vf;2B>cn"
|
||||
]
|
||||
},
|
||||
"curve_const_vscan": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"va": "VOLT_VSCAN",
|
||||
"pa": "ADC_LEVEL_I_15",
|
||||
"pb": "ADC_LEVEL_V_IN_15",
|
||||
"pd": "CTRL_HIGH_Z_15",
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"1XD3;",
|
||||
"2B>va;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>0;4b>pd;",
|
||||
"2B>pe"
|
||||
]
|
||||
},
|
||||
"ble_instru_send": [
|
||||
"ble_write",
|
||||
"_cdr('20X>ADC_VALUE_I')"
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
"value": [
|
||||
"EIS CURVE",
|
||||
"Cyclic Voltammetry",
|
||||
"Chronoamperometric",
|
||||
"Dev Mode"
|
||||
]
|
||||
},
|
||||
@@ -265,6 +266,17 @@
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"VOLT_VSCAN": {
|
||||
"description": "Voltage of VScan",
|
||||
"record_meta": true,
|
||||
"initial": 25000,
|
||||
"domain": [
|
||||
"VOLT_MAX"
|
||||
],
|
||||
"value": {
|
||||
"expression": "VALUE"
|
||||
}
|
||||
},
|
||||
"BLE_WRITE": {
|
||||
"description": "send msg to elite",
|
||||
"domain": {
|
||||
@@ -295,20 +307,23 @@
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_I"
|
||||
"1": "set_adc_gain_I",
|
||||
"2": "set_adc_gain_I"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"1": "set_adc_gain_Vin"
|
||||
"1": "set_adc_gain_Vin",
|
||||
"2": "set_adc_gain_Vin"
|
||||
}
|
||||
},
|
||||
{
|
||||
"expression": "MODE",
|
||||
"when": {
|
||||
"0": "curve_eis",
|
||||
"1": "curve_cv3"
|
||||
"1": "curve_cv3",
|
||||
"2": "curve_const_vscan"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -424,6 +439,23 @@
|
||||
"1XD2;1X02;4B>ve;2B>vf;2B>cn"
|
||||
]
|
||||
},
|
||||
"curve_const_vscan": {
|
||||
"type": "RIS",
|
||||
"parameter": {
|
||||
"va": "VOLT_VSCAN",
|
||||
"pa": "ADC_LEVEL_I_15",
|
||||
"pb": "ADC_LEVEL_V_IN_15",
|
||||
"pd": "CTRL_HIGH_Z_15",
|
||||
"pe": "SAMPLE_RATE"
|
||||
},
|
||||
"data": [
|
||||
"1XD3;",
|
||||
"2B>va;",
|
||||
"4b>pa;4b>pb;",
|
||||
"4b>0;4b>pd;",
|
||||
"2B>pe"
|
||||
]
|
||||
},
|
||||
"ble_instru_send": [
|
||||
"ble_write",
|
||||
"_cdr('20X>ADC_VALUE_I')"
|
||||
|
||||
Reference in New Issue
Block a user