Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c894bf7c6f | |||
| 0b7a650b95 | |||
| bffaff310b | |||
| 06bf262d59 | |||
| b2f9d98336 | |||
| a6b523404b | |||
| 6c232b3b07 | |||
| cfc2bf1d83 | |||
| 2b60e68197 | |||
| efb5e9aeb6 | |||
| b4d88a0e67 | |||
| 6029ff6fe1 | |||
| 6efc5e1097 | |||
| a23394d3d1 | |||
| 512c80af40 |
@@ -6,6 +6,8 @@ from datetime import datetime
|
|||||||
|
|
||||||
from biopro.recording import RecordingData, RecordingFileDataFormat
|
from biopro.recording import RecordingData, RecordingFileDataFormat
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
# from biopro.util.console import hex_line
|
# from biopro.util.console import hex_line
|
||||||
|
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
@@ -1401,39 +1403,33 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
|||||||
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]/1e4)
|
||||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[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]/1e4)
|
||||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[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]/1e4)
|
||||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[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]/1e4)
|
||||||
hsrtia_d.append(struct.unpack('>B', cali_coeff[index+13:index+14])[0])
|
|
||||||
|
|
||||||
# hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0])
|
# hsrtia_a.append(struct.unpack('>I', cali_coeff[index+1:index+5])[0])
|
||||||
# hsrtia_b.append(struct.unpack('>I', cali_coeff[index+5:index+9])[0]/1e6)
|
# hsrtia_b.append(struct.unpack('>I', cali_coeff[index+5:index+9])[0]/1e6)
|
||||||
# hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e5)
|
# hsrtia_c.append(struct.unpack('>I', cali_coeff[index+9:index+13])[0]/1e5)
|
||||||
# hsrtia_d.append(struct.unpack('>I', cali_coeff[index+13:index+17])[0]/1e6)
|
|
||||||
|
|
||||||
# print('cutoff_freq', cutoff_freq)
|
# print('cutoff_freq', cutoff_freq)
|
||||||
# print('hsrtia_a', hsrtia_a)
|
# print('hsrtia_a', hsrtia_a)
|
||||||
# print('hsrtia_b', hsrtia_b)
|
# print('hsrtia_b', hsrtia_b)
|
||||||
# print('hsrtia_c', hsrtia_c)
|
# print('hsrtia_c', hsrtia_c)
|
||||||
# print('hsrtia_d', hsrtia_d)
|
|
||||||
# print('phase_para_a', phase_para_a)
|
# print('phase_para_a', phase_para_a)
|
||||||
# print('phase_para_b', phase_para_b)
|
# print('phase_para_b', phase_para_b)
|
||||||
|
|
||||||
@@ -1590,10 +1586,10 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
|||||||
|
|
||||||
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): #EIS Mode
|
||||||
ret.append_data(3, cycle_number)
|
|
||||||
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]
|
||||||
|
ret.append_data(3, cycle_number)
|
||||||
ret.append_data(4, round(imag_after_cal)) #Z_imag [Ohm]
|
ret.append_data(4, round(imag_after_cal)) #Z_imag [Ohm]
|
||||||
ret.append_data(5, round(real_after_cal)) #Z_real [Ohm]
|
ret.append_data(5, round(real_after_cal)) #Z_real [Ohm]
|
||||||
ret.append_data(6, round(impedance)) #Impedance [Ohm]
|
ret.append_data(6, round(impedance)) #Impedance [Ohm]
|
||||||
@@ -1602,10 +1598,10 @@ class EISZeroOneDataDecoder(RecDataDecoder):
|
|||||||
ret.append_data(9, gain) #Gain Level
|
ret.append_data(9, gain) #Gain Level
|
||||||
|
|
||||||
else: #CV Mode
|
else: #CV Mode
|
||||||
ret.append_data(3, cycle_number)
|
|
||||||
ret.append_data(0, ch1) #Iin [nA]
|
ret.append_data(0, ch1) #Iin [nA]
|
||||||
ret.append_data(1, ch2) #Vset [nV]
|
ret.append_data(1, ch2) #Vset [nV]
|
||||||
ret.append_data(2, ch3) #Vout [nV]
|
ret.append_data(2, ch3) #Vout [nV]
|
||||||
|
ret.append_data(3, cycle_number)
|
||||||
|
|
||||||
if cycle_number != self._cycle_number:
|
if cycle_number != self._cycle_number:
|
||||||
# notify cycle_number change
|
# notify cycle_number change
|
||||||
|
|||||||
@@ -653,15 +653,9 @@ class DeviceInstruction:
|
|||||||
|
|
||||||
VIS_CC_ZERO = 0x40
|
VIS_CC_ZERO = 0x40
|
||||||
|
|
||||||
VIS_ASK = 0x30
|
|
||||||
"""ask in virtual instruction"""
|
|
||||||
|
|
||||||
VIS_STI = 0xC0
|
VIS_STI = 0xC0
|
||||||
"""stimulation on virtual instruction"""
|
"""stimulation on virtual instruction"""
|
||||||
|
|
||||||
VIS_FUH = 0x90
|
|
||||||
"""flush virtual instruction"""
|
|
||||||
|
|
||||||
VIS_INT = 0x60
|
VIS_INT = 0x60
|
||||||
"""interrupt virtual instruction"""
|
"""interrupt virtual instruction"""
|
||||||
|
|
||||||
@@ -750,8 +744,6 @@ class DeviceCommonInstruction:
|
|||||||
return '_sync(False)', '_notify(False)', 'VIS_INT'
|
return '_sync(False)', '_notify(False)', 'VIS_INT'
|
||||||
elif instruction == cls.CLOSE:
|
elif instruction == cls.CLOSE:
|
||||||
return '_sync(False)', '_notify(False)', 'VIS_INT'
|
return '_sync(False)', '_notify(False)', 'VIS_INT'
|
||||||
elif instruction == cls.FLUSH:
|
|
||||||
return 'VIS_FUH',
|
|
||||||
elif instruction == cls.CALL:
|
elif instruction == cls.CALL:
|
||||||
return 'VIS_CAL',
|
return 'VIS_CAL',
|
||||||
elif instruction == cls.VIS_DEVICE_DETECT:
|
elif instruction == cls.VIS_DEVICE_DETECT:
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from biopro.util.text import part_suffix
|
|||||||
from . import *
|
from . import *
|
||||||
from .expression import *
|
from .expression import *
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
class DeviceParameterError(RuntimeError):
|
class DeviceParameterError(RuntimeError):
|
||||||
__slots__ = ()
|
__slots__ = ()
|
||||||
@@ -309,6 +310,8 @@ class ParameterValueDomain(ParameterDomain, metaclass=abc.ABCMeta):
|
|||||||
return f
|
return f
|
||||||
|
|
||||||
def valid_para(self, value: Any) -> bool:
|
def valid_para(self, value: Any) -> bool:
|
||||||
|
if isinstance(value, list):
|
||||||
|
return True
|
||||||
f, t = self.range
|
f, t = self.range
|
||||||
return f <= float(value) < t
|
return f <= float(value) < t
|
||||||
|
|
||||||
@@ -489,8 +492,12 @@ class ParameterCollectionValueOperator(metaclass=abc.ABCMeta):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse(cls, expr: Union[int, str]) -> 'ParameterCollectionValueOperator':
|
def parse(cls, expr: Union[int, str]) -> 'ParameterCollectionValueOperator':
|
||||||
|
# parse epression then create value_operator
|
||||||
if isinstance(expr, int):
|
if isinstance(expr, int):
|
||||||
return SingleValueOperator(None, expr)
|
return SingleValueOperator(None, expr)
|
||||||
|
|
||||||
|
elif isinstance(expr, list):
|
||||||
|
return CollectValueOperator((0, len(expr)), expr)
|
||||||
|
|
||||||
elif expr == '*':
|
elif expr == '*':
|
||||||
return AddAllValueOperator
|
return AddAllValueOperator
|
||||||
@@ -498,6 +505,10 @@ class ParameterCollectionValueOperator(metaclass=abc.ABCMeta):
|
|||||||
elif expr == ':=':
|
elif expr == ':=':
|
||||||
return CollectValueOperator((None, None), [])
|
return CollectValueOperator((None, None), [])
|
||||||
|
|
||||||
|
elif '[' in expr and ']' in expr:
|
||||||
|
v = json.loads(expr)
|
||||||
|
return CollectValueOperator((0, len(v)), v)
|
||||||
|
|
||||||
elif '=' in expr:
|
elif '=' in expr:
|
||||||
a, v = part_suffix(expr, '=')
|
a, v = part_suffix(expr, '=')
|
||||||
|
|
||||||
@@ -508,6 +519,7 @@ class ParameterCollectionValueOperator(metaclass=abc.ABCMeta):
|
|||||||
return CollectValueOperator((None, None), v)
|
return CollectValueOperator((None, None), v)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
# get list length (old way)
|
||||||
a, b = part_suffix(a, ':')
|
a, b = part_suffix(a, ':')
|
||||||
a = int(a) if len(a) else None
|
a = int(a) if len(a) else None
|
||||||
b = int(b) if len(b) else None
|
b = int(b) if len(b) else None
|
||||||
@@ -602,8 +614,8 @@ class ParameterCollectionDomain(ParameterDomain, metaclass=abc.ABCMeta):
|
|||||||
def __init__(self, domain: ParameterDomain):
|
def __init__(self, domain: ParameterDomain):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
if isinstance(domain, ParameterCollectionDomain):
|
# if isinstance(domain, ParameterCollectionDomain):
|
||||||
raise RuntimeError('cannot compose with parameter collection domain')
|
# raise RuntimeError('cannot compose with parameter collection domain')
|
||||||
|
|
||||||
self._domain = domain
|
self._domain = domain
|
||||||
|
|
||||||
@@ -725,6 +737,7 @@ class ParameterListDomain(ParameterCollectionDomain):
|
|||||||
if oper == AddAllValueOperator:
|
if oper == AddAllValueOperator:
|
||||||
raise ValueError("list parameter cannot accept '*' (all) value")
|
raise ValueError("list parameter cannot accept '*' (all) value")
|
||||||
|
|
||||||
|
# d: domain, sz: lsit length, i: slice(a, b), v: list value
|
||||||
d = self.element_domain
|
d = self.element_domain
|
||||||
sz = len(target)
|
sz = len(target)
|
||||||
i = oper.index(sz)
|
i = oper.index(sz)
|
||||||
|
|||||||
@@ -119,7 +119,10 @@ class DeviceConfigurationEncoder:
|
|||||||
e.write(b'L\0')
|
e.write(b'L\0')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
parameter_type = cls._value_type(value[0])
|
parameter_type = cls._value_type(max(value))
|
||||||
|
for v in value:
|
||||||
|
if isinstance(v, int) and v < 0:
|
||||||
|
parameter_type = parameter_type.lower()
|
||||||
e.write(b'L')
|
e.write(b'L')
|
||||||
e.write(parameter_type.encode())
|
e.write(parameter_type.encode())
|
||||||
e.u8(sz)
|
e.u8(sz)
|
||||||
@@ -153,7 +156,8 @@ class DeviceConfigurationEncoder:
|
|||||||
if isinstance(value, bool):
|
if isinstance(value, bool):
|
||||||
e.u8(1 if value else 0)
|
e.u8(1 if value else 0)
|
||||||
|
|
||||||
elif isinstance(value, str):
|
elif isinstance(value, str) or isinstance(value, list):
|
||||||
|
value = str(value)
|
||||||
e.encode_string(value)
|
e.encode_string(value)
|
||||||
|
|
||||||
elif isinstance(value, int):
|
elif isinstance(value, int):
|
||||||
@@ -170,7 +174,7 @@ class DeviceConfigurationEncoder:
|
|||||||
if isinstance(value, bool):
|
if isinstance(value, bool):
|
||||||
return '?'
|
return '?'
|
||||||
|
|
||||||
elif isinstance(value, str):
|
elif isinstance(value, str) or isinstance(value, list):
|
||||||
return 'p'
|
return 'p'
|
||||||
|
|
||||||
elif isinstance(value, int):
|
elif isinstance(value, int):
|
||||||
|
|||||||
@@ -510,9 +510,10 @@ class DeviceParameter(JsonSerialize):
|
|||||||
:param para: parameter name
|
:param para: parameter name
|
||||||
:param oper: operator expression
|
:param oper: operator expression
|
||||||
"""
|
"""
|
||||||
|
# parse operator return CollectValueOperator instance
|
||||||
if not isinstance(oper, ParameterCollectionValueOperator):
|
if not isinstance(oper, ParameterCollectionValueOperator):
|
||||||
oper = ParameterCollectionValueOperator.parse(oper)
|
oper = ParameterCollectionValueOperator.parse(oper)
|
||||||
|
|
||||||
table = self._library.parameter_table
|
table = self._library.parameter_table
|
||||||
info = table[para]
|
info = table[para]
|
||||||
domain = info.domain
|
domain = info.domain
|
||||||
@@ -528,6 +529,7 @@ class DeviceParameter(JsonSerialize):
|
|||||||
old = list(target)
|
old = list(target)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# replace target with new oper
|
||||||
domain.oper_para(target, oper, self._context)
|
domain.oper_para(target, oper, self._context)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
raise IllegalParameterValueError(para, str(oper)) from e
|
raise IllegalParameterValueError(para, str(oper)) from e
|
||||||
@@ -1012,6 +1014,10 @@ class CompletedDevice(Device):
|
|||||||
def device_id(self) -> int:
|
def device_id(self) -> int:
|
||||||
return self._device_id
|
return self._device_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def memory_board(self) -> int:
|
||||||
|
return self._device_id
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def device_name(self) -> str:
|
def device_name(self) -> str:
|
||||||
return self._device.device_name
|
return self._device.device_name
|
||||||
@@ -1274,15 +1280,20 @@ class CompletedDevice(Device):
|
|||||||
|
|
||||||
def as_json(self) -> JSON_OBJECT:
|
def as_json(self) -> JSON_OBJECT:
|
||||||
return {
|
return {
|
||||||
|
'id': self.device_id,
|
||||||
|
'name': self.device_name,
|
||||||
|
'status': self._status,
|
||||||
'device_id': self.device_id,
|
'device_id': self.device_id,
|
||||||
'device_name': self.device_name,
|
'device_name': self.device_name,
|
||||||
'device_address': list(self.mac_address),
|
'device_address': list(self.mac_address),
|
||||||
'device_status': self._status,
|
'device_status': self._status,
|
||||||
|
'mac_address': self.mac_address_in_str,
|
||||||
|
'memory_board': self.memory_board,
|
||||||
|
'serial_number': self.serial_number.as_json(),
|
||||||
|
'version': self.device_version,
|
||||||
'battery': self.battery,
|
'battery': self.battery,
|
||||||
'parent': self.parent,
|
'parent': self.parent,
|
||||||
'recording_file_name': self.recording_file_name,
|
'recording_file_name': self.recording_file_name,
|
||||||
'device_version': self.device_version,
|
|
||||||
'serial_number': self.serial_number.as_json(),
|
|
||||||
'library_name': self._library.name,
|
'library_name': self._library.name,
|
||||||
'library_version': str(self._library.version),
|
'library_version': str(self._library.version),
|
||||||
'configuration': self.configuration.as_json(list_hide=True),
|
'configuration': self.configuration.as_json(list_hide=True),
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface):
|
|||||||
|
|
||||||
def set_pin_mem_req(self, value: bool):
|
def set_pin_mem_req(self, value: bool):
|
||||||
channel = self.select
|
channel = self.select
|
||||||
if self._pin_mem_req_value[channel] == value:
|
# if self._pin_mem_req_value[channel] == value:
|
||||||
print('last_req_sig[channel] == value', channel, self._pin_mem_req_value[channel], value, datetime.now())
|
# print('last_req_sig[channel] == value', channel, self._pin_mem_req_value[channel], value, datetime.now())
|
||||||
self.pin_mem_req.output(value)
|
self.pin_mem_req.output(value)
|
||||||
self._pin_mem_req_value[channel] = value
|
self._pin_mem_req_value[channel] = value
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ from statistics import mean
|
|||||||
import random
|
import random
|
||||||
# from numba import jit
|
# from numba import jit
|
||||||
|
|
||||||
|
from .lttb import largest_triangle_three_buckets
|
||||||
|
import math
|
||||||
|
|
||||||
|
from scipy import signal
|
||||||
|
|
||||||
from copy import copy
|
from copy import copy
|
||||||
|
|
||||||
def json_stringify(o) -> str:
|
def json_stringify(o) -> str:
|
||||||
@@ -1015,7 +1020,7 @@ class RecordingFileWriter:
|
|||||||
'_mini_scale_list', '_time_real_time', '_data_rl', '_data_db',
|
'_mini_scale_list', '_time_real_time', '_data_rl', '_data_db',
|
||||||
'_raw_save', '_mini_save', '_data_time_ch', '_data_value_ch_for_rl',
|
'_raw_save', '_mini_save', '_data_time_ch', '_data_value_ch_for_rl',
|
||||||
'_data_time_ch_for_rl', '_device_id', '_send_data', '_data_mqtt_ch', '_id_db_save', '_raw_create_not_done',
|
'_data_time_ch_for_rl', '_device_id', '_send_data', '_data_mqtt_ch', '_id_db_save', '_raw_create_not_done',
|
||||||
'_mini_create_not_done')
|
'_mini_create_not_done', '_data_all')
|
||||||
|
|
||||||
def __init__(self, meta: RecordingMetaFile, device_id, database = None):
|
def __init__(self, meta: RecordingMetaFile, device_id, database = None):
|
||||||
self._meta = meta
|
self._meta = meta
|
||||||
@@ -1075,6 +1080,8 @@ class RecordingFileWriter:
|
|||||||
self._data_time_ch = {}
|
self._data_time_ch = {}
|
||||||
self._id_db_save = {}
|
self._id_db_save = {}
|
||||||
|
|
||||||
|
self._data_all = {}
|
||||||
|
|
||||||
# mini data
|
# mini data
|
||||||
self._data_mini_ch = {}
|
self._data_mini_ch = {}
|
||||||
|
|
||||||
@@ -1131,14 +1138,17 @@ class RecordingFileWriter:
|
|||||||
self._splitting_size = 0
|
self._splitting_size = 0
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def close(self):
|
def close(self, mqtt_thread):
|
||||||
# if self._recording_file is not None:
|
|
||||||
# self._recording_file.close()
|
|
||||||
# self._recording_file = None
|
|
||||||
print('close1')
|
|
||||||
self._close = True
|
self._close = True
|
||||||
if len(self._recording_file_dict) > 0:
|
if len(self._recording_file_dict) > 0:
|
||||||
for ch in self._data_db.keys():
|
for ch in self._data_db.keys():
|
||||||
|
if len(self._data_rl[ch]) > 0:
|
||||||
|
self._data_rl[ch].append(str(int(self._time_now)))
|
||||||
|
mes = ' '.join(self._data_rl[ch])
|
||||||
|
mqtt_thread[ch].on_message(mes)
|
||||||
|
self._data_rl[ch].clear()
|
||||||
|
self._send_data[ch] = False
|
||||||
|
|
||||||
if self._recording_file_dict[ch]._status:
|
if self._recording_file_dict[ch]._status:
|
||||||
_data = ' '.join(self._data_db[ch])
|
_data = ' '.join(self._data_db[ch])
|
||||||
self._raw_save['data'][ch] = _data
|
self._raw_save['data'][ch] = _data
|
||||||
@@ -1224,17 +1234,17 @@ class RecordingFileWriter:
|
|||||||
def get_data_iter(self, d, mqtt_thread):
|
def get_data_iter(self, d, mqtt_thread):
|
||||||
# print('****d size', d.data_size)
|
# print('****d size', d.data_size)
|
||||||
for t, c, v in d.entry_iter():
|
for t, c, v in d.entry_iter():
|
||||||
|
# print(t,c,v)
|
||||||
if c in self._data_db:
|
if c in self._data_db:
|
||||||
|
self._data_all[c].append([int(t), v])
|
||||||
### send real-time
|
### send real-time
|
||||||
if len(self._data_rl[c]) > 0 and self._send_data[c]:
|
if len(self._data_rl[c]) > 0 and self._send_data[c]:
|
||||||
self._data_rl[c].append(str(int(t)))
|
self._data_rl[c].append(str(int(t)))
|
||||||
mes = ' '.join(self._data_rl[c])
|
mes = ' '.join(self._data_rl[c])
|
||||||
# self._data_mqtt_ch[c] = self._data_rl[c].copy()
|
# print('message1', mes)
|
||||||
# self._data_mqtt_ch[c].append(str(int(t)))
|
|
||||||
mqtt_thread[c].on_message(mes)
|
mqtt_thread[c].on_message(mes)
|
||||||
self._data_rl[c].clear()
|
self._data_rl[c].clear()
|
||||||
self._send_data[c] = False
|
self._send_data[c] = False
|
||||||
### send real-time
|
|
||||||
|
|
||||||
sample_rate_rl = 1
|
sample_rate_rl = 1
|
||||||
# rec data
|
# rec data
|
||||||
@@ -1247,40 +1257,35 @@ class RecordingFileWriter:
|
|||||||
self._data_value_ch[c].append(int(v))
|
self._data_value_ch[c].append(int(v))
|
||||||
self._data_value_ch_for_rl[c].append(int(v))
|
self._data_value_ch_for_rl[c].append(int(v))
|
||||||
self._data_time_ch_for_rl[c].append(int(t))
|
self._data_time_ch_for_rl[c].append(int(t))
|
||||||
# self._data_time_ch[c].append(int(t))
|
# print('self._data_value_ch[c]', self._data_value_ch[c])
|
||||||
|
# print('self._data_value_ch_for_rl[c]', self._data_value_ch_for_rl[c])
|
||||||
|
# print('self._data_time_ch_for_rl[c]', self._data_time_ch_for_rl[c])
|
||||||
for scale in self._mini_scale_list:
|
for scale in self._mini_scale_list:
|
||||||
if self._data_mini_ch[c][str(scale)]['start_time'] is None:
|
if self._data_mini_ch[c][str(scale)]['start_time'] is None:
|
||||||
self._data_mini_ch[c][str(scale)]['start_time'] = str(int(t))
|
self._data_mini_ch[c][str(scale)]['start_time'] = str(int(t))
|
||||||
|
|
||||||
|
# print('len(self._data_value_ch_for_rl[c])', len(self._data_value_ch_for_rl[c]))
|
||||||
|
# print('sample_rate_rl:', sample_rate_rl)
|
||||||
if len(self._data_value_ch_for_rl[c]) >= sample_rate_rl:
|
if len(self._data_value_ch_for_rl[c]) >= sample_rate_rl:
|
||||||
if len(self._data_value_ch_for_rl[c]) == 1:
|
if len(self._data_value_ch_for_rl[c]) == 1:
|
||||||
if len(self._data_rl[c]) == 0:
|
if len(self._data_rl[c]) == 0:
|
||||||
self._data_rl[c].append(str(int(t)))
|
self._data_rl[c].append(str(int(t)))
|
||||||
# self._data_rl[c].append(str(self._data_time_ch_for_rl[c][0]))
|
|
||||||
self._data_rl[c].append(str(self._data_value_ch_for_rl[c][0]))
|
self._data_rl[c].append(str(self._data_value_ch_for_rl[c][0]))
|
||||||
else:
|
else:
|
||||||
if len(self._data_rl[c]) == 0:
|
if len(self._data_rl[c]) == 0:
|
||||||
self._data_rl[c].append(str(int(t)))
|
self._data_rl[c].append(str(int(t)))
|
||||||
# self._data_rl[c].append(str(self._data_time_ch_for_rl[c][0]))
|
|
||||||
# self._data_rl[c].append(str(self._data_value_ch_for_rl[c][0]))
|
|
||||||
_max = max(self._data_value_ch_for_rl[c])
|
_max = max(self._data_value_ch_for_rl[c])
|
||||||
_max_index = self._data_value_ch_for_rl[c].index(_max)
|
_max_index = self._data_value_ch_for_rl[c].index(_max)
|
||||||
_min = min(self._data_value_ch_for_rl[c])
|
_min = min(self._data_value_ch_for_rl[c])
|
||||||
_min_index = self._data_value_ch_for_rl[c].index(_min)
|
_min_index = self._data_value_ch_for_rl[c].index(_min)
|
||||||
# _mean = mean(self._data_value_ch_for_rl[c])
|
|
||||||
|
|
||||||
# _first_time = self._data_time_ch_for_rl[c][0]
|
# print('_max, _max_index, _min, _min_index', _max, _max_index, _min, _min_index)
|
||||||
# _last_time = self._data_time_ch_for_rl[c][-1]
|
|
||||||
|
|
||||||
if _max_index < _min_index:
|
if _max_index < _min_index:
|
||||||
# self._data_rl[c].append(str(_first_time))
|
|
||||||
self._data_rl[c].append(str(_max))
|
self._data_rl[c].append(str(_max))
|
||||||
# self._data_rl[c].append(str(_last_time))
|
|
||||||
self._data_rl[c].append(str(_min))
|
self._data_rl[c].append(str(_min))
|
||||||
else:
|
else:
|
||||||
# self._data_rl[c].append(str(_first_time))
|
|
||||||
self._data_rl[c].append(str(_min))
|
self._data_rl[c].append(str(_min))
|
||||||
# self._data_rl[c].append(str(_last_time))
|
|
||||||
self._data_rl[c].append(str(_max))
|
self._data_rl[c].append(str(_max))
|
||||||
|
|
||||||
self._data_value_ch_for_rl[c].clear()
|
self._data_value_ch_for_rl[c].clear()
|
||||||
@@ -1289,9 +1294,6 @@ class RecordingFileWriter:
|
|||||||
# mini picture
|
# mini picture
|
||||||
if len(self._data_value_ch[c]) >= 10:
|
if len(self._data_value_ch[c]) >= 10:
|
||||||
self._data_mini_ch[c]['10']['mean'].append( int(mean(self._data_value_ch[c][0:9])) )
|
self._data_mini_ch[c]['10']['mean'].append( int(mean(self._data_value_ch[c][0:9])) )
|
||||||
# self._data_mini_ch[c]['10']['random'].append( str(self._data_value_ch[c][random.randint(0,9)]) )
|
|
||||||
# _bar = self.get_bar(self._data_value_ch[c], None)
|
|
||||||
# self._data_mini_ch[c]['10']['bar'].extend(_bar)
|
|
||||||
self._data_value_ch[c].clear()
|
self._data_value_ch[c].clear()
|
||||||
if int(len(self._data_mini_ch[c]['10']['mean']) / 10) - self._data_mini_ch[c]['10']['dec'] > 0:
|
if int(len(self._data_mini_ch[c]['10']['mean']) / 10) - self._data_mini_ch[c]['10']['dec'] > 0:
|
||||||
self._data_mini_ch[c]['100']['mean'].append( int(mean(self._data_mini_ch[c]['10']['mean'][-10:])) )
|
self._data_mini_ch[c]['100']['mean'].append( int(mean(self._data_mini_ch[c]['10']['mean'][-10:])) )
|
||||||
@@ -1313,6 +1315,13 @@ class RecordingFileWriter:
|
|||||||
self._data_db[c].append(str(int(t)))
|
self._data_db[c].append(str(int(t)))
|
||||||
self._data_db[c].append(str(v))
|
self._data_db[c].append(str(v))
|
||||||
self._time_now = int(t)
|
self._time_now = int(t)
|
||||||
|
# print('self._data_rl',self._data_rl)
|
||||||
|
# print('self._data_db', self._data_db)
|
||||||
|
# print('self._data_value_ch', self._data_value_ch)
|
||||||
|
# print('self._data_value_ch_for_rl', self._data_value_ch_for_rl)
|
||||||
|
# print('self._data_time_ch_for_rl', self._data_time_ch_for_rl)
|
||||||
|
# print('self._data_time_ch', self._data_time_ch)
|
||||||
|
# print('self._id_db_save', self._id_db_save)
|
||||||
return
|
return
|
||||||
|
|
||||||
# @calculate_time(1)
|
# @calculate_time(1)
|
||||||
@@ -1360,6 +1369,7 @@ class RecordingFileWriter:
|
|||||||
self._data_db[ch] = []
|
self._data_db[ch] = []
|
||||||
self._time[ch] = 0
|
self._time[ch] = 0
|
||||||
self._time_real_time[ch] = 0
|
self._time_real_time[ch] = 0
|
||||||
|
self._data_all[ch] = []
|
||||||
if len(self._data_mini_ch) == 0:
|
if len(self._data_mini_ch) == 0:
|
||||||
for ch in self._channel_list:
|
for ch in self._channel_list:
|
||||||
self._data_mini_ch[ch] = {}
|
self._data_mini_ch[ch] = {}
|
||||||
@@ -1373,6 +1383,37 @@ class RecordingFileWriter:
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.get_data_iter(d, mqtt_thread)
|
self.get_data_iter(d, mqtt_thread)
|
||||||
|
|
||||||
|
print('data', len(self._data_all[0]))
|
||||||
|
|
||||||
|
test = []
|
||||||
|
|
||||||
|
# for ch in self._data_all:
|
||||||
|
# if len(self._data_all[ch]) <= 1000:
|
||||||
|
# print('math.ceil(len(self._data_all[ch]) / 10) + 1', math.ceil(len(self._data_all[ch]) / 10) + 1)
|
||||||
|
# test = largest_triangle_three_buckets(self._data_all[ch], math.ceil(len(self._data_all[ch]) / 10) + 1)
|
||||||
|
# else:
|
||||||
|
# self._data_all[ch] = largest_triangle_three_buckets(self._data_all[ch], 1000)
|
||||||
|
# test = self._data_all[ch]
|
||||||
|
|
||||||
|
# print('test', test)
|
||||||
|
# a = [' '.join(list(map(str, b))) for b in test]
|
||||||
|
# print('a', a)
|
||||||
|
# mes = ' '.join(a)
|
||||||
|
# mqtt_thread[50+ch].on_message(mes)
|
||||||
|
|
||||||
|
for ch in self._data_all:
|
||||||
|
if len(self._data_all[ch]) <= 1000:
|
||||||
|
self._data_all[ch] = signal.savgol_filter(self._data_all[ch], 32, 3)
|
||||||
|
else:
|
||||||
|
self._data_all[ch] = signal.savgol_filter(self._data_all[ch], 32, 3)
|
||||||
|
|
||||||
|
print('test', test)
|
||||||
|
a = [' '.join(list(map(str, b))) for b in self._data_all[ch]]
|
||||||
|
print('a', a)
|
||||||
|
mes = ' '.join(a)
|
||||||
|
mqtt_thread[50+ch].on_message(mes)
|
||||||
|
|
||||||
|
|
||||||
if len(self._recording_file_dict) > 0:
|
if len(self._recording_file_dict) > 0:
|
||||||
for ch in self._data_db.keys():
|
for ch in self._data_db.keys():
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
"""
|
||||||
|
The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 Olivier Devoisin
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
class LttbException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def largest_triangle_three_buckets(data, threshold):
|
||||||
|
"""
|
||||||
|
Return a downsampled version of data.
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
data: list of lists/tuples
|
||||||
|
data must be formated this way: [[x,y], [x,y], [x,y], ...]
|
||||||
|
or: [(x,y), (x,y), (x,y), ...]
|
||||||
|
threshold: int
|
||||||
|
threshold must be >= 2 and <= to the len of data
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
data, but downsampled using threshold
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Check if data and threshold are valid
|
||||||
|
if not isinstance(data, list):
|
||||||
|
raise LttbException("data is not a list")
|
||||||
|
if not isinstance(threshold, int) or threshold <= 2 or threshold >= len(data):
|
||||||
|
raise LttbException("threshold not well defined")
|
||||||
|
for i in data:
|
||||||
|
if not isinstance(i, (list, tuple)) or len(i) != 2:
|
||||||
|
raise LttbException("datapoints are not lists or tuples")
|
||||||
|
|
||||||
|
# Bucket size. Leave room for start and end data points
|
||||||
|
every = (len(data) - 2) / (threshold - 2)
|
||||||
|
|
||||||
|
a = 0 # Initially a is the first point in the triangle
|
||||||
|
next_a = 0
|
||||||
|
max_area_point = (0, 0)
|
||||||
|
|
||||||
|
sampled = [data[0]] # Always add the first point
|
||||||
|
|
||||||
|
for i in range(0, threshold - 2):
|
||||||
|
# Calculate point average for next bucket (containing c)
|
||||||
|
avg_x = 0
|
||||||
|
avg_y = 0
|
||||||
|
avg_range_start = int(math.floor((i + 1) * every) + 1)
|
||||||
|
avg_range_end = int(math.floor((i + 2) * every) + 1)
|
||||||
|
avg_rang_end = avg_range_end if avg_range_end < len(data) else len(data)
|
||||||
|
|
||||||
|
avg_range_length = avg_rang_end - avg_range_start
|
||||||
|
|
||||||
|
while avg_range_start < avg_rang_end:
|
||||||
|
avg_x += data[avg_range_start][0]
|
||||||
|
avg_y += data[avg_range_start][1]
|
||||||
|
avg_range_start += 1
|
||||||
|
|
||||||
|
avg_x /= avg_range_length
|
||||||
|
avg_y /= avg_range_length
|
||||||
|
|
||||||
|
# Get the range for this bucket
|
||||||
|
range_offs = int(math.floor((i + 0) * every) + 1)
|
||||||
|
range_to = int(math.floor((i + 1) * every) + 1)
|
||||||
|
|
||||||
|
# Point a
|
||||||
|
point_ax = data[a][0]
|
||||||
|
point_ay = data[a][1]
|
||||||
|
|
||||||
|
max_area = -1
|
||||||
|
|
||||||
|
while range_offs < range_to:
|
||||||
|
# Calculate triangle area over three buckets
|
||||||
|
area = math.fabs(
|
||||||
|
(point_ax - avg_x)
|
||||||
|
* (data[range_offs][1] - point_ay)
|
||||||
|
- (point_ax - data[range_offs][0])
|
||||||
|
* (avg_y - point_ay)
|
||||||
|
) * 0.5
|
||||||
|
|
||||||
|
if area > max_area:
|
||||||
|
max_area = area
|
||||||
|
max_area_point = data[range_offs]
|
||||||
|
next_a = range_offs # Next a is this b
|
||||||
|
range_offs += 1
|
||||||
|
|
||||||
|
sampled.append(max_area_point) # Pick this point from the bucket
|
||||||
|
a = next_a # This a is the next a (chosen b)
|
||||||
|
|
||||||
|
sampled.append(data[len(data) - 1]) # Always add last
|
||||||
|
|
||||||
|
return sampled
|
||||||
@@ -117,8 +117,8 @@ class DataServer(SocketServer, DataAPI):
|
|||||||
self.database_process = DataBaseProcess('data_server', self.log_verbose, self._queue_db, self._queue_ds_dict, self._queue_msg)
|
self.database_process = DataBaseProcess('data_server', self.log_verbose, self._queue_db, self._queue_ds_dict, self._queue_msg)
|
||||||
self.database_process.start()
|
self.database_process.start()
|
||||||
|
|
||||||
self._no_data_total_duration = 0
|
# self._no_data_total_duration = 0
|
||||||
self._recv_memory_cost_time = 0
|
# self._recv_memory_cost_time = 0
|
||||||
|
|
||||||
@logging_info
|
@logging_info
|
||||||
def setup(self):
|
def setup(self):
|
||||||
@@ -669,17 +669,17 @@ class DataServer(SocketServer, DataAPI):
|
|||||||
print("q size= ", self._configurations[device]._queue_rec.qsize())
|
print("q size= ", self._configurations[device]._queue_rec.qsize())
|
||||||
|
|
||||||
self._configurations[device].put_rec_queue(data)
|
self._configurations[device].put_rec_queue(data)
|
||||||
self._no_data_total_duration = 0
|
# self._no_data_total_duration = 0
|
||||||
ret = True
|
ret = True
|
||||||
else:
|
# else:
|
||||||
time_diff = time() - self._recv_memory_cost_time
|
# time_diff = time() - self._recv_memory_cost_time
|
||||||
self._no_data_total_duration += time_diff
|
# self._no_data_total_duration += time_diff
|
||||||
if self._no_data_total_duration > 1:
|
# if self._no_data_total_duration > 1:
|
||||||
print('data is None', device, datetime.now(), self._no_data_total_duration)
|
# print('data is None', device, datetime.now(), self._no_data_total_duration)
|
||||||
print("sync.get_pin_mem_req() != sync.get_pin_ram_sel()")
|
# print("sync.get_pin_mem_req() != sync.get_pin_ram_sel()")
|
||||||
print("no~", sync.select, sync.get_pin_mem_req(), sync.get_pin_ram_sel(), datetime.now())
|
# print("no~", sync.select, sync.get_pin_mem_req(), sync.get_pin_ram_sel(), datetime.now())
|
||||||
print()
|
# print()
|
||||||
self._recv_memory_cost_time = time()
|
# self._recv_memory_cost_time = time()
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|||||||
@@ -229,30 +229,12 @@ class RecordingProcess(Process):
|
|||||||
# except:
|
# except:
|
||||||
# pass
|
# pass
|
||||||
|
|
||||||
try:
|
|
||||||
time_duration = self._meta_file.configuration.get_parameter('TIME_DURATION')
|
|
||||||
if time_duration and time_duration is not 0 and time() - self._start_time >= time_duration:
|
|
||||||
self._queue_msg.put(['ds', self._device, 'interrupt'])
|
|
||||||
return None
|
|
||||||
|
|
||||||
if isinstance(self._decoder, I4V4Z4T4DataDecoder) or isinstance(self._decoder, EISZeroOneDataDecoder):
|
|
||||||
if self._decoder.isFinishMode is not None and self._decoder.isFinishMode() == 1:
|
|
||||||
self._queue_msg.put(['ds', self._device, 'interrupt'])
|
|
||||||
return None
|
|
||||||
# content = {}
|
|
||||||
# content['header'] = 'device_instruction/0'
|
|
||||||
# content['device'] = result.device
|
|
||||||
# content['instruction'] = 'interrupt'
|
|
||||||
# self._mqtt_thread.publish('device_instruction',json_stringify(content), True)
|
|
||||||
# self.server.stop_sync(self.device)
|
|
||||||
except RuntimeError as e:
|
|
||||||
print(e)
|
|
||||||
|
|
||||||
if result is not None:
|
if result is not None:
|
||||||
##
|
##
|
||||||
if len(self._mqtt_send_data_ch_level) == 0:
|
if len(self._mqtt_send_data_ch_level) == 0:
|
||||||
for ch in result.channels():
|
for ch in result.channels():
|
||||||
self._mqtt_send_data_ch_level[ch] = MqttDataMessageHandler(self._mqtt_thread, 'data_server/device_data_stream/' + str(result.device) + '/' + str(ch) )
|
self._mqtt_send_data_ch_level[ch] = MqttDataMessageHandler(self._mqtt_thread, 'data_server/device_data_stream/' + str(result.device) + '/' + str(ch) )
|
||||||
|
self._mqtt_send_data_ch_level[50+ch] = MqttDataMessageHandler(self._mqtt_thread, 'data_server/device_data_stream/' + str(result.device) + '/' + str(ch+50) )
|
||||||
ret.append(result)
|
ret.append(result)
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
@@ -264,9 +246,27 @@ class RecordingProcess(Process):
|
|||||||
self._writer.channels_update(ret[0].channels())
|
self._writer.channels_update(ret[0].channels())
|
||||||
self._writer.write(ret, self._mqtt_send_data_ch_level)
|
self._writer.write(ret, self._mqtt_send_data_ch_level)
|
||||||
# print('write time: ', time() - ctime1)
|
# print('write time: ', time() - ctime1)
|
||||||
|
|
||||||
# print(ret)
|
# print(ret)
|
||||||
|
|
||||||
|
try:
|
||||||
|
time_duration = self._meta_file.configuration.get_parameter('TIME_DURATION')
|
||||||
|
if time_duration and time_duration is not 0 and time() - self._start_time >= time_duration:
|
||||||
|
self._queue_msg.put(['ds', self._device, 'interrupt'])
|
||||||
|
return None
|
||||||
|
|
||||||
|
if isinstance(self._decoder, I4V4Z4T4DataDecoder) or isinstance(self._decoder, EISZeroOneDataDecoder):
|
||||||
|
if self._decoder.isFinishMode is not None and self._decoder.isFinishMode() == 1:
|
||||||
|
self._queue_msg.put(['ds', self._device, 'interrupt'])
|
||||||
|
return None
|
||||||
|
# content = {}
|
||||||
|
# content['header'] = 'device_instruction/0'
|
||||||
|
# content['device'] = result.device
|
||||||
|
# content['instruction'] = 'interrupt'
|
||||||
|
# self._mqtt_thread.publish('device_instruction',json_stringify(content), True)
|
||||||
|
# self.server.stop_sync(self.device)
|
||||||
|
except RuntimeError as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
del ret
|
del ret
|
||||||
del data
|
del data
|
||||||
return
|
return
|
||||||
@@ -607,7 +607,7 @@ class RecordingProcess(Process):
|
|||||||
|
|
||||||
def final_write(self):
|
def final_write(self):
|
||||||
if self._writer is not None:
|
if self._writer is not None:
|
||||||
return self._writer.close()
|
return self._writer.close(self._mqtt_send_data_ch_level)
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "EliteZM02",
|
"name": "Elite_EDC_1.4",
|
||||||
"version": "1.2.30",
|
"version": "1.2.30",
|
||||||
"match_rule": {
|
"match_rule": {
|
||||||
"local_name_pattern": "Elite.*",
|
"local_name_pattern": "Elite.*",
|
||||||
+159
-55
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "EliteZM15",
|
"name": "Elite_EDC_1.5",
|
||||||
"version": "1.2.30",
|
"version": "1.2.30",
|
||||||
"match_rule": {
|
"match_rule": {
|
||||||
"local_name_pattern": "Elite.*",
|
"local_name_pattern": "Elite.*",
|
||||||
@@ -114,6 +114,20 @@
|
|||||||
"expression": "VALUE"
|
"expression": "VALUE"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"DPV_curr_rec": {
|
||||||
|
"description": "DPV current recording period start",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
25,
|
||||||
|
100
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
101
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
"DPV_curr_rec_min": {
|
"DPV_curr_rec_min": {
|
||||||
"description": "DPV current recording period start",
|
"description": "DPV current recording period start",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
@@ -139,11 +153,8 @@
|
|||||||
"DPV_pulse_option": {
|
"DPV_pulse_option": {
|
||||||
"description": "Invert of pulse option",
|
"description": "Invert of pulse option",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
"initial": 0,
|
"domain": "bool",
|
||||||
"value": [
|
"initial": false
|
||||||
0,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"DPV_mode": {
|
"DPV_mode": {
|
||||||
"description": "AUTO: 0 / ADVANCED: 1/ ENGINEERING: 2",
|
"description": "AUTO: 0 / ADVANCED: 1/ ENGINEERING: 2",
|
||||||
@@ -158,11 +169,24 @@
|
|||||||
"DPV_engineering_enable": {
|
"DPV_engineering_enable": {
|
||||||
"description": "Engineering mode switch",
|
"description": "Engineering mode switch",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
"initial": 0,
|
"domain": "bool",
|
||||||
"value": [
|
"initial": false
|
||||||
0,
|
},
|
||||||
1
|
"V_initial": {
|
||||||
]
|
"description": "Pulse Mode Segment Voltage",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
50000,
|
||||||
|
25000,
|
||||||
|
25000,
|
||||||
|
25000
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
50001
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
},
|
},
|
||||||
"V_initial_0": {
|
"V_initial_0": {
|
||||||
"description": "Pulse Mode Segment Voltage 0",
|
"description": "Pulse Mode Segment Voltage 0",
|
||||||
@@ -208,6 +232,22 @@
|
|||||||
"expression": "VALUE"
|
"expression": "VALUE"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"t_pulse": {
|
||||||
|
"description": "Pulse Mode Segment Duration",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
750,
|
||||||
|
9250,
|
||||||
|
1000,
|
||||||
|
1000
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
1000001
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
"t_pulse_0": {
|
"t_pulse_0": {
|
||||||
"description": "Pulse Mode Segment Duration 0",
|
"description": "Pulse Mode Segment Duration 0",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
@@ -252,6 +292,36 @@
|
|||||||
"expression": "VALUE"
|
"expression": "VALUE"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"CURR_REC": {
|
||||||
|
"description": "Pulse Mode Current Recording Period",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
[
|
||||||
|
35,
|
||||||
|
90
|
||||||
|
],
|
||||||
|
[
|
||||||
|
35,
|
||||||
|
99
|
||||||
|
],
|
||||||
|
[
|
||||||
|
35,
|
||||||
|
95
|
||||||
|
],
|
||||||
|
[
|
||||||
|
35,
|
||||||
|
95
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": {
|
||||||
|
"list": [
|
||||||
|
100
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
"CURR_REC_START_0": {
|
"CURR_REC_START_0": {
|
||||||
"description": "Pulse Mode Current Recording Period Start",
|
"description": "Pulse Mode Current Recording Period Start",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
@@ -340,6 +410,40 @@
|
|||||||
"expression": "VALUE"
|
"expression": "VALUE"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"segment_ui_order": {
|
||||||
|
"description": "Pulse Mode Segment Order",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
-1,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
-1,
|
||||||
|
6
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
|
"segment_order": {
|
||||||
|
"description": "Pulse Mode Segment Order",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
-1,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
-1,
|
||||||
|
6
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
"segment_ui_order_0": {
|
"segment_ui_order_0": {
|
||||||
"description": "Pulse Mode Segment UI Order 0, value: segment ID + 1",
|
"description": "Pulse Mode Segment UI Order 0, value: segment ID + 1",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
@@ -1230,39 +1334,39 @@
|
|||||||
},
|
},
|
||||||
"curve_pulse_sensing": [
|
"curve_pulse_sensing": [
|
||||||
{
|
{
|
||||||
"expression": "segment_ui_order_0",
|
"expression": "segment_ui_order[0]",
|
||||||
"when": {
|
"when": {
|
||||||
"1": "pul_sen_segment_0",
|
"0": "pul_sen_segment_0",
|
||||||
"2": "pul_sen_segment_1",
|
"1": "pul_sen_segment_1",
|
||||||
"3": "pul_sen_segment_2",
|
"2": "pul_sen_segment_2",
|
||||||
"4": "pul_sen_segment_3"
|
"3": "pul_sen_segment_3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expression": "segment_ui_order_1",
|
"expression": "segment_ui_order[1]",
|
||||||
"when": {
|
"when": {
|
||||||
"1": "pul_sen_segment_0",
|
"0": "pul_sen_segment_0",
|
||||||
"2": "pul_sen_segment_1",
|
"1": "pul_sen_segment_1",
|
||||||
"3": "pul_sen_segment_2",
|
"2": "pul_sen_segment_2",
|
||||||
"4": "pul_sen_segment_3"
|
"3": "pul_sen_segment_3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expression": "segment_ui_order_2",
|
"expression": "segment_ui_order[2]",
|
||||||
"when": {
|
"when": {
|
||||||
"1": "pul_sen_segment_0",
|
"0": "pul_sen_segment_0",
|
||||||
"2": "pul_sen_segment_1",
|
"1": "pul_sen_segment_1",
|
||||||
"3": "pul_sen_segment_2",
|
"2": "pul_sen_segment_2",
|
||||||
"4": "pul_sen_segment_3"
|
"3": "pul_sen_segment_3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expression": "segment_ui_order_3",
|
"expression": "segment_ui_order[3]",
|
||||||
"when": {
|
"when": {
|
||||||
"1": "pul_sen_segment_0",
|
"0": "pul_sen_segment_0",
|
||||||
"2": "pul_sen_segment_1",
|
"1": "pul_sen_segment_1",
|
||||||
"3": "pul_sen_segment_2",
|
"2": "pul_sen_segment_2",
|
||||||
"4": "pul_sen_segment_3"
|
"3": "pul_sen_segment_3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pul_sen_start"
|
"pul_sen_start"
|
||||||
@@ -1286,11 +1390,11 @@
|
|||||||
"pul_sen_segment_0": {
|
"pul_sen_segment_0": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "V_initial_0",
|
"va": "V_initial[0]",
|
||||||
"vb": "t_pulse_0",
|
"vb": "t_pulse[0]",
|
||||||
"vc": "CURR_REC_START_0",
|
"vc": "CURR_REC[0][0]",
|
||||||
"vd": "CURR_REC_END_0",
|
"vd": "CURR_REC[0][1]",
|
||||||
"ve": "segment_order_0 - 1",
|
"ve": "segment_order.index(segment_order[0])",
|
||||||
"pa": "ADC_LEVEL_I_15",
|
"pa": "ADC_LEVEL_I_15",
|
||||||
"pb": "ADC_LEVEL_V_IN_15",
|
"pb": "ADC_LEVEL_V_IN_15",
|
||||||
"pc": "DAC_LEVEL_V_OUT_15",
|
"pc": "DAC_LEVEL_V_OUT_15",
|
||||||
@@ -1306,11 +1410,11 @@
|
|||||||
"pul_sen_segment_1": {
|
"pul_sen_segment_1": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "V_initial_1",
|
"va": "V_initial[1]",
|
||||||
"vb": "t_pulse_1",
|
"vb": "t_pulse[1]",
|
||||||
"vc": "CURR_REC_START_1",
|
"vc": "CURR_REC[1][0]",
|
||||||
"vd": "CURR_REC_END_1",
|
"vd": "CURR_REC[1][1]",
|
||||||
"ve": "segment_order_1 - 1",
|
"ve": "segment_order.index(segment_order[1])",
|
||||||
"pa": "ADC_LEVEL_I_15",
|
"pa": "ADC_LEVEL_I_15",
|
||||||
"pb": "ADC_LEVEL_V_IN_15",
|
"pb": "ADC_LEVEL_V_IN_15",
|
||||||
"pc": "DAC_LEVEL_V_OUT_15",
|
"pc": "DAC_LEVEL_V_OUT_15",
|
||||||
@@ -1326,11 +1430,11 @@
|
|||||||
"pul_sen_segment_2": {
|
"pul_sen_segment_2": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "V_initial_2",
|
"va": "V_initial[2]",
|
||||||
"vb": "t_pulse_2",
|
"vb": "t_pulse[2]",
|
||||||
"vc": "CURR_REC_START_2",
|
"vc": "CURR_REC[2][0]",
|
||||||
"vd": "CURR_REC_END_2",
|
"vd": "CURR_REC[2][1]",
|
||||||
"ve": "segment_order_2 - 1",
|
"ve": "segment_order.index(segment_order[2])",
|
||||||
"pa": "ADC_LEVEL_I_15",
|
"pa": "ADC_LEVEL_I_15",
|
||||||
"pb": "ADC_LEVEL_V_IN_15",
|
"pb": "ADC_LEVEL_V_IN_15",
|
||||||
"pc": "DAC_LEVEL_V_OUT_15",
|
"pc": "DAC_LEVEL_V_OUT_15",
|
||||||
@@ -1346,11 +1450,11 @@
|
|||||||
"pul_sen_segment_3": {
|
"pul_sen_segment_3": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "V_initial_3",
|
"va": "V_initial[3]",
|
||||||
"vb": "t_pulse_3",
|
"vb": "t_pulse[3]",
|
||||||
"vc": "CURR_REC_START_3",
|
"vc": "CURR_REC[3][0]",
|
||||||
"vd": "CURR_REC_END_3",
|
"vd": "CURR_REC[3][1]",
|
||||||
"ve": "segment_order_3 - 1",
|
"ve": "segment_order.index(segment_order[3])",
|
||||||
"pa": "ADC_LEVEL_I_15",
|
"pa": "ADC_LEVEL_I_15",
|
||||||
"pb": "ADC_LEVEL_V_IN_15",
|
"pb": "ADC_LEVEL_V_IN_15",
|
||||||
"pc": "DAC_LEVEL_V_OUT_15",
|
"pc": "DAC_LEVEL_V_OUT_15",
|
||||||
@@ -1411,8 +1515,8 @@
|
|||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "DPV_step_time",
|
"va": "DPV_step_time",
|
||||||
"vb": "DPV_notify_rate",
|
"vb": "DPV_notify_rate",
|
||||||
"vc": "DPV_curr_rec_min",
|
"vc": "DPV_curr_rec[0]",
|
||||||
"vd": "DPV_curr_rec_max"
|
"vd": "DPV_curr_rec[1]"
|
||||||
},
|
},
|
||||||
"data": [
|
"data": [
|
||||||
"1X0E;",
|
"1X0E;",
|
||||||
@@ -1475,8 +1579,8 @@
|
|||||||
"parameter": {
|
"parameter": {
|
||||||
"va": "DPV_step_time",
|
"va": "DPV_step_time",
|
||||||
"vb": "DPV_notify_rate",
|
"vb": "DPV_notify_rate",
|
||||||
"vc": "DPV_curr_rec_min",
|
"vc": "DPV_curr_rec[0]",
|
||||||
"vd": "DPV_curr_rec_max"
|
"vd": "DPV_curr_rec[1]"
|
||||||
},
|
},
|
||||||
"data": [
|
"data": [
|
||||||
"1X10;",
|
"1X10;",
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+19
-6
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "EliteEIS",
|
"name": "Elite_EIS_1.0",
|
||||||
"version": "1.2.30",
|
"version": "1.2.30",
|
||||||
"match_rule": {
|
"match_rule": {
|
||||||
"local_name_pattern": "Elite.*",
|
"local_name_pattern": "Elite.*",
|
||||||
@@ -65,6 +65,20 @@
|
|||||||
"Dev Mode"
|
"Dev Mode"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"FREQ": {
|
||||||
|
"description": "DPV current recording period start",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
13422819,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
"FREQ_START": {
|
"FREQ_START": {
|
||||||
"description": "Start of Freq Scan",
|
"description": "Start of Freq Scan",
|
||||||
"record_meta": true,
|
"record_meta": true,
|
||||||
@@ -266,7 +280,6 @@
|
|||||||
"domain": "int"
|
"domain": "int"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"instruction": {
|
"instruction": {
|
||||||
"start": [
|
"start": [
|
||||||
{
|
{
|
||||||
@@ -352,8 +365,8 @@
|
|||||||
"curve_eis": {
|
"curve_eis": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"fa": "FREQ_START",
|
"fa": "FREQ[0]",
|
||||||
"fb": "FREQ_STOP",
|
"fb": "FREQ[1]",
|
||||||
"dp": "DELAY",
|
"dp": "DELAY",
|
||||||
"dc": "DC_BIAS",
|
"dc": "DC_BIAS",
|
||||||
"am": "AC_AMP",
|
"am": "AC_AMP",
|
||||||
@@ -369,8 +382,8 @@
|
|||||||
"curve_eis_para2": {
|
"curve_eis_para2": {
|
||||||
"type": "RIS",
|
"type": "RIS",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"fa": "FREQ_START",
|
"fa": "FREQ[0]",
|
||||||
"fb": "FREQ_STOP",
|
"fb": "FREQ[1]",
|
||||||
"dp": "DELAY",
|
"dp": "DELAY",
|
||||||
"dc": "DC_BIAS",
|
"dc": "DC_BIAS",
|
||||||
"am": "AC_AMP",
|
"am": "AC_AMP",
|
||||||
@@ -0,0 +1,459 @@
|
|||||||
|
{
|
||||||
|
"name": "Elite_EIS_1.1",
|
||||||
|
"version": "1.2.30",
|
||||||
|
"match_rule": {
|
||||||
|
"local_name_pattern": "Elite.*",
|
||||||
|
"major_product_number": 0,
|
||||||
|
"minor_product_number": 4,
|
||||||
|
"major_version_number": 1,
|
||||||
|
"minor_version_number": 1
|
||||||
|
},
|
||||||
|
"constant": {
|
||||||
|
"FREQ_MAX": 4294967296,
|
||||||
|
"VOLT_MAX": 65536,
|
||||||
|
"BLE_WRITE_MAX": 255,
|
||||||
|
"TIME_MAX": 100000
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"TIME_DURATION": {
|
||||||
|
"description": "Run duration",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"domain": [
|
||||||
|
"TIME_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CHANNEL": {
|
||||||
|
"derzteription": "record channels",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "property",
|
||||||
|
"value": "[0, 1, 2]"
|
||||||
|
},
|
||||||
|
"CHANNEL_LABEL": {
|
||||||
|
"description": "channel label",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "property",
|
||||||
|
"value": "['current', 'voltage', 'impedance']"
|
||||||
|
},
|
||||||
|
"SAMPLE_RATE": {
|
||||||
|
"description": "data sampling rate",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1000,
|
||||||
|
"domain": [
|
||||||
|
1001
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
},
|
||||||
|
"on_change": "set_sample_rate"
|
||||||
|
},
|
||||||
|
"AMP_GAIN": {
|
||||||
|
"description": "amp gain",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "constant",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"MODE": {
|
||||||
|
"description": "working mode",
|
||||||
|
"record_meta": true,
|
||||||
|
"value": [
|
||||||
|
"EIS CURVE",
|
||||||
|
"Cyclic Voltammetry",
|
||||||
|
"Dev Mode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"FREQ": {
|
||||||
|
"description": "DPV current recording period start",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
13422819,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
|
"FREQ_START": {
|
||||||
|
"description": "Start of Freq Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 13422819,
|
||||||
|
"domain": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"FREQ_STOP": {
|
||||||
|
"description": "End of Freq Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 7,
|
||||||
|
"domain": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"DELAY": {
|
||||||
|
"description": "Wait x peroid before start taking measurements",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"domain": [
|
||||||
|
101
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AVERAGE_NUM": {
|
||||||
|
"description": "Number of sample used for average funciton",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 8,
|
||||||
|
"value": [
|
||||||
|
2,
|
||||||
|
4,
|
||||||
|
8,
|
||||||
|
16
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"DC_BIAS": {
|
||||||
|
"description": "DC voltage bias in mV",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AC_AMP": {
|
||||||
|
"description": "AC Amplitude in mV",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25,
|
||||||
|
"domain": [
|
||||||
|
2048
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SCALE": {
|
||||||
|
"description": "Point spacing pattern",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"value": [
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PPD": {
|
||||||
|
"description": "Point per decades",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 10,
|
||||||
|
"domain": [
|
||||||
|
11
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CTRL_HIGH_Z_15": {
|
||||||
|
"description": "ctrl highZ level",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1,
|
||||||
|
"value": [
|
||||||
|
"On",
|
||||||
|
"Off"
|
||||||
|
],
|
||||||
|
"on_change": "set_ctrl_highZ"
|
||||||
|
},
|
||||||
|
"ADC_LEVEL_I_15": {
|
||||||
|
"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",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"VOLT_MAX": {
|
||||||
|
"description": "Max Voltage of Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"VOLT_MIN": {
|
||||||
|
"description": "Min Voltage of Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CYCLE_NUMBER": {
|
||||||
|
"description": "CV cycle number",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1,
|
||||||
|
"domain": [
|
||||||
|
65536
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"BLE_WRITE": {
|
||||||
|
"description": "send msg to elite",
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
"BLE_WRITE_MAX"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"initial": "[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]",
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
|
"BLE_READ": {
|
||||||
|
"description": "receive msg from elite",
|
||||||
|
"domain": "int"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instruction": {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"*": "start_data"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_data": [
|
||||||
|
"data_format_cali",
|
||||||
|
"_notify(True)",
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"1": "set_adc_gain_I"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"1": "set_adc_gain_Vin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "curve_eis",
|
||||||
|
"1": "curve_cv3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "curve_eis_para2",
|
||||||
|
"1": "curve_cv3_para2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"_sync(True)",
|
||||||
|
"VIS_STI"
|
||||||
|
],
|
||||||
|
"data_format": [
|
||||||
|
"_data_format('EISZeroOne')",
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "_disable_cache(True)",
|
||||||
|
"1": "_disable_cache(True)",
|
||||||
|
"*": "_disable_cache(False)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"data_format_cali": [
|
||||||
|
"_data_format_cali('EISZeroOne')"
|
||||||
|
],
|
||||||
|
"set_sample_rate": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "SAMPLE_RATE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"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": {
|
||||||
|
"type": "RIS",
|
||||||
|
"data": [
|
||||||
|
"XE1;X03;B>CTRL_HIGH_Z_15"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_eis": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"fa": "FREQ[0]",
|
||||||
|
"fb": "FREQ[1]",
|
||||||
|
"dp": "DELAY",
|
||||||
|
"dc": "DC_BIAS",
|
||||||
|
"am": "AC_AMP",
|
||||||
|
"an": "AVERAGE_NUM",
|
||||||
|
"rt": "RTIA",
|
||||||
|
"pp": "PPD",
|
||||||
|
"sp": "SCALE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD1;1X01;4B>fa;4B>fb;2B>dp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_eis_para2": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"fa": "FREQ[0]",
|
||||||
|
"fb": "FREQ[1]",
|
||||||
|
"dp": "DELAY",
|
||||||
|
"dc": "DC_BIAS",
|
||||||
|
"am": "AC_AMP",
|
||||||
|
"an": "AVERAGE_NUM",
|
||||||
|
"rt": "RTIA",
|
||||||
|
"pp": "PPD",
|
||||||
|
"sp": "SCALE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD1;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_cv3": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "VOLT_INITIAL",
|
||||||
|
"vb": "VOLT_MAX",
|
||||||
|
"vc": "VOLT_MIN",
|
||||||
|
"ve": "Scan_Rate",
|
||||||
|
"vf": "SAMPLE_RATE",
|
||||||
|
"cn": "CYCLE_NUMBER"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD2;1X01;2B>va;2B>vb;2B>vc;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_cv3_para2": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "VOLT_INITIAL",
|
||||||
|
"vb": "VOLT_MAX",
|
||||||
|
"vc": "VOLT_MIN",
|
||||||
|
"ve": "Scan_Rate",
|
||||||
|
"vf": "SAMPLE_RATE",
|
||||||
|
"cn": "CYCLE_NUMBER"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD2;1X02;4B>ve;2B>vf;2B>cn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"VIS_CC_ZERO": [
|
||||||
|
"_data_format('EISZeroOne')",
|
||||||
|
"_disable_cache(False)",
|
||||||
|
"_notify(True)",
|
||||||
|
"VIS_CC_ZERO",
|
||||||
|
"_sync(True)",
|
||||||
|
"VIS_STI"
|
||||||
|
],
|
||||||
|
"ble_instru_send": [
|
||||||
|
"ble_write",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
],
|
||||||
|
"ble_write": {
|
||||||
|
"type": "RIS",
|
||||||
|
"data": [
|
||||||
|
"XFF;",
|
||||||
|
"1B>BLE_WRITE[0];1B>BLE_WRITE[1];1B>BLE_WRITE[2];1B>BLE_WRITE[3];",
|
||||||
|
"1B>BLE_WRITE[4];1B>BLE_WRITE[5];1B>BLE_WRITE[6];1B>BLE_WRITE[7];",
|
||||||
|
"1B>BLE_WRITE[8];1B>BLE_WRITE[9];1B>BLE_WRITE[10];1B>BLE_WRITE[11];",
|
||||||
|
"1B>BLE_WRITE[12];1B>BLE_WRITE[13];1B>BLE_WRITE[14];1B>BLE_WRITE[15];",
|
||||||
|
"1B>BLE_WRITE[16];"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dev_version": [
|
||||||
|
"CIS_VERSION",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
],
|
||||||
|
"dev_battery": [
|
||||||
|
"CIS_VOLT",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,459 @@
|
|||||||
|
{
|
||||||
|
"name": "Elite_EIS_MINI_1.0",
|
||||||
|
"version": "1.2.30",
|
||||||
|
"match_rule": {
|
||||||
|
"local_name_pattern": "Elite.*",
|
||||||
|
"major_product_number": 0,
|
||||||
|
"minor_product_number": 4,
|
||||||
|
"major_version_number": 1,
|
||||||
|
"minor_version_number": 2
|
||||||
|
},
|
||||||
|
"constant": {
|
||||||
|
"FREQ_MAX": 4294967296,
|
||||||
|
"VOLT_MAX": 65536,
|
||||||
|
"BLE_WRITE_MAX": 255,
|
||||||
|
"TIME_MAX": 100000
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"TIME_DURATION": {
|
||||||
|
"description": "Run duration",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"domain": [
|
||||||
|
"TIME_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CHANNEL": {
|
||||||
|
"derzteription": "record channels",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "property",
|
||||||
|
"value": "[0, 1, 2]"
|
||||||
|
},
|
||||||
|
"CHANNEL_LABEL": {
|
||||||
|
"description": "channel label",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "property",
|
||||||
|
"value": "['current', 'voltage', 'impedance']"
|
||||||
|
},
|
||||||
|
"SAMPLE_RATE": {
|
||||||
|
"description": "data sampling rate",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1000,
|
||||||
|
"domain": [
|
||||||
|
1001
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
},
|
||||||
|
"on_change": "set_sample_rate"
|
||||||
|
},
|
||||||
|
"AMP_GAIN": {
|
||||||
|
"description": "amp gain",
|
||||||
|
"record_meta": true,
|
||||||
|
"domain": "constant",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"MODE": {
|
||||||
|
"description": "working mode",
|
||||||
|
"record_meta": true,
|
||||||
|
"value": [
|
||||||
|
"EIS CURVE",
|
||||||
|
"Cyclic Voltammetry",
|
||||||
|
"Dev Mode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"FREQ": {
|
||||||
|
"description": "DPV current recording period start",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": [
|
||||||
|
13422819,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
|
"FREQ_START": {
|
||||||
|
"description": "Start of Freq Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 13422819,
|
||||||
|
"domain": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"FREQ_STOP": {
|
||||||
|
"description": "End of Freq Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 7,
|
||||||
|
"domain": [
|
||||||
|
"FREQ_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"DELAY": {
|
||||||
|
"description": "Wait x peroid before start taking measurements",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"domain": [
|
||||||
|
101
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AVERAGE_NUM": {
|
||||||
|
"description": "Number of sample used for average funciton",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 8,
|
||||||
|
"value": [
|
||||||
|
2,
|
||||||
|
4,
|
||||||
|
8,
|
||||||
|
16
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"DC_BIAS": {
|
||||||
|
"description": "DC voltage bias in mV",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AC_AMP": {
|
||||||
|
"description": "AC Amplitude in mV",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25,
|
||||||
|
"domain": [
|
||||||
|
2048
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SCALE": {
|
||||||
|
"description": "Point spacing pattern",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 0,
|
||||||
|
"value": [
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PPD": {
|
||||||
|
"description": "Point per decades",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 10,
|
||||||
|
"domain": [
|
||||||
|
11
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CTRL_HIGH_Z_15": {
|
||||||
|
"description": "ctrl highZ level",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1,
|
||||||
|
"value": [
|
||||||
|
"On",
|
||||||
|
"Off"
|
||||||
|
],
|
||||||
|
"on_change": "set_ctrl_highZ"
|
||||||
|
},
|
||||||
|
"ADC_LEVEL_I_15": {
|
||||||
|
"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",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"VOLT_MAX": {
|
||||||
|
"description": "Max Voltage of Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"VOLT_MIN": {
|
||||||
|
"description": "Min Voltage of Scan",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 25000,
|
||||||
|
"domain": [
|
||||||
|
"VOLT_MAX"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CYCLE_NUMBER": {
|
||||||
|
"description": "CV cycle number",
|
||||||
|
"record_meta": true,
|
||||||
|
"initial": 1,
|
||||||
|
"domain": [
|
||||||
|
65536
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"expression": "VALUE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"BLE_WRITE": {
|
||||||
|
"description": "send msg to elite",
|
||||||
|
"domain": {
|
||||||
|
"list": [
|
||||||
|
"BLE_WRITE_MAX"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"initial": "[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]",
|
||||||
|
"value": "VALUE"
|
||||||
|
},
|
||||||
|
"BLE_READ": {
|
||||||
|
"description": "receive msg from elite",
|
||||||
|
"domain": "int"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instruction": {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"*": "start_data"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_data": [
|
||||||
|
"data_format_cali",
|
||||||
|
"_notify(True)",
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"1": "set_adc_gain_I"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"1": "set_adc_gain_Vin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "curve_eis",
|
||||||
|
"1": "curve_cv3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "curve_eis_para2",
|
||||||
|
"1": "curve_cv3_para2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"_sync(True)",
|
||||||
|
"VIS_STI"
|
||||||
|
],
|
||||||
|
"data_format": [
|
||||||
|
"_data_format('EISZeroOne')",
|
||||||
|
{
|
||||||
|
"expression": "MODE",
|
||||||
|
"when": {
|
||||||
|
"0": "_disable_cache(True)",
|
||||||
|
"1": "_disable_cache(True)",
|
||||||
|
"*": "_disable_cache(False)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"data_format_cali": [
|
||||||
|
"_data_format_cali('EISZeroOne')"
|
||||||
|
],
|
||||||
|
"set_sample_rate": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "SAMPLE_RATE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"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": {
|
||||||
|
"type": "RIS",
|
||||||
|
"data": [
|
||||||
|
"XE1;X03;B>CTRL_HIGH_Z_15"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_eis": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"fa": "FREQ[0]",
|
||||||
|
"fb": "FREQ[1]",
|
||||||
|
"dp": "DELAY",
|
||||||
|
"dc": "DC_BIAS",
|
||||||
|
"am": "AC_AMP",
|
||||||
|
"an": "AVERAGE_NUM",
|
||||||
|
"rt": "RTIA",
|
||||||
|
"pp": "PPD",
|
||||||
|
"sp": "SCALE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD1;1X01;4B>fa;4B>fb;2B>dp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_eis_para2": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"fa": "FREQ[0]",
|
||||||
|
"fb": "FREQ[1]",
|
||||||
|
"dp": "DELAY",
|
||||||
|
"dc": "DC_BIAS",
|
||||||
|
"am": "AC_AMP",
|
||||||
|
"an": "AVERAGE_NUM",
|
||||||
|
"rt": "RTIA",
|
||||||
|
"pp": "PPD",
|
||||||
|
"sp": "SCALE"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD1;1X02;2B>dc;2B>am;B>an;B>rt;2B>pp;B>sp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_cv3": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "VOLT_INITIAL",
|
||||||
|
"vb": "VOLT_MAX",
|
||||||
|
"vc": "VOLT_MIN",
|
||||||
|
"ve": "Scan_Rate",
|
||||||
|
"vf": "SAMPLE_RATE",
|
||||||
|
"cn": "CYCLE_NUMBER"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD2;1X01;2B>va;2B>vb;2B>vc;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"curve_cv3_para2": {
|
||||||
|
"type": "RIS",
|
||||||
|
"parameter": {
|
||||||
|
"va": "VOLT_INITIAL",
|
||||||
|
"vb": "VOLT_MAX",
|
||||||
|
"vc": "VOLT_MIN",
|
||||||
|
"ve": "Scan_Rate",
|
||||||
|
"vf": "SAMPLE_RATE",
|
||||||
|
"cn": "CYCLE_NUMBER"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"1XD2;1X02;4B>ve;2B>vf;2B>cn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"VIS_CC_ZERO": [
|
||||||
|
"_data_format('EISZeroOne')",
|
||||||
|
"_disable_cache(False)",
|
||||||
|
"_notify(True)",
|
||||||
|
"VIS_CC_ZERO",
|
||||||
|
"_sync(True)",
|
||||||
|
"VIS_STI"
|
||||||
|
],
|
||||||
|
"ble_instru_send": [
|
||||||
|
"ble_write",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
],
|
||||||
|
"ble_write": {
|
||||||
|
"type": "RIS",
|
||||||
|
"data": [
|
||||||
|
"XFF;",
|
||||||
|
"1B>BLE_WRITE[0];1B>BLE_WRITE[1];1B>BLE_WRITE[2];1B>BLE_WRITE[3];",
|
||||||
|
"1B>BLE_WRITE[4];1B>BLE_WRITE[5];1B>BLE_WRITE[6];1B>BLE_WRITE[7];",
|
||||||
|
"1B>BLE_WRITE[8];1B>BLE_WRITE[9];1B>BLE_WRITE[10];1B>BLE_WRITE[11];",
|
||||||
|
"1B>BLE_WRITE[12];1B>BLE_WRITE[13];1B>BLE_WRITE[14];1B>BLE_WRITE[15];",
|
||||||
|
"1B>BLE_WRITE[16];"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dev_version": [
|
||||||
|
"CIS_VERSION",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
],
|
||||||
|
"dev_battery": [
|
||||||
|
"CIS_VOLT",
|
||||||
|
"_cdr('20X>ADC_VALUE_I')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "EliteZM_pulsefly",
|
"name": "Elite_MEGAFLY_0.1",
|
||||||
"version": "1.2.30",
|
"version": "1.2.30",
|
||||||
"match_rule": {
|
"match_rule": {
|
||||||
"local_name_pattern": "Elite.*",
|
"local_name_pattern": "Elite.*",
|
||||||
"major_product_number": 0,
|
"major_product_number": 0,
|
||||||
"minor_product_number": 2,
|
"minor_product_number": 6,
|
||||||
"major_version_number": 1,
|
"major_version_number": 1,
|
||||||
"minor_version_number": 7
|
"minor_version_number": 0
|
||||||
},
|
},
|
||||||
"constant": {
|
"constant": {
|
||||||
"ADC_CHANNEL_NUMBER": [
|
"ADC_CHANNEL_NUMBER": [
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Elite_TRI",
|
"name": "Elite_TRIG_0.1",
|
||||||
"version": "1.2.30",
|
"version": "1.2.30",
|
||||||
"match_rule": {
|
"match_rule": {
|
||||||
"local_name_pattern": "Trigger.*",
|
"local_name_pattern": "Trigger.*",
|
||||||
@@ -1,221 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Elite",
|
|
||||||
"version": "0.1",
|
|
||||||
"match_rule": {
|
|
||||||
"local_name_pattern": "Elite.*",
|
|
||||||
"major_product_number": 0,
|
|
||||||
"minor_product_number": 1,
|
|
||||||
"major_version_number": 0,
|
|
||||||
"minor_version_number": 1
|
|
||||||
},
|
|
||||||
"constant": {
|
|
||||||
"REC_CHANNEL_COUNT": 16,
|
|
||||||
"STI_CHANNEL_COUNT": 15,
|
|
||||||
"ADC_SAMPLE_RATE_LIST": [
|
|
||||||
15,
|
|
||||||
25,
|
|
||||||
40,
|
|
||||||
50,
|
|
||||||
100,
|
|
||||||
250,
|
|
||||||
500,
|
|
||||||
1000,
|
|
||||||
2500,
|
|
||||||
4000,
|
|
||||||
5000
|
|
||||||
],
|
|
||||||
"STI_FREQ_LIST": [
|
|
||||||
15,
|
|
||||||
25,
|
|
||||||
40,
|
|
||||||
50,
|
|
||||||
100,
|
|
||||||
250,
|
|
||||||
500,
|
|
||||||
1000,
|
|
||||||
2500,
|
|
||||||
4000,
|
|
||||||
5000
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"MODE": {
|
|
||||||
"description": "working mode",
|
|
||||||
"value": [
|
|
||||||
"Recording Mode",
|
|
||||||
"Stimulation Mode",
|
|
||||||
"Artifact Mode"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CHANNEL": {
|
|
||||||
"description": "record channels",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": {
|
|
||||||
"set": [
|
|
||||||
"REC_CHANNEL_COUNT"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SAMPLE_RATE": {
|
|
||||||
"alias": "ADC_RATE",
|
|
||||||
"description": "sampling rate",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
"len(ADC_SAMPLE_RATE_LIST)"
|
|
||||||
],
|
|
||||||
"value": "ADC_SAMPLE_RATE_LIST[VALUE]"
|
|
||||||
},
|
|
||||||
"AMP_GAIN": {
|
|
||||||
"description": "",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
400,
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"LOW_FREQ_BAND": {
|
|
||||||
"description": "",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
7
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"STI_MODE": {
|
|
||||||
"description": "stimulation mode",
|
|
||||||
"value": [
|
|
||||||
"Positive Pulse",
|
|
||||||
"Negative Pulse",
|
|
||||||
"Pos to Neg Pulse",
|
|
||||||
"Neg to Pos Pulse",
|
|
||||||
"Arbitrary Waveform"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"STI_VOLT": {
|
|
||||||
"description": "stimulation voltage",
|
|
||||||
"domain": [
|
|
||||||
32
|
|
||||||
],
|
|
||||||
"value": "2 + 3 * VALUE / 31"
|
|
||||||
},
|
|
||||||
"STI_FREQ": {
|
|
||||||
"description": "stimulation frequency",
|
|
||||||
"domain": [
|
|
||||||
"len(STI_FREQ_LIST)"
|
|
||||||
],
|
|
||||||
"value": "STI_FREQ_LIST[VALUE]"
|
|
||||||
},
|
|
||||||
"STI_PMOS": {
|
|
||||||
"description": "stimulation PMOS channel",
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"STI_CHANNEL_COUNT"
|
|
||||||
],
|
|
||||||
"guard": "STI_PMOS != STI_NMOS"
|
|
||||||
},
|
|
||||||
"STI_NMOS": {
|
|
||||||
"description": "stimulation NMOS channel",
|
|
||||||
"initial": "STI_CHANNEL_COUNT - 1",
|
|
||||||
"domain": [
|
|
||||||
"STI_CHANNEL_COUNT"
|
|
||||||
],
|
|
||||||
"guard": "STI_PMOS != STI_NMOS"
|
|
||||||
},
|
|
||||||
"CHOPPER": {
|
|
||||||
"description": "",
|
|
||||||
"domain": "bool"
|
|
||||||
},
|
|
||||||
"FAST_SETTLE": {
|
|
||||||
"description": "",
|
|
||||||
"domain": "bool"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"instruction": {
|
|
||||||
"start": [
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "start_recording",
|
|
||||||
"1": "start_stimulation",
|
|
||||||
"2": "start_artifact"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"start_recording": [
|
|
||||||
{
|
|
||||||
"expression": "len(CHANNEL) > 0",
|
|
||||||
"raise": "no recording channel"
|
|
||||||
},
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"start_recording0",
|
|
||||||
"_sync(True)"
|
|
||||||
],
|
|
||||||
"start_artifact": [
|
|
||||||
{
|
|
||||||
"expression": "len(CHANNEL) > 0",
|
|
||||||
"raise": "no recording channel"
|
|
||||||
},
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"start_artifact0",
|
|
||||||
"_sync(True)"
|
|
||||||
],
|
|
||||||
"data_format": [
|
|
||||||
"_data_format('TDC4VAF2')"
|
|
||||||
],
|
|
||||||
"start_recording0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"foreach-parameter": {
|
|
||||||
"parameter": "CHANNEL",
|
|
||||||
"variable": [
|
|
||||||
"a",
|
|
||||||
"b",
|
|
||||||
"c",
|
|
||||||
"d"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b110#recording header;2b<AMP_GAIN;3b<LOW_FREQ_BAND",
|
|
||||||
"4b>SAMPLE_RATE;1ba?;1bb?;1bc?;1bd?",
|
|
||||||
"4b<a?:0;4b<b?:0",
|
|
||||||
"4b<c?:0;4b<d?:0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"start_artifact0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"foreach-parameter": {
|
|
||||||
"parameter": "CHANNEL",
|
|
||||||
"variable": [
|
|
||||||
"a",
|
|
||||||
"b",
|
|
||||||
"c",
|
|
||||||
"d"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b100#artifact mode header;2b0;3b001",
|
|
||||||
"4b>SAMPLE_RATE;1ba?;1bb?;1bc?;1bd?",
|
|
||||||
"4b<a?:0;4b<b?:0",
|
|
||||||
"4b<c?:0;4b<d?:0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"start_stimulation": [
|
|
||||||
"start_stimulation0"
|
|
||||||
],
|
|
||||||
"start_stimulation0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"guard": {
|
|
||||||
"expression": "STI_PMOS != STI_NMOS",
|
|
||||||
"raise": "same N/PMos channel"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b111#stimulation header;2b0;3bSTI_MODE",
|
|
||||||
"4b>STI_FREQ;1bCHOPPER;1bFAST_SETTLE;2b0",
|
|
||||||
"4b<STI_PMOS;4b<STI_NMOS",
|
|
||||||
"5b<STI_VOLT;3b0"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Elite_Legacy",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"match_rule": {
|
|
||||||
"major_product_number": 0,
|
|
||||||
"minor_product_number": 0,
|
|
||||||
"major_version_number": 0,
|
|
||||||
"minor_version_number": 0
|
|
||||||
},
|
|
||||||
"constant": {
|
|
||||||
"REC_CHANNEL_COUNT": 16,
|
|
||||||
"STI_CHANNEL_COUNT": 15,
|
|
||||||
"ADC_SAMPLE_RATE_LIST": [
|
|
||||||
15,
|
|
||||||
25,
|
|
||||||
40,
|
|
||||||
50,
|
|
||||||
100,
|
|
||||||
250,
|
|
||||||
500,
|
|
||||||
1000,
|
|
||||||
2500,
|
|
||||||
4000,
|
|
||||||
5000
|
|
||||||
],
|
|
||||||
"STI_FREQ_LIST": [
|
|
||||||
15,
|
|
||||||
25,
|
|
||||||
40,
|
|
||||||
50,
|
|
||||||
100,
|
|
||||||
250,
|
|
||||||
500,
|
|
||||||
1000,
|
|
||||||
2500,
|
|
||||||
4000,
|
|
||||||
5000
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"MODE": {
|
|
||||||
"description": "working mode",
|
|
||||||
"value": [
|
|
||||||
"Recording Mode",
|
|
||||||
"Stimulation Mode",
|
|
||||||
"Artifact Mode"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CHANNEL": {
|
|
||||||
"description": "record channels",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": {
|
|
||||||
"set": [
|
|
||||||
"REC_CHANNEL_COUNT"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SAMPLE_RATE": {
|
|
||||||
"alias": "ADC_RATE",
|
|
||||||
"description": "sampling rate",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
"len(ADC_SAMPLE_RATE_LIST)"
|
|
||||||
],
|
|
||||||
"value": "ADC_SAMPLE_RATE_LIST[VALUE]"
|
|
||||||
},
|
|
||||||
"AMP_GAIN": {
|
|
||||||
"description": "",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
400,
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"LOW_FREQ_BAND": {
|
|
||||||
"description": "",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
7
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"STI_MODE": {
|
|
||||||
"description": "stimulation mode",
|
|
||||||
"value": [
|
|
||||||
"Positive Pulse",
|
|
||||||
"Negative Pulse",
|
|
||||||
"Pos to Neg Pulse",
|
|
||||||
"Neg to Pos Pulse",
|
|
||||||
"Arbitrary Waveform"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"STI_VOLT": {
|
|
||||||
"description": "stimulation voltage",
|
|
||||||
"domain": [
|
|
||||||
32
|
|
||||||
],
|
|
||||||
"value": "2 + 3 * VALUE / 31"
|
|
||||||
},
|
|
||||||
"STI_FREQ": {
|
|
||||||
"description": "stimulation frequency",
|
|
||||||
"domain": [
|
|
||||||
"len(STI_FREQ_LIST)"
|
|
||||||
],
|
|
||||||
"value": "STI_FREQ_LIST[VALUE]"
|
|
||||||
},
|
|
||||||
"STI_PMOS": {
|
|
||||||
"description": "stimulation PMOS channel",
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"STI_CHANNEL_COUNT"
|
|
||||||
],
|
|
||||||
"guard": "STI_PMOS != STI_NMOS"
|
|
||||||
},
|
|
||||||
"STI_NMOS": {
|
|
||||||
"description": "stimulation NMOS channel",
|
|
||||||
"initial": "STI_CHANNEL_COUNT - 1",
|
|
||||||
"domain": [
|
|
||||||
"STI_CHANNEL_COUNT"
|
|
||||||
],
|
|
||||||
"guard": "STI_PMOS != STI_NMOS"
|
|
||||||
},
|
|
||||||
"CHOPPER": {
|
|
||||||
"description": "",
|
|
||||||
"domain": "bool"
|
|
||||||
},
|
|
||||||
"FAST_SETTLE": {
|
|
||||||
"description": "",
|
|
||||||
"domain": "bool"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"instruction": {
|
|
||||||
"start": [
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "start_recording",
|
|
||||||
"1": "start_stimulation",
|
|
||||||
"2": "start_artifact"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"start_recording": [
|
|
||||||
{
|
|
||||||
"expression": "len(CHANNEL) > 0",
|
|
||||||
"raise": "no recording channel"
|
|
||||||
},
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"start_recording0",
|
|
||||||
"_sync(True)"
|
|
||||||
],
|
|
||||||
"start_artifact": [
|
|
||||||
{
|
|
||||||
"expression": "len(CHANNEL) > 0",
|
|
||||||
"raise": "no recording channel"
|
|
||||||
},
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"start_artifact0",
|
|
||||||
"_sync(True)"
|
|
||||||
],
|
|
||||||
"data_format": [
|
|
||||||
"_data_format('TC4VAF2')"
|
|
||||||
],
|
|
||||||
"start_recording0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"foreach-parameter": {
|
|
||||||
"parameter": "CHANNEL",
|
|
||||||
"variable": [
|
|
||||||
"a",
|
|
||||||
"b",
|
|
||||||
"c",
|
|
||||||
"d"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b110#recording header;2b<AMP_GAIN;3b<LOW_FREQ_BAND",
|
|
||||||
"4b>SAMPLE_RATE;1ba?;1bb?;1bc?;1bd?",
|
|
||||||
"4b<a?:0;4b<b?:0",
|
|
||||||
"4b<c?:0;4b<d?:0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"start_artifact0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"foreach-parameter": {
|
|
||||||
"parameter": "CHANNEL",
|
|
||||||
"variable": [
|
|
||||||
"a",
|
|
||||||
"b",
|
|
||||||
"c",
|
|
||||||
"d"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b100#artifact mode header;2b0;3b001",
|
|
||||||
"4b>SAMPLE_RATE;1ba?;1bb?;1bc?;1bd?",
|
|
||||||
"4b<a?:0;4b<b?:0",
|
|
||||||
"4b<c?:0;4b<d?:0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"start_stimulation": [
|
|
||||||
"start_stimulation0"
|
|
||||||
],
|
|
||||||
"start_stimulation0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"guard": {
|
|
||||||
"expression": "STI_PMOS != STI_NMOS",
|
|
||||||
"raise": "same N/PMos channel"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"3b111#stimulation header;2b0;3bSTI_MODE",
|
|
||||||
"4b>STI_FREQ;1bCHOPPER;1bFAST_SETTLE;2b0",
|
|
||||||
"4b<STI_PMOS;4b<STI_NMOS",
|
|
||||||
"5b<STI_VOLT;3b0"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,343 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "EliteZM",
|
|
||||||
"version": "1.2.30",
|
|
||||||
"match_rule": {
|
|
||||||
"local_name_pattern": "Elite-ZM.+",
|
|
||||||
"major_product_number": 0,
|
|
||||||
"minor_product_number": 2,
|
|
||||||
"major_version_number": 1,
|
|
||||||
"minor_version_number": 2
|
|
||||||
},
|
|
||||||
"constant": {
|
|
||||||
"ADC_CHANNEL_NUMBER": [
|
|
||||||
12,
|
|
||||||
13,
|
|
||||||
14,
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"VOLT_MAX": 65536,
|
|
||||||
"STEP_MAX": 100,
|
|
||||||
"Const_Current_Range": 1500001
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"CHANNEL": {
|
|
||||||
"description": "record channels",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "[0, 1, 2]"
|
|
||||||
},
|
|
||||||
"CHANNEL_LABEL": {
|
|
||||||
"description": "channel label",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "['current', 'voltage', 'impedance']"
|
|
||||||
},
|
|
||||||
"SAMPLE_RATE": {
|
|
||||||
"description": "data sampling rate",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
100,
|
|
||||||
10,
|
|
||||||
5,
|
|
||||||
1,
|
|
||||||
0.1,
|
|
||||||
0.01
|
|
||||||
],
|
|
||||||
"on_change": "set_sample_rate"
|
|
||||||
},
|
|
||||||
"AMP_GAIN": {
|
|
||||||
"description": "amp gain",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "constant",
|
|
||||||
"value": 1
|
|
||||||
},
|
|
||||||
"MODE": {
|
|
||||||
"description": "working mode",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"I-V Curve",
|
|
||||||
"Cyclic Voltammetry",
|
|
||||||
"Function Generator",
|
|
||||||
"R-T Curve",
|
|
||||||
"V-T Curve",
|
|
||||||
"I-T Curve",
|
|
||||||
"ADC test",
|
|
||||||
"Constant Current"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"VOLT_ORIGIN": {
|
|
||||||
"description": "Origin Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_FINAL": {
|
|
||||||
"description": "The last Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": " (VALUE) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_STEP": {
|
|
||||||
"description": "Voltage Step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"STEP_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"STEP_TIME": {
|
|
||||||
"description": "How much time between two step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 1,
|
|
||||||
"value": [
|
|
||||||
0.5,
|
|
||||||
1.0,
|
|
||||||
2.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CYCLE_NUMBER": {
|
|
||||||
"description": "CV cycle number",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
200
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "VALUE + 1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DAC_VOLT": {
|
|
||||||
"description": "DAC output Voltage",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
65536
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_CHANNEL": {
|
|
||||||
"description": "read ADC data",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"ANA0",
|
|
||||||
"ANA1",
|
|
||||||
"ANA2",
|
|
||||||
"ANA3"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_LEVEL": {
|
|
||||||
"description": "ADC level",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 3,
|
|
||||||
"value": [
|
|
||||||
"200k",
|
|
||||||
"10k",
|
|
||||||
"200R",
|
|
||||||
"auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_adc_gain"
|
|
||||||
},
|
|
||||||
"Resister_LEVEL": {
|
|
||||||
"description": "Resister_LEVEL",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 3,
|
|
||||||
"value": [
|
|
||||||
"Small",
|
|
||||||
"Middle",
|
|
||||||
"Large",
|
|
||||||
"Auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_Resister_level"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_V": {
|
|
||||||
"description": "ADC value voltage value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_I": {
|
|
||||||
"description": "ADC value current value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"Const_Current_unit": {
|
|
||||||
"description": "Constant Current unit Setting",
|
|
||||||
"initial": 1,
|
|
||||||
"value": [
|
|
||||||
"uA",
|
|
||||||
"mA"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Const_Current_value": {
|
|
||||||
"description": "Constant Current value Setting",
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"Const_Current_Range"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE) * 0x00000001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Charge": {
|
|
||||||
"description": "Charge battery or not",
|
|
||||||
"initial": 0,
|
|
||||||
"value": [
|
|
||||||
"Charge",
|
|
||||||
"Discharge"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Const_Current_VStop": {
|
|
||||||
"description": "Constant Current Stopping Voltage",
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE) * 0x0001"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"instruction": {
|
|
||||||
"start": [
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"2": "start_fun_gen",
|
|
||||||
"6": "adc_test",
|
|
||||||
"*": "start_data"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"start_fun_gen": [
|
|
||||||
"data_format",
|
|
||||||
"func_gen",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"adc_test": [
|
|
||||||
"adc_test0",
|
|
||||||
"_cdr('1X;4X>ADC_VALUE_I;4X>ADC_VALUE_V')"
|
|
||||||
],
|
|
||||||
"start_data": [
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"set_sample_rate",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "curve_iv",
|
|
||||||
"1": "curve_cv",
|
|
||||||
"3": "curve_zt",
|
|
||||||
"4": "curve_vt",
|
|
||||||
"5": "curve_it",
|
|
||||||
"7": "const_current"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_sync(True)",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"data_format": [
|
|
||||||
"_data_format('I4V4Z4T4')",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "_disable_cache(True)",
|
|
||||||
"1": "_disable_cache(True)",
|
|
||||||
"*": "_disable_cache(False)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"curve_iv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X10;2B>va;2B>vb;2B>dv;B>dt"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_cv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12",
|
|
||||||
"cn": "CYCLE_NUMBER+1"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X20;2B>va;2B>vb;2B>dv;B>dt;B>cn"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"func_gen": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"v": "(DAC_VOLT) * 0x0001"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"X30;2B>v"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_zt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X40"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_vt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X50"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_it": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X60"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"adc_test0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X90;B>ADC_LEVEL;B>ADC_CHANNEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_sample_rate": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X70;B>SAMPLE_RATE"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_adc_gain": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X80;B>ADC_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_Resister_level": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XE0;B>Resister_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"const_current": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XD0;B>Charge;2X>Const_Current_VStop;4X>Const_Current_value"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,320 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "EliteZML",
|
|
||||||
"version": "1.2.30",
|
|
||||||
"match_rule": {
|
|
||||||
"local_name_pattern": "Elite-ZM.+",
|
|
||||||
"major_product_number": 0,
|
|
||||||
"minor_product_number": 2,
|
|
||||||
"major_version_number": 1,
|
|
||||||
"minor_version_number": 4
|
|
||||||
},
|
|
||||||
"constant": {
|
|
||||||
"ADC_CHANNEL_NUMBER": [
|
|
||||||
12,
|
|
||||||
13,
|
|
||||||
14,
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"VOLT_MAX": 65536,
|
|
||||||
"STEP_MAX": 100,
|
|
||||||
"Const_Current_Range": 3000001
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"CHANNEL": {
|
|
||||||
"description": "record channels",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "[0, 1, 2]"
|
|
||||||
},
|
|
||||||
"CHANNEL_LABEL": {
|
|
||||||
"description": "channel label",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "['current', 'voltage', 'impedance']"
|
|
||||||
},
|
|
||||||
"SAMPLE_RATE": {
|
|
||||||
"description": "data sampling rate",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
100,
|
|
||||||
10,
|
|
||||||
5,
|
|
||||||
1,
|
|
||||||
0.1,
|
|
||||||
0.01
|
|
||||||
],
|
|
||||||
"on_change": "set_sample_rate"
|
|
||||||
},
|
|
||||||
"AMP_GAIN": {
|
|
||||||
"description": "amp gain",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "constant",
|
|
||||||
"value": 1
|
|
||||||
},
|
|
||||||
"MODE": {
|
|
||||||
"description": "working mode",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"I-V Curve",
|
|
||||||
"Cyclic Voltammetry",
|
|
||||||
"Function Generator",
|
|
||||||
"R-T Curve",
|
|
||||||
"V-T Curve",
|
|
||||||
"I-T Curve",
|
|
||||||
"ADC test",
|
|
||||||
"Constant Current"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"VOLT_ORIGIN": {
|
|
||||||
"description": "Origin Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_FINAL": {
|
|
||||||
"description": "The last Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": " (VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_STEP": {
|
|
||||||
"description": "Voltage Step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"STEP_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"STEP_TIME": {
|
|
||||||
"description": "How much time between two step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 1,
|
|
||||||
"value": [
|
|
||||||
0.5,
|
|
||||||
1.0,
|
|
||||||
2.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CYCLE_NUMBER": {
|
|
||||||
"description": "CV cycle number",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
200
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "VALUE + 1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DAC_VOLT": {
|
|
||||||
"description": "DAC output Voltage",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
65536
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_CHANNEL": {
|
|
||||||
"description": "read ADC data",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"ANA0",
|
|
||||||
"ANA1",
|
|
||||||
"ANA2",
|
|
||||||
"ANA3"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_LEVEL": {
|
|
||||||
"description": "ADC level",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"200k",
|
|
||||||
"10k",
|
|
||||||
"200R",
|
|
||||||
"auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_adc_gain"
|
|
||||||
},
|
|
||||||
"Resister_LEVEL": {
|
|
||||||
"description": "Resister_LEVEL",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"Small",
|
|
||||||
"Middle",
|
|
||||||
"Large",
|
|
||||||
"Auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_Resister_level"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_V": {
|
|
||||||
"description": "ADC value voltage value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_I": {
|
|
||||||
"description": "ADC value current value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"Const_Current_unit": {
|
|
||||||
"description": "Constant Current unit Setting",
|
|
||||||
"value": [
|
|
||||||
"uA",
|
|
||||||
"mA"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Const_Current_value": {
|
|
||||||
"description": "Constant Current value Setting",
|
|
||||||
"initial": 1500000,
|
|
||||||
"domain": [
|
|
||||||
"Const_Current_Range"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE) * 0x00000001"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"instruction": {
|
|
||||||
"start": [
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"2": "start_fun_gen",
|
|
||||||
"6": "adc_test",
|
|
||||||
"*": "start_data"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"start_fun_gen": [
|
|
||||||
"data_format",
|
|
||||||
"func_gen",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"adc_test": [
|
|
||||||
"adc_test0",
|
|
||||||
"_cdr('1X;4X>ADC_VALUE_I;4X>ADC_VALUE_V')"
|
|
||||||
],
|
|
||||||
"start_data": [
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"set_sample_rate",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "curve_iv",
|
|
||||||
"1": "curve_cv",
|
|
||||||
"3": "curve_zt",
|
|
||||||
"4": "curve_vt",
|
|
||||||
"5": "curve_it",
|
|
||||||
"7": "const_current"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_sync(True)",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"data_format": [
|
|
||||||
"_data_format('I4V4Z4T4')",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "_disable_cache(True)",
|
|
||||||
"1": "_disable_cache(True)",
|
|
||||||
"*": "_disable_cache(False)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"curve_iv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN + 1) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL + 1) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X10;2B>va;2B>vb;2B>dv;B>dt"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_cv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN + 1) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL + 1) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12",
|
|
||||||
"cn": "CYCLE_NUMBER+1"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X20;2B>va;2B>vb;2B>dv;B>dt;B>CYCLE_NUMBER"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"func_gen": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"v": "(DAC_VOLT) * 0x0001"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"X30;2B>v"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_zt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X40"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_vt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X50"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_it": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X60"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"adc_test0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X90;B>ADC_LEVEL;B>ADC_CHANNEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_sample_rate": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X70;B>SAMPLE_RATE"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_adc_gain": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X80;B>ADC_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_Resister_level": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XE0;B>Resister_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"const_current": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XD0;4X>Const_Current_value"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,320 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "EliteZMS",
|
|
||||||
"version": "1.2.30",
|
|
||||||
"match_rule": {
|
|
||||||
"local_name_pattern": "Elite-ZM.+",
|
|
||||||
"major_product_number": 0,
|
|
||||||
"minor_product_number": 2,
|
|
||||||
"major_version_number": 1,
|
|
||||||
"minor_version_number": 3
|
|
||||||
},
|
|
||||||
"constant": {
|
|
||||||
"ADC_CHANNEL_NUMBER": [
|
|
||||||
12,
|
|
||||||
13,
|
|
||||||
14,
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"VOLT_MAX": 65536,
|
|
||||||
"STEP_MAX": 100,
|
|
||||||
"Const_Current_Range": 3000001
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"CHANNEL": {
|
|
||||||
"description": "record channels",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "[0, 1, 2]"
|
|
||||||
},
|
|
||||||
"CHANNEL_LABEL": {
|
|
||||||
"description": "channel label",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "property",
|
|
||||||
"value": "['current', 'voltage', 'impedance']"
|
|
||||||
},
|
|
||||||
"SAMPLE_RATE": {
|
|
||||||
"description": "data sampling rate",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
100,
|
|
||||||
10,
|
|
||||||
5,
|
|
||||||
1,
|
|
||||||
0.1,
|
|
||||||
0.01
|
|
||||||
],
|
|
||||||
"on_change": "set_sample_rate"
|
|
||||||
},
|
|
||||||
"AMP_GAIN": {
|
|
||||||
"description": "amp gain",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": "constant",
|
|
||||||
"value": 1
|
|
||||||
},
|
|
||||||
"MODE": {
|
|
||||||
"description": "working mode",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"I-V Curve",
|
|
||||||
"Cyclic Voltammetry",
|
|
||||||
"Function Generator",
|
|
||||||
"R-T Curve",
|
|
||||||
"V-T Curve",
|
|
||||||
"I-T Curve",
|
|
||||||
"ADC test",
|
|
||||||
"Constant Current"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"VOLT_ORIGIN": {
|
|
||||||
"description": "Origin Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_FINAL": {
|
|
||||||
"description": "The last Voltage of Scan",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 25000,
|
|
||||||
"domain": [
|
|
||||||
"VOLT_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": " (VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"VOLT_STEP": {
|
|
||||||
"description": "Voltage Step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 0,
|
|
||||||
"domain": [
|
|
||||||
"STEP_MAX"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE + 1) * 0x0001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"STEP_TIME": {
|
|
||||||
"description": "How much time between two step",
|
|
||||||
"record_meta": true,
|
|
||||||
"initial": 1,
|
|
||||||
"value": [
|
|
||||||
0.5,
|
|
||||||
1.0,
|
|
||||||
2.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CYCLE_NUMBER": {
|
|
||||||
"description": "CV cycle number",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
200
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "VALUE + 1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DAC_VOLT": {
|
|
||||||
"description": "DAC output Voltage",
|
|
||||||
"record_meta": true,
|
|
||||||
"domain": [
|
|
||||||
65536
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_CHANNEL": {
|
|
||||||
"description": "read ADC data",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"ANA0",
|
|
||||||
"ANA1",
|
|
||||||
"ANA2",
|
|
||||||
"ANA3"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ADC_LEVEL": {
|
|
||||||
"description": "ADC level",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"200k",
|
|
||||||
"10k",
|
|
||||||
"200R",
|
|
||||||
"auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_adc_gain"
|
|
||||||
},
|
|
||||||
"Resister_LEVEL": {
|
|
||||||
"description": "Resister_LEVEL",
|
|
||||||
"record_meta": true,
|
|
||||||
"value": [
|
|
||||||
"Small",
|
|
||||||
"Middle",
|
|
||||||
"Large",
|
|
||||||
"Auto"
|
|
||||||
],
|
|
||||||
"on_change": "set_Resister_level"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_V": {
|
|
||||||
"description": "ADC value voltage value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"ADC_VALUE_I": {
|
|
||||||
"description": "ADC value current value",
|
|
||||||
"domain": "int"
|
|
||||||
},
|
|
||||||
"Const_Current_unit": {
|
|
||||||
"description": "Constant Current unit Setting",
|
|
||||||
"value": [
|
|
||||||
"uA",
|
|
||||||
"mA"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Const_Current_value": {
|
|
||||||
"description": "Constant Current value Setting",
|
|
||||||
"initial": 1500000,
|
|
||||||
"domain": [
|
|
||||||
"Const_Current_Range"
|
|
||||||
],
|
|
||||||
"value": {
|
|
||||||
"expression": "(VALUE) * 0x00000001"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"instruction": {
|
|
||||||
"start": [
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"2": "start_fun_gen",
|
|
||||||
"6": "adc_test",
|
|
||||||
"*": "start_data"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"start_fun_gen": [
|
|
||||||
"data_format",
|
|
||||||
"func_gen",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"adc_test": [
|
|
||||||
"adc_test0",
|
|
||||||
"_cdr('1X;4X>ADC_VALUE_I;4X>ADC_VALUE_V')"
|
|
||||||
],
|
|
||||||
"start_data": [
|
|
||||||
"data_format",
|
|
||||||
"_notify(True)",
|
|
||||||
"set_sample_rate",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "curve_iv",
|
|
||||||
"1": "curve_cv",
|
|
||||||
"3": "curve_zt",
|
|
||||||
"4": "curve_vt",
|
|
||||||
"5": "curve_it",
|
|
||||||
"7": "const_current"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_sync(True)",
|
|
||||||
"VIS_STI"
|
|
||||||
],
|
|
||||||
"data_format": [
|
|
||||||
"_data_format('I4V4Z4T4')",
|
|
||||||
{
|
|
||||||
"expression": "MODE",
|
|
||||||
"when": {
|
|
||||||
"0": "_disable_cache(True)",
|
|
||||||
"1": "_disable_cache(True)",
|
|
||||||
"*": "_disable_cache(False)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"curve_iv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN + 1) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL + 1) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X10;2B>va;2B>vb;2B>dv;B>dt"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_cv": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"va": "(VOLT_ORIGIN + 1) * 0x0001",
|
|
||||||
"vb": "(VOLT_FINAL + 1) * 0x0001",
|
|
||||||
"dv": "(VOLT_STEP + 1) * 0x0001",
|
|
||||||
"dt": "STEP_TIME * 0x12",
|
|
||||||
"cn": "CYCLE_NUMBER+1"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"1X20;2B>va;2B>vb;2B>dv;B>dt;B>CYCLE_NUMBER"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"func_gen": {
|
|
||||||
"type": "RIS",
|
|
||||||
"parameter": {
|
|
||||||
"v": "(DAC_VOLT) * 0x0001"
|
|
||||||
},
|
|
||||||
"data": [
|
|
||||||
"X30;2B>v"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_zt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X40"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_vt": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X50"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"curve_it": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X60"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"adc_test0": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X90;B>ADC_LEVEL;B>ADC_CHANNEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_sample_rate": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X70;B>SAMPLE_RATE"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_adc_gain": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"X80;B>ADC_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"set_Resister_level": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XE0;B>Resister_LEVEL"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"const_current": {
|
|
||||||
"type": "RIS",
|
|
||||||
"data": [
|
|
||||||
"XD0;4X>Const_Current_value"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user