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