Files
AutoControlSystem-G/CU/Catch.py
2025-07-29 13:16:30 +08:00

98 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python3
import time
from enum import Enum
import Constant
from COM.COM_Robot import RobotClient
from Util.util_time import CClockPulse, CTon
from .EMV import *
class CatchStatus(Enum):
CNone = 0
CTake = 1
CDrop = 2
CShake = 3
COk = 4
class Catch:
def __init__(self, robotClient: RobotClient):
self.robotClient = robotClient
self.catch_status = CatchStatus.CNone
self.shake_continue = CTon()
self.drop_continue = CTon()
self.take_continue = CTon()
self.shakePulse = CClockPulse()
self.shake_count = 5
self.drop_count = 2
self.is_send_command = False#这里到时候可以改成True然后加一个获取继电器状态变成False
self.is_send_take_command = False
self.shake_Q = False
def run(self):
if self.catch_status == CatchStatus.CNone:
return
if self.catch_status == CatchStatus.CTake:
# 这里可以添加继电器状态获取把is_send_command = False
if not self.is_send_take_command:
# 本身IO
#self.robotClient.sendIOControl(self.robotClient.con_ios[0],1)
# 网络继电器
close(1, 0, 0) #逻辑关闭电磁阀1
self.is_send_take_command = True
if self.catch_status == CatchStatus.CDrop:
if not self.is_send_command:
# 本身IO
# self.robotClient.sendIOControl(self.robotClient.con_ios[0], 0)
# 网络继电器
open(1, 0, 0)#逻辑
#time.sleep(1)
#for _ in range(self.drop_count):
# self.robotClient.sendIOControl(self.robotClient.con_ios[1], 1, delay=self.robotClient.time_delay_put)
#open(0, 0, 1)
#time.sleep(self.robotClient.time_delay_put) # 会造成这个时间点 其他命令插入不进去 需要另开线程
#close(0, 0, 1)
# self.robotClient.sendIOControl(self.robotClient.con_ios[1], 0)
# self.robotClient.sendIOControl(self.robotClient.con_ios[1], 1)
#close(0, 0, 1)
self.is_send_command = True
if self.drop_continue.Q(True,self.robotClient.time_delay_put*1000*self.drop_count):
# if Constant.Debug or self.robotClient.check_outputQ(self.robotClient.con_ios[1]) and not self.robotClient.check_outputQ(self.robotClient.con_ios[0]):
self.is_send_command = False
self.catch_status = CatchStatus.COk
self.drop_continue.SetReset()
if self.catch_status == CatchStatus.CShake: # 1500
self.shake_Q = not self.shake_Q # 10
if not self.shake_continue.Q(True, 6000):
#if self.shake_Q:
#open(0, 1, 0)
#else:
#close(0, 1, 0)
#else:
self.shake_continue.SetReset()
#self.catch_status = CatchStatus.COk
#if Constant.Debug or self.robotClient.check_outputQ(self.robotClient.con_ios[2]):
# self.robotClient.sendIOControl(self.robotClient.con_ios[2], 0)
#close(0, 1, 0)
print("震动结束")
if self.catch_status == CatchStatus.COk:
self.shake_continue.SetReset()
# self.robotClient.sendIOControl(self.robotClient.con_ios[1], 0,emptyList='1')
open(1,0,0)#逻辑
#close(0, 1, 0)
#close(0, 0, 1)
self.is_send_take_command = False
pass
def take_bag(self):
return True
def press_bag(self):
return True
def shake_bag(self):
return True