Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2015 23:54:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Протокол обмена данных Honda 3-pin

MAGRA
H00 = int(aa[2])
К int приводить не надо, оно и так int.
>>> b = bytearray('abc')
>>> b[0]
97
>>> type(b[0])
<type 'int'>
>>>

MAGRA
Маленько по другому написал
Сначала надо взять контрольную сумму. Она как раз проставлена там, чтобы принимающая сторона проверила корректность данных.

def get_rpm_speed(ser, cmd):
    query = bytearray(cmd)
    query.append((0x100 - sum(query)) & 0xFF)
    ser.write(query)
    resp = bytearray(ser.readline())
    crc = resp.pop()
    if sum(resp) & 0xFF != crc:
        raise ValueError('incorrect crc')
    resp.pop(0)
    resp.pop(0)
    h0, h1, h2 = resp[:3]
    rpm = (h0 * 256 + h1) / 4
    spd = h2
    return rpm, spd
 
ser = serial.Serial('COM3', 9600, timeout=1)
 
rpm, speed = get_rpm_speed(ser, [0x20, 0x05, 0x00, 0x10])
print 'Rpm', rpm
print 'Speed', speed


Проверка:
>>> from mock import patch
>>> 
>>> p = patch('serial.Serial')
>>> m = p.start()
>>> m.return_value.readline.return_value = (
...     b'\x10\xa8\x00\x00'
...     b'\x00\x00\x00\x00'
...     b'\x10\x00\x00\x01'
...     b'\x00\x00\x00\x01'
...     b'\xca'
... )
>>> 
>>> import serial
>>> 
>>> def get_rpm_speed(ser, cmd):
...     query = bytearray(cmd)
...     query.append((0x100 - sum(query)) & 0xFF)
...     ser.write(query)
...     resp = bytearray(ser.readline())
...     crc = resp.pop()
...     if sum(resp) & 0xFF != crc:
...         raise ValueError('incorrect crc')
...     resp.pop(0)
...     resp.pop(0)
...     h0, h1, h2 = resp[:3]
...     rpm = (h0 * 256 + h1) / 4
...     spd = h2
...     return rpm, spd
... 
>>> ser = serial.Serial('COM3', 9600, timeout=1)
>>> 
>>> rpm, speed = get_rpm_speed(ser, [0x20, 0x05, 0x00, 0x10])
>>> print 'Rpm', rpm
Rpm 0
>>> print 'Speed', speed
Speed 0
>>>



Отредактировано py.user.next (Фев. 25, 2015 02:10:01)

Офлайн

#2 Март 10, 2015 10:21:03

MAGRA
Зарегистрирован: 2015-02-20
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Протокол обмена данных Honda 3-pin

py.user.next Спасибо всё получилось!
Вы не имели дело с kivy? Хочу всему этому запилить оболочку типо так:
____________________
Параметры
|датчики | значения |
|speed | 60 км.ч |
|prm | 2500 об.м. |
___________________
Втыкаю 2 недели в киви, получилось только разбить поля, а как сделать так, что бы значения переменных, менялись в окошке, не могу понять, кто ни будь сталкивался с этим?

Отредактировано MAGRA (Март 10, 2015 10:28:03)

Офлайн

#3 Март 10, 2015 12:00:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Протокол обмена данных Honda 3-pin

MAGRA
Вы не имели дело с kivy?
Не, я только PyQt4 изучаю.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version