Писериальный поиск для заданного c двоичного бита - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в Python и создаю алгоритм для считывания отражающих данных с больного сканера безопасности. Компания заявляет, что бит 13 в 16-битном случае будет означать, если датчик обнаруживает что-либо отражающее.

У меня есть код, который печатает двоичные данные, но пытается найти код, который можно найти, когда определенный бит (бит 13) положителен. Может ли кто-нибудь помочь мне в этом вопросе? Код указан ниже.

    #!/usr/bin/env python
import time
import serial
import binascii
import math


ser = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 38400,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=2
           )
counter=1

#Request token telegram listing expected printed bytes confirming connection with sensor. 
sick_request = bytearray()
sick_request.append(0x00)
sick_request.append(0x00)
sick_request.append(0x00)
sick_request.append(0x00)

#Request packet for block 12 of data using telegram listing documentation.
packet = bytearray()
packet.append(0x00)
packet.append(0x00)
packet.append(0x45)
packet.append(0x44)
packet.append(0x0C)
packet.append(0x00)
packet.append(0x02)
packet.append(0x22)
packet.append(0xFF)
packet.append(0x07)

#Request token for sick sensor using telegram listing.
request = bytearray()
request.append(0x00)
request.append(0x00)
request.append(0x41)
request.append(0x44)
request.append(0x19)
request.append(0x00)
request.append(0x00)
request.append(0x05)
request.append(0xFF)
request.append(0x07)
request.append(0x19)
request.append(0x00)
request.append(0x00)
request.append(0x05)
request.append(0xFF)
request.append(0x07)
request.append(0x07)
request.append(0x0F)
request.append(0x9F)
request.append(0xD0)

scale = 16

#Sick sensor code for retriving data via block 12 data request. 
if (ser.isOpen() == True):

    ser.isOpen()
    time.sleep(2)
    ser.write(request)
    print("Telegram Request token sent")
    c = ser.read(4)
    z = binascii.hexlify(c).decode('UTF-8')
    print(z)

if (c == sick_request):
    print("ok")

if (c != sick_request):
    print("not ok")


time.sleep(5)

print("write done")

while True:

    ser.write(packet)

    sick_read = ser.readline(1096)#reconstructed block 12 data from sick intelligence document

    read_data = binascii.hexlify(sick_read).decode('UTF-8')

    hex_read = [read_data[i:i+4] for i in range(0, len(read_data), 4)]
    print("hex string", hex_read)

    n = int(read_data, 16)
    bStr = ''
    while n > 0:
        bStr = str(n % 2) + bStr
        n = n >> 1
    res = bStr
    binary_read = [res[i:i+8] for i in range(0, len(res), 8)]
    print(str(binary_read))

    time.sleep(1.5)

ser.close()

while False:
    print("connection possibly not established or faulty packet sent")

ser.close()
...