Найти - Пользователи
Полная версия: Зацикливание
Начало » Python для новичков » Зацикливание
1
Queeee
Помогите пожалуйста найти ошибку в коде, а то где-то происходит зацикливание и прога не работает уже 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()
s0rg
while 1 != 3:
wtf????
Queeee
не единица там, а маленькая L
agalen
Что такое 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" )
Queeee
Спасибо, подучил эти вещи - они и вправду жизнь улучшают
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB