Rob wrote: > 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
I don't get it: you never pass any parameter to OpenPort The second thing I wonder about is whether you need to reinit serial every time . hg -- http://mail.python.org/mailman/listinfo/python-list