DOBOT MAGICIAN with sensor


#1

大家好,我有一个问题想要咨询
我现在把机械手臂与传送带连接,并且想通过两个传感器来控制传送带的启停,
但现在问题是,整个程序只运行一次,第二次就不会运行,想问问大家能否帮我看一下程序问题

谢谢


import DobotDllType as dType
from threading import Timer

CON_STR = {
dType.DobotConnect.DobotConnect_NoError: “DobotConnect_NoError”,
dType.DobotConnect.DobotConnect_NotFound: “DobotConnect_NotFound”,
dType.DobotConnect.DobotConnect_Occupied: “DobotConnect_Occupied”}

api = dType.load()
state = dType.ConnectDobot(api, “”, 115200)[0] # connect the Dobot
print(“connect status”, CON_STR[state])
dType.SetInfraredSensor(api, 1, 2, 1) #active the first sensor
dType.SetInfraredSensor(api, 1, 3, 1) #active the second sensor

def start_belt():
STEP_PER_CRICLE = 360.0 / 1.8 10.0 16.0
MM_PER_CRICLE = 3.1415926535898 36.0
vel = float(-50)
STEP_PER_CRICLE / MM_PER_CRICLE
dType.SetEMotor(api, 0, 1, int(vel), 1)

def stop_belt():
STEP_PER_CRICLE = 360.0 / 1.8 10.0 16.0
MM_PER_CRICLE = 3.1415926535898 36.0
vel = float(-50)
STEP_PER_CRICLE / MM_PER_CRICLE
dType.SetEMotor(api, 0, 0, int(vel), 1)

def make_robot_move():
global lastIndex
lastIndex = dType.SetPTPCmd(api, 4, 0, 0, 0, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, -90, 0, 0, 0, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetPTPCmd(api, 4, -90, 0, 39, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, -90, 49, 39, 0, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetEndEffectorSuctionCup(api, 1, 1, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetPTPCmd(api, 4, -90, 0, 39, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, -90, 0, 0, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, 90, 0, 0, 0, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetPTPCmd(api, 4, 90, 0, 53, 0, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetPTPCmd(api, 4, 90, 46, 53, 0, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetEndEffectorSuctionCup(api, 0, 1, 1)[0]
dType.SetWAITCmd(api, 1000, 1)
lastIndex = dType.SetPTPCmd(api, 4, 90, 0, 53, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, 90, 0, 0, 0, 1)[0]
lastIndex = dType.SetPTPCmd(api, 4, 0, 0, 0, 0, 1)[0]

dType.SetQueuedCmdStartExec(api)
while lastIndex > dType.GetQueuedCmdCurrentIndex(api)[0]:
dType.dSleep(100)
dType.SetQueuedCmdStopExec(api)
if (state == dType.DobotConnect.DobotConnect_NoError):
dType.SetQueuedCmdClear(api) # clear queued command
dType.SetPTPJointParams(api, 100, 100, 100, 100, 100, 100, 100, 100, 1)
dType.SetPTPCommonParams(api, 100, 100, 1)
dType.SetHOMEParams(api, 200, 0, 0, 0, 1)
# set home parameter
# Async Home
dType.SetHOMECmd(api, temp=1, isQueued=1)

Timing1 = 0
Timing2 = 0
signal1 = 0
signal2 = 0
signalFilter1 = 0
signalFilter2 = 0

def Timing1to1():
global signal1
if(signalFilter1 == 1) :
signal1 = 1
def Timing2to1():
global signal2
if(signalFilter2 == 1) :
signal2 = 1
def Timing1to0():
global signal1
if(signalFilter1 == 0) :
signal1 = 0
def Timing2to0():
global signal2
if(signalFilter2 == 0) :
signal2 = 0

while True:
signalFilter1 = dType.GetInfraredSensor(api, 2)[0]
signalFilter2 = dType.GetInfraredSensor(api, 3)[0]

if(signalFilter1 == 1):
TimingFlag1 = Timer (0.5, Timing1to1)# 延迟
TimingFlag1.start()

if(signalFilter2 == 1):
TimingFlag2 = Timer (0.01, Timing2to1)
TimingFlag2.start()
if(signalFilter1 == 0):
TimingFlag3 = Timer (0.5, Timing1to0)# 延迟
TimingFlag3.start()

if(signalFilter2 == 0):
TimingFlag4 = Timer (0.01, Timing2to0)# 延迟
TimingFlag4.start()

print(signal1)
print(signal2)

if (signal1 == 1): # 如果第一个传感器检测到数据
start_belt_Time = Timer (2.0, start_belt)# 延迟 2 s启动传送带
start_belt_Time.start() # 启动传送带
if (signal2 == 1): # 如果两个同时检测到数据
stop_belt()# 关传送带
make_robot_move()# 启动机械臂夹走第二个物品

else: # 如果第一个没有检测到数据
if (signal2 == 1): # 如果第二个检测到数据
stop_belt()#关传送带
make_robot_move()# 启动机械臂夹走第二个物品
else:
print(“no object found”)
dType.DisconnectDobot(api)


#2

整个程序括在“重复”函数里,可视化编程“循环”中有