Compare commits

...

9 Commits

Author SHA1 Message Date
peterlu14 26e02f2d40 [update] add data_show function print device data 2022-08-11 00:58:30 +08:00
peterlu14 ead98fe8da [debug] fix running_task is None bug 2022-08-10 14:03:04 +08:00
peterlu14 dc4e1bd233 Merge branch 'dev/fix_final_data_loss' into dev/cc_cp_separate 2022-08-05 10:27:33 +08:00
peterlu14 42025d2243 [update] fix cp mode voltage problem 2022-08-05 10:26:13 +08:00
Roy b341dbf073 [update] update instruction of cp mode 2022-08-04 18:12:23 +08:00
Roy 20f6f126b0 [update] fix STEP_TIME para 2022-08-04 16:48:51 +08:00
Roy bf4a00db1a [update] remove CC_ZERO instruction 2022-07-29 11:24:29 +08:00
peterlu14 0b7a650b95 [debug] fix final data loss & flag stop after writer write 2022-07-29 11:11:46 +08:00
Roy 062613c681 [update] fix step time on IV & Cycle-IV mode 2022-07-28 16:36:34 +08:00
18 changed files with 73 additions and 128 deletions
+3
View File
@@ -1585,6 +1585,9 @@ class ControlAPI(metaclass=Router):
def stop_project(self, project) -> bool:
raise NotImplementedError()
def show_device_data(self, device) -> bool:
raise NotImplementedError()
# noinspection PyAbstractClass
class ControlClient(SocketClient, ControlAPI, metaclass=SocketClientMacro(ControlAPI)):
+11
View File
@@ -130,6 +130,14 @@ class DataAPI(metaclass=abc.ABCMeta):
def hardware_test(self) -> JSON_OBJECT:
""""""
pass
@abc.abstractmethod
def show_data(self, device: Union[int, Device]):
"""show device data
:param device: device ID
"""
pass
# noinspection PyAbstractClass
@@ -191,6 +199,9 @@ class DataClient(SocketClient, DataAPI, metaclass=SocketClientMacro(DataAPI)):
def stop_sync(self, *device: Union[int, Device]):
self.send_command('stop_sync', *self._to_device_id(*device))
def show_data(self, device: int):
self.send_command('show_data', device)
@staticmethod
def _to_device_id(*device: Union[int, Device]) -> Tuple[int, ...]:
+8 -9
View File
@@ -853,7 +853,7 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
__slots__ = ('_message', '_cycle_number', '_start_return_data', '_time_stamp',
'_total_time_stamp', '_mode', '_cycle_start_time',
'_mode_stop')
'_mode_stop', '_show_data')
def __init__(self):
super().__init__()
@@ -868,6 +868,8 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
self._mode = 0
self._cycle_start_time = []
self._show_data = False
@property
def name(self) -> str:
return self.NAME
@@ -885,12 +887,8 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
mem_cnt = data[1]
time_stamp: float = struct.unpack('<I', data[4:8])[0] # unit: ms 0x18030000
current = struct.unpack('<i', data[8:12])[0] # unit: nA
ch2 = struct.unpack('<i', data[12:16])[0] # unit: uV
voltage = struct.unpack('<i', data[12:16])[0] # unit: uV
impedance = struct.unpack('<i', data[16:20])[0] # unit: mOm
if self._mode == 16:
voltage = impedance - ch2
else:
voltage = ch2
cycle_number = struct.unpack('<H', data[20:22])[0]
finish_mode_falg = data[22]
@@ -919,9 +917,10 @@ class I4V4Z4T4DataDecoder(RecDataDecoder):
print("error timeStamp full data:", list(data), datetime.now(), '\n')
return None
else:
# print('|', time_stamp, '|', delta, '|', int(time_stamp * 1000 / 2),
# '|', current, '|', voltage, '|', impedance,
# '|', cycle_number, '|', finishMode, '@', str(self.device))
if self._show_data:
print('|', time_stamp, '|', delta, '|', int(time_stamp * 1000 / 2),
'|', current, '|', voltage, '|', impedance,
'|', cycle_number, '|', finishMode, '@', str(self.device))
# print('|', '{:10}'.format(time_stamp),
# '|', '{:4}'.format(delta),
-5
View File
@@ -651,8 +651,6 @@ class DeviceInstruction:
VIS_DEVICE_DONE = 0x20
"""identify device done"""
VIS_CC_ZERO = 0x40
VIS_STI = 0xC0
"""stimulation on virtual instruction"""
@@ -726,7 +724,6 @@ class DeviceCommonInstruction:
STOP_STIMULATE = "stop_stimulate"
VIS_DEVICE_DETECT = 'VIS_DEVICE_DETECT'
VIS_DEVICE_DONE = 'VIS_DEVICE_DONE'
VIS_CC_ZERO = 'VIS_CC_ZERO'
CIS_VOLT = 'CIS_VOLT'
CIS_VERSION = 'CIS_VERSION'
@@ -750,8 +747,6 @@ class DeviceCommonInstruction:
return 'VIS_DEVICE_DETECT',
elif instruction == cls.VIS_DEVICE_DONE:
return 'VIS_DEVICE_DONE',
elif instruction == cls.VIS_CC_ZERO:
return 'VIS_CC_ZERO',
elif instruction == cls.RECORD:
return 'VIS_STARTR',
elif instruction == cls.RECORD_ALL:
+4 -1
View File
@@ -211,6 +211,9 @@ class Project(threading.Thread):
return True
def as_json(self):
running_task = None
if self._task_manager.running_task is not None:
running_task = self._task_manager.running_task.as_json()
data = {
'id': self._id,
'name': self._name,
@@ -219,6 +222,6 @@ class Project(threading.Thread):
'status': self._status,
'device': self._device,
'task': self.task_list,
'running_task': self._task_manager.running_task.as_json()
'running_task': running_task
}
return data
+8 -5
View File
@@ -1131,14 +1131,17 @@ class RecordingFileWriter:
self._splitting_size = 0
return None
def close(self):
# if self._recording_file is not None:
# self._recording_file.close()
# self._recording_file = None
print('close1')
def close(self, mqtt_thread):
self._close = True
if len(self._recording_file_dict) > 0:
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:
_data = ' '.join(self._data_db[ch])
self._raw_save['data'][ch] = _data
+3
View File
@@ -699,6 +699,9 @@ class DataServer(SocketServer, DataAPI):
self.mqtt_thread.publish('device_instruction', json_stringify(content), inter = True)
return True
def show_data(self, device):
self._configurations[device].put_rec_queue('show_data')
class DataRuntime(metaclass=abc.ABCMeta):
__slots__ = ('_server', '_device', '_meta_file', '_data_format',
+7
View File
@@ -1339,6 +1339,13 @@ class ControlServer(SocketServer, ControlServerAPI):
def _hardware_send_test_set(self, options: Dict[str, str]) -> bool:
# TODO write options files
return False
@logging_info
def show_device_data(self, device: int):
client = self.data_server.client()
if client is not None:
with client:
client.show_data(device)
class _RandomCrashThread(ServerThread):
def __init__(self):
+22 -21
View File
@@ -185,6 +185,8 @@ class RecordingProcess(Process):
self.final_write()
self.is_closed = True
return False
elif q == 'show_data':
self._decoder._show_data = not self._decoder._show_data
else:
self.rec_update()
self.sync_data(q)
@@ -229,25 +231,6 @@ class RecordingProcess(Process):
# except:
# 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 len(self._mqtt_send_data_ch_level) == 0:
@@ -264,9 +247,27 @@ class RecordingProcess(Process):
self._writer.channels_update(ret[0].channels())
self._writer.write(ret, self._mqtt_send_data_ch_level)
# print('write time: ', time() - ctime1)
# 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 data
return
@@ -607,7 +608,7 @@ class RecordingProcess(Process):
def final_write(self):
if self._writer is not None:
return self._writer.close()
return self._writer.close(self._mqtt_send_data_ch_level)
else:
return False
@@ -1633,16 +1633,6 @@
"dpv_engineering_mode_advanced": [
"dpv_advanced_mode"
],
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"set_adc_gain_I",
"set_adc_gain_Vin",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"ble_instru_send": [
"ble_write",
"_cdr('20X>ADC_VALUE_I')"
@@ -492,14 +492,6 @@
"1XC0;1X02;4B>ve;2B>vf;4B>vg;B>cn"
]
},
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"curve_cv3_high_cycle": {
"type": "RIS",
"parameter": {
@@ -1058,7 +1058,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
"pc": "DAC_LEVEL_V_OUT_15",
@@ -1079,7 +1079,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"ve": "CYCLE_NUMBER",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
@@ -1633,16 +1633,6 @@
"dpv_engineering_mode_advanced": [
"dpv_advanced_mode"
],
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"set_adc_gain_I",
"set_adc_gain_Vin",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"ble_instru_send": [
"ble_write",
"_cdr('20X>ADC_VALUE_I')"
@@ -1058,7 +1058,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
"pc": "DAC_LEVEL_V_OUT_15",
@@ -1079,7 +1079,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"ve": "CYCLE_NUMBER",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
@@ -1633,16 +1633,6 @@
"dpv_engineering_mode_advanced": [
"dpv_advanced_mode"
],
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"set_adc_gain_I",
"set_adc_gain_Vin",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"ble_instru_send": [
"ble_write",
"_cdr('20X>ADC_VALUE_I')"
@@ -1058,7 +1058,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
"pc": "DAC_LEVEL_V_OUT_15",
@@ -1079,7 +1079,7 @@
"va": "VOLT_ORIGIN",
"vb": "VOLT_FINAL",
"vc": "VOLT_STEP",
"vd": "STEP_TIME * 0x12",
"vd": "STEP_TIME",
"ve": "CYCLE_NUMBER",
"pa": "ADC_LEVEL_I_15",
"pb": "ADC_LEVEL_V_IN_15",
@@ -1203,7 +1203,7 @@
"pe": "SAMPLE_RATE"
},
"data": [
"X07;",
"X0C;",
"B>va;4B>vb;2B>vc;2B>vd;",
"4b>pa;4b>pb;",
"4b>pc;4b>pd;",
@@ -1633,16 +1633,6 @@
"dpv_engineering_mode_advanced": [
"dpv_advanced_mode"
],
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"set_adc_gain_I",
"set_adc_gain_Vin",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"ble_instru_send": [
"ble_write",
"_cdr('20X>ADC_VALUE_I')"
@@ -424,14 +424,6 @@
"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')"
@@ -424,14 +424,6 @@
"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')"
@@ -424,14 +424,6 @@
"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')"
@@ -1426,14 +1426,6 @@
"X80;X03;B>CTRL_HIGH_Z_15"
]
},
"VIS_CC_ZERO": [
"_data_format('I4V4Z4T4')",
"_disable_cache(False)",
"_notify(True)",
"VIS_CC_ZERO",
"_sync(True)",
"VIS_STI"
],
"pulse_fly": [
"sti_mode",
"gas1_mode",