This commit is contained in:
@@ -5,15 +5,19 @@ import json
|
||||
class Hexiposi(DiscretePositionerBase):
|
||||
def __init__(self, name, url):
|
||||
DiscretePositionerBase.__init__(self, name, ["A","B","C","D","E","F"])
|
||||
self.PORT_SET=8002
|
||||
self.PORT_GET=8002
|
||||
if not url.startswith("http://"):
|
||||
url = "http://" + url
|
||||
if not url.endswith("/"):
|
||||
url = url + "/"
|
||||
self.url = url
|
||||
if not url.endswith(":"):
|
||||
url = url + ":"
|
||||
self.url_set = url + str (self.PORT_SET)+ "/hexiposi/"
|
||||
self.url_get = url + str (self.PORT_GET)+ "/hexiposi/"
|
||||
self.moved = True
|
||||
self.homing_state = State.Disabled
|
||||
self.rback = self.UNKNOWN_POSITION
|
||||
self.timeout = 3.0
|
||||
self.offline = False
|
||||
|
||||
def doInitialize(self):
|
||||
super(Hexiposi, self).doInitialize()
|
||||
@@ -25,40 +29,46 @@ class Hexiposi(DiscretePositionerBase):
|
||||
return json.loads(response.text)
|
||||
|
||||
def get_status(self):
|
||||
self.status = self.get_response(requests.get(url=self.url+"get", timeout=self.timeout))
|
||||
self.estop = self.status["estop"]
|
||||
self.homed = self.status["homed"]
|
||||
self.error = self.status["errorCode"]
|
||||
self.remote = self.status["mode"] == "remote"
|
||||
self.moving = self.status["errorCode"]
|
||||
self.pos = self.status["position"]
|
||||
self.moving = self.status["moving"]
|
||||
self.offset = self.status["offset"]
|
||||
self.dpos = self.status["discretePosition"]
|
||||
if (self.homed==False): rback = self.UNKNOWN_POSITION
|
||||
elif self.dpos == 1: rback = "A"
|
||||
elif self.dpos == 2: rback = "B"
|
||||
elif self.dpos == 4: rback = "C"
|
||||
elif self.dpos == 8: rback = "D"
|
||||
elif self.dpos == 16: rback = "E"
|
||||
elif self.dpos == 32: rback = "F"
|
||||
else: rback = self.UNKNOWN_POSITION
|
||||
if (rback == self.UNKNOWN_POSITION) or (rback != self.rback):
|
||||
self.moved = True
|
||||
self.rback = rback
|
||||
return self.status
|
||||
|
||||
try:
|
||||
self.status = self.get_response(requests.get(url=self.url_get+"get", timeout=self.timeout))
|
||||
self.estop = self.status["estop"]
|
||||
self.homed = self.status["homed"]
|
||||
self.error = self.status["errorCode"]
|
||||
self.remote = self.status["mode"] == "remote"
|
||||
self.moving = self.status["errorCode"]
|
||||
self.pos = self.status["position"]
|
||||
self.moving = self.status["moving"]
|
||||
self.offset = self.status["offset"]
|
||||
self.dpos = self.status["discretePosition"]
|
||||
if (self.homed==False): rback = self.UNKNOWN_POSITION
|
||||
elif self.dpos == 1: rback = "A"
|
||||
elif self.dpos == 2: rback = "B"
|
||||
elif self.dpos == 4: rback = "C"
|
||||
elif self.dpos == 8: rback = "D"
|
||||
elif self.dpos == 16: rback = "E"
|
||||
elif self.dpos == 32: rback = "F"
|
||||
else: rback = self.UNKNOWN_POSITION
|
||||
if (rback == self.UNKNOWN_POSITION) or (rback != self.rback):
|
||||
self.moved = True
|
||||
self.rback = rback
|
||||
self.offline = False
|
||||
return self.status
|
||||
except:
|
||||
self.offline = True
|
||||
self.updateState()
|
||||
raise
|
||||
|
||||
def set_deadband(self, value = 0.1): #degrees
|
||||
ret = self.get_response(requests.get(url=self.url+"setDeadband?deadband=" + str(value), timeout=self.timeout))
|
||||
ret = self.get_response(requests.get(url=self.url_set+"setDeadband?deadband=" + str(value), timeout=self.timeout))
|
||||
if ret["deadbandOutput"] == value:
|
||||
return value
|
||||
raise Excepiton("Error setting deadband: " + str(ret))
|
||||
|
||||
def move_pos(self, pos):
|
||||
return self.get_response(requests.get(url=self.url+"set?pos=" + str(pos), timeout=self.timeout))
|
||||
return self.get_response(requests.get(url=self.url_set+"set?pos=" + str(pos), timeout=self.timeout))
|
||||
|
||||
def move_home(self):
|
||||
ret = self.get_response(requests.get(url=self.url+"set?home=1", timeout=self.timeout))
|
||||
ret = self.get_response(requests.get(url=self.url_set+"set?home=1", timeout=self.timeout))
|
||||
try:
|
||||
self.waitState(self.homing_state,1200)
|
||||
except:
|
||||
@@ -66,10 +76,10 @@ class Hexiposi(DiscretePositionerBase):
|
||||
return ret
|
||||
|
||||
def stop_move(self):
|
||||
return self.get_response(requests.get(url=self.url+"set?stop=1", timeout=self.timeout))
|
||||
return self.get_response(requests.get(url=self.url_set+"set?stop=1", timeout=self.timeout))
|
||||
|
||||
def set_offset(self, offset):
|
||||
return self.get_response(requests.get(url=self.url+"setOffset?offset="+str(offset), timeout=self.timeout))
|
||||
return self.get_response(requests.get(url=self.url_set+"setOffset?offset="+str(offset), timeout=self.timeout))
|
||||
|
||||
def doUpdate(self):
|
||||
self.get_status()
|
||||
@@ -124,7 +134,9 @@ class Hexiposi(DiscretePositionerBase):
|
||||
# return self.moving == False
|
||||
|
||||
def updateState(self):
|
||||
if self.homed == False:
|
||||
if self.offline:
|
||||
self.setState(State.Offline)
|
||||
elif self.homed == False:
|
||||
self.setState(self.homing_state)
|
||||
elif self.moving:
|
||||
self.setState(State.Busy)
|
||||
@@ -133,8 +145,8 @@ class Hexiposi(DiscretePositionerBase):
|
||||
|
||||
|
||||
|
||||
#http://myriotell:8002/hexiposi/get
|
||||
dev = Hexiposi("hexiposi", "myriotell:8002/hexiposi")
|
||||
#http://myriotell:8003/hexiposi/get
|
||||
dev = Hexiposi("hexiposi", "myriotell")
|
||||
|
||||
add_device(dev, True)
|
||||
hexiposi.polling=1000
|
||||
|
||||
@@ -28,7 +28,8 @@ class RobotSC(RobotTCP):
|
||||
RobotTCP.__init__(self, name, server, timeout, retries)
|
||||
self.set_tasks(["getDewar", "putDewar", "putGonio", "getGonio", "recover", "moveDewar", "moveCold", "movePark", "moveGonio","moveHeater", "moveScanner","moveHome", "moveAux"])
|
||||
self.set_known_points(["pPark", "pGonio", "pDewar", "pGonioG", "pScan", "pHeater", "pHeat", "pHeatB", "pScanStop","pHelium", "pHome", "pCold", "pAux"])
|
||||
self.setPolling(DEFAULT_ROBOT_POLLING)
|
||||
self.setPolling(DEFAULT_ROBOT_POLLING)
|
||||
self.setSimulated()
|
||||
|
||||
def move_dewar(self):
|
||||
self.start_task('moveDewar')
|
||||
|
||||
@@ -141,6 +141,8 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
raise Exception("Exceeded maximum message size")
|
||||
self.getLogger().finer("TX = '" + str(tx)+ "'")
|
||||
if (self.trailer != None): tx = tx + self.trailer
|
||||
if self.isSimulated():
|
||||
return ""
|
||||
rx = self.sendReceive(tx, msg_id, self.trailer , 0, self.timeout if timeout is None else timeout, self.retries)
|
||||
rx=rx[:-1] #Remove 0A
|
||||
self.getLogger().finer("RX = '" + str(rx) + "'")
|
||||
@@ -257,14 +259,20 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
self.set_trsf(trsf, name+".trsf")
|
||||
|
||||
def eval_int(self, cmd):
|
||||
if self.isSimulated():
|
||||
return 0
|
||||
self.evaluate("tcp_n=" + cmd)
|
||||
return self.get_int()
|
||||
|
||||
def eval_float(self, cmd):
|
||||
if self.isSimulated():
|
||||
return 0.0
|
||||
self.evaluate("tcp_n=" + cmd)
|
||||
return self.get_float()
|
||||
|
||||
def eval_bool(self, cmd):
|
||||
if self.isSimulated():
|
||||
return False
|
||||
self.evaluate("tcp_b=" + cmd)
|
||||
return self.get_bool()
|
||||
|
||||
@@ -547,6 +555,8 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
self.execute('kill', str(name), timeout=5000)
|
||||
|
||||
def get_task_status(self, name):
|
||||
if self.isSimulated():
|
||||
return (-1,"Stopped")
|
||||
code = self.eval_int('taskStatus("' + str(name)+ '")')
|
||||
#TODO: String assignments in $exec causes application to freeze
|
||||
#status = self
|
||||
@@ -575,7 +585,6 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
self.check_task()
|
||||
if self.current_task is not None:
|
||||
print "Ongoing task: " + self.current_task
|
||||
|
||||
if (not self.settled) or (self.current_task is not None): self.setState(State.Busy)
|
||||
elif not self.empty: self.setState(State.Paused)
|
||||
else: self.setState(State.Ready)
|
||||
@@ -584,12 +593,19 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
try:
|
||||
start = time.time()
|
||||
cur_task = self.current_task #Can change in background so cache it
|
||||
sts = self.execute("get_status", cur_task)
|
||||
if self.isSimulated():
|
||||
sts = [1, 1,"1", 100, "1", "1", 0, 0, \
|
||||
0, 0, 0, 0, 0, 0, \
|
||||
0, 0, 0, 0, 0, 0, \
|
||||
]
|
||||
else:
|
||||
sts = self.execute("get_status", cur_task)
|
||||
self._update_working_mode(int(sts[0]), int(sts[1]))
|
||||
self.powered = sts[2] == "1"
|
||||
self.speed = int(sts[3])
|
||||
self.empty = sts[4] == "1"
|
||||
self.settled = sts[5] == "1"
|
||||
|
||||
#TODO: add tool open
|
||||
if cur_task is not None:
|
||||
if int(sts[6]) < 0:
|
||||
@@ -602,14 +618,14 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
self.joint_pos[i] = float(sts[8 + i])
|
||||
for i in range(6):
|
||||
self.cartesian_pos[i] = float(sts[14 + i])
|
||||
|
||||
|
||||
ev_index = 20 #7
|
||||
ev = sts[ev_index] if len(sts)>ev_index else ""
|
||||
if len(ev.strip()) >0:
|
||||
self.getLogger().info(ev)
|
||||
self.on_event(ev)
|
||||
|
||||
self._update_state()
|
||||
|
||||
self._update_state()
|
||||
self.reset = False
|
||||
self.setCache({"powered": self.powered,
|
||||
"speed": self.speed,
|
||||
@@ -621,6 +637,7 @@ class RobotTCP(TcpDevice, Stoppable):
|
||||
"open": self.tool_open,
|
||||
"pos": self.get_current_point_cached() if self.state==State.Ready else None #TODO: make it calculated in robot by polling funtion
|
||||
}, None)
|
||||
|
||||
if self.cartesian_motors_enabled:
|
||||
for m in self.cartesian_motors:
|
||||
m.readback.update()
|
||||
|
||||
@@ -6,6 +6,8 @@ class SmartMagnet(DeviceBase):
|
||||
"restingCurrent":0.0,
|
||||
"mountCurrent":0.0,
|
||||
"unmountCurrent":0.0,
|
||||
"reverseCurrent":0.0,
|
||||
"reverseTime":0.0,
|
||||
}))
|
||||
|
||||
def doInitialize(self):
|
||||
@@ -89,8 +91,8 @@ class SmartMagnet(DeviceBase):
|
||||
def set_unmount_current(self):
|
||||
self.set_current(self.config.getFieldValue("unmountCurrent"))
|
||||
|
||||
def set_remanence_current(self):
|
||||
self.set_current(self.config.getFieldValue("remanenceCurrent"))
|
||||
def set_reverse_current(self):
|
||||
self.set_current(self.config.getFieldValue("reverseCurrent"))
|
||||
|
||||
def set_default_current(self):
|
||||
if self.is_mounted():
|
||||
@@ -104,6 +106,10 @@ class SmartMagnet(DeviceBase):
|
||||
|
||||
#Setting resting current to better detect sample
|
||||
def enforce_sample_detection(self):
|
||||
reverse_wait = float(self.config.getFieldValue("reverseTime"))
|
||||
if reverse_wait >0:
|
||||
self.set_reverse_current()
|
||||
time.sleep(reverse_wait)
|
||||
if not self.is_resting_current():
|
||||
self.set_resting_current()
|
||||
time.sleep(0.2)
|
||||
|
||||
Reference in New Issue
Block a user