Merge branch 'main' of gitea.rustle.cc:gitea/rokae into profile
fetch the newest codes of main
This commit is contained in:
		| @@ -168,6 +168,13 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): | ||||
|     ] | ||||
|     wb = load_workbook(config_file, read_only=True) | ||||
|     ws = wb['Target'] | ||||
|     if ws.cell(row=1, column=1).value == 'positive': | ||||
|         md.write_pon(True) | ||||
|     elif ws.cell(row=1, column=1).value == 'negative': | ||||
|         md.write_pon(False) | ||||
|     else: | ||||
|         w2t("configs.xlsx中Target页面A1单元格填写不正确,检查后重新运行...", 0, 111, 'red', 'Automatic Test') | ||||
|  | ||||
|     for condition in result_dirs: | ||||
|         _reach = condition.split('_')[0].removeprefix('reach') | ||||
|         _load = condition.split('_')[1].removeprefix('load') | ||||
| @@ -196,17 +203,17 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): | ||||
|                 ssh.set_missing_host_key_policy(AutoAddPolicy()) | ||||
|                 ssh.connect('192.168.0.160', 22, username='luoshi', password='luoshi2019') | ||||
|                 if ws.cell(row=1, column=1).value == 'positive': | ||||
|                     _rl_cmd = f"brake_E(j{axis}_{_reach}_n, j{axis}_{_reach}_p, p_speed, p_tool)" | ||||
|                 elif ws.cell(row=1, column=1).value == 'negative': | ||||
|                     _rl_cmd = f"brake_E(j{axis}_{_reach}_p, j{axis}_{_reach}_n, p_speed, p_tool)" | ||||
|                 elif ws.cell(row=1, column=1).value == 'negative': | ||||
|                     _rl_cmd = f"brake_E(j{axis}_{_reach}_n, j{axis}_{_reach}_p, p_speed, p_tool)" | ||||
|                 else: | ||||
|                     w2t("configs.xlsx中Target页面A1单元格填写不正确,检查后重新运行...", 0, 111, 'red', 'Automatic Test') | ||||
|                 _rl_speed = f"VelSet {_speed}" | ||||
|                 cmd = 'cd /home/luoshi/bin/controller/; ' | ||||
|                 cmd += 'sudo sed -i "/brake_E/d" projects/target/_build/brake/main.mod; ' | ||||
|                 cmd += f'sudo sed -i "/DONOTDELETE/i {_rl_cmd}" projects/target/_build/brake/main.mod; ' | ||||
|                 cmd += f'sudo sed -i "/VelSet/d" projects/target/_build/brake/main.mod; ' | ||||
|                 cmd += f'sudo sed -i "/MoveAbsJ/i {_rl_speed}" projects/target/_build/brake/main.mod; ' | ||||
|                 cmd += 'sudo sed -i "/VelSet/d" projects/target/_build/brake/main.mod; ' | ||||
|                 cmd += f'sudo sed -i "/MoveAbsJ/i {_rl_speed}" projects/target/_build/brake/main.mod' | ||||
|                 stdin, stdout, stderr = ssh.exec_command(cmd, get_pty=True) | ||||
|                 stdin.write('luoshi2019' + '\n') | ||||
|                 stdin.flush() | ||||
| @@ -220,20 +227,21 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): | ||||
|                 _response = execution('state.switch_auto', hr, w2t) | ||||
|                 _response = execution('state.switch_motor_on', hr, w2t) | ||||
|                 _response = execution('rl_task.run', hr, w2t, tasks=['brake', 'stop0_related']) | ||||
|                 for i in range(3): | ||||
|                 _t_start = time() | ||||
|                 while True: | ||||
|                     if md.read_ready_to_go() == 1: | ||||
|                         md.write_act(True) | ||||
|                         break | ||||
|                     else: | ||||
|                         sleep(1) | ||||
|                 else: | ||||
|                     w2t("未收到机器人的运行信号,需要确认RL程序编写正确并正常执行...", 0, 111, 'red', 'Automatic Test') | ||||
|  | ||||
|                         if (time() - _t_start) // 20 > 1: | ||||
|                             w2t("20s内未收到机器人的运行信号,需要确认RL程序编写正确并正常执行...", 0, 111, 'red', 'Automatic Test') | ||||
|                         else: | ||||
|                             sleep(1) | ||||
|                 # 4. 第一次打开诊断曲线,并执行采集8s,之后触发软急停,关闭曲线采集,找出最大速度,传递给RL程序,最后清除相关记录 | ||||
|                 if count == 1: | ||||
|                     _response = execution('diagnosis.open', hr, w2t, open=True, display_open=True) | ||||
|                     _response = execution('diagnosis.set_params', hr, w2t, display_pdo_params=display_pdo_params) | ||||
|                     sleep(8)  # 前八秒获取实际最大速度 | ||||
|                     sleep(10)  # 前10秒获取实际最大速度 | ||||
|  | ||||
|                     md.trigger_estop() | ||||
|                     _response = execution('diagnosis.open', hr, w2t, open=False, display_open=False) | ||||
| @@ -277,7 +285,7 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): | ||||
|  | ||||
|                 _response = execution('diagnosis.open', hr, w2t, open=True, display_open=True) | ||||
|                 _response = execution('diagnosis.set_params', hr, w2t, display_pdo_params=display_pdo_params) | ||||
|                 # sleep(randint(3, 6)) | ||||
|                 sleep(randint(3, 6)) | ||||
|                 md.write_probe(True) | ||||
|                 _t_start = time() | ||||
|                 while True: | ||||
| @@ -288,8 +296,12 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): | ||||
|                         sleep(1)  # 保证所有数据均已返回 | ||||
|                         break | ||||
|                     else: | ||||
|                         if (time() - _t_start) // 60 > 1: | ||||
|                             w2t(f"规定时间内未找到合适的点触发急停,需要确认RL/Python程序编写正确并正常执行...", 0, 111, 'red', 'Automatic Test') | ||||
|                         if (time() - _t_start) > 30: | ||||
|                             w2t(f"30s内未触发急停,该条数据无效,需要确认RL/Python程序编写正确并正常执行,或者判别是否是机器本体问题...", 0, 0, 'red', 'Automatic Test') | ||||
|                             md.write_probe(False) | ||||
|                             _response = execution('diagnosis.open', hr, w2t, open=False, display_open=False) | ||||
|                             sleep(1)  # 保证所有数据均已返回 | ||||
|                             break | ||||
|                         else: | ||||
|                             sleep(1) | ||||
|  | ||||
|   | ||||
| @@ -120,16 +120,14 @@ def data_proc_regular(path, filename, channel, scenario_time): | ||||
|                 for item in data: | ||||
|                     item['value'].reverse() | ||||
|                     if item.get('channel', None) == channel and item.get('name', None) == 'hw_joint_vel_feedback': | ||||
|                         item['value'].reverse() | ||||
|                         _d2d_vel['hw_joint_vel_feedback'].extend(item['value']) | ||||
|                     elif item.get('channel', None) == channel and item.get('name', None) == 'device_servo_trq_feedback': | ||||
|                         item['value'].reverse() | ||||
|                         _d2d_trq['device_servo_trq_feedback'].extend(item['value']) | ||||
|  | ||||
|             df1 = pandas.DataFrame.from_dict(_d2d_vel) | ||||
|             df2 = pandas.DataFrame.from_dict(_d2d_trq) | ||||
|             df = pandas.concat([df1, df2], axis=1) | ||||
|             _filename = f'{path}\\single\\j{channel+1}_single.data' | ||||
|             _filename = f'{path}\\single\\j{channel+1}_single_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|     elif channel in list(range(6, 9)): | ||||
|         with open(filename, 'r', encoding='utf-8') as f_obj: | ||||
| @@ -178,37 +176,37 @@ def data_proc_regular(path, filename, channel, scenario_time): | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_0) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_0) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j1_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j1_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_1) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_1) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j2_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j2_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_2) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_2) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j3_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j3_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_3) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_3) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j4_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j4_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_4) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_4) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j5_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j5_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|             df_01 = pandas.DataFrame.from_dict(_d2d_vel_5) | ||||
|             df_02 = pandas.DataFrame.from_dict(_d2d_trq_5) | ||||
|             df = pandas.concat([df_01, df_02], axis=1) | ||||
|             _filename = f'{path}\\s_{channel-5}\\j6_s_{channel-5}_{scenario_time}.data' | ||||
|             _filename = f'{path}\\s_{channel-5}\\j6_s_{channel-5}_{scenario_time}_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|     elif channel in list(range(9, 15)): | ||||
|         with open(filename, 'r', encoding='utf-8') as f_obj: | ||||
| @@ -227,7 +225,7 @@ def data_proc_regular(path, filename, channel, scenario_time): | ||||
|             df1 = pandas.DataFrame.from_dict(_d2d_vel) | ||||
|             df2 = pandas.DataFrame.from_dict(_d2d_trq) | ||||
|             df = pandas.concat([df1, df2], axis=1) | ||||
|             _filename = f'{path}\\single\\j{channel-8}_hold.data' | ||||
|             _filename = f'{path}\\single\\j{channel-8}_hold_{time()}.data' | ||||
|             df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|  | ||||
| @@ -248,7 +246,7 @@ def data_proc_inertia(path, filename, channel): | ||||
|         df1 = pandas.DataFrame.from_dict(_d2d_vel) | ||||
|         df2 = pandas.DataFrame.from_dict(_d2d_trq) | ||||
|         df = pandas.concat([df1, df2], axis=1) | ||||
|         _filename = f'{path}\\inertia\\j{channel+4}_inertia.data' | ||||
|         _filename = f'{path}\\inertia\\j{channel+4}_inertia_{time()}.data' | ||||
|         df.to_csv(_filename, sep='\t', index=False) | ||||
|  | ||||
|  | ||||
| @@ -308,6 +306,8 @@ def run_rl(path, hr, md, loadsel, w2t): | ||||
|         _response = execution('diagnosis.open', hr, w2t, open=False, display_open=False) | ||||
|         md.trigger_estop() | ||||
|         md.reset_estop() | ||||
|         md.write_act(False) | ||||
|         sleep(1)  # 让曲线彻底关闭 | ||||
|         _response = execution('state.switch_manual', hr, w2t) | ||||
|         _response = execution('state.switch_motor_off', hr, w2t) | ||||
|  | ||||
| @@ -334,19 +334,19 @@ def run_rl(path, hr, md, loadsel, w2t): | ||||
|  | ||||
|         # 4. 开始运行程序,单轴运行15s | ||||
|         _response = execution('rl_task.run', hr, w2t, tasks=['current']) | ||||
|         for i in range(3): | ||||
|         _t_start = time() | ||||
|         while True: | ||||
|             if md.read_ready_to_go() == 1: | ||||
|                 md.write_act(True) | ||||
|                 sleep(1) | ||||
|                 md.write_act(False) | ||||
|                 break | ||||
|             else: | ||||
|                 sleep(1) | ||||
|         else: | ||||
|             w2t("未收到机器人的运行信号,需要确认RL程序编写正确并正常执行...", 0, 111, 'red', 'Automatic Test') | ||||
|                 if (time() - _t_start) // 20 > 1: | ||||
|                     w2t("20s内未收到机器人的运行信号,需要确认RL程序编写正确并正常执行...", 0, 111, 'red', 'Automatic Test') | ||||
|                 else: | ||||
|                     sleep(1) | ||||
|  | ||||
|         # 5. 打开诊断曲线,并执行采集 | ||||
|         sleep(7)  # 保证程序已经运行起来,其实主要是为了保持电流的采集而设定 | ||||
|         sleep(10)  # 保证程序已经运行起来,其实主要是为了保持电流的采集而设定 | ||||
|         _response = execution('diagnosis.open', hr, w2t, open=True, display_open=True) | ||||
|         display_pdo_params = [ | ||||
|             {"name": "hw_joint_vel_feedback", "channel": 0}, | ||||
| @@ -365,7 +365,9 @@ def run_rl(path, hr, md, loadsel, w2t): | ||||
|         ] | ||||
|         _response = execution('diagnosis.set_params', hr, w2t, display_pdo_params=display_pdo_params) | ||||
|         scenario_time = 0 | ||||
|         if number < 6 or number > 8: | ||||
|         if number < 6: | ||||
|             sleep(35) | ||||
|         elif number > 8: | ||||
|             sleep(15) | ||||
|         else: | ||||
|             _t_start = time() | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| from json import load, dumps, loads | ||||
| from json import load, dumps | ||||
| from socket import socket, setdefaulttimeout, AF_INET, SOCK_STREAM | ||||
| from threading import Thread | ||||
| import selectors | ||||
| @@ -14,10 +14,10 @@ current_path = dirname(__file__) | ||||
|  | ||||
|  | ||||
| class ModbusRequest(object): | ||||
|     def __init__(self, w2t, tab_name): | ||||
|     def __init__(self, w2t): | ||||
|         super().__init__() | ||||
|         self.w2t = w2t | ||||
|         self.tab_name = tab_name | ||||
|         self.tab_name = 'openapi' | ||||
|         self.host = '192.168.0.160' | ||||
|         self.port = 502 | ||||
|         self.c = ModbusTcpClient(self.host, self.port) | ||||
| @@ -167,6 +167,13 @@ class ModbusRequest(object): | ||||
|             self.w2t(f"{Err}") | ||||
|             self.w2t("无法写入速度探测信号,连接Modbus失败,需要确认网络是否通畅,或是未正确导入寄存器文件...", 0, 100, 'red', self.tab_name) | ||||
|  | ||||
|     def write_pon(self, pon):  # positive or negative | ||||
|         try: | ||||
|             self.c.write_register(41011, pon) | ||||
|         except Exception as Err: | ||||
|             self.w2t(f"{Err}") | ||||
|             self.w2t("无法写入正负方向信号,连接Modbus失败,需要确认网络是否通畅,或是未正确导入寄存器文件...", 0, 100, 'red', self.tab_name) | ||||
|  | ||||
|  | ||||
| class HmiRequest(object): | ||||
|     def __init__(self, w2t): | ||||
| @@ -182,7 +189,7 @@ class HmiRequest(object): | ||||
|         self.flag_xs = 0 | ||||
|         self.response_xs = '' | ||||
|         self.t_bool = True | ||||
|         self.tab_name = 'Automatic Test' | ||||
|         self.tab_name = 'openapi' | ||||
|         self.pkg_size = 0 | ||||
|         self.broke = 0 | ||||
|         self.half = 0 | ||||
| @@ -219,7 +226,7 @@ class HmiRequest(object): | ||||
|                 # self.w2t("Connection success", 0, 0, 'green', tab_name=self.tab_name) | ||||
|                 with open(f"{current_path}/../../assets/templates/heartbeat", "w", encoding='utf-8') as f_hb: | ||||
|                     f_hb.write('1') | ||||
|                 md = ModbusRequest(self.w2t, self.tab_name) | ||||
|                 md = ModbusRequest(self.w2t) | ||||
|                 md.reset_estop() | ||||
|                 md.clear_alarm() | ||||
|                 md.write_act(False) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user