Compare commits

..

46 Commits

Author SHA1 Message Date
peterlu14 695f37c2dd [update] gitignore log 2022-12-01 15:18:47 +08:00
peterlu14 690f859e86 [update] idle fix & scheduler log & cycle count 2022-12-01 15:18:04 +08:00
peterlu14 959d86c0fe [update] fix eis highz default error 2022-11-28 10:41:08 +08:00
peterlu14 24c07a7fa5 [update] EDC1.5re, EIS1.1, EISMini support idle instruction 2022-11-28 10:18:34 +08:00
peterlu14 e43857a5bc [update] add idle instruction 2022-11-28 10:13:08 +08:00
peterlu14 c084f29f06 [update] add script to auto update db columns & python pacakges 2022-11-16 16:27:12 +08:00
peterlu14 130d260add Update README.md 2022-11-16 06:30:19 +00:00
peterlu14 575d5d8af1 [update] rolloff_cali from cutoff_freq/1e5 to hsrtia_c[gain] 2022-11-16 13:37:51 +08:00
peterlu14 fbf6297047 Merge remote-tracking branch 'origin/dev/update_eis_parameter' into dev/scheduler_cf 2022-11-16 13:34:17 +08:00
Roy c540013d19 [update] new cf mode 2022-11-16 11:51:15 +08:00
Roy 7f0b00a323 [update] update highz instruction 2022-11-15 17:28:51 +08:00
Roy 4828c85668 [update] clean up eis parameter 2022-11-15 16:08:43 +08:00
Roy 4ce9fe5b8d [update] remove ADC_LEVEL_V_IN_15 parameter 2022-11-15 16:08:09 +08:00
Roy d74f09254e [update] update high z status 2022-11-15 16:07:58 +08:00
Roy 79ecff69cc [update] update VT_MEASURE_VIN_RANGE parameter 2022-11-15 16:03:06 +08:00
Roy df45126ead [update] update CA_VOLT parameter 2022-11-15 16:00:53 +08:00
Roy 9fade3469a [update] update CV_SCAN_RATE parameter 2022-11-15 15:51:42 +08:00
Roy a77331176c [update] update CV_E2 parameter 2022-11-15 15:47:49 +08:00
Roy 8f98337267 [update] update CV_E1 parameter 2022-11-15 15:44:42 +08:00
Roy 205d39cb11 [update] update CV_E_INITIAL parameter 2022-11-15 15:41:38 +08:00
Roy a5ea3243fa [update] new lprtia function 2022-11-15 15:39:31 +08:00
peterlu14 2edf28c7ba Merge branch 'release/v1.6.8/sqlAlchemy+projectTable' into dev/scheduler_idle_mode 2022-11-15 15:35:06 +08:00
peterlu14 b20d46daa8 [update] add new mode idle & project stop condition change 2022-11-15 13:23:49 +08:00
Roy 789d9b3a81 [update] fix hstia gain 2022-11-15 11:51:16 +08:00
Roy 0d0427ed14 [update] receive hsrtia & lprtia gain level 2022-11-09 17:19:48 +08:00
Roy d434509c5b [update] new hsrtia function 2022-11-09 16:03:45 +08:00
Roy 787d76d48c [update] update eis instruction 2022-11-08 17:55:20 +08:00
Roy 50f2432088 [update] update number of mode 2022-11-08 17:28:03 +08:00
Roy 1cff19ac58 [update] update GENERAL_HS_RTIA parameter 2022-11-08 16:13:20 +08:00
Roy baef447c0e [update] update EIS_AVERAGE_NUM parameter 2022-11-08 15:57:52 +08:00
Roy ee9c13d4c5 [update] update EIS_DELAY parameter 2022-11-08 15:44:57 +08:00
Roy 9076f2f10b [update] update EIS_SCALE parameter 2022-11-08 15:36:22 +08:00
Roy 9b2e2964b0 [update] update EIS_PPD parameter 2022-11-08 14:49:07 +08:00
Roy 2622109c89 [update] update EIS_FREQ parameter 2022-11-08 14:35:32 +08:00
Roy a3fe6b87af [update] update EIS_AC_AMP parameter 2022-11-08 14:24:07 +08:00
Roy 64419ca1c5 [update] update EIS_DC_BIAS parameter 2022-11-08 14:17:31 +08:00
Roy 7d77c44741 [update] update EIS_FREQ parameter 2022-11-08 12:09:42 +08:00
Roy 29b4dd5cc7 [update] update EIS_FREQ parameter 2022-11-08 12:07:49 +08:00
Roy f151ae6fce [update] delete FREQ_START & FREQ_STOP parameter 2022-11-08 11:08:01 +08:00
peterlu14 e535e3d2b1 Merge remote-tracking branch 'origin/EIS_10test' into release/v1.7.0/fix_EIS_freq-RT 2022-11-08 09:38:19 +08:00
10 06c36aa737 Merge remote-tracking branch 'origin/dev/RT_mode' into EIS_10test 2022-11-07 16:54:28 +08:00
10 402022c451 cutoff freq 2022-11-07 16:44:54 +08:00
Roy 4daff72d39 [update] update RT mode 2022-10-27 17:43:16 +08:00
Roy f99719832a [update] short instruction for RT mode 2022-10-27 17:13:38 +08:00
10 fcc39dbfed Merge branch 'release/v1.6.9/fix_phase_90ToN90' into EIS_10test 2022-10-13 15:28:39 +08:00
10 1174d54bc0 fix phase in PEIS mode 2022-10-13 15:13:00 +08:00
15 changed files with 1081 additions and 575 deletions
+1
View File
@@ -7,3 +7,4 @@
/.vscode /.vscode
/media /media
python/biopro/sever/_identify.py python/biopro/sever/_identify.py
*.log
+22
View File
@@ -78,6 +78,8 @@ add ssh.txt in boot folder
###### Install dependencies ###### Install dependencies
sudo apt-get install vim git wiringpi build-essential libi2c-dev i2c-tools python-dev libffi-dev python3-pip postgresql npm sudo apt-get install vim git wiringpi build-essential libi2c-dev i2c-tools python-dev libffi-dev python3-pip postgresql npm
sudo apt-get install libatlas-base-dev
sudo apt-get install python3-numpy
###### wiringpi conflict ###### wiringpi conflict
need to install wiringpi: https://github.com/WiringPi/WiringPi need to install wiringpi: https://github.com/WiringPi/WiringPi
@@ -94,6 +96,7 @@ git clone https://gitlab.com/wisetop/controller/wisetopdataserver.git
``` ```
cd ~/wisetopdataserver cd ~/wisetopdataserver
pip3 install -r requirements.txt pip3 install -r requirements.txt
pip3 install SQLAlchemy
``` ```
##### Packages version ##### Packages version
``` ```
@@ -358,3 +361,22 @@ $sudo vim ./sites-available/000-default.conf
##### raspberry website document: ##### raspberry website document:
> https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md > https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md
# ChangeLog
[2022.11.16]
add python package SQLAlchemy
add new column project(int4) in postgresSQL table recording_meta_datas
add new postgresSQL table project_report
add new postgresSQL table meta_project_info
[2022.10.18]
socektTimeout from 1s -> 5s
socketListen from 3 -> 20
[2022.09.30]
add new column cycle(jsonb) in postgresSQL table projects
[2022.9.28]
add python package numpy
+8
View File
@@ -832,6 +832,9 @@ class DeviceManager(MasterDevice, Synchronized):
elif func == InternalInstruction.PREDEFINED_DISABLE_CACHE: elif func == InternalInstruction.PREDEFINED_DISABLE_CACHE:
self._device_disable_cache(device, *para) self._device_disable_cache(device, *para)
elif func == InternalInstruction.PREDEFINED_IDLE:
self._idle(device, *para)
elif isinstance(device, DebugDevice): elif isinstance(device, DebugDevice):
if func == InternalInstruction.PREDEFINED_NOTIFY: if func == InternalInstruction.PREDEFINED_NOTIFY:
@@ -851,6 +854,11 @@ class DeviceManager(MasterDevice, Synchronized):
InternalInstruction.PREDEFINED_DATA_FORMAT, InternalInstruction.PREDEFINED_DATA_FORMAT,
f) f)
def _idle(self, device: Device, expr: AnyStr):
self._handler.device_internal_command(device.device_id,
InternalInstruction.PREDEFINED_IDLE,
None)
def _device_data_format_cali(self, device: Device, expr: str, cali: bytes = None): def _device_data_format_cali(self, device: Device, expr: str, cali: bytes = None):
if cali is None: if cali is None:
cali = device.calibration_info(expr) cali = device.calibration_info(expr)
+22 -23
View File
@@ -1346,8 +1346,8 @@ class EISZeroOneDataDecoder(RecDataDecoder):
__slots__ = ('_message', '_cycle_number', '_start_return_data', '_time_stamp', __slots__ = ('_message', '_cycle_number', '_start_return_data', '_time_stamp',
'_total_time_stamp', '_mode', '_cycle_start_time', '_total_time_stamp', '_mode', '_cycle_start_time',
'_mode_stop', '_last_time_stamp', '_last_delta', '_cali_coeff', '_mode_stop', '_last_time_stamp', '_last_delta', '_cali_coeff',
'cali_coeff', '_ac_amp', '_mode', '_freq_start', '_freq_stop', 'cali_coeff', '_ac_amp', '_mode',
'_freq_direction', '_last_phase', '_first_phase_flag', '_show_data') '_last_phase', '_first_phase_flag', '_show_data')
def __init__(self, cali_coeff: bytes = None): def __init__(self, cali_coeff: bytes = None):
super().__init__() super().__init__()
@@ -1362,9 +1362,6 @@ class EISZeroOneDataDecoder(RecDataDecoder):
self._cycle_start_time = [] self._cycle_start_time = []
self._ac_amp: int = 0 self._ac_amp: int = 0
self._mode: int = 0 self._mode: int = 0
self._freq_start: int = 0
self._freq_stop: int = 0
self._freq_direction = 0
self._last_phase = 0 self._last_phase = 0
self._first_phase_flag = 1 self._first_phase_flag = 1
@@ -1429,25 +1426,25 @@ class EISZeroOneDataDecoder(RecDataDecoder):
index = 60 index = 60
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8) hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8) hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4) hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0])
#Lv[1] 20k #Lv[1] 20k
index = 80 index = 80
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8) hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8) hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4) hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0])
#Lv[2] 5k #Lv[2] 5k
index = 100 index = 100
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8) hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8) hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4) hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0])
#Lv[3] 200R #Lv[3] 200R
index = 120 index = 120
hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8) hsrtia_a.append(struct.unpack('>i', cali_coeff[index+1:index+5])[0]/1e8)
hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8) hsrtia_b.append(struct.unpack('>i', cali_coeff[index+5:index+9])[0]/1e8)
hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0]/1e4) hsrtia_c.append(struct.unpack('>i', cali_coeff[index+9:index+13])[0])
index = 140 index = 140
g = 1 g = 1
@@ -1530,7 +1527,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
time_stamp: float = struct.unpack('<I', data[13+3:17+3])[0] # unit: ms time_stamp: float = struct.unpack('<I', data[13+3:17+3])[0] # unit: ms
cycle_number = struct.unpack('>H', data[17+3:19+3])[0] cycle_number = struct.unpack('>H', data[17+3:19+3])[0]
d19 = data[19+3] d19 = data[19+3]
gain = (d19 & 0x0F) gain = data[20+3]
finishMode = (d19 & 0x80) >> 7 finishMode = (d19 & 0x80) >> 7
if time_stamp == 0: if time_stamp == 0:
@@ -1540,7 +1537,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
return None return None
if time_stamp != 0 and self._start_return_data == True: if time_stamp != 0 and self._start_return_data == True:
if (self._mode == 0): if (self._mode == 0 or self._mode == 5):
time_stamp, delta, ret_get_time_stamp = self.eis_get_time_stamp(time_stamp) time_stamp, delta, ret_get_time_stamp = self.eis_get_time_stamp(time_stamp)
else: else:
time_stamp, delta, ret_get_time_stamp = self.get_time_stamp(time_stamp) time_stamp, delta, ret_get_time_stamp = self.get_time_stamp(time_stamp)
@@ -1549,7 +1546,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
print("error timeStamp full data:", list(data), datetime.now(), '\n') print("error timeStamp full data:", list(data), datetime.now(), '\n')
return None return None
else: else:
if self.cali_coeff is not None and self._mode == 0: if self.cali_coeff is not None and (self._mode == 0 or self._mode == 5):
hsrtia_a = [] hsrtia_a = []
hsrtia_b = [] hsrtia_b = []
hsrtia_c = [] hsrtia_c = []
@@ -1557,23 +1554,25 @@ class EISZeroOneDataDecoder(RecDataDecoder):
cutoff_freq, phase_coeff, phase_offset, hsrtia_a, hsrtia_b, hsrtia_c, hsrtia_d = self.cali_coeff[0] cutoff_freq, phase_coeff, phase_offset, hsrtia_a, hsrtia_b, hsrtia_c, hsrtia_d = self.cali_coeff[0]
voltage_amp = round(self._ac_amp * 800 / 2047) # use UI value voltage_amp = round(self._ac_amp * 800 / 2047) # use UI value
if (self._freq_start > self._freq_stop):
self._freq_direction = 0
else:
self._freq_direction = 1
if (self._mode == 0): if (self._mode == 0 or self._mode == 5):
img = ch1 img = ch1
real = ch2 real = ch2
freq = ch3 freq = ch3
fre_idx = 0 fre_idx = 0
voltage_mag = math.sqrt(img ** 2 + real ** 2) * (1 + freq ** 2 / cutoff_freq ** 2) # rolloff_cali = cutoff_freq/1e5
rolloff_cali = hsrtia_c[gain]
voltage_mag = math.sqrt(img ** 2 + real ** 2) * (1 + freq ** 2 / rolloff_cali ** 2 / 1e4)
# if (gain == 3): # if (gain == 3):
# current = hsrtia_a[gain] * math.exp(hsrtia_b[gain] * voltage_mag) + hsrtia_c[gain] * math.exp(hsrtia_d[gain] * voltage_mag) # current = hsrtia_a[gain] * math.exp(hsrtia_b[gain] * voltage_mag) + hsrtia_c[gain] * math.exp(hsrtia_d[gain] * voltage_mag)
# else: # else:
current = voltage_mag ** 2 * hsrtia_a[gain] + voltage_mag * hsrtia_b[gain] + hsrtia_c[gain]
current = voltage_mag ** 2 * hsrtia_a[gain] + voltage_mag * hsrtia_b[gain]
# current = voltage_mag ** 2 * hsrtia_a[gain] + voltage_mag * hsrtia_b[gain] + hsrtia_c[gain]
# print(current) # print(current)
# print(voltage_mag) # print(voltage_mag)
# print(hsrtia_a[gain]) # print(hsrtia_a[gain])
@@ -1617,7 +1616,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
real_after_cal = impedance * math.cos(round(phase) * math.pi / 180) real_after_cal = impedance * math.cos(round(phase) * math.pi / 180)
if self._show_data: if self._show_data:
if (self._mode == 0): if (self._mode == 0 or self._mode == 5):
print('|', '{:10}'.format(time_stamp), print('|', '{:10}'.format(time_stamp),
'|', '{:5}'.format(delta), '|', '{:5}'.format(delta),
'|', '{:6}'.format(ch1), '|', '{:6}'.format(ch1),
@@ -1631,7 +1630,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
'|', '{:5}'.format(round(current, 3)), '|', '{:5}'.format(round(current, 3)),
'|', '{:1}'.format(gain), '|', '{:1}'.format(gain),
'|', '{:1}'.format(finishMode), '|', '{:1}'.format(finishMode),
'@', str(self.device), '|') '@', str(self.device), '|', flush = True)
pass pass
else: else:
print('|', '{:10}'.format(time_stamp), print('|', '{:10}'.format(time_stamp),
@@ -1642,7 +1641,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
'|', '{:5}'.format(cycle_number), '|', '{:5}'.format(cycle_number),
'|', '{:1}'.format(gain), '|', '{:1}'.format(gain),
'|', '{:1}'.format(finishMode), '|', '{:1}'.format(finishMode),
'@', str(self.device), '|') '@', str(self.device), '|', flush = True)
pass pass
if finishMode == True: if finishMode == True:
@@ -1652,7 +1651,7 @@ class EISZeroOneDataDecoder(RecDataDecoder):
self._mode_stop = 0 self._mode_stop = 0
ret = RecordingData(self.device, int(time_stamp * 1000 / 2), 0) ret = RecordingData(self.device, int(time_stamp * 1000 / 2), 0)
if (self._mode == 0): #EIS Mode if self._mode == 0 or self._mode == 5: #EIS Mode
ret.append_data(0, ch1) #Raw Imag ret.append_data(0, ch1) #Raw Imag
ret.append_data(1, ch2) #Raw Real ret.append_data(1, ch2) #Raw Real
ret.append_data(2, ch3 * 10) #Frequency [mHz] ret.append_data(2, ch3 * 10) #Frequency [mHz]
+2
View File
@@ -283,6 +283,7 @@ class InternalInstruction(SingleInstruction):
PREDEFINED_SET = '_set' PREDEFINED_SET = '_set'
PREDEFINED_CDR = '_cdr' PREDEFINED_CDR = '_cdr'
PREDEFINED_DISABLE_CACHE = '_disable_cache' PREDEFINED_DISABLE_CACHE = '_disable_cache'
PREDEFINED_IDLE = '_idle'
PREDEFINED = ( PREDEFINED = (
PREDEFINED_SLEEP, PREDEFINED_SLEEP,
@@ -294,6 +295,7 @@ class InternalInstruction(SingleInstruction):
PREDEFINED_SET, PREDEFINED_SET,
PREDEFINED_CDR, PREDEFINED_CDR,
PREDEFINED_DISABLE_CACHE, PREDEFINED_DISABLE_CACHE,
PREDEFINED_IDLE,
) )
__slots__ = ('_expr', '_para') __slots__ = ('_expr', '_para')
+1 -1
View File
@@ -1141,7 +1141,7 @@ class CompletedDevice(Device):
# raise RuntimeError('illegal parameter value : ' + value) from e # raise RuntimeError('illegal parameter value : ' + value) from e
else: else:
if name == 'MODE': if name == 'MODE':
if self.library_name.startswith('Elite_EDC'): if self.library_name.startswith('Elite_EDC') or 'EIS' in self.library_name:
self.set_parameter('CTRL_HIGH_Z_15', self.get_parameter('HIGHZ_TABLE')[value]) self.set_parameter('CTRL_HIGH_Z_15', self.get_parameter('HIGHZ_TABLE')[value])
self.set_parameter('TIME_DURATION', 0) self.set_parameter('TIME_DURATION', 0)
+40 -3
View File
@@ -1,6 +1,7 @@
import sys import sys
import json import json
import threading import threading
import logging
from time import time, sleep from time import time, sleep
from datetime import datetime from datetime import datetime
@@ -46,10 +47,20 @@ class Project(threading.Thread):
self._count = 1 #流水號 self._count = 1 #流水號
self.log_verbose = log_verbose self.log_verbose = log_verbose
self._logger = logging.getLogger('project')
self._logger.setLevel('DEBUG')
self._formatter = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
self._formatter_with_nothing = logging.Formatter('%(message)s')
self.setup_project(project) self.setup_project(project)
self.setup_device(self._device) self.setup_device(self._device)
# create log file handler
fh = logging.FileHandler(f'{self.uuid}.log', mode="w")
fh.setFormatter(self._formatter)
self._logger.addHandler(fh)
def setup_project(self, project): def setup_project(self, project):
for (key, value) in project.items(): for (key, value) in project.items():
if key in key_list.keys(): if key in key_list.keys():
@@ -137,9 +148,23 @@ class Project(threading.Thread):
def running_task(self): def running_task(self):
return self._task_manager.running_task return self._task_manager.running_task
def get_device_parameter_set(self, device_address):
parameter_set = self._task_manager.running_task.parameter_set
return next((x for x in parameter_set if parameter_set[x]['target'] == device_address), None)
def get_cycle(self, task):
for index, _cycle in enumerate(self.cycle):
if task.uuid in _cycle['range']:
return _cycle
def run(self): def run(self):
# project status change running (1)
self._status = 1 self._status = 1
# save start time
self._start_time = time() self._start_time = time()
# saving & broadcast message
self._logger.info('Project ' + self.name + ' start')
self.log_verbose('Project ' + self.name + ' start') self.log_verbose('Project ' + self.name + ' start')
self.mqtt_thread.broadcast_command('project:' + self._name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]) self.mqtt_thread.broadcast_command('project:' + self._name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
@@ -162,12 +187,17 @@ class Project(threading.Thread):
for condition in match_condition_list: for condition in match_condition_list:
match_action_list = task.get_match_action(condition.id) match_action_list = task.get_match_action(condition.id)
print('match_action_list', match_action_list, match_action_list)
for action in match_action_list: for action in match_action_list:
if action.type == 'cycle' and condition.type == 'previous_task_done': if action.type == 'cycle' and condition.type == 'previous_task_done':
self.mqtt_thread.broadcast_command('project:task ' + task.name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]) self.mqtt_thread.broadcast_command('project:task ' + task.name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
self._task_manager.set_running_task(task) self._task_manager.set_running_task(task)
cycle_info = self.get_cycle(task)
if cycle_info['useID'] == False:
self._logger.info(f'---------- Cycle {task.name} Round {cycle_info["count"]} -----------')
if action.type == 'cycle' and condition.type == 'until_button_trigger': if action.type == 'cycle' and condition.type == 'until_button_trigger':
self._task_manager.running_task.stop() self._task_manager.running_task.stop()
self._logger.info(f'---------- Cycle {cycle_info["id"]} Round {cycle_info["count"]} -----------')
if self._task_manager.running_task != None: if self._task_manager.running_task != None:
if self._task_manager.running_task.uuid == task.uuid and action.type == 'cycle' and condition.type == 'after_task_run': if self._task_manager.running_task.uuid == task.uuid and action.type == 'cycle' and condition.type == 'after_task_run':
@@ -176,6 +206,7 @@ class Project(threading.Thread):
if action.type == 'start': if action.type == 'start':
if task.status != 1: if task.status != 1:
self._task_manager.set_running_task(task) self._task_manager.set_running_task(task)
self._logger.info(f'Task {str(self._task_manager.running_task.name)} start')
self.mqtt_thread.broadcast_command('project:task ' + task.name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]) 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 == 'stop': # elif action.type == 'stop':
# 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])
@@ -185,12 +216,15 @@ class Project(threading.Thread):
elif action.type == 'idle': elif action.type == 'idle':
self._task_manager.running_task.stop() self._task_manager.running_task.stop()
# elif action.type == 'stop':
# self._task_manager.running_task.stop()
instruction_set = None instruction_set = None
if action.target is not None: if action.target is not None:
device = self._complete_device[action.target] device = self._complete_device[action.target]
if ((action.type == 'start' and device.status == 0) or (action.type == 'stop' and device.status == 1)): if ((action.type == 'start' and device.status == 0) or (action.type == 'stop' and device.status == 1)):
self._logger.info(f'Device {device.mac_address_in_str} {action.type}')
self.log_verbose('Project' + self.name + 'Task ' + task.name + ' match_condition ' + condition.type + ' trigger_action ' + action.type + ' ' + str(action.target)) self.log_verbose('Project' + self.name + 'Task ' + task.name + ' match_condition ' + condition.type + ' trigger_action ' + action.type + ' ' + str(action.target))
task_info = task.get_task_info(action) task_info = task.get_task_info(action)
instruction_set = getattr(self._instruction_set, action.type, None) instruction_set = getattr(self._instruction_set, action.type, None)
@@ -224,7 +258,7 @@ class Project(threading.Thread):
task_info['file_name'] += '#' + str(cycle_info['name']) + '-' + str(cycle_info['count']) task_info['file_name'] += '#' + str(cycle_info['name']) + '-' + str(cycle_info['count'])
self.log_verbose('file name ' + task_info['file_name']) self.log_verbose('file name ' + task_info['file_name'])
if instruction_set != None and len(task.parameter_set) > 0: if instruction_set != None and self.get_device_parameter_set(action.target) != None:
if action.type == 'start': if action.type == 'start':
self._count += 1 self._count += 1
for instruction in instruction_set: for instruction in instruction_set:
@@ -237,14 +271,16 @@ class Project(threading.Thread):
# check task not running then stop # check task not running then stop
if self.check_running_task_not_run() == True: if self.check_running_task_not_run() == True:
# self._logger.info(f'taskType {self._task_manager.running_task.name} {self._task_manager.running_task.type}')
if self._task_manager.running_task.type == '': if self._task_manager.running_task.type == '':
self._logger.info(f'Task {self._task_manager.running_task.name} stop')
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() self._task_manager.running_task.stop()
# check project done then close project # check project done then close project
if self.check_project_done() == True: if self.check_project_done() == True:
print('project stop at', datetime.now()) print('project stop at', datetime.now())
self.close() self.stop()
if self._time_interval - delay_time > 0: if self._time_interval - delay_time > 0:
sleep(self._time_interval - delay_time) sleep(self._time_interval - delay_time)
@@ -261,6 +297,7 @@ class Project(threading.Thread):
self._status = 2 self._status = 2
self._end_time = time() self._end_time = time()
self._stop_flag = True self._stop_flag = True
self._logger.info('Project ' + self.name + ' stop')
self.mqtt_thread.broadcast_command('project:project ' + str(self._name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]) self.mqtt_thread.broadcast_command('project:project ' + str(self._name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
def close(self): def close(self):
+15 -2
View File
@@ -56,6 +56,11 @@ class TaskManager():
def get_index_by_uuid(self, uuid): def get_index_by_uuid(self, uuid):
return next((i for i, x in enumerate(self.task_list) if x.uuid == uuid), None) return next((i for i, x in enumerate(self.task_list) if x.uuid == uuid), None)
def check_task_is_cycle_start(self, task):
for index, cycle in enumerate(self._cycle_list):
if cycle['range'][0] == task.uuid:
return index
def check_task_is_cycle_end(self, task): def check_task_is_cycle_end(self, task):
for index, cycle in enumerate(self._cycle_list): for index, cycle in enumerate(self._cycle_list):
@@ -121,6 +126,7 @@ class TaskManager():
if self._prev_task.status == 1: if self._prev_task.status == 1:
self._prev_task.stop() self._prev_task.stop()
# if reach cycle end, count < max, then go to cycle start # if reach cycle end, count < max, then go to cycle start
cycle_start_index = self.check_task_is_cycle_start(task)
cycle_index = self.check_task_is_cycle_end(task) cycle_index = self.check_task_is_cycle_end(task)
if cycle_index is None: if cycle_index is None:
# print('next', self._running_task.name, self._running_task.next) # print('next', self._running_task.name, self._running_task.next)
@@ -135,14 +141,21 @@ class TaskManager():
cycle = self._cycle_list[cycle_index] cycle = self._cycle_list[cycle_index]
if int(cycle['count']) < int(cycle['max']): if int(cycle['count']) < int(cycle['max']):
self._next_task.append(self.get_task_by_uuid(cycle['range'][0])) self._next_task.append(self.get_task_by_uuid(cycle['range'][0]))
cycle['count'] += 1 # cycle['count'] += 1
else: else:
for task_uuid in self._running_task.next: for task_uuid in self._running_task.next:
_task = next((task for task in self._task_list if task.uuid == task_uuid), None) _task = next((task for task in self._task_list if task.uuid == task_uuid), None)
if _task != None: if _task != None:
_task.reset() _task.reset()
self._next_task.append(_task) self._next_task.append(_task)
cycle['count'] = 1 # cycle['count'] = 1
if cycle_start_index != None:
cycle = self._cycle_list[cycle_start_index]
if int(cycle['count']) < int(cycle['max']):
cycle['count'] += 1
else:
cycle['count'] = 1
except RuntimeError as e: except RuntimeError as e:
print(e) print(e)
+4
View File
@@ -1083,6 +1083,10 @@ class ControlServer(SocketServer, ControlServerAPI):
elif oper == InternalInstruction.PREDEFINED_DISABLE_CACHE: elif oper == InternalInstruction.PREDEFINED_DISABLE_CACHE:
return True return True
elif oper == InternalInstruction.PREDEFINED_IDLE:
device.status = 1
return True
else: else:
return False return False
+1 -3
View File
@@ -158,9 +158,7 @@ class RecordingProcess(Process):
elif isinstance(decoder, EISZeroOneDataDecoder): elif isinstance(decoder, EISZeroOneDataDecoder):
# get amp_gain from meta file # get amp_gain from meta file
decoder._mode = self._meta_file.configuration.get_parameter('MODE') decoder._mode = self._meta_file.configuration.get_parameter('MODE')
decoder._ac_amp = self._meta_file.configuration.get_parameter('AC_AMP') decoder._ac_amp = self._meta_file.configuration.get_parameter('EIS_AC_AMP')
decoder._freq_start = self._meta_file.configuration.get_parameter('FREQ_START')
decoder._freq_stop = self._meta_file.configuration.get_parameter('FREQ_STOP')
return decoder return decoder
@@ -33,6 +33,7 @@
0, 0,
1, 1,
1, 1,
1,
1 1
], ],
"domain": { "domain": {
@@ -617,7 +618,8 @@
"Open Circuit Potential", "Open Circuit Potential",
"Pulse Sensing", "Pulse Sensing",
"Differential Pulse Voltammetry (DPV)", "Differential Pulse Voltammetry (DPV)",
"Chronopotentiometry" "Chronopotentiometry",
"Idle"
] ]
}, },
"VOLT_ORIGIN": { "VOLT_ORIGIN": {
@@ -949,6 +951,7 @@
"10": "cali_dac_test", "10": "cali_dac_test",
"11": "cali_adc_test", "11": "cali_adc_test",
"12": "", "12": "",
"17": "idle",
"*": "start_data" "*": "start_data"
} }
} }
@@ -976,6 +979,9 @@
"VIS_STI", "VIS_STI",
"_cdr('1X;4X>ADC_VALUE_I')" "_cdr('1X;4X>ADC_VALUE_I')"
], ],
"idle": [
"_idle()"
],
"start_data": [ "start_data": [
"data_format", "data_format",
"_notify(True)", "_notify(True)",
+339 -177
View File
@@ -9,7 +9,7 @@
"minor_version_number": 0 "minor_version_number": 0
}, },
"constant": { "constant": {
"FREQ_MAX": 4294967296, "FREQ_MAX": 13333334,
"VOLT_MAX": 65536, "VOLT_MAX": 65536,
"BLE_WRITE_MAX": 255, "BLE_WRITE_MAX": 255,
"TIME_MAX": 100000 "TIME_MAX": 100000
@@ -26,17 +26,43 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CHANNEL": { "HIGHZ_TABLE": {
"derzteription": "record channels", "initial": [
"record_meta": true, 1,
"domain": "property", 1,
"value": "[0, 1, 2]" 1,
0,
1,
1,
1
],
"domain": {
"list": [
100
]
},
"value": "VALUE"
}, },
"CHANNEL_LABEL": { "CTRL_HIGH_Z_15": {
"description": "channel label", "description": "ctrl highZ level",
"record_meta": true, "record_meta": true,
"domain": "property", "initial": 1,
"value": "['current', 'voltage', 'impedance']" "value": [
"On",
"Off"
],
"on_change": "set_ctrl_highZ"
},
"CYCLE_NUMBER": {
"description": "CV cycle number",
"record_meta": true,
"initial": 1,
"domain": [
65536
],
"value": {
"expression": "VALUE"
}
}, },
"SAMPLE_RATE": { "SAMPLE_RATE": {
"description": "data sampling rate", "description": "data sampling rate",
@@ -50,6 +76,12 @@
}, },
"on_change": "set_sample_rate" "on_change": "set_sample_rate"
}, },
"CHANNEL": {
"derzteription": "record channels",
"record_meta": true,
"domain": "property",
"value": "[0, 1, 2]"
},
"AMP_GAIN": { "AMP_GAIN": {
"description": "amp gain", "description": "amp gain",
"record_meta": true, "record_meta": true,
@@ -63,11 +95,59 @@
"EIS CURVE", "EIS CURVE",
"Cyclic Voltammetry", "Cyclic Voltammetry",
"Chronoamperometric", "Chronoamperometric",
"V-T Graph",
"R-T Graph",
"EIS constant frequency",
"Dev Mode" "Dev Mode"
] ]
}, },
"FREQ": { "GENERAL_HS_RTIA": {
"description": "DPV current recording period start", "description": "High speed rtia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
],
"on_change": "set_general_hs_rtia"
},
"GENERAL_LP_RTIA": {
"description": "Low power rtia gain",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_general_lp_rtia"
},
"EIS_DC_BIAS": {
"description": "DC voltage bias",
"record_meta": true,
"initial": 25000,
"domain": [
"VOLT_MAX"
],
"value": {
"expression": "VALUE"
}
},
"EIS_AC_AMP": {
"description": "AC Amplitude",
"record_meta": true,
"initial": 25,
"domain": [
2048
]
},
"EIS_FREQ": {
"description": "[start, stop] of frequency scan",
"record_meta": true, "record_meta": true,
"initial": [ "initial": [
13333333, 13333333,
@@ -80,29 +160,24 @@
}, },
"value": "VALUE" "value": "VALUE"
}, },
"FREQ_START": { "EIS_PPD": {
"description": "Start of Freq Scan", "description": "Point per decades",
"record_meta": true, "record_meta": true,
"initial": 13422819, "initial": 10,
"domain": [ "domain": [
"FREQ_MAX" 11
], ]
"value": {
"expression": "VALUE"
}
}, },
"FREQ_STOP": { "EIS_SCALE": {
"description": "End of Freq Scan", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 7, "initial": 0,
"domain": [ "value": [
"FREQ_MAX" 0,
], 1
"value": { ]
"expression": "VALUE"
}
}, },
"DELAY": { "EIS_DELAY": {
"description": "Wait x peroid before start taking measurements", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -113,19 +188,19 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AVERAGE_NUM": { "EIS_AVERAGE_NUM": {
"description": "Number of sample used for average funciton", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 8, "initial": 8,
"value": [ "value": [
2, 2,
4, 4,
8, 6,
16 8
] ]
}, },
"DC_BIAS": { "CF_DC_BIAS": {
"description": "DC voltage bias in mV", "description": "DC voltage bias",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -135,15 +210,34 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AC_AMP": { "CF_AC_AMP": {
"description": "AC Amplitude in mV", "description": "AC Amplitude",
"record_meta": true, "record_meta": true,
"initial": 25, "initial": 25,
"domain": [ "domain": [
2048 2048
] ]
}, },
"SCALE": { "CF_FREQ": {
"description": "frequency of cf",
"record_meta": true,
"initial": 13333333,
"domain": [
"FREQ_MAX"
],
"value": {
"expression": "VALUE"
}
},
"CF_PPD": {
"description": "Point per decades",
"record_meta": true,
"initial": 10,
"domain": [
11
]
},
"CF_SCALE": {
"description": "Point spacing pattern", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -152,77 +246,29 @@
1 1
] ]
}, },
"PPD": { "CF_DELAY": {
"description": "Point per decades", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 10, "initial": 0,
"domain": [ "domain": [
11 101
]
},
"RTIA": {
"description": "High speed tia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
]
},
"ADC_VALUE_I": {
"description": "ADC value current value",
"domain": "int"
},
"Scan_Rate": {
"description": "Voltage Scan Rate",
"record_meta": true,
"initial": 10000,
"domain": [
100001
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CTRL_HIGH_Z_15": { "CF_AVERAGE_NUM": {
"description": "ctrl highZ level", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 8,
"value": [ "value": [
"On", 2,
"Off" 4,
], 6,
"on_change": "set_ctrl_highZ" 8
]
}, },
"ADC_LEVEL_I_15": { "CV_E_INITIAL": {
"description": "ADC level",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_adc_gain_I"
},
"ADC_LEVEL_V_IN_15": {
"description": "ADC level",
"record_meta": true,
"initial": 3,
"value": [
"0",
"1",
"2",
"auto"
],
"on_change": "set_adc_gain_Vin"
},
"VOLT_INITIAL": {
"description": "Initial Voltage of Scan", "description": "Initial Voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
@@ -233,8 +279,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MAX": { "CV_E1": {
"description": "Max Voltage of Scan", "description": "First voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -244,8 +290,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MIN": { "CV_E2": {
"description": "Min Voltage of Scan", "description": "Second voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -255,27 +301,54 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CYCLE_NUMBER": { "CV_SCAN_RATE": {
"description": "CV cycle number", "description": "Voltage scan rate",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 10000,
"domain": [
100001
],
"value": {
"expression": "VALUE"
}
},
"CA_VOLT": {
"description": "Voltage of ca",
"record_meta": true,
"initial": 25000,
"domain": [
"VOLT_MAX"
],
"value": {
"expression": "VALUE"
}
},
"VT_MEASURE_VIN_RANGE": {
"description": "measure range of Vin",
"record_meta": true,
"initial": 0,
"value": [
"0",
"1",
"2",
"auto"
]
},
"RT_VOLT_SET": {
"description": "DAC output Voltage",
"record_meta": true,
"initial": 37500,
"domain": [ "domain": [
65536 65536
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} },
"on_change": "set_para_RT_VOLT_SET"
}, },
"VOLT_VSCAN": { "ADC_VALUE_I": {
"description": "Voltage of VScan", "description": "ADC value current value",
"record_meta": true, "domain": "int"
"initial": 25000,
"domain": [
"VOLT_MAX"
],
"value": {
"expression": "VALUE"
}
}, },
"BLE_WRITE": { "BLE_WRITE": {
"description": "send msg to elite", "description": "send msg to elite",
@@ -307,15 +380,12 @@
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"1": "set_adc_gain_I", "0": "set_general_hs_rtia",
"2": "set_adc_gain_I" "1": "set_general_lp_rtia",
} "2": "set_general_lp_rtia",
}, "3": "set_general_lp_rtia",
{ "4": "set_general_lp_rtia",
"expression": "MODE", "5": "set_general_hs_rtia"
"when": {
"1": "set_adc_gain_Vin",
"2": "set_adc_gain_Vin"
} }
}, },
{ {
@@ -323,14 +393,25 @@
"when": { "when": {
"0": "curve_eis", "0": "curve_eis",
"1": "curve_cv3", "1": "curve_cv3",
"2": "curve_const_vscan" "2": "curve_ca",
"3": "curve_vt",
"4": "curve_rt",
"5": "curve_cf"
} }
}, },
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"0": "curve_eis_para2", "0": "curve_eis_para2",
"1": "curve_cv3_para2" "1": "curve_cv3_para2",
"5": "curve_cf_para2"
}
},
{
"expression": "MODE",
"when": {
"0": "curve_eis_mode",
"5": "curve_cf_mode"
} }
}, },
"_sync(True)", "_sync(True)",
@@ -350,6 +431,18 @@
"data_format_cali": [ "data_format_cali": [
"_data_format_cali('EISZeroOne')" "_data_format_cali('EISZeroOne')"
], ],
"set_general_hs_rtia": {
"type": "RIS",
"data": [
"1XFF;1X70;1B>GENERAL_HS_RTIA"
]
},
"set_general_lp_rtia": {
"type": "RIS",
"data": [
"1XFF;1X71;1B>GENERAL_LP_RTIA"
]
},
"set_sample_rate": { "set_sample_rate": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
@@ -359,103 +452,172 @@
"XE0;2B>va" "XE0;2B>va"
] ]
}, },
"set_adc_gain_I": {
"type": "RIS",
"data": [
"XE1;X05;B>ADC_LEVEL_I_15"
]
},
"set_adc_gain_Vin": {
"type": "RIS",
"data": [
"XE1;X06;B>ADC_LEVEL_V_IN_15"
]
},
"set_ctrl_highZ": { "set_ctrl_highZ": {
"type": "RIS", "type": "RIS",
"data": [ "data": [
"XE1;X03;B>CTRL_HIGH_Z_15" "1XFF;1X72;1B>CTRL_HIGH_Z_15"
] ]
}, },
"curve_eis": { "curve_eis": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X01;4B>fa;4B>fb;2B>dp" "1X12;1X01;4B>fa;4B>fb;2B>dp"
] ]
}, },
"curve_eis_para2": { "curve_eis_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp" "1X12;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_eis_mode": {
"type": "RIS",
"data": [
"1X12;1XFF"
]
},
"curve_cf": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X01;4B>fa;4B>0;2B>dp"
]
},
"curve_cf_para2": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_cf_mode": {
"type": "RIS",
"data": [
"1X13;1XFF"
] ]
}, },
"curve_cv3": { "curve_cv3": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X01;2B>va;2B>vb;2B>vc;" "1X09;1X01;2B>va;2B>vb;2B>vc;"
] ]
}, },
"curve_cv3_para2": { "curve_cv3_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X02;4B>ve;2B>vf;2B>cn" "1X09;1X02;4B>ve;2B>vf;2B>cn"
] ]
}, },
"curve_const_vscan": { "curve_ca": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_VSCAN", "va": "CA_VOLT",
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE" "pe": "SAMPLE_RATE"
}, },
"data": [ "data": [
"1XD3;", "1X0B;",
"2B>va;", "2B>va;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe" "2B>pe"
] ]
}, },
"curve_rt": {
"type": "RIS",
"parameter": {
"va": "RT_VOLT_SET",
"pa": "GENERAL_LP_RTIA",
"pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE"
},
"data": [
"X04;",
"2B>va;",
"4b>pa;4b>0;",
"4b>0;4b>pd;",
"2B>pe"
]
},
"curve_vt": {
"type": "RIS",
"parameter": {
"pa": "GENERAL_LP_RTIA",
"pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE",
"va": "VT_MEASURE_VIN_RANGE"
},
"data": [
"X05;",
"4b>pa;4b>0;",
"4b>0;4b>pd;",
"2B>pe;",
"1B>va"
]
},
"set_para_RT_VOLT_SET": {
"type": "RIS",
"data": [
"XE2;X01;2B>RT_VOLT_SET"
]
},
"ble_instru_send": [ "ble_instru_send": [
"ble_write", "ble_write",
"_cdr('20X>ADC_VALUE_I')" "_cdr('20X>ADC_VALUE_I')"
+291 -187
View File
@@ -9,7 +9,7 @@
"minor_version_number": 1 "minor_version_number": 1
}, },
"constant": { "constant": {
"FREQ_MAX": 4294967296, "FREQ_MAX": 13333334,
"VOLT_MAX": 65536, "VOLT_MAX": 65536,
"BLE_WRITE_MAX": 255, "BLE_WRITE_MAX": 255,
"TIME_MAX": 100000 "TIME_MAX": 100000
@@ -26,17 +26,44 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CHANNEL": { "HIGHZ_TABLE": {
"derzteription": "record channels", "initial": [
"record_meta": true, 1,
"domain": "property", 1,
"value": "[0, 1, 2]" 1,
0,
1,
1,
1,
1
],
"domain": {
"list": [
100
]
},
"value": "VALUE"
}, },
"CHANNEL_LABEL": { "CTRL_HIGH_Z_15": {
"description": "channel label", "description": "ctrl highZ level",
"record_meta": true, "record_meta": true,
"domain": "property", "initial": 1,
"value": "['current', 'voltage', 'impedance']" "value": [
"On",
"Off"
],
"on_change": "set_ctrl_highZ"
},
"CYCLE_NUMBER": {
"description": "CV cycle number",
"record_meta": true,
"initial": 1,
"domain": [
65536
],
"value": {
"expression": "VALUE"
}
}, },
"SAMPLE_RATE": { "SAMPLE_RATE": {
"description": "data sampling rate", "description": "data sampling rate",
@@ -50,6 +77,12 @@
}, },
"on_change": "set_sample_rate" "on_change": "set_sample_rate"
}, },
"CHANNEL": {
"derzteription": "record channels",
"record_meta": true,
"domain": "property",
"value": "[0, 1, 2]"
},
"AMP_GAIN": { "AMP_GAIN": {
"description": "amp gain", "description": "amp gain",
"record_meta": true, "record_meta": true,
@@ -65,11 +98,58 @@
"Chronoamperometric", "Chronoamperometric",
"V-T Graph", "V-T Graph",
"R-T Graph", "R-T Graph",
"Dev Mode" "EIS constant frequency",
"Dev Mode",
"Idle"
] ]
}, },
"FREQ": { "GENERAL_HS_RTIA": {
"description": "DPV current recording period start", "description": "High speed rtia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
],
"on_change": "set_general_hs_rtia"
},
"GENERAL_LP_RTIA": {
"description": "Low power rtia gain",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_general_lp_rtia"
},
"EIS_DC_BIAS": {
"description": "DC voltage bias",
"record_meta": true,
"initial": 25000,
"domain": [
"VOLT_MAX"
],
"value": {
"expression": "VALUE"
}
},
"EIS_AC_AMP": {
"description": "AC Amplitude",
"record_meta": true,
"initial": 25,
"domain": [
2048
]
},
"EIS_FREQ": {
"description": "[start, stop] of frequency scan",
"record_meta": true, "record_meta": true,
"initial": [ "initial": [
13333333, 13333333,
@@ -82,29 +162,24 @@
}, },
"value": "VALUE" "value": "VALUE"
}, },
"FREQ_START": { "EIS_PPD": {
"description": "Start of Freq Scan", "description": "Point per decades",
"record_meta": true, "record_meta": true,
"initial": 13422819, "initial": 10,
"domain": [ "domain": [
"FREQ_MAX" 11
], ]
"value": {
"expression": "VALUE"
}
}, },
"FREQ_STOP": { "EIS_SCALE": {
"description": "End of Freq Scan", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 7, "initial": 0,
"domain": [ "value": [
"FREQ_MAX" 0,
], 1
"value": { ]
"expression": "VALUE"
}
}, },
"DELAY": { "EIS_DELAY": {
"description": "Wait x peroid before start taking measurements", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -115,19 +190,19 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AVERAGE_NUM": { "EIS_AVERAGE_NUM": {
"description": "Number of sample used for average funciton", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 8, "initial": 8,
"value": [ "value": [
2, 2,
4, 4,
8, 6,
16 8
] ]
}, },
"DC_BIAS": { "CF_DC_BIAS": {
"description": "DC voltage bias in mV", "description": "DC voltage bias",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -137,15 +212,34 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AC_AMP": { "CF_AC_AMP": {
"description": "AC Amplitude in mV", "description": "AC Amplitude",
"record_meta": true, "record_meta": true,
"initial": 25, "initial": 25,
"domain": [ "domain": [
2048 2048
] ]
}, },
"SCALE": { "CF_FREQ": {
"description": "frequency of cf",
"record_meta": true,
"initial": 13333333,
"domain": [
"FREQ_MAX"
],
"value": {
"expression": "VALUE"
}
},
"CF_PPD": {
"description": "Point per decades",
"record_meta": true,
"initial": 10,
"domain": [
11
]
},
"CF_SCALE": {
"description": "Point spacing pattern", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -154,77 +248,29 @@
1 1
] ]
}, },
"PPD": { "CF_DELAY": {
"description": "Point per decades", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 10, "initial": 0,
"domain": [ "domain": [
11 101
]
},
"RTIA": {
"description": "High speed tia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
]
},
"ADC_VALUE_I": {
"description": "ADC value current value",
"domain": "int"
},
"Scan_Rate": {
"description": "Voltage Scan Rate",
"record_meta": true,
"initial": 10000,
"domain": [
100001
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CTRL_HIGH_Z_15": { "CF_AVERAGE_NUM": {
"description": "ctrl highZ level", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 8,
"value": [ "value": [
"On", 2,
"Off" 4,
], 6,
"on_change": "set_ctrl_highZ" 8
]
}, },
"ADC_LEVEL_I_15": { "CV_E_INITIAL": {
"description": "ADC level",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_adc_gain_I"
},
"ADC_LEVEL_V_IN_15": {
"description": "ADC level",
"record_meta": true,
"initial": 3,
"value": [
"0",
"1",
"2",
"auto"
],
"on_change": "set_adc_gain_Vin"
},
"VOLT_INITIAL": {
"description": "Initial Voltage of Scan", "description": "Initial Voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
@@ -235,8 +281,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MAX": { "CV_E1": {
"description": "Max Voltage of Scan", "description": "First voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -246,8 +292,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MIN": { "CV_E2": {
"description": "Min Voltage of Scan", "description": "Second voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -257,19 +303,19 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CYCLE_NUMBER": { "CV_SCAN_RATE": {
"description": "CV cycle number", "description": "Voltage scan rate",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 10000,
"domain": [ "domain": [
65536 100001
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_VSCAN": { "CA_VOLT": {
"description": "Voltage of VScan", "description": "Voltage of ca",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -279,7 +325,7 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"MEASURE_VIN_RANGE": { "VT_MEASURE_VIN_RANGE": {
"description": "measure range of Vin", "description": "measure range of Vin",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -290,7 +336,7 @@
"auto" "auto"
] ]
}, },
"DAC_VOLT": { "RT_VOLT_SET": {
"description": "DAC output Voltage", "description": "DAC output Voltage",
"record_meta": true, "record_meta": true,
"initial": 37500, "initial": 37500,
@@ -299,7 +345,12 @@
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} },
"on_change": "set_para_RT_VOLT_SET"
},
"ADC_VALUE_I": {
"description": "ADC value current value",
"domain": "int"
}, },
"BLE_WRITE": { "BLE_WRITE": {
"description": "send msg to elite", "description": "send msg to elite",
@@ -321,29 +372,26 @@
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"7": "idle",
"*": "start_data" "*": "start_data"
} }
} }
], ],
"idle": [
"_idle()"
],
"start_data": [ "start_data": [
"data_format_cali", "data_format_cali",
"_notify(True)", "_notify(True)",
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"1": "set_adc_gain_I", "0": "set_general_hs_rtia",
"2": "set_adc_gain_I", "1": "set_general_lp_rtia",
"3": "set_adc_gain_I", "2": "set_general_lp_rtia",
"4": "set_adc_gain_I" "3": "set_general_lp_rtia",
} "4": "set_general_lp_rtia",
}, "5": "set_general_hs_rtia"
{
"expression": "MODE",
"when": {
"1": "set_adc_gain_Vin",
"2": "set_adc_gain_Vin",
"3": "set_adc_gain_Vin",
"4": "set_adc_gain_Vin"
} }
}, },
{ {
@@ -351,16 +399,25 @@
"when": { "when": {
"0": "curve_eis", "0": "curve_eis",
"1": "curve_cv3", "1": "curve_cv3",
"2": "curve_const_vscan", "2": "curve_ca",
"3": "curve_vt", "3": "curve_vt",
"4": "curve_zt" "4": "curve_rt",
"5": "curve_cf"
} }
}, },
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"0": "curve_eis_para2", "0": "curve_eis_para2",
"1": "curve_cv3_para2" "1": "curve_cv3_para2",
"5": "curve_cf_para2"
}
},
{
"expression": "MODE",
"when": {
"0": "curve_eis_mode",
"5": "curve_cf_mode"
} }
}, },
"_sync(True)", "_sync(True)",
@@ -380,6 +437,18 @@
"data_format_cali": [ "data_format_cali": [
"_data_format_cali('EISZeroOne')" "_data_format_cali('EISZeroOne')"
], ],
"set_general_hs_rtia": {
"type": "RIS",
"data": [
"1XFF;1X70;1B>GENERAL_HS_RTIA"
]
},
"set_general_lp_rtia": {
"type": "RIS",
"data": [
"1XFF;1X71;1B>GENERAL_LP_RTIA"
]
},
"set_sample_rate": { "set_sample_rate": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
@@ -389,116 +458,146 @@
"XE0;2B>va" "XE0;2B>va"
] ]
}, },
"set_adc_gain_I": {
"type": "RIS",
"data": [
"XE1;X05;B>ADC_LEVEL_I_15"
]
},
"set_adc_gain_Vin": {
"type": "RIS",
"data": [
"XE1;X06;B>ADC_LEVEL_V_IN_15"
]
},
"set_ctrl_highZ": { "set_ctrl_highZ": {
"type": "RIS", "type": "RIS",
"data": [ "data": [
"XE1;X03;B>CTRL_HIGH_Z_15" "1XFF;1X72;1B>CTRL_HIGH_Z_15"
] ]
}, },
"curve_eis": { "curve_eis": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X01;4B>fa;4B>fb;2B>dp" "1X12;1X01;4B>fa;4B>fb;2B>dp"
] ]
}, },
"curve_eis_para2": { "curve_eis_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp" "1X12;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_eis_mode": {
"type": "RIS",
"data": [
"1X12;1XFF"
]
},
"curve_cf": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X01;4B>fa;4B>0;2B>dp"
]
},
"curve_cf_para2": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_cf_mode": {
"type": "RIS",
"data": [
"1X13;1XFF"
] ]
}, },
"curve_cv3": { "curve_cv3": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X01;2B>va;2B>vb;2B>vc;" "1X09;1X01;2B>va;2B>vb;2B>vc;"
] ]
}, },
"curve_cv3_para2": { "curve_cv3_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X02;4B>ve;2B>vf;2B>cn" "1X09;1X02;4B>ve;2B>vf;2B>cn"
] ]
}, },
"curve_const_vscan": { "curve_ca": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_VSCAN", "va": "CA_VOLT",
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE" "pe": "SAMPLE_RATE"
}, },
"data": [ "data": [
"1XD3;", "1X0B;",
"2B>va;", "2B>va;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe" "2B>pe"
] ]
}, },
"curve_zt": { "curve_rt": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "DAC_VOLT", "va": "RT_VOLT_SET",
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE" "pe": "SAMPLE_RATE"
}, },
"data": [ "data": [
"X04;", "X04;",
"2B>va;", "2B>va;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe" "2B>pe"
] ]
@@ -506,20 +605,25 @@
"curve_vt": { "curve_vt": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE", "pe": "SAMPLE_RATE",
"va": "MEASURE_VIN_RANGE" "va": "VT_MEASURE_VIN_RANGE"
}, },
"data": [ "data": [
"X05;", "X05;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe;", "2B>pe;",
"1B>va" "1B>va"
] ]
}, },
"set_para_RT_VOLT_SET": {
"type": "RIS",
"data": [
"XE2;X01;2B>RT_VOLT_SET"
]
},
"ble_instru_send": [ "ble_instru_send": [
"ble_write", "ble_write",
"_cdr('20X>ADC_VALUE_I')" "_cdr('20X>ADC_VALUE_I')"
@@ -9,7 +9,7 @@
"minor_version_number": 2 "minor_version_number": 2
}, },
"constant": { "constant": {
"FREQ_MAX": 4294967296, "FREQ_MAX": 13333334,
"VOLT_MAX": 65536, "VOLT_MAX": 65536,
"BLE_WRITE_MAX": 255, "BLE_WRITE_MAX": 255,
"TIME_MAX": 100000 "TIME_MAX": 100000
@@ -26,17 +26,44 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CHANNEL": { "HIGHZ_TABLE": {
"derzteription": "record channels", "initial": [
"record_meta": true, 1,
"domain": "property", 1,
"value": "[0, 1, 2]" 1,
0,
1,
1,
1,
1
],
"domain": {
"list": [
100
]
},
"value": "VALUE"
}, },
"CHANNEL_LABEL": { "CTRL_HIGH_Z_15": {
"description": "channel label", "description": "ctrl highZ level",
"record_meta": true, "record_meta": true,
"domain": "property", "initial": 1,
"value": "['current', 'voltage', 'impedance']" "value": [
"On",
"Off"
],
"on_change": "set_ctrl_highZ"
},
"CYCLE_NUMBER": {
"description": "CV cycle number",
"record_meta": true,
"initial": 1,
"domain": [
65536
],
"value": {
"expression": "VALUE"
}
}, },
"SAMPLE_RATE": { "SAMPLE_RATE": {
"description": "data sampling rate", "description": "data sampling rate",
@@ -50,6 +77,12 @@
}, },
"on_change": "set_sample_rate" "on_change": "set_sample_rate"
}, },
"CHANNEL": {
"derzteription": "record channels",
"record_meta": true,
"domain": "property",
"value": "[0, 1, 2]"
},
"AMP_GAIN": { "AMP_GAIN": {
"description": "amp gain", "description": "amp gain",
"record_meta": true, "record_meta": true,
@@ -64,11 +97,59 @@
"Cyclic Voltammetry", "Cyclic Voltammetry",
"Chronoamperometric", "Chronoamperometric",
"V-T Graph", "V-T Graph",
"Dev Mode" "R-T Graph",
"EIS constant frequency",
"Dev Mode",
"Idle"
] ]
}, },
"FREQ": { "GENERAL_HS_RTIA": {
"description": "DPV current recording period start", "description": "High speed rtia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
],
"on_change": "set_general_hs_rtia"
},
"GENERAL_LP_RTIA": {
"description": "Low power rtia gain",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_general_lp_rtia"
},
"EIS_DC_BIAS": {
"description": "DC voltage bias",
"record_meta": true,
"initial": 25000,
"domain": [
"VOLT_MAX"
],
"value": {
"expression": "VALUE"
}
},
"EIS_AC_AMP": {
"description": "AC Amplitude",
"record_meta": true,
"initial": 25,
"domain": [
2048
]
},
"EIS_FREQ": {
"description": "[start, stop] of frequency scan",
"record_meta": true, "record_meta": true,
"initial": [ "initial": [
13333333, 13333333,
@@ -81,29 +162,24 @@
}, },
"value": "VALUE" "value": "VALUE"
}, },
"FREQ_START": { "EIS_PPD": {
"description": "Start of Freq Scan", "description": "Point per decades",
"record_meta": true, "record_meta": true,
"initial": 13422819, "initial": 10,
"domain": [ "domain": [
"FREQ_MAX" 11
], ]
"value": {
"expression": "VALUE"
}
}, },
"FREQ_STOP": { "EIS_SCALE": {
"description": "End of Freq Scan", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 7, "initial": 0,
"domain": [ "value": [
"FREQ_MAX" 0,
], 1
"value": { ]
"expression": "VALUE"
}
}, },
"DELAY": { "EIS_DELAY": {
"description": "Wait x peroid before start taking measurements", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -114,19 +190,19 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AVERAGE_NUM": { "EIS_AVERAGE_NUM": {
"description": "Number of sample used for average funciton", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 8, "initial": 8,
"value": [ "value": [
2, 2,
4, 4,
8, 6,
16 8
] ]
}, },
"DC_BIAS": { "CF_DC_BIAS": {
"description": "DC voltage bias in mV", "description": "DC voltage bias",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -136,15 +212,34 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"AC_AMP": { "CF_AC_AMP": {
"description": "AC Amplitude in mV", "description": "AC Amplitude",
"record_meta": true, "record_meta": true,
"initial": 25, "initial": 25,
"domain": [ "domain": [
2048 2048
] ]
}, },
"SCALE": { "CF_FREQ": {
"description": "frequency of cf",
"record_meta": true,
"initial": 13333333,
"domain": [
"FREQ_MAX"
],
"value": {
"expression": "VALUE"
}
},
"CF_PPD": {
"description": "Point per decades",
"record_meta": true,
"initial": 10,
"domain": [
11
]
},
"CF_SCALE": {
"description": "Point spacing pattern", "description": "Point spacing pattern",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -153,77 +248,29 @@
1 1
] ]
}, },
"PPD": { "CF_DELAY": {
"description": "Point per decades", "description": "Wait x peroid before start taking measurements",
"record_meta": true, "record_meta": true,
"initial": 10, "initial": 0,
"domain": [ "domain": [
11 101
]
},
"RTIA": {
"description": "High speed tia gain",
"record_meta": true,
"initial": 4,
"value": [
0,
1,
2,
3,
4
]
},
"ADC_VALUE_I": {
"description": "ADC value current value",
"domain": "int"
},
"Scan_Rate": {
"description": "Voltage Scan Rate",
"record_meta": true,
"initial": 10000,
"domain": [
100001
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CTRL_HIGH_Z_15": { "CF_AVERAGE_NUM": {
"description": "ctrl highZ level", "description": "Number of sample used for average funciton",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 8,
"value": [ "value": [
"On", 2,
"Off" 4,
], 6,
"on_change": "set_ctrl_highZ" 8
]
}, },
"ADC_LEVEL_I_15": { "CV_E_INITIAL": {
"description": "ADC level",
"record_meta": true,
"initial": 4,
"value": [
"0",
"1",
"2",
"3",
"auto"
],
"on_change": "set_adc_gain_I"
},
"ADC_LEVEL_V_IN_15": {
"description": "ADC level",
"record_meta": true,
"initial": 3,
"value": [
"0",
"1",
"2",
"auto"
],
"on_change": "set_adc_gain_Vin"
},
"VOLT_INITIAL": {
"description": "Initial Voltage of Scan", "description": "Initial Voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
@@ -234,8 +281,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MAX": { "CV_E1": {
"description": "Max Voltage of Scan", "description": "First voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -245,8 +292,8 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_MIN": { "CV_E2": {
"description": "Min Voltage of Scan", "description": "Second voltage of Scan",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -256,19 +303,19 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"CYCLE_NUMBER": { "CV_SCAN_RATE": {
"description": "CV cycle number", "description": "Voltage scan rate",
"record_meta": true, "record_meta": true,
"initial": 1, "initial": 10000,
"domain": [ "domain": [
65536 100001
], ],
"value": { "value": {
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"VOLT_VSCAN": { "CA_VOLT": {
"description": "Voltage of VScan", "description": "Voltage of ca",
"record_meta": true, "record_meta": true,
"initial": 25000, "initial": 25000,
"domain": [ "domain": [
@@ -278,7 +325,7 @@
"expression": "VALUE" "expression": "VALUE"
} }
}, },
"MEASURE_VIN_RANGE": { "VT_MEASURE_VIN_RANGE": {
"description": "measure range of Vin", "description": "measure range of Vin",
"record_meta": true, "record_meta": true,
"initial": 0, "initial": 0,
@@ -289,6 +336,22 @@
"auto" "auto"
] ]
}, },
"RT_VOLT_SET": {
"description": "DAC output Voltage",
"record_meta": true,
"initial": 37500,
"domain": [
65536
],
"value": {
"expression": "VALUE"
},
"on_change": "set_para_RT_VOLT_SET"
},
"ADC_VALUE_I": {
"description": "ADC value current value",
"domain": "int"
},
"BLE_WRITE": { "BLE_WRITE": {
"description": "send msg to elite", "description": "send msg to elite",
"domain": { "domain": {
@@ -309,27 +372,26 @@
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"7": "idle",
"*": "start_data" "*": "start_data"
} }
} }
], ],
"idle": [
"_idle()"
],
"start_data": [ "start_data": [
"data_format_cali", "data_format_cali",
"_notify(True)", "_notify(True)",
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"1": "set_adc_gain_I", "0": "set_general_hs_rtia",
"2": "set_adc_gain_I", "1": "set_general_lp_rtia",
"3": "set_adc_gain_I" "2": "set_general_lp_rtia",
} "3": "set_general_lp_rtia",
}, "4": "set_general_lp_rtia",
{ "5": "set_general_hs_rtia"
"expression": "MODE",
"when": {
"1": "set_adc_gain_Vin",
"2": "set_adc_gain_Vin",
"3": "set_adc_gain_Vin"
} }
}, },
{ {
@@ -337,15 +399,25 @@
"when": { "when": {
"0": "curve_eis", "0": "curve_eis",
"1": "curve_cv3", "1": "curve_cv3",
"2": "curve_const_vscan", "2": "curve_ca",
"3": "curve_vt" "3": "curve_vt",
"4": "curve_rt",
"5": "curve_cf"
} }
}, },
{ {
"expression": "MODE", "expression": "MODE",
"when": { "when": {
"0": "curve_eis_para2", "0": "curve_eis_para2",
"1": "curve_cv3_para2" "1": "curve_cv3_para2",
"5": "curve_cf_para2"
}
},
{
"expression": "MODE",
"when": {
"0": "curve_eis_mode",
"5": "curve_cf_mode"
} }
}, },
"_sync(True)", "_sync(True)",
@@ -365,6 +437,18 @@
"data_format_cali": [ "data_format_cali": [
"_data_format_cali('EISZeroOne')" "_data_format_cali('EISZeroOne')"
], ],
"set_general_hs_rtia": {
"type": "RIS",
"data": [
"1XFF;1X70;1B>GENERAL_HS_RTIA"
]
},
"set_general_lp_rtia": {
"type": "RIS",
"data": [
"1XFF;1X71;1B>GENERAL_LP_RTIA"
]
},
"set_sample_rate": { "set_sample_rate": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
@@ -374,99 +458,146 @@
"XE0;2B>va" "XE0;2B>va"
] ]
}, },
"set_adc_gain_I": {
"type": "RIS",
"data": [
"XE1;X05;B>ADC_LEVEL_I_15"
]
},
"set_adc_gain_Vin": {
"type": "RIS",
"data": [
"XE1;X06;B>ADC_LEVEL_V_IN_15"
]
},
"set_ctrl_highZ": { "set_ctrl_highZ": {
"type": "RIS", "type": "RIS",
"data": [ "data": [
"XE1;X03;B>CTRL_HIGH_Z_15" "1XFF;1X72;1B>CTRL_HIGH_Z_15"
] ]
}, },
"curve_eis": { "curve_eis": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X01;4B>fa;4B>fb;2B>dp" "1X12;1X01;4B>fa;4B>fb;2B>dp"
] ]
}, },
"curve_eis_para2": { "curve_eis_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"fa": "FREQ[0]", "fa": "EIS_FREQ[0]",
"fb": "FREQ[1]", "fb": "EIS_FREQ[1]",
"dp": "DELAY", "dp": "EIS_DELAY",
"dc": "DC_BIAS", "dc": "EIS_DC_BIAS",
"am": "AC_AMP", "am": "EIS_AC_AMP",
"an": "AVERAGE_NUM", "an": "EIS_AVERAGE_NUM",
"rt": "RTIA", "rt": "GENERAL_HS_RTIA",
"pp": "PPD", "pp": "EIS_PPD",
"sp": "SCALE" "sp": "EIS_SCALE"
}, },
"data": [ "data": [
"1XD1;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp" "1X12;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_eis_mode": {
"type": "RIS",
"data": [
"1X12;1XFF"
]
},
"curve_cf": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X01;4B>fa;4B>0;2B>dp"
]
},
"curve_cf_para2": {
"type": "RIS",
"parameter": {
"fa": "CF_FREQ",
"dp": "CF_DELAY",
"dc": "CF_DC_BIAS",
"am": "CF_AC_AMP",
"an": "CF_AVERAGE_NUM",
"rt": "GENERAL_HS_RTIA",
"pp": "CF_PPD",
"sp": "CF_SCALE"
},
"data": [
"1X13;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
]
},
"curve_cf_mode": {
"type": "RIS",
"data": [
"1X13;1XFF"
] ]
}, },
"curve_cv3": { "curve_cv3": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X01;2B>va;2B>vb;2B>vc;" "1X09;1X01;2B>va;2B>vb;2B>vc;"
] ]
}, },
"curve_cv3_para2": { "curve_cv3_para2": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_INITIAL", "va": "CV_E_INITIAL",
"vb": "VOLT_MAX", "vb": "CV_E1",
"vc": "VOLT_MIN", "vc": "CV_E2",
"ve": "Scan_Rate", "ve": "CV_SCAN_RATE",
"vf": "SAMPLE_RATE", "vf": "SAMPLE_RATE",
"cn": "CYCLE_NUMBER" "cn": "CYCLE_NUMBER"
}, },
"data": [ "data": [
"1XD2;1X02;4B>ve;2B>vf;2B>cn" "1X09;1X02;4B>ve;2B>vf;2B>cn"
] ]
}, },
"curve_const_vscan": { "curve_ca": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"va": "VOLT_VSCAN", "va": "CA_VOLT",
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE" "pe": "SAMPLE_RATE"
}, },
"data": [ "data": [
"1XD3;", "1X0B;",
"2B>va;", "2B>va;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;",
"2B>pe"
]
},
"curve_rt": {
"type": "RIS",
"parameter": {
"va": "RT_VOLT_SET",
"pa": "GENERAL_LP_RTIA",
"pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE"
},
"data": [
"X04;",
"2B>va;",
"4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe" "2B>pe"
] ]
@@ -474,20 +605,25 @@
"curve_vt": { "curve_vt": {
"type": "RIS", "type": "RIS",
"parameter": { "parameter": {
"pa": "ADC_LEVEL_I_15", "pa": "GENERAL_LP_RTIA",
"pb": "ADC_LEVEL_V_IN_15",
"pd": "CTRL_HIGH_Z_15", "pd": "CTRL_HIGH_Z_15",
"pe": "SAMPLE_RATE", "pe": "SAMPLE_RATE",
"va": "MEASURE_VIN_RANGE" "va": "VT_MEASURE_VIN_RANGE"
}, },
"data": [ "data": [
"X05;", "X05;",
"4b>pa;4b>pb;", "4b>pa;4b>0;",
"4b>0;4b>pd;", "4b>0;4b>pd;",
"2B>pe;", "2B>pe;",
"1B>va" "1B>va"
] ]
}, },
"set_para_RT_VOLT_SET": {
"type": "RIS",
"data": [
"XE2;X01;2B>RT_VOLT_SET"
]
},
"ble_instru_send": [ "ble_instru_send": [
"ble_write", "ble_write",
"_cdr('20X>ADC_VALUE_I')" "_cdr('20X>ADC_VALUE_I')"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
# install python module numpy
sudo apt-get install libatlas-base-dev
sudo apt-get install python3-numpy
# install python module SQLAlchemy
pip3 install SQLAlchemy
# add column cycle in projects
sudo su -c "psql -d postgres -c \"ALTER TABLE projects ADD COLUMN IF NOT EXISTS cycle JSONB;\"" postgres
# add column project in recording_data_metas
sudo su -c "psql -d postgres -c \"ALTER TABLE recording_data_metas ADD COLUMN IF NOT EXISTS project Int4;\"" postgres