is there a problem on this simple code

jrlen balane nbbalane at gmail.com
Wed Mar 16 01:33:23 CET 2005


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