From c8453eac6247d2917de6c7ad49641ba798e13d3a Mon Sep 17 00:00:00 2001 From: yjchu Date: Wed, 18 Oct 2023 19:21:07 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B5=9C=EC=8B=A0=20=EC=BD=94=EB=93=9C4=5Fprin?= =?UTF-8?q?tdebug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AWX_collector.py | 215 ++++++++++++++++++++++++----------------------- 1 file changed, 112 insertions(+), 103 deletions(-) diff --git a/AWX_collector.py b/AWX_collector.py index 4d4854a..56351eb 100644 --- a/AWX_collector.py +++ b/AWX_collector.py @@ -66,7 +66,7 @@ with open(f"{ROOT_PATH}/config.json","r") as f: for key in do_dict: do_dict[key] = "1" -print(do_dict) +#print("do_dict", "\n", di_dict) #print(do_dict["1"]) #print(type(do_dict["1"])) @@ -80,7 +80,9 @@ a = np.array(a) with open(f"{ROOT_PATH}/config_corr.json","r") as f: corr_dict = json.load(f) - print(corr_dict) + #print(corr_dict) + for key in corr_dict: + corr_dict[key]= "0" c = [corr_dict[str(n+1)] for n in range(64)] c = np.array(c) @@ -93,6 +95,7 @@ c = np.array(c) + ############################################################################### # Get Data from Shared Memory_DO # ############################################################################### @@ -101,7 +104,7 @@ shm_DO = shared_memory.SharedMemory(create=True, size=a.nbytes, name="DO-shm") do_value = np.ndarray(a.shape, dtype=a.dtype, buffer=shm_DO.buf) do_value[:] = a[:] -#print("Get data from shm-DO : ", do_value) +print("Get data from shm-DO : ", do_value) #print(type(do_value[0])) ############################################################################### @@ -112,7 +115,7 @@ shm_CORR = shared_memory.SharedMemory(create=True, size=c.nbytes, name="Correcti correction_value = np.ndarray(c.shape, dtype=c.dtype, buffer=shm_CORR.buf) correction_value[:] = c[:] -#print("Get data from shm-CORR : ",correction_value) +print("Get data from shm-CORR : ",correction_value) ############################################################################### @@ -165,17 +168,17 @@ def cwt_thread(evt, chip_index, port_a_ai_id , port_a_do_id, port_b_ai_id , port _serial_port_B.rs485_mode = serial.rs485.RS485Settings() - port_A_AI = minimalmodbus.Instrument(serial_dev1, port_a_ai_id, debug=True, close_port_after_each_call=False) # port name, slave address (in decimal) - port_A_AI.serial.baudrate = 115200 + port_A_AI = minimalmodbus.Instrument(serial_dev1, port_a_ai_id, debug=False, close_port_after_each_call=False) # port name, slave address (in decimal) + port_A_AI.serial.baudrate = 115200 - port_A_DO = minimalmodbus.Instrument(serial_dev1, port_a_do_id, debug=True, close_port_after_each_call=False) # port name, slave address (in decimal) - port_A_DO.serial.baudrate = 115200 + port_A_DO = minimalmodbus.Instrument(serial_dev1, port_a_do_id, debug=False, close_port_after_each_call=False) # port name, slave address (in decimal) + port_A_DO.serial.baudrate = 115200 - port_B_AI = minimalmodbus.Instrument(serial_dev2, port_b_ai_id, debug=True, close_port_after_each_call=False) # port name, slave address (in decimal) - port_B_AI.serial.baudrate = 115200 + port_B_AI = minimalmodbus.Instrument(serial_dev2, port_b_ai_id, debug=False, close_port_after_each_call=False) # port name, slave address (in decimal) + port_B_AI.serial.baudrate = 115200 - port_B_DO = minimalmodbus.Instrument(serial_dev2, port_b_do_id, debug=True, close_port_after_each_call=False) # port name, slave address (in decimal) - port_B_DO.serial.baudrate = 115200 + port_B_DO = minimalmodbus.Instrument(serial_dev2, port_b_do_id, debug=False, close_port_after_each_call=False) # port name, slave address (in decimal) + port_B_DO.serial.baudrate = 115200 while isThreadRun: @@ -189,8 +192,8 @@ def cwt_thread(evt, chip_index, port_a_ai_id , port_a_do_id, port_b_ai_id , port prev_a_ai = ai_array prev_b_ai = ai_array - - + + ''' | AI1 | AI2 | DO1 | DO2 | Success | 0 | 0 | x | x | @@ -205,7 +208,7 @@ def cwt_thread(evt, chip_index, port_a_ai_id , port_a_do_id, port_b_ai_id , port -> 데이터를 어떻게 할 것이냐 -> 이전 데이터가 있다면, 이전 데이터를 가지고 더미 데이터로 사용하는 방법 => 안하기로 했었음 ''' - + timenow = int(time.time()*1000) a_isSuccess = True b_isSuccess = True @@ -214,29 +217,32 @@ def cwt_thread(evt, chip_index, port_a_ai_id , port_a_do_id, port_b_ai_id , port port_a_do_value = [] for i in list(do_value[:16]): port_a_do_value.append(int(i)) - + #print("port a do: ", port_a_do_value) #print("do type: {}".format(type(port_a_do_value[0]))) - + try: a_ai_data=port_A_AI.read_registers(0x32, 32) prev_a_ai = a_ai_data print("a_ai ;", a_ai_data) # suc_cnt_ai = suc_cnt_ai +1 - + except: a_isSuccess = False - print("fail") + print("a_ai fail") #if isSuccess: # prev_a_ai = ai_array try: - port_A_DO.write_bits(0, port_a_do_value) + #port_A_DO.write_bits(0, port_a_do_value) + a_do_value = port_A_DO.write_bits(0, port_a_do_value) + print("a_do ;", a_do_value) # suc_cnt_do = suc_cnt_do +1 - + except: - print("fail") + print(port_A_DO) + print("a_do fail") None # PORT B @@ -247,23 +253,26 @@ def cwt_thread(evt, chip_index, port_a_ai_id , port_a_do_id, port_b_ai_id , port try: b_ai_data=port_B_AI.read_registers(0x32, 32) prev_b_ai = b_ai_data + print("b_ai ;", b_ai_data) # suc_cnt_ai = suc_cnt_ai +1 - + except: b_isSuccess = False - print("fial") + print("b_ai fail") #if isSuccess: # prev_b_ai = ai_array try: - port_B_DO.write_bits(0, port_b_do_value) + #port_B_DO.write_bits(0, port_b_do_value) + b_do_value = port_B_DO.write_bits(0, port_b_do_value) + print("b_do ;", b_do_value) # suc_cnt_do = suc_cnt_do +1 - + except: None - print("fail") - + print("b_do fail") + if a_isSuccess: queue_a.put([timenow,a_ai_data, port_a_do_value]) else: @@ -295,8 +304,8 @@ def data_process_thread(data_queue, ch, chamber): below_20 = 0 element_counts = {} current_cycle_elements = 0 - cycle_counts = 0 - + cycle_counts = 0 + while isThreadRun: # 0.1s 마다 발생할 것으로 예상 timestamp, ai, do = data_queue.get() @@ -311,10 +320,10 @@ def data_process_thread(data_queue, ch, chamber): #print("timestamp: {timestamp}, \n ai: {ai}, \n do: {do}" .format(timestamp=timestamp, ai=ai, do=do)) + + - - - + ############################################################################### # Distribute AI data, Calculate value with correction # ############################################################################### @@ -325,42 +334,42 @@ def data_process_thread(data_queue, ch, chamber): voltage = [] ai_index = 0 correction_value_array = [] - - if data_queue == ch1_queue: + + if data_queue == ch1_queue: correction_value_array = np.array(correction_value[:16]) #key_to_change = str(index+1) - elif data_queue == ch2_queue: + elif data_queue == ch2_queue: correction_value_array = np.array(correction_value[16:32]) #key_to_change = str(index+17) - elif data_queue == ch3_queue: + elif data_queue == ch3_queue: correction_value_array = np.array(correction_value[32:48]) #key_to_change = str(index+33) - elif data_queue == ch4_queue: + elif data_queue == ch4_queue: correction_value_array = np.array(correction_value[48:64]) #key_to_change = str(index+49) - + for i in ai: #짝수 current (확인 필요) ai_index = ai_index +1 - print("ai list :", ai) + #print("ai list :", ai) if (ai_index%2) == 0: current.append(int(i)) - print("current :", current) + #print("current :", current) else: voltage.append(int(i)) - print("voltage :", voltage) - + #print("voltage :", voltage) + calculated_voltage = voltage + np.array(correction_value_array) calculated_voltage_list = calculated_voltage.tolist() #print("be calculated: ", calculated_voltage) - + #print("do list : ", do) #print("calculated_voltage list :", calculated_voltage_list) #mult_voltage = [do[i] * calculated_voltage_list[i] for i in range(len(do))] #print("multed value :", mult_voltage) #print(type(mult_voltage)) - + ############################################################################### # HJ ORG CODE # ############################################################################### @@ -380,13 +389,13 @@ def data_process_thread(data_queue, ch, chamber): else: # count reset error_cnt_1[voltage_cnt] = 0 - + voltage_cnt = voltage_cnt + 1 print("voltage count:",voltage_cnt) ''' + - - + ############################################################################### # YJ TEST CODE # ############################################################################### @@ -400,73 +409,73 @@ def data_process_thread(data_queue, ch, chamber): element_counts = [x + 1 if y == 1 else x for x, y in zip(element_counts, do)] #element_counts[i] = element_counts.get(i,0) + 1 print(element_counts) - + #mult_element_count = [element_count[i] * do[i] for i in range(len(do))] #이건 아닌거 같다 카운트는 계속 올라갈 거고 10일 때 DO가 켜지면 또 에러 발생임 cycle_counts += 1 - + for index, count in element_counts.items(): if cycle_counts % 10 == 0: if count == 10: #print(f"Error elements: {index}") - error_cnt_1[index] = error_cnt_1[index] +1 + error_cnt_1[index] = error_cnt_1[index] +1 #error_cnt_1 = [error_cnt_1[index] +1 * do[index] for index in range(len(error_cnt_1))] mult_error_cnt_1 = [error_cnt_1[i] * do[i] for i in range(len(do))] #mult_error_cnt_1 = [x + 1 * y for x,y in zip(error_cnt_1, do)] - + print("check error_cnt_1 : ", error_cnt_1) print("check multed value to do index : ", mult_error_cnt_1) - + global do_dict - + #key_to_change = str(index+1) - if data_queue == ch1_queue: + if data_queue == ch1_queue: key_to_change = str(index+1) - elif data_queue == ch2_queue: + elif data_queue == ch2_queue: key_to_change = str(index+17) - elif data_queue == ch3_queue: + elif data_queue == ch3_queue: key_to_change = str(index+33) - elif data_queue == ch4_queue: + elif data_queue == ch4_queue: key_to_change = str(index+49) - + if key_to_change in do_dict: - do_dict[key_to_change] = "0" + do_dict[key_to_change] = "0" with open(f"{ROOT_PATH}/config.json","w") as f: json.dump(do_dict, f) - - #print("check do off from config.json: ",do_dict.values()) - + + #print("check do off from config.json: ",do_dict.values()) + element_counts[index] = 0 #error_cnt_1 = 0 #mult_error_cnt_1 = 0 else: - element_counts[index] = 0 + element_counts[index] = 0 ''' ERR1 = 0 #count = 0 #cycle_counts = 0 #element_counts = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - + for i, value in enumerate(calculated_voltage_list): if value <= 20000 and do[i] == 1: #print(f"Updating count for index {i}") #element_counts = [x + 1 if y == 1 else x for x, y in zip(element_counts, do)] - + #element_counts[i] += 1 element_counts[i] = element_counts.get(i,0) + 1 - + #print("check do : " ,do) #print("voltage list : ", calculated_voltage_list) - + #mult_element_count = [element_count[i] * do[i] for i in range(len(do))] #이건 아닌거 같다 카운트는 계속 올라갈 거고 10일 때 DO가 켜지면 또 에러 발생임 - - #print("check do : " ,do) - #print("voltage list : ", calculated_voltage_list) + + print("check do : " ,do) + print("voltage list : ", calculated_voltage_list) #print("element cosunts : ", element_counts,"\r\n") cycle_counts += 1 - + error_cnt_1 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] for index, count in element_counts.items(): if cycle_counts % 10 == 0: @@ -475,49 +484,49 @@ def data_process_thread(data_queue, ch, chamber): #print(f"Error elements: {index}") error_cnt_1[index] += 1 #error_cnt_1 = [error_cnt_1[index] +1 * do[index] for index in range(len(error_cnt_1))] - + #mult_error_cnt_1 = [error_cnt_1[i] * do[i] for i in range(len(do))] - + #mult_error_cnt_1 = [x + 1 * y for x,y in zip(error_cnt_1, do)] //zip 함수 사용법 - + #print("check error_cnt_1 : ", error_cnt_1) #print("check multed value to do index : ", mult_error_cnt_1) - + global do_dict - + #key_to_change = str(index+1) - if data_queue == ch1_queue: + if data_queue == ch1_queue: key_to_change = str(index+1) - elif data_queue == ch2_queue: + elif data_queue == ch2_queue: key_to_change = str(index+17) - elif data_queue == ch3_queue: + elif data_queue == ch3_queue: key_to_change = str(index+33) - elif data_queue == ch4_queue: + elif data_queue == ch4_queue: key_to_change = str(index+49) - + if key_to_change in do_dict: - do_dict[key_to_change] = "0" + do_dict[key_to_change] = "0" with open(f"{ROOT_PATH}/config.json","w") as f: json.dump(do_dict, f) - - #print("check do off from config.json: ",do_dict.values()) - + + #print("check do off from config.json: ",do_dict.values()) + element_counts[index] = 0 - + #mult_error_cnt_1 = 0 else: element_counts[index] = 0 - + # 로깅 기능을 넣어야 겠다...? # 파일 하나 열어서, 데이터를 쓴다 - - - + + + ############################################################################### # Make data form to json and Publish message # ############################################################################### - + #데이터 만들어서 전달 if timestamp > 0: #if timestamp == 0: @@ -535,16 +544,16 @@ def data_process_thread(data_queue, ch, chamber): else: data_list_for_send_2.append(data) - + ''' - ############## Error Do 데이터 잘려오는 증상 추정 원인 개선 방안 중 하나 ################ + ############## Error Do 데이터 잘려오는 증상 추정 원인 개선 방안 중 하나 ################ # -> string 만들어서 전달하자 json_obj1 = json.loads(data) if(queue_select_count == 0): data_list_for_send_1.append(data) else: data_list_for_send_2.append(data) - + ''' if queue_count == 10: @@ -558,8 +567,8 @@ def data_process_thread(data_queue, ch, chamber): "assetCode":"S0NQR0423090001", #나중에는 config에서 셋팅되는 값, or model 값으로 변경 (asset) "dataType":"DATA", "data": { - "channel": ch, # 채널 입력 ?자 - "chamber":chamber, #chamber 도 입력 ?자 + "channel": ch, # 채널 입력 �자 + "chamber":chamber, #chamber 도 입력 �자 "slot": ch, #슬롯 값은 chamber와 ch 값으로 만든다 "list": data_list_for_send_1 } @@ -572,8 +581,8 @@ def data_process_thread(data_queue, ch, chamber): "assetCode":"S0NQR0423090001", #나중에는 config에서 셋팅되는 값, or model 값으로 변경 (asset) "dataType":"DATA", "data": { - "channel": ch, # 채널 입력 ?자 - "chamber":chamber, #chamber 도 입력 ?자 + "channel": ch, # 채널 입력 �자 + "chamber":chamber, #chamber 도 입력 �자 "slot": ch, #슬롯 값은 chamber와 ch 값으로 만든다 "list": data_list_for_send_2 } @@ -589,7 +598,7 @@ def data_process_thread(data_queue, ch, chamber): publish_json_message(client, data_json_str) - + ############################################################################### @@ -627,8 +636,8 @@ if __name__ == '__main__': chip0_evt = threading.Event() chip1_evt = threading.Event() - read_data_chip0 = threading.Thread(target=cwt_thread,args=(chip0_evt, 0, 1,2, 5,6, ch1_queue, ch2_queue)) #현재 4 개씩 연결되 어 있어서 테스트 용 - read_data_chip1 = threading.Thread(target=cwt_thread,args=(chip1_evt, 1, 9,10, 13,14, ch3_queue, ch4_queue)) + read_data_chip0 = threading.Thread(target=cwt_thread,args=(chip0_evt, 0, 1,2, 13,14, ch1_queue, ch2_queue)) #현재 4개씩 연결되 어 있어서 테스트 용 + read_data_chip1 = threading.Thread(target=cwt_thread,args=(chip1_evt, 1, 5,6, 7,8, ch3_queue, ch4_queue)) data_process_ch1 = threading.Thread(target=data_process_thread,args=(ch1_queue, 1, 1)) data_process_ch2 = threading.Thread(target=data_process_thread,args=(ch2_queue, 2, 1)) @@ -642,4 +651,4 @@ if __name__ == '__main__': data_process_ch2.start() data_process_ch3.start() data_process_ch4.start() - event_thread.start() \ No newline at end of file + event_thread.start()