Форум сайта python.su
Все с этим разобрался.
a = bytearray([0x20, 0x05, 0x00, 0x10, 0xCB]) ser.write(a)# write a string print ('20 05 00 10 CB') sa=ser.readline() print (sa.encode('hex'))
Офлайн
Все с этим разобрался.
a = bytearray([0x20, 0x05, 0x00, 0x10, 0xCB])
ser.write(a)# write a string
print ('20 05 00 10 CB')
sa=ser.readline()
print (sa.encode('hex'))
Офлайн
MAGRAa = bytearray([0x20, 0x05, 0x00, 0x10, 0x100-(0x20+0x05+0x00+0x10)])
>>> a = bytearray([0x20, 0x05, 0x00, 0x10]) >>> a.append(0x100 - sum(a)) >>> a bytearray(b' \x05\x00\x10\xcb') >>>
>>> a = bytearray([0x20, 0x05, 0x00, 0x10]) >>> a.append((0x100 - sum(a)) & 0xFF) >>> a bytearray(b' \x05\x00\x10\xcb') >>>
>>> b = bytearray('abc') >>> list(b) [97, 98, 99] >>>
Отредактировано py.user.next (Фев. 24, 2015 06:17:05)
Офлайн
a = bytearray([0x20, 0x05, 0x00, 0x10])
a.append((0x100 - sum(a)) & 0xFF)
ser.write(a)
print ('20 05 00 10 CB')
sa=ser.readline()
print (sa.encode('hex'))
Офлайн
Ну что то типо такого.
a = bytearray([0x20, 0x05, 0x00, 0x10]) a.append((0x100 - sum(a)) & 0xFF) ser.write(a) print ('20 05 00 10 CB') sa=ser.readline() aa=bytearray(sa) print (sa.encode('hex')) print list(aa)
[16, 168, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 1]
Отредактировано MAGRA (Фев. 24, 2015 07:11:59)
Офлайн
Дальше можно извлечь команду:
>>> b = bytearray([16, 168, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 1]) >>> b bytearray(b'\x10\xa8\x00\x00\x00\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x01') >>> cmd = b.pop(0) >>> cmd 16 >>> b bytearray(b'\xa8\x00\x00\x00\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x01') >>>
Офлайн
cmd = b.pop(0)
\x10
cmd = b.pop(1)
sa=ser.readline() aa=bytearray(sa) a0 = aa.pop(0) a1 = aa.pop(1) print (a0) print (a1)
20 05 00 10 CB 10a80000000000001000000100000001 [168, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 1] 16 0
Офлайн
MAGRA
И он мне выдал значение не 168 , а 0
cmd = a.pop(0) arg = a.pop(0)
MAGRAТы как бы обратно разбираешь то, что на той стороне составляли. Сначала там выбрали команду - сначала ты берёшь команду. Потом там выбрали аргумент - затем ты берёшь аргумент. Потом там добавили данные - затем ты берёшь данные.
а второй байт будет
def func1(arg): pass def func2(arg): pass d = {0x10: func1, 0x20: func2} f = d[cmd] f(arg)
Отредактировано py.user.next (Фев. 24, 2015 08:03:52)
Офлайн
py.user.next Спасибо тебе большое за помощь, всё получилось!
Маленько по другому написал
sa=ser.readline() aa=bytearray(sa) H00 = int(aa[2]) H01 = int(aa[3]) ... H0n = int(aa[n])
Офлайн
Блин, ещё вопрос возник
Как это зациклить, и как сделать так что бы не каждый раз строчки выводились, а просто менялись значения.
a = bytearray([0x20, 0x05, 0x00, 0x10]) a.append((0x100 - sum(a)) & 0xFF) ser.write(a) sa=ser.readline() aa=bytearray(sa) H00 = int(aa[2]) H01 = int(aa[3]) H02 = int(aa[4]) print ("RPM",(H00*256+H01)/4) print ("Speed",(H02))
Офлайн