Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2012 10:54:31

Queeee
От:
Зарегистрирован: 2012-01-18
Сообщения: 42
Репутация: +  -1  -
Профиль   Отправить e-mail  

Зацикливание

Помогите пожалуйста найти ошибку в коде, а то где-то происходит зацикливание и прога не работает уже 3й день пытаюсь обнаружить ошибку - безрезультатно:

import serial
ser = serial.Serial('COM3', 115200,timeout = 1, xonxoff=True, dsrdtr = True, interCharTimeout = True) # otkroem port
ser.write('$CMD,CLEAR\r\n') # komanda "holodnij start"
i = p = l = E = h = q = SunTime = 0
s = y = ''
b = ser.readline() + ','
while l != 3: # kolichestvo perezapuskov programmi
while i < 10: # ustanovim maksimaljnoe chislo issleduemih strok
if p != len(b):
for x in b: # nachnjom rabotu s vibrannoi strokoi
if b[0:5] == '$GPGGA': # ishem ctroku, nachinajushujusja s GPGGA
i = i + 1 # stchotchik strok
h = h + 1 # stchotchik vremeni, stroka GPGGA pojavljaetsja raz v sekundu
for x in b:
if b[p] != ',':
s = s + b[p] # videlenie pokazanij mejdu zapjatimi
p = p + 1 # nomer simvola v stroke
else:
y = y + s + ','
p = len(y)
q = q + 1
if q == 7 : # iskomoe chislo pered 7j zapjatoj
g = float(s)
if g == 1:
E = h
b = ser.readline() + ','
i = 0
s = y = ''
p = 0

else:
b = ser.readline() + ',' # esli stroka nacinetsja ne s $GPGGA delaem perevod na sledujuschuju stroku
i = i + 1


else:

q = 0 # obnuljaem stchotchik zapjatih
s = y = ''


b = ser.readline() + ','
h = 0 # obnuljaem vremja
SunTime = SunTime + E # nakaplivaem vremja do pojavkenija edinici
l = l + 1 # stchiotchik perezapuskov programmi
ser.write('$CMD,CLEAR\r\n') # i snova pocilaem komandu "holodnij start"
print 'srednee vremja obnarujenija sputnikov :', float(SunTime)/l
ser.close()



Отредактировано (Янв. 27, 2012 11:13:58)

Офлайн

#2 Янв. 27, 2012 11:03:01

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Зацикливание

while 1 != 3:
wtf????

Офлайн

#3 Янв. 27, 2012 11:12:06

Queeee
От:
Зарегистрирован: 2012-01-18
Сообщения: 42
Репутация: +  -1  -
Профиль   Отправить e-mail  

Зацикливание

не единица там, а маленькая L



Офлайн

#4 Янв. 27, 2012 12:58:34

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Зацикливание

Что такое x, если он нигде не используется?
Явно лишние циклы.
Присваивание p = len(y) не прервет цикл.
И вообще, последний ser.readline вызывается для каждого символа в строке.

Короче, учи регулярные выражения и функции работы со строками, чтобы такой огород не городить.

....
b = ser.readline() + ','
....
for x in b: # nachnjom rabotu s vibrannoi strokoi
....
for x in b:
...
b = ser.readline() + ','
...
b = ser.readline() + ',' # esli stroka nacinetsja ne s $GPGGA delaem perevod na sledujuschuju stroku
Должно быть что-то вроде этого:
def get_some_value( ser, timeout ):
expire = time.time() + timeout
while time.time() < expire:
line = ser.readline()
values = line.split( "," )
if values[ 0 ] == "$GPGGA":
return int( values[ 6 ] )
raise Exception( "Timeout" )



Офлайн

#5 Янв. 29, 2012 17:11:31

Queeee
От:
Зарегистрирован: 2012-01-18
Сообщения: 42
Репутация: +  -1  -
Профиль   Отправить e-mail  

Зацикливание

Спасибо, подучил эти вещи - они и вправду жизнь улучшают



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version