See comments in-line.

On May 7, 2010, at 3:23 PM, MRAB wrote:

> 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.

Which I can, in all three cases.

> 
>> 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)?

The X10 controller not only receives it, it echos the response (\x06\r) that 
means
it saw it and is ready for the next command in all three cases.  The serial 
write
that immediately follows, in which five hex bytes get sent to it is the one 
which
succeeds interactively and in the IDE, and fails when executed as a bash script.

> 
>>>> 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

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

Reply via email to