is there a problem on this simple code

jrlen balane nbbalane at gmail.com
Tue Mar 15 20:47:01 EST 2005


please post your suggestions? please ...


On Wed, 16 Mar 2005 08:33:23 +0800, jrlen balane <nbbalane at gmail.com> wrote:
> ok heres the code, i'm trying on IDLE:
> 
> import sys
> import serial
> import sys, os
> import serial
> import string
> import time
> from struct import *
> 
> data_file = open('C:/Documents and Settings/nyer/Desktop/IRRADIANCE.txt', 'r')
> data = data_file.readlines()
> 
> def process(list_of_lines):
>     data_points = []
>     for line in list_of_lines:
>         data_points.append(int(line))
>     return data_points
> 
> irradiance = process(data)
> 
> ser = serial.Serial()
> ser.baudrate = 9600
> ser.port = 0
> ser
> 
> ser.open()
> tx_command = 67
> tx_no_databyte = 2
> tx_message_no = 1
> tx_len = len (irradiance)
> 
> for j in range (tx_len)  :
>     start_time = time.time()
> 
>     temp1 = []
>     temp2 = []
>     pyra1 = []
>     pyra2 = []
>     voltage = []
>     current = []
> 
>     current_time = time.time()
> 
>     while( current_time >= start_time + 300):
> 
>         data_hi, data_lo = divmod(irradiance[j], 0x100)
>         tx_checksum = -(data_hi + data_lo + tx_command + tx_message_no
> + tx_no_databyte) & 0xff
>         ser.write(pack('6B', tx_command, tx_message_no,
> tx_no_databyte, data_lo, data_hi, tx_checksum))
> 
>         rx_data = ser.read(19)
>         rx_len = len(rx_data)
>         byte = [ord(x) for x in rx_data]
> 
>         if rx_len < 10:
>             #print 'it is not pumping data out as fast as we assumed'
>             sys.exit(1)
> 
>         for k in range (rx_len-9):
>             if byte[k] == 70 and byte [k+2] == 6 and sum(byte[k:k+10])
> & 0xff == 0:
>                 #print byte[k:k+10]
> 
>                 temp1.append(byte[k+3])
>                 temp2.append(byte[k+4])
>                 pyra1.append(byte[k+5])
>                 pyra2.append(byte[k+6])
>                 voltage.append(byte[k+7])
>                 current.append(byte[k+8])
>                 print temp1, temp2, pyra1, pyra2, voltage, current
> 
>         current_time = time.time()
> 
> while theres no error in the output, there is also no response from
> the hardware or maybe communication is off.
> 
> could somebody out there help me.
> 
> by the way, here is a working code: though here the data to be
> transmitted is just incrementing and not read from a text file:
> 
> import serial
> import string
> import time
> from struct import *
> import os
> 
> ser = serial.Serial()
> 
> ser.baudrate = 9600
> ser.port = 0
> ser.timeout = 1
> ser
> 
> ser.open()
> tx_command = 67
> tx_message_no = 1
> tx_no_databyte = 2
> item=10000
> for item in range(10000, 30001, 10):
> 
>     data_hi, data_lo = divmod(item, 0x100)
>     tx_checksum = -(data_hi + data_lo + tx_command + tx_message_no +
> tx_no_databyte) & 0xff
>     ser.write(pack('6B', tx_command, tx_message_no, tx_no_databyte,
> data_lo, data_hi, tx_checksum))
>     #print tx_command, tx_message_no, tx_total_data, data_lo, data_hi,
> tx_checksum
> 
> 
>     rx_data = ser.read(19)
>     rx_len = len(rx_data)
>     #print 'rx_len', rx_len
>     byte = [ord(x) for x in rx_data]
>     #print 'received', byte
> 
>     if rx_len < 10:
>         print 'it is not pumping data out as fast as we assumed'
>         sys.exit(1)
> 
>     for k in range (rx_len-9):
>         if byte[k] == 70 and byte [k+2] == 6 and sum(byte[k:k+10]) & 0xff == 0:
>             print byte[k:k+10]
> ===================================
> outputs:
> [70, 2, 6, 54, 197, 253, 230, 231, 211, 26]
> [70, 3, 6, 54, 197, 253, 230, 231, 211, 25]
> [70, 3, 6, 54, 197, 253, 230, 231, 210, 26]
> [70, 3, 6, 54, 197, 253, 230, 231, 210, 26]
> [70, 3, 6, 54, 197, 253, 230, 231, 211, 25]
> [70, 3, 6, 54, 197, 253, 230, 231, 210, 26]
> [70, 3, 6, 54, 197, 253, 230, 231, 211, 25]
> [70, 3, 6, 54, 197, 253, 230, 231, 210, 26]
> [70, 3, 6, 54, 197, 253, 230, 231, 211, 25]
> ...
> ...
> 
> On Wed, 16 Mar 2005 07:34:44 +0800, jrlen balane <nbbalane at gmail.com> wrote:
> > will this be correct???
> > what i want to happen is saved every received data (6 data bytes) to
> > an array for each one.
> >
> > for k in range (rx_len-9):
> >      if byte[k] == 70 and byte [k+2] == 6 and sum(byte[k:k+10]) & 0xff == 0:
> >               #print byte[k:k+10]
> >
> >                temp1.append(byte[k+3])
> >                temp2.append(byte[k+4])
> >                pyra1.append(byte[k+5])
> >                pyra2.append(byte[k+6])
> >                voltage.append(byte[k+7])
> >                current.append(byte[k+8])
> >
> >                if time.sleep(300) == True:
> >                      temp1 = []
> >                      temp2 = []
> >                      pyra1 = []
> >                      pyra2 = []
> >                      voltage = []
> >                      current = []
> >
> > and after x minutes of of receiving data, the arrays will be emptied
> > of its contents.
> >
> > thanks again for the help.
> > On 15 Mar 2005 02:13:40 -0800, John Machin <sjmachin at lexicon.net> wrote:
> > >
> > > jrlen balane wrote:
> > > > did some editing:
> > > >
> > >
> > > The error means that you received less than 19 bytes of data.
> > >
> > > > rx_data = ser.read(19)
> > > !rx_len = len(rx_data)
> > > !print 'rx_len', rx_len
> > > > byte[0:18] = unpack('19B', rx_data)
> > > !# trash the above, do this
> > > !byte = [ord(x) for x in rx_data]
> > > !print 'received', byte
> > > !if rx_len < 10:
> > > !   print 'it is not pumping data out as fast as we assumed!'
> > > !   sys.exit(1)
> > > >
> > > !for k in range(rx_len - 9):
> > > >        if byte[k] == 70:
> > > >            if byte[k+2] == 6:
> > > >                if byte[k+9] ==
> > > >
> > > -(byte[k]+byte[k+1]+byte[k+2]+byte[k+3]+byte[k+4]+byte[k+5]+byte[k+6]+byte[k+7]+byte[k+8])
> > > > & 0xff:
> > >
> > > Yuk!
> > >
> > > (1) use 'and'
> > > (2) when you find yourself typing repetitive crap like that, your brain
> > > should be shrieking "There must be a better way!!"
> > >
> > > if byte[k] == 70 \
> > > and byte[k+2] == 6 \
> > > and sum(byte[k:k+10]) & 0xff == 0:
> > >
> > > >                    print byte[k:k+9] <<<<<<=== you probably mean 10,
> > > not nine
> > > > ====================================
> > > > heres the error:
> > > > Traceback (most recent call last):
> > > >   File "C:\Python23\practices\serialnewesttest2.py", line 28, in
> > > -toplevel-
> > > >     byte[0:18] = unpack('19B', rx_data)
> > > > error: unpack str size does not match format
> > > >
> > > > what i am doing here is creating an array from based on the unpacked
> > > data
> > > > then i am searching for the array member that is equal to "70" since
> > > > it is going to be my reference. once i find it, i'll based my
> > > received
> > > > data from that point. then if the succeding tests are confirmed, i
> > > can
> > > > get my data.
> > > >
> > > > please help....(again) :(
> > >
> > > --
> > > http://mail.python.org/mailman/listinfo/python-list
> > >
> >
>



More information about the Python-list mailing list