From dee07b77bbc7f52f3e948a4a1c2424d8ad947ab5 Mon Sep 17 00:00:00 2001 From: gitea Date: Fri, 12 Jul 2024 10:48:50 +0800 Subject: [PATCH] =?UTF-8?q?v0.1.9.1(2024/07/12)=201.=20[APIs:=20do=5Fbrake?= =?UTF-8?q?.py]=20=20=20=20-=20=E4=BF=AE=E6=94=B9=E6=AD=A3=E8=B4=9F?= =?UTF-8?q?=E6=96=B9=E5=90=91=E6=8B=8D=E6=80=A5=E5=81=9C=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=9F=BA=E6=9C=AC=E5=8E=9F=E7=90=86=E4=B8=BA?= =?UTF-8?q?=EF=BC=9A=E8=BF=90=E8=A1=8C=E4=B9=8B=E5=89=8D=E5=8F=91=E9=80=81?= =?UTF-8?q?=E6=AD=A3=E8=B4=9F=E6=96=B9=E5=90=91=E4=BF=A1=E5=8F=B7pon?= =?UTF-8?q?=E7=BB=99RL=EF=BC=8CRL=E6=A0=B9=E6=8D=AE=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E9=80=9F=E5=BA=A6=E6=AD=A3=E8=B4=9F=E5=8F=B7?= =?UTF-8?q?=E8=BF=90=E4=BD=9C=20=20=20=20-=20=E7=94=B1=E4=BA=8E=E4=B8=8A?= =?UTF-8?q?=E8=BF=B0=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=AD=A3=E8=B4=9F=E6=96=B9?= =?UTF-8?q?=E5=90=91=E6=80=A5=E5=81=9C=E5=87=86=E7=A1=AE=E7=8E=87=E5=8F=AF?= =?UTF-8?q?=E8=BE=BE100%=202.=20[APIs:=20aio.py]=20=20=20=20-=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9write2textbox=E7=9A=84=E8=BE=93=E5=87=BA=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=AE=9E=E7=8E=B0=E6=9B=B4=E5=8A=A0=E7=81=B5?= =?UTF-8?q?=E6=B4=BB=E7=9A=84=E8=87=AA=E5=AE=9A=E4=B9=89=E8=BE=93=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E6=97=B6=E4=BF=AE=E6=94=B9=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=83=A8=E5=88=86=203.=20[APIs:=20openapi.py]=20=20=20=20-=20m?= =?UTF-8?q?odbus=E7=B1=BB=E6=96=B0=E5=A2=9E=E6=8C=87=E7=A4=BA=E6=94=BF?= =?UTF-8?q?=E5=BA=9C=E6=96=B9=E5=90=91=E6=80=A5=E5=81=9C=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7pon=EF=BC=8C=E5=B0=86modbus=E7=B1=BB=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E4=B8=AD=E7=9A=84tab=5Fname=E5=88=A0=E9=99=A4=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E6=94=B9tab=5Fname=E7=9A=84=E5=80=BC?= =?UTF-8?q?=E4=B8=BA'openapi'=20=20=20=20-=20socket=E7=B1=BB=E7=A7=8D?= =?UTF-8?q?=E4=BF=AE=E6=94=B9tab=5Fname=E7=9A=84=E5=80=BC=E4=B8=BA'openapi?= =?UTF-8?q?'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aio/README.md | 15 ++++++++-- aio/assets/autotest.xml | 41 ++++++++++++++++++++++------ aio/assets/file_version_info.txt | 8 +++--- aio/assets/target.zip | Bin 26139 -> 26230 bytes aio/assets/vers | 2 +- aio/code/aio.py | 32 ++++++++++++++-------- aio/code/automatic_test/do_brake.py | 27 ++++++++++++------ aio/code/automatic_test/openapi.py | 17 ++++++++---- 8 files changed, 103 insertions(+), 39 deletions(-) diff --git a/aio/README.md b/aio/README.md index f5b9072..ba2820e 100644 --- a/aio/README.md +++ b/aio/README.md @@ -132,13 +132,14 @@ pyinstaller --noconfirm --onedir --windowed --add-data "C:/Users/Administrator/A > **需要注意的点** -1. 使用之前需要手动修改点位信息,确保所有点位不会发生撞击之后,再进行自动化测试 +1. 使用之前需要手动修改!!负载信息!!点位信息!!,确保所有点位不会发生撞击之后,再进行自动化测试 2. 工程文件不能手动重命名,需要重命名存档,可以导入HMI,然后另存为 3. 务必正确填写configs.xlsx中的Target页面,A1单元格可以选择正负方向急停,但不完全保证100%,大概有95%左右的准确度 4. 由于xCore系统问题,运行过程中可能会出现机器人宕机问题,如果遇到,可以手动重启控制柜,重新运行 5. 运行过程中,如果是因为机器问题无法达到额定百分比速度,会在日志输出框提示,注意观察 6. 运行自动化程序之前,确保机器处于正常状态,无故障,未触发急停 7. 需要额外硬件接线,详细参考configs.xlsx中急停接线图sheet页 +8. 注意观察二轴100%臂展时,是否可以获取到正确的数据 #### 6) 电机电流自动化测试 @@ -450,4 +451,14 @@ v0.1.8.2(2024/07/08) v0.1.9.0(2024/07/10) 1. 完成了制动性能的自动化采集 2. 完善了modbus浮点数读写相关的功能 -3. 修改了target.zip工程,该工程目前适配电机电流和制动性能 \ No newline at end of file +3. 修改了target.zip工程,该工程目前适配电机电流和制动性能 + +v0.1.9.1(2024/07/12) +1. [APIs: do_brake.py] + - 修改正负方向拍急停的逻辑,基本原理为:运行之前发送正负方向信号pon给RL,RL根据信号以及速度正负号运作 + - 由于上述修改,正负方向急停准确率可达100% +2. [APIs: aio.py] + - 修改write2textbox的输出逻辑,实现更加灵活的自定义输出,同时修改相关部分 +3. [APIs: openapi.py] + - modbus类新增指示政府方向急停的信号pon,将modbus类入参中的tab_name删除,并修改tab_name的值为'openapi' + - socket类种修改tab_name的值为'openapi' diff --git a/aio/assets/autotest.xml b/aio/assets/autotest.xml index 51aa397..e201e65 100644 --- a/aio/assets/autotest.xml +++ b/aio/assets/autotest.xml @@ -943,6 +943,7 @@ + @@ -950,7 +951,7 @@ - + @@ -961,7 +962,8 @@ - + + @@ -969,7 +971,7 @@ - + @@ -980,7 +982,8 @@ - + + @@ -988,7 +991,7 @@ - + @@ -999,7 +1002,8 @@ - + + @@ -1007,7 +1011,7 @@ - + @@ -1019,6 +1023,7 @@ + @@ -1026,7 +1031,7 @@ - + @@ -1038,5 +1043,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/aio/assets/file_version_info.txt b/aio/assets/file_version_info.txt index c21b6b5..ca423d4 100644 --- a/aio/assets/file_version_info.txt +++ b/aio/assets/file_version_info.txt @@ -6,8 +6,8 @@ VSVersionInfo( ffi=FixedFileInfo( # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) # Set not needed items to zero 0. - filevers=(0, 1, 9, 0), - prodvers=(0, 1, 9, 0), + filevers=(0, 1, 9, 1), + prodvers=(0, 1, 9, 1), # Contains a bitmask that specifies the valid bits 'flags'r mask=0x3f, # Contains a bitmask that specifies the Boolean attributes of the file. @@ -31,12 +31,12 @@ VSVersionInfo( '040904b0', [StringStruct('CompanyName', 'Rokae - https://www.rokae.com/'), StringStruct('FileDescription', 'All in one automatic toolbox'), - StringStruct('FileVersion', '0.1.9.0 (2024-07-10)'), + StringStruct('FileVersion', '0.1.9.1 (2024-07-12)'), StringStruct('InternalName', 'AIO.exe'), StringStruct('LegalCopyright', '© 2024-2024 Manford Fan'), StringStruct('OriginalFilename', 'AIO.exe'), StringStruct('ProductName', 'AIO'), - StringStruct('ProductVersion', '0.1.9.0 (2024-07-10)')]) + StringStruct('ProductVersion', '0.1.9.1 (2024-07-12)')]) ]), VarFileInfo([VarStruct('Translation', [1033, 1200])]) ] diff --git a/aio/assets/target.zip b/aio/assets/target.zip index 651d577bb36baeb507b96914b35e0c138c559be4..2c9fdb777fe8303dc6a7e87ec4b61cecdf3d822f 100644 GIT binary patch delta 7189 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 diff --git a/aio/assets/vers b/aio/assets/vers index 47cff81..282634a 100644 --- a/aio/assets/vers +++ b/aio/assets/vers @@ -1 +1 @@ -0.1.9.0 @ 07/10/2024 \ No newline at end of file +0.1.9.1 @ 07/12/2024 \ No newline at end of file diff --git a/aio/code/aio.py b/aio/code/aio.py index 165966c..adfeca2 100644 --- a/aio/code/aio.py +++ b/aio/code/aio.py @@ -43,8 +43,7 @@ class App(customtkinter.CTk): self.my_font = customtkinter.CTkFont(family="Consolas", size=16, weight="bold") self.w_param = 84 self.hr = None - self.md_at = None - self.md_dp = None + self.md = None # ===================================================================== # configure window self.title("AIO - All in one automatic toolbox") @@ -71,7 +70,7 @@ class App(customtkinter.CTk): btns_func['log']['btn'].configure(command=lambda: self.thread_it(self.func_log_callback)) btns_func['end']['btn'].configure(command=lambda: self.thread_it(self.func_end_callback)) # create version info - self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.1.9.0\nDate: 07/10/2024", font=self.my_font, text_color="#4F4F4F") + self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.1.9.1\nDate: 07/12/2024", font=self.my_font, text_color="#4F4F4F") self.frame_func.rowconfigure(6, weight=1) self.label_version.grid(row=6, column=0, padx=20, pady=20, sticky='s') # ===================================================================== @@ -175,7 +174,7 @@ class App(customtkinter.CTk): else: for _func in _btn_funcs: if _btn_funcs[_func] == value: - btn_functions.main(self.hr, self.md_at, _func, self.write2textbox) + btn_functions.main(self.hr, self.md, _func, self.write2textbox) break self.seg_button.configure(state='normal') @@ -185,8 +184,7 @@ class App(customtkinter.CTk): with open(f"{current_path}/../assets/templates/heartbeat", "w", encoding='utf-8') as f_hb: f_hb.write('0') self.hr = openapi.HmiRequest(self.write2textbox) - self.md_at = openapi.ModbusRequest(self, 'Automatic Test') - self.md_dp = openapi.ModbusRequest(self, 'Data Process') + self.md = openapi.ModbusRequest(self.write2textbox) while True: with open(f'{current_path}/../assets/templates/heartbeat', 'r', encoding='utf-8') as f_hb: @@ -194,7 +192,6 @@ class App(customtkinter.CTk): pb_color = 'green' if c_state == '1' else 'red' self.progressbar.configure(progress_color=pb_color) if c_state == '0': - # self.textbox.delete(index1='1.0', index2='end') self.hr.t_bool = False sleep(3) del self.hr @@ -203,7 +200,6 @@ class App(customtkinter.CTk): def tabview_click(self): self.initialization() - # self.textbox.delete(index1='1.0', index2='end') tab_name = self.tabview.get() if tab_name == 'Data Process': @@ -351,7 +347,21 @@ class App(customtkinter.CTk): self.textbox.insert(index='end', text=text + '\n', tags=color) self.textbox.update() self.textbox.see('end') - + elif tab_name == 'openapi' and tab_name_cur == 'Automatic Test': + if wait != 0: + self.textbox.insert(index='end', text=text, tags=color) + self.textbox.update() + self.textbox.see('end') + elif exitcode != 0: + self.textbox.insert(index='end', text=text + '\n', tags=color) + self.textbox.update() + self.textbox.see('end') + raise Exception(f"Error code: {exitcode}") + else: + self.textbox.insert(index='end', text=text + '\n', tags=color) + self.textbox.update() + self.textbox.see('end') + def is_float(self, flag, *args): for item in args: try: @@ -459,10 +469,10 @@ class App(customtkinter.CTk): func_dict[flag](path=args[0], w2t=self.write2textbox) elif flag == 5: self.pre_warning() - func_dict[flag](path=args[0], hr=self.hr, md=self.md_at, loadsel=args[1], w2t=self.write2textbox) + func_dict[flag](path=args[0], hr=self.hr, md=self.md, loadsel=args[1], w2t=self.write2textbox) elif flag == 6: self.pre_warning() - func_dict[flag](path=args[0], hr=self.hr, md=self.md_at, loadsel=args[1], w2t=self.write2textbox) + func_dict[flag](path=args[0], hr=self.hr, md=self.md, loadsel=args[1], w2t=self.write2textbox) else: tkinter.messagebox.showerror(title="参数错误", message="请检查对应参数是否填写正确!", ) diff --git a/aio/code/automatic_test/do_brake.py b/aio/code/automatic_test/do_brake.py index 6b94f6b..171310b 100644 --- a/aio/code/automatic_test/do_brake.py +++ b/aio/code/automatic_test/do_brake.py @@ -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() @@ -233,7 +240,7 @@ def run_rl(path, loadsel, hr, md, config_file, prj_file, result_dirs, w2t): 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 +284,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 +295,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) diff --git a/aio/code/automatic_test/openapi.py b/aio/code/automatic_test/openapi.py index 703e9c7..f688694 100644 --- a/aio/code/automatic_test/openapi.py +++ b/aio/code/automatic_test/openapi.py @@ -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)