Ejemplo n.º 1
0
 def dbconnect(self):
     self.AprsDB = MySQLdbConn()
     if not self.AprsDB.connect(DB_SERVER, DB_USER, DB_PASSWD, DB_NAME):
         return False
     return True
Ejemplo n.º 2
0
class App(object):
    global WS_PORT, EMOVE_PORT, HOST, DB_SERVER, DB_USER, DB_PASSWD, DB_NAME
    MSG_LEN = 1000
    PERIOD = 5

    def __init__(self, master):
        #
        self.wsSock = -1
        self.emoveSock = -1
        self.nameVar = StringVar()
        self.wsPortVar = StringVar()
        self.emovePortVar = StringVar()
        self.kitVar = StringVar()
        self.cmdVar = StringVar()
        self.statusVar = StringVar()
        self.hbVar = StringVar()
        self.emoveVar = StringVar()
        self.diagsVar = StringVar()
        #
        self.nameVar.set(HOST)
        self.wsPortVar.set(str(WS_PORT))
        self.emovePortVar.set(str(EMOVE_PORT))
        self.kitVar.set("kit_design_GearBox")
        self.cmdVar.set("")
        self.statusVar.set("")
        self.hbVar.set("")
        self.emoveVar.set("")
        self.diagsVar.set("")
        #
        self.AprsDB = None

        #
        Label(master, text="Host").grid(row=0,column=0,columnspan=2)
        # #
        Label(master, text="Name:").grid(row=1,column=0)
        self.nameEntry = Entry(master, textvariable=self.nameVar, state=NORMAL)
        self.nameEntry.grid(row=1,column=1)
        # #
        Label(master, text="WS Port:").grid(row=2,column=0)
        self.wsPortEntry = Entry(master, textvariable=self.wsPortVar, state=NORMAL)
        self.wsPortEntry.grid(row=2,column=1)
        # #
        Label(master, text="Emove Port:").grid(row=3,column=0)
        self.emovePortEntry = Entry(master, textvariable=self.emovePortVar, state=NORMAL)
        self.emovePortEntry.grid(row=3,column=1)
        # #
        self.connectButton = Button(master, text="Connect", command=self.connect, state=NORMAL)
        self.connectButton.grid(row=4,column=0)
        self.disconnectButton = Button(master, text="Disconnect", command=self.disconnect, state=DISABLED)
        self.disconnectButton.grid(row=4,column=1)

        #
        Label(master, text="Kit").grid(row=0, column=2, columnspan=2)
        # #
        Label(master, text="Name:").grid(row=1, column=2)
        Entry(master, textvariable=self.kitVar).grid(row=1, column=3)
        # #
        Button(master, text="Browse...", command=self.browse).grid(row=3,column=2)
        self.makeButton = Button(master, text="Make", command=self.make, state=DISABLED)
        self.makeButton.grid(row=3,column=3)
        createToolTip(self.makeButton, "Send a 'make kit' request")

        #
        Label(master, text="Status").grid(row=0, column=4, columnspan=2)
        # #
        Label(master, text="Command:").grid(row=1, column=4)
        self.cmdEntry = Entry(master, textvariable=self.cmdVar)
        self.cmdEntry.grid(row=1, column=5)
        # #
        Label(master, text="Status:").grid(row=2, column=4)
        self.statusEntry = Entry(master, textvariable=self.statusVar)
        self.statusEntry.grid(row=2, column=5)
        # #
        Label(master, text="Heartbeat:").grid(row=3, column=4)
        self.hbEntry = Entry(master, textvariable=self.hbVar)
        self.hbEntry.grid(row=3, column=5)

        # #
        Label(master, text="Emove:").grid(row=4, column=4)
        self.emoveEntry = Entry(master, textvariable=self.emoveVar)
        self.emoveEntry.grid(row=4, column=5)

        #
        Entry(master, textvariable=self.diagsVar).grid(row=5, column=0, columnspan=6, sticky=W+E)

        #
        Button(master, text="Quit", command=self.quit).grid(row=6,columnspan=6)

        #
        self.wsRecvThread = threading.Thread(target=self.wsRecvFunc)
        self.wsRecvThread.daemon = True
        self.wsRecvThread.start()

        #
        self.emoveRecvThread = threading.Thread(target=self.emoveRecvFunc)
        self.emoveRecvThread.daemon = True
        self.emoveRecvThread.start()
                
    def sockconnect(self):
        self.sockdisconnect()
        try:
            self.wsSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.wsSock.connect((self.nameVar.get(), int(self.wsPortVar.get())))
            self.emoveSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.emoveSock.connect((self.nameVar.get(), int(self.emovePortVar.get())))
        except IOError as err:
            self.wsSock = -1
            self.emoveSock = -1
            self.diagsVar.set(str(err))
            print "kitting_hmi: connect:", str(err)
            return False
        self.makeConnected()
        self.diagsVar.set("")
        return True

    def sockdisconnect(self):
        if self.wsSock != -1:
            try:
                self.wsSock.shutdown(socket.SHUT_RDWR)
                self.wsSock.close()
                self.diagsVar.set("")
            except IOError as err:
                self.diagsVar.set(str(err))
                print "kitting_hmi: disconnect:", str(err), self.wsSock
        if self.emoveSock != -1: 
            try:
                self.emoveSock.shutdown(socket.SHUT_RDWR)
                self.emoveSock.close()
                self.diagsVar.set("")
            except IOError as err:
                self.diagsVar.set(str(err))
                print "kitting_hmi: disconnect:", str(err), self.emoveSock
        self.makeDisconnected()
        return True

    def dbconnect(self):
        self.AprsDB = MySQLdbConn()
        if not self.AprsDB.connect(DB_SERVER, DB_USER, DB_PASSWD, DB_NAME):
            return False
        return True

    def dbdisconnect(self):
        if self.AprsDB != None:
            self.AprsDB.disconnect()
        return True

    def connect(self):
        if self.sockconnect() and self.dbconnect():
            return True
        return False

    def disconnect(self):
        self.sockdisconnect()
        self.dbdisconnect()
        return True

    def wsRecvFunc(self):
        while True:
            if self.wsSock < 0:
                time.sleep(self.PERIOD)
            else:
                try:
                    msg = self.wsSock.recv(self.MSG_LEN)
                    msglist = msg.split()
                    if len(msglist) >= 5:
                        self.cmdVar.set(msglist[0])
                        self.statusVar.set(msglist[3])
                        self.hbVar.set(msglist[4])
                except IOError as err:
                    self.diagsVar.set(str(err))
                    print "kitting_hmi: recv:", str(err)

    def emoveRecvFunc(self):
        while True:
            if self.emoveSock < 0:
                time.sleep(self.PERIOD)
            else:
                try:
                    msg = self.emoveSock.recv(self.MSG_LEN)
