William R. Wing (Bill Wing) wrote:

On May 7, 2010, at 2:08 PM, MRAB wrote:

William R. Wing (Bill Wing) wrote:
Hello World -
I'm new to both Python and this list, but here's hoping someone can spot my problem.
System:  Mac OS-X, 10.6.3 (Intel dual quad processor)
Using Python 2.6.1, and pyserial-2.5_rc2-py2.6
The following snippet of code is designed to open a port via a KeySpan USB-to-serial converter and communicate with an X10 power line signaling system. Before you look at the code, let me mention that my frustration is the it executes perfectly if i enter it line by line at the Python prompt, and executes perfectly if I run it under the Wing IDE. It fails silently (no errors) if I run it as a standalone script. Clearly, I'm missing something.
What do you mean "It fails silently"? It might be unable to find the
modules if you double-click on the script. You could check for that by
printing a message if the import statement raises an ImportError.

Maybe I should have been more explicit. The first line in the Python file is:

#!/usr/bin/env Python (alternatively #!/usr/bin/Python - same results either way).

and what I meant was that when I invoke it from a terminal window, it fails.
If the import were failing, wouldn't I get failures on the serial operations?

If the import fails then you wouldn't be able to create a serial object.

In particular, the ser object is exactly what it should be. If I print it out, I get
the same value for ser in either terminal window mode or in the debugger.

The various status print statements give exactly the expected results in both cases. But when invoked from the terminal window, the X10 controller doesn't
get commands.

So you can execute:

    stat1 = ser.write('\x02')

but the X10 controller just isn't receiving it? Is stat1 the same in
both cases (ie, working and non-working)?

import serial, string
port = '/dev/tty.KeySerial1'
ser = serial.Serial(port, 9600, timeout=1) # Set up handle to serial port stat1 = ser.write('\x02') # Write "Attention" to PowerLink print(' Stat1 is:', stat1) ack = ser.read(2) # Check to see if PowerLink is ready if ack == '\x06\r': # It returns ACK (\x06) \r if it is stat2 = ser.write('\x63\x4E\x5C\x45\x41')# send "On" to module at House Code B, device code 2
   print(' Stat2 is:', stat2)
   stat3 = ser.close()                      # Close serial port
   print(' Stat3 is:', stat3)
elif ack =='\x15': # PowerLink sends NAC (hex 15) if it isn't.
   print('Received NAK after first open')
else:   print("Something's wrong at 1.\n")
dummy = raw_input(' Hit any key to continue: ')

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to