Here is OpenPort #################################################################### #### OpenPort procedure #################################################################### def OpenPort(name): BRate = 19200 Tout = 3
try: # Initialize the port p = serial.Serial(name) # handle failures gracefully except SerialException: print "The serial port is unavailable." print "Disconnect your USB to Serial adapter, Then" print "reconnect it and try again." sys.exit(1) p.setBaudrate(19200) p.setTimeout(3) #set timeout to 1.5 seconds # finish opening the port and assign a file handle p.open() return p On Dec 15, 1:07 pm, hg <[EMAIL PROTECTED]> wrote: > Rob wrote: > > Hi all, > > > I am fairly new to python, but not programming and embedded. I am > > having an issue which I believe is related to the hardware, triggered > > by the software read I am doing in pySerial. I am sending a short > > message to a group of embedded boxes daisy chained via the serial port. > > When I send a 'global' message, all the connected units should reply > > with their Id and Ack in this format '0 Ack' To be certain that I > > didn't miss a packet, and hence a unit, I do the procedure three times, > > sending the message and waiting for a timeout before I run through the > > next iteration. Frequently I get through the first two iterations > > without a problem, but the third hangs up and crashes, requiring me to > > remove the Belkin USB to serial adapter, and then reconnect it. Here > > is the code: > > > import sys, os > > import serial > > import sret > > import time > > > from serial.serialutil import SerialException > > #################################################################### > > #### GetAck Procedure > > #################################################################### > > def GetAck(p): > > response = "" > > > try: > > response = p.readline() > > except SerialException: > > print ">>>>>Timed out<<<<<" > > return -1 > > res = response.split() > > > #look for ack in the return message > > reslen = len(response) > > if reslen > 5: > > if res[1] == 'Ack': > > return res[0] > > elif res[1] == 'Nak': > > return 0x7F > > else: > > return -1 > > >>>>>> Snip <<<<<< > > #################################################################### > > #### GetNumLanes Procedure > > #################################################################### > > def GetNumLanes(Lanes): > > print "Looking for connected units" > > # give a turn command and wait for responses > > msg = ".g t 0 336\n" > > > for i in range(3): > > port = OpenPort() > > time.sleep(3) > > print port.isOpen() > > print "Request #%d" % (i+1) > > try: > > port.writelines(msg) > > except OSError: > > print "Serial port failure. Power cycle units" > > port.close() > > sys.exit(1) > > > done = False > > # Run first connection check > > #Loop through getting responses until we get a -1 from GetAck > > while done == False: > > # lane will either be -1 (timeout), 0x7F (Nak), > > # or the lane number that responded with an Ack > > lane = GetAck(port) > > if lane >= '0': > > if False == Lanes.has_key(lane): > > Lanes[lane] = True > > else: > > done = True > > port.close() > > time.sleep(3) > > > # Report number of lanes found > > NumLanes = len(Lanes) > > if NumLanes == 1: > > print "\n\nFound 1 unit connected" > > else: > > print "\n\nFound %d units connected" % NumLanes > > > return NumLanes > > >>>>>>> Snip <<<<<< > > #################################################################### > > #### Main Program Code Section > > #################################################################### > > > #open the serial port > > # capture serial port errors from trying to open the port > > > port = OpenPort() > > > # If we got to here, the port exists. Set the baud rate and timeout > > values > > > # I need to determine how many lanes are on this chain > > # First send a turn command > > > #Create a dictionary of lanes so I can check each lane's responses > > Lanes = {} > > #<><><><><><><><><><><><><><><><> > > # Call the lane finder utility > > NumLanes = GetNumLanes(Lanes) > > #<><><><><><><><><><><><><><><><> > > > #if no lanes responded, exit from the utility > > if 0 == NumLanes: > > print "I can't find any units connected." > > print "Check your connections and try again" > > sys.exit(1) > > > # list the lanes we have in our dictionary > > for n in Lanes: > > print "Lane - %s" % n > > > Now, here is the error message that I get > > > [EMAIL PROTECTED]:~/py$ ./Thex.py > > Looking for connected units > > True > > Request #1 > > True > > Request #2 > > Serial port failure. Power cycle units > > [EMAIL PROTECTED]:~/py$ ./Thex.py > > The serial port is unavailable. > > Disconnect your USB to Serial adapter, Then > > reconnect it and try again. > > [EMAIL PROTECTED]:~/py$ > > > Does anyone have any ideas? > > > Thanks, > > > rob < [EMAIL PROTECTED] >Where is OpenPort ? > > hg -- http://mail.python.org/mailman/listinfo/python-list