From 2af2bff5e87fdb920acc7223840cae15a586193b Mon Sep 17 00:00:00 2001 From: FrankCV2048 <1395405735@qq.com> Date: Fri, 11 Oct 2024 23:05:08 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=90=84=E7=A7=8D=E4=B8=AD=E9=97=B4=E7=82=B9=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CU/Feeding.py | 79 ++++++++++++++++++++++++++++++++--------- Config/FeedLine.ini | 35 ++++++++++++++---- Constant.py | 5 +++ MvSDKLog/CamCtrl_00.log | 10 ++++++ Seting.ini | 1 + app.py | 46 ++++++++++++++++++------ 6 files changed, 142 insertions(+), 34 deletions(-) diff --git a/CU/Feeding.py b/CU/Feeding.py index 9cea534..f1986a0 100644 --- a/CU/Feeding.py +++ b/CU/Feeding.py @@ -21,15 +21,21 @@ class FeedStatus(IntEnum): FSafeF = 6 FFeedP = 7 FBroken = 8 - FFinished = 9 + FCut = 9 + FShake = 10 + FDropBag = 11 + FFinished = 12 class FeedLine: - def __init__(self,name,safe_position:Real_Position,photo_position:Real_Position,mid_position:Real_Position,broken_position:Real_Position,feed_position:Real_Position): + def __init__(self,name,safe_position:Real_Position,photo_position:Real_Position,mid_position:Real_Position,broken1_position:Real_Position,broken2_position:Real_Position,drop_bag_position:Real_Position,zip_bag_position:Real_Position,feed_position:Real_Position): self.safe_position = safe_position self.photo_position = photo_position self.feed_position = feed_position self.mid_position = mid_position - self.broken_position = broken_position + self.broken1_position = broken1_position + self.broken2_position = broken2_position + self.drop_bag_position = drop_bag_position + self.zip_bag_position = zip_bag_position self.take_position = None self.name = name @@ -150,35 +156,72 @@ class Feeding(): log.log_message(logging.INFO, Constant.str_feed_feed) if self.feedConfig.feedLine.feed_position.compare(real_position): self.feedStatus = FeedStatus.FBroken - self.sendTargPosition(self.feedConfig.feedLine.broken_position) + self.sendTargPosition(self.feedConfig.feedLine.broken1_position) pass #破袋 elif self.feedStatus==FeedStatus.FBroken: log.log_message(logging.INFO, Constant.str_feed_broken) - if self.feedConfig.feedLine.broken_position.compare(real_position): - self.feedConfig.num = self.feedConfig.num-1 - if self.feedConfig.num == 0: - self.feedStatus=FeedStatus.FNone - self.sendTargPosition(self.feedConfig.feedLine.safe_position) - self.init_detection_image() - log.log_message(logging.INFO, Constant.str_feed_finish) + if self.feedConfig.feedLine.broken1_position.compare(real_position): + self.sendTargPosition(self.feedConfig.feedLine.broken2_position) + if self.feedConfig.feedLine.broken2_position.compare(real_position): + current_position = Real_Position().init_position(0,0,0,0,0,0) + current_position.X = self.robotClient.status_model.axis_0 + current_position.Y = self.robotClient.status_model.axis_1 + current_position.Z = self.robotClient.status_model.axis_2 + current_position.U = self.robotClient.status_model.axis_3 + current_position.V = self.robotClient.status_model.axis_4 + current_position.W = self.robotClient.status_model.axis_5 + for i in range(8): + if (i % 2 == 0) ^ (i >= 3): ## 过一半取消 + c1 = current_position.U - 5 + self.sendTargPosition(c1, MoveType.AXIS, speed=Constant.shake_speed) + else: + c1 = current_position.U + 5 + self.sendTargPosition(c1, MoveType.AXIS, speed=Constant.shake_speed) + if True: # 延迟判断,如果最后点位延迟1s,则认为阶段完成 + self.feedStatus = FeedStatus.FDropBag + self.sendTargPosition(self.feedConfig.feedLine.safe_position) + + elif self.feedStatus == FeedStatus.FDropBag: + log.log_message(logging.INFO, Constant.str_feed_drop) + if self.feedConfig.feedLine.safe_position.compare(real_position): + if self.feedConfig.num - 1 != 0: + self.sendTargPosition(self.feedConfig.feedLine.drop_bag_position) else: - log.log_message(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') - self.feedStatus = FeedStatus.FSafeP - self.sendTargPosition(self.feedConfig.feedLine.safe_position) + self.sendTargPosition(self.feedConfig.feedLine.zip_bag_position) + pass + if self.feedConfig.feedLine.drop_bag_position.compare(real_position): + # TODO 松开吸嘴 + self.feedConfig.num = self.feedConfig.num - 1 + log.log_message(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') + self.feedStatus = FeedStatus.FSafeP + self.sendTargPosition(self.feedConfig.feedLine.safe_position) + + + if self.feedConfig.feedLine.zip_bag_position.compare(real_position): + log.log_message(logging.INFO, Constant.str_feed_zip_bag) + # TODO 松开吸嘴 是否需要判断放没放开不 + self.feedStatus = FeedStatus.FNone + self.sendTargPosition(self.feedConfig.feedLine.safe_position) + self.init_detection_image() + log.log_message(logging.INFO, Constant.str_feed_finish) + + pass - def sendTargPosition(self,real_position): + + + def sendTargPosition(self,real_position,move_type:MoveType=MoveType.WORLD ,speed = Constant.speed): from Model.RobotModel import Instruction position_instruction = Instruction() - position_instruction.speed = Constant.speed + position_instruction.speed = speed position_instruction.m0 = real_position.X position_instruction.m1 = real_position.Y position_instruction.m2 = real_position.Z position_instruction.m3 = real_position.U position_instruction.m4 = real_position.V position_instruction.m5 = real_position.W - position_instruction.action = MoveType.WORLD.value + position_instruction.action = move_type.value instruction_command = CMDInstructRequest() instruction_command.instructions.append(position_instruction) request_command = instruction_command.toString() @@ -196,6 +239,8 @@ class Feeding(): self.robotClient.add_sendQuene(request_command) pass + + def safe_check_columns(self): return True pass diff --git a/Config/FeedLine.ini b/Config/FeedLine.ini index 0cef3cb..3873236 100644 --- a/Config/FeedLine.ini +++ b/Config/FeedLine.ini @@ -18,19 +18,38 @@ midposition_z = 406.721 midposition_u = -3.256 midposition_v = 7.334 midposition_w = -4.307 -brokenposition_x = 357.269 -brokenposition_y = 478.874 -brokenposition_z = 209.979 -brokenposition_u = -3.100 -brokenposition_v = -3.198 -brokenposition_w = 49.945 +brokenposition1_x = 357.269 +brokenposition1_y = 478.874 +brokenposition1_z = 209.979 +brokenposition1_u = -3.100 +brokenposition1_v = -3.198 +brokenposition1_w = 49.945 +brokenposition2_x = 357.269 +brokenposition2_y = 478.874 +brokenposition2_z = 209.979 +brokenposition2_u = -3.100 +brokenposition2_v = -3.198 +brokenposition2_w = 49.945 +dropBagposition_x = 357.269 +dropBagposition_y = 478.874 +dropBagposition_z = 209.979 +dropBagposition_u = -3.100 +dropBagposition_v = -3.198 +dropBagposition_w = 49.945 +zipBagposition_x = 357.269 +zipBagposition_y = 478.874 +zipBagposition_z = 209.979 +zipBagposition_u = -3.100 +zipBagposition_v = -3.198 +zipBagposition_w = 49.945 feedposition_x = 315.549 feedposition_y = 427.090 feedposition_z = 209.985 feedposition_u = -2.793 feedposition_v = -1.829 feedposition_w = 50.000 - +dropDelay_time = 3 +shakeDelay_time = 6 [FeedLine2] name = 反应釜2 safeposition_x = 0.0 @@ -51,4 +70,6 @@ feedposition_z = 0.0 feedposition_u = 0.0 feedposition_v = 0.0 feedposition_w = 0.0 +dropDelay_time = 3 +shakeDelay_time = 6 diff --git a/Constant.py b/Constant.py index 050b02b..f34b14a 100644 --- a/Constant.py +++ b/Constant.py @@ -3,6 +3,7 @@ import os position_accuracy = 0.05 manual_adjust_accuracy = 1 speed = 10 +shake_speed = 20 feedLine_set_section = 'FeedLine' feedLine_set_file = f'.{os.sep}Config{os.sep}feedLine.ini' set_ini = 'Seting.ini' @@ -24,6 +25,8 @@ str_feed_mid = '移动到中位位置' str_feed_safe = '移动到安全位置' str_feed_takePhoto = '拍照' str_feed_broken = '移动到破袋位置' +str_feed_broken_bag = '划袋' +str_feed_drop = '移动扔空袋' str_feed_takePhoto_fail = '识别图像失败' str_feed_takePhoto_success = '识别图像成功' str_feed_covert_success = '转换坐标成功' @@ -34,6 +37,7 @@ str_feed_finish = '投料结束' str_feed_take_success = '抓料成功' str_feed_take_fail = '抓料失败' str_feed_feed_num = '剩余投料次数:' +str_feed_zip_bag = '移动到压缩袋位置' str_sys_switch_tool = '切换到工具坐标' str_sys_start_tool = '切换到自动运行状态' str_sys_clearAlarm = '清除报警' @@ -48,3 +52,4 @@ str_tcp_robot_data_error = '数据解析错误' str_tcp_connect_no_reply = '无回复' str_tcp_connect_error = 'tcp连接错误' str_tcp_reconnect = '重连中' + diff --git a/MvSDKLog/CamCtrl_00.log b/MvSDKLog/CamCtrl_00.log index 86f0748..c4909c8 100644 --- a/MvSDKLog/CamCtrl_00.log +++ b/MvSDKLog/CamCtrl_00.log @@ -4822,3 +4822,13 @@ Warning 2024-09-19 20:04:10:0204 DevID:Virtual USB3 Vision Source-Line:MvCamer Warning 2024-09-19 20:04:10:0204 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L0996) ProcessName:python.exe(14692) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_VERSION] failed, Ret[0x80000001] Warning 2024-09-19 20:04:10:0204 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1000) ProcessName:python.exe(14692) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_MANUFACTURER] failed, Ret[0x80000001] Warning 2024-09-19 20:04:10:0204 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1004) ProcessName:python.exe(14692) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_USER_DEFINED_NAME] failed, Ret[0x80000001] +Error 2024-10-11 21:23:05:0716 DevID: Source-Line:MvCameraControl.dll(OtherLoadLibrary.cpp-L0709) ProcessName:python.exe(9244) Description:[LoadSRAllFunctions]hSRModule is NULL, Ret[0x8000000c] +Warning 2024-10-11 21:23:05:0729 DevID: Source-Line:MvCameraControl.dll(GenTLLoadLibraryEx.cpp-L0345) ProcessName:python.exe(9244) Description:[LoadCtiLibInter]MV_GCSetConfigIntValue is NULL, CTI path[D:\environment\envs\UICreater\lib\site-packages\MvProducerVIR.dll] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual GigE Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L0992) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_MODEL] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual GigE Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L0996) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_VERSION] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual GigE Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1000) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_MANUFACTURER] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual GigE Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1004) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_USER_DEFINED_NAME] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L0992) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_MODEL] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L0996) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_VERSION] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1000) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_MANUFACTURER] failed, Ret[0x80000001] +Warning 2024-10-11 21:23:05:0729 DevID:Virtual USB3 Vision Source-Line:MvCameraControl.dll(GenTLManager.cpp-L1004) ProcessName:python.exe(9244) Description:[GetInterfaceInfos]TLGetInterfaceInfo[INTERFACE_INFO_USER_DEFINED_NAME] failed, Ret[0x80000001] diff --git a/Seting.ini b/Seting.ini index b6df0a2..2e27c6a 100644 --- a/Seting.ini +++ b/Seting.ini @@ -28,6 +28,7 @@ photo_z3 = 0 LineCount=2 + [Camera_Feed] IPAddress=127.0.0.1 diff --git a/app.py b/app.py index d503cb5..f7b4dba 100644 --- a/app.py +++ b/app.py @@ -190,8 +190,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): (int(self.configReader.get('Robot_Feed', 'photo_x3')), int(self.configReader.get('Robot_Feed', 'photo_y3')),int(self.configReader.get('Robot_Feed', 'photo_z3'))) ] - - self.robotClient = RobotClient(ip, port, photo_locs,self.command_position_quene, self.status_address) + dropDelay_time = int(self.configReader.get('Robot_Feed', 'dropDelay_time')) + self.robotClient = RobotClient(ip, port, photo_locs, self.command_position_quene, self.status_address) self.feeding = Feeding(self.robotClient, self.detection) # 临时 self.last_time = time.time() @@ -286,8 +286,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): safe_position = Real_Position() photo_position = Real_Position() mid_position = Real_Position() - broken_position = Real_Position() + broken_position1 = Real_Position() + broken_position2 = Real_Position() feed_position = Real_Position() + dropBag_position = Real_Position() + zipBag_poistion = Real_Position() + safe_position.X = float(self.configReader.get(line_str, 'SafePosition_x', fallback=0)) safe_position.Y = float(self.configReader.get(line_str, 'SafePosition_y', fallback=0)) @@ -310,12 +314,32 @@ class MainWindow(QMainWindow, Ui_MainWindow): mid_position.V = float(self.configReader.get(line_str, 'MidPosition_v', fallback=0)) mid_position.W = float(self.configReader.get(line_str, 'MidPosition_w', fallback=0)) - broken_position.X = float(self.configReader.get(line_str, 'BrokenPosition_x', fallback=0)) - broken_position.Y = float(self.configReader.get(line_str, 'BrokenPosition_y', fallback=0)) - broken_position.Z = float(self.configReader.get(line_str, 'BrokenPosition_z', fallback=0)) - broken_position.U = float(self.configReader.get(line_str, 'BrokenPosition_u', fallback=0)) - broken_position.V = float(self.configReader.get(line_str, 'BrokenPosition_v', fallback=0)) - broken_position.W = float(self.configReader.get(line_str, 'BrokenPosition_w', fallback=0)) + broken_position1.X = float(self.configReader.get(line_str, 'BrokenPosition_x', fallback=0)) + broken_position1.Y = float(self.configReader.get(line_str, 'BrokenPosition_y', fallback=0)) + broken_position1.Z = float(self.configReader.get(line_str, 'BrokenPosition_z', fallback=0)) + broken_position1.U = float(self.configReader.get(line_str, 'BrokenPosition_u', fallback=0)) + broken_position1.V = float(self.configReader.get(line_str, 'BrokenPosition_v', fallback=0)) + broken_position1.W = float(self.configReader.get(line_str, 'BrokenPosition_w', fallback=0)) + broken_position2.X = float(self.configReader.get(line_str, 'BrokenPosition2_x', fallback=0)) + broken_position2.Y = float(self.configReader.get(line_str, 'BrokenPosition2_y', fallback=0)) + broken_position2.Z = float(self.configReader.get(line_str, 'BrokenPosition2_z', fallback=0)) + broken_position2.U = float(self.configReader.get(line_str, 'BrokenPosition2_u', fallback=0)) + broken_position2.V = float(self.configReader.get(line_str, 'BrokenPosition2_v', fallback=0)) + broken_position2.W = float(self.configReader.get(line_str, 'BrokenPosition2_w', fallback=0)) + + dropBag_position.X = float(self.configReader.get(line_str, 'DropBagPosition_x', fallback=0)) + dropBag_position.Y = float(self.configReader.get(line_str, 'DropBagPosition_y', fallback=0)) + dropBag_position.Z = float(self.configReader.get(line_str, 'DropBagPosition_z', fallback=0)) + dropBag_position.U = float(self.configReader.get(line_str, 'DropBagPosition_u', fallback=0)) + dropBag_position.V = float(self.configReader.get(line_str, 'DropBagPosition_v', fallback=0)) + dropBag_position.W = float(self.configReader.get(line_str, 'DropBagPosition_w', fallback=0)) + zipBag_poistion.X = float(self.configReader.get(line_str, 'ZipBagPosition_x', fallback=0)) + zipBag_poistion.Y = float(self.configReader.get(line_str, 'ZipBagPosition_y', fallback=0)) + zipBag_poistion.Z = float(self.configReader.get(line_str, 'ZipBagPosition_z', fallback=0)) + zipBag_poistion.U = float(self.configReader.get(line_str, 'ZipBagPosition_u', fallback=0)) + zipBag_poistion.V = float(self.configReader.get(line_str, 'ZipBagPosition_v', fallback=0)) + zipBag_poistion.W = float(self.configReader.get(line_str, 'ZipBagPosition_w', fallback=0)) + feed_position.X = float(self.configReader.get(line_str, 'FeedPosition_x', fallback=0)) feed_position.Y = float(self.configReader.get(line_str, 'FeedPosition_y', fallback=0)) @@ -324,10 +348,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): feed_position.V = float(self.configReader.get(line_str, 'FeedPosition_v', fallback=0)) feed_position.W = float(self.configReader.get(line_str, 'FeedPosition_w', fallback=0)) + + name = self.configReader.get(line_str, 'Name', fallback='未命名') self.feedLine_dict[f'{Constant.feedLine_set_section}{i + 1}'] = FeedLine(name, safe_position, photo_position, mid_position, - broken_position, feed_position) + broken_position1,broken_position2,dropBag_position,zipBag_poistion,feed_position) self.init_seting_frame() self.updateUI_Select_Line() pass