# Should be something like this:
# EmoveRun 21 S0 Done 82 /usr/local/iora/PDDLplans/plan.txt place-kit MoveTo
                    msglist = msg.split()
                    if len(msglist) >= 6:
                        stuff = msglist[3] + " " + os.path.basename(msglist[5]) + " " + msglist[6] + " " + msglist[7]
                        self.emoveVar.set(stuff)
                except IOError as err:
                    self.diagsVar.set(str(err))
                    print "kitting_hmi: recv:", str(err)

    def browse(self):
        try:
            ret = self.AprsDB.read("select _NAME from KitDesign")
        except:
            return False
        d = BrowseDialog(root, ret)
        root.wait_window(d.top)
        if d.get() != None:
            self.kitVar.set(d.get())
        return True

    def make(self):
        if self.wsSock < 0: return
        msg = self.kitVar.get()
        try: 
            self.wsSock.send(msg)
            self.diagsVar.set("")
        except IOError as err:
            self.diagsVar.set(str(err))
            print "kitting_hmi: make:", str(err)

    def makeConnected(self):
        self.nameEntry.config(state=DISABLED)
        self.wsPortEntry.config(state=DISABLED)
        self.emovePortEntry.config(state=DISABLED)
        self.connectButton.config(state=DISABLED)
        self.disconnectButton.config(state=NORMAL)
        self.makeButton.config(state=NORMAL)
        self.cmdEntry.config(state=NORMAL)
        self.statusEntry.config(state=NORMAL)
        self.hbEntry.config(state=NORMAL)

    def makeDisconnected(self):
        self.wsSock = -1
        self.emoveSock = -1
        self.nameEntry.config(state=NORMAL)
        self.wsPortEntry.config(state=NORMAL)
        self.emovePortEntry.config(state=NORMAL)
        self.connectButton.config(state=NORMAL)
        self.disconnectButton.config(state=DISABLED)
        self.makeButton.config(state=DISABLED)
        self.cmdEntry.config(state=DISABLED)
        self.statusEntry.config(state=DISABLED)
        self.hbEntry.config(state=DISABLED)

    def quit(self):
        self.disconnect()
        sys.exit(0)
Ejemplo n.º 3
0
#!/usr/bin/python

import sys
from MySQLdbConn import *

DB_SERVER = "aprs-dev"
DB_USER = "******"
DB_PASSWD = "ElsaIsdDb!"
DB_NAME = "aprs-dev"

AprsDB = MySQLdbConn()

if not AprsDB.connect(DB_SERVER, DB_USER, DB_PASSWD, DB_NAME):
    print "can't connect to database"
    sys.exit(1)

slots = AprsDB.read("select _NAME from Slot")
print len(slots), "slots:"

for slot in slots:
    if len(slot) > 0:
        name = slot[0]
        try:
            ret = AprsDB.read(
                'select hasPoint_X, hasPoint_Y, hasPoint_Z from Point where _NAME = (select hasPartRefAndPose_Point from PartRefAndPose where _NAME = (select hasSlot_PartRefAndPose from Slot where _NAME = "'
                + name
                + '"))'
            )
            if len(ret) > 0:
                xyz = ret[0]
                if len(xyz) > 2:
Ejemplo n.º 4
0
RobotCommandID = 0
RobotStatusID = 0
RobotCommandState = CommandStateType.READY
RobotPose = PoseLocationType()

GripperCommandID = 0
GripperStatusID = 0
GripperCommandState = CommandStateType.READY


def except_info():
    exc_type, exc_value = sys.exc_info()[:2]
    return str(exc_type.__name__) + ": " + str(exc_value)


AprsDB = MySQLdbConn()


def robot_reader(conn):
    global DEBUG, RobotCommandID, RobotStatusID, RobotCommandState, RobotPose
    size = 1024
    while True:
        try:
            data = conn.recv(size)
        except:
            break
        if not data: break
        try:
            tree = ET.parse(StringIO.StringIO(data.rstrip(' \t\n\r\0')))
            root = tree.getroot()
            if root.tag == "CRCLStatus":
Ejemplo n.º 5
0
ZAXIS = VectorType(0, 0, 1)

RobotCommandID = 0
RobotStatusID = 0
RobotCommandState = CommandStateType.READY
RobotPose = PoseLocationType()

GripperCommandID = 0
GripperStatusID = 0
GripperCommandState = CommandStateType.READY

def except_info():
    exc_type, exc_value = sys.exc_info()[:2]
    return str(exc_type.__name__) + ": " + str(exc_value)

AprsDB = MySQLdbConn()

def robot_reader(conn):
    global DEBUG, RobotCommandID, RobotStatusID, RobotCommandState, RobotPose
    size = 1024
    while True:
        try: data = conn.recv(size)
        except: break
        if not data: break
        try:
            tree = ET.parse(StringIO.StringIO(data.rstrip(' \t\n\r\0')))
            root = tree.getroot()
            if root.tag == "CRCLStatus":
                for child in root:
                    if child.tag == "CommandStatus":
                        t = child.findtext("CommandID")
Ejemplo n.º 6
0
#!/usr/bin/python

import sys
from MySQLdbConn import *

DB_SERVER = "aprs-dev"
DB_USER = "******"
DB_PASSWD = "ElsaIsdDb!"
DB_NAME = "aprs-dev"

AprsDB = MySQLdbConn()

if not AprsDB.connect(DB_SERVER, DB_USER, DB_PASSWD, DB_NAME):
    print "can't connect to database"
    sys.exit(1)

slots = AprsDB.read("select _NAME from Slot")
print len(slots), "slots:"

for slot in slots:
    if len(slot) > 0:
        name = slot[0]
        try:
            ret = AprsDB.read(
                "select hasPoint_X, hasPoint_Y, hasPoint_Z from Point where _NAME = (select hasPartRefAndPose_Point from PartRefAndPose where _NAME = (select hasSlot_PartRefAndPose from Slot where _NAME = \""
                + name + "\"))")
            if len(ret) > 0:
                xyz = ret[0]
                if len(xyz) > 2:
                    x = xyz[0]
                    y = xyz[1]