Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 3, 2012 16:41:59

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

С COM порта поступают сообщения.

Привет. Ну серьезно, очень нужна ваша помощь. С COM порта поступают сообщения.
import serial
import time
import binascii
ser = serial.Serial('COM3', 115200,timeout = 1, xonxoff=True, dsrdtr = True, interCharTimeout = True)
d = 0
time.sleep(3)
print ‘3 seconds’
ser.write('$CMD,CLEAR\r\n') # подали команду через порт
a = ser.readline()
SaveFile = open( ‘Data.txt’, ‘a’ )# пишем лог
SaveFile.write(a)
SaveFile.close()
print ‘just waiting for 15 seconds……..’
time.sleep(15)
ser.write('$CMD,CHN,1,MSG,RT3_1005,1\r\n') # подали команду выдавать RTCM сообщения
while d < 1000:
a = ser.readline()
Воот, а дальше, нужно выделить строки, двоичный код которых начинается на “11010011” . и после этого прверить, стоит ли после нашего “11010011” еще “000000”?
Советовали с модулем struct работать, но я нихрена его чет не понимаю. Помогите написать прогу, или объясните.



Отредактировано Queeee (Апрель 3, 2012 16:44:33)

Офлайн

#2 Апрель 3, 2012 16:52:08

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

С COM порта поступают сообщения.

Руководствуясь такой замечательной постановкой задачи вот код.

bytes = struct.unpack('bb', a[:2])
bytes[0] == 0xd3 # ваш 11010011 в HEX
bytes[1] >> 2 == 0 # ваши следующие 6 нулей.



Отредактировано cutwater (Апрель 3, 2012 16:52:37)

Офлайн

#3 Апрель 3, 2012 16:55:43

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

С COM порта поступают сообщения.

спасибо! Не могли бы вы как вы это сделали, пожалуйста.



Офлайн

#4 Апрель 3, 2012 17:10:21

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

С COM порта поступают сообщения.

Да очень просто. Я же Вам уже кажется советовал изучать битовые операции и маски?
struct.unpack извлекает из строки с двоичными данными два байта, предварительно конвертируя их в int
первый байт проверяется без сдвига, так как 11010011 - 8 бит эквивалентно 1 байту.
вторые старшие 6 бит проверяются при помощи битового сдвига второго байта на 2



Офлайн

#5 Апрель 3, 2012 17:51:44

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

С COM порта поступают сообщения.

Спасибо!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version