Последовательные пропущенные данные в RPI3 с использованием Python - PullRequest
1 голос
/ 08 июля 2019

Я использую raspberry pi 3 и этот код для отправки запроса на устройство и получения ответа от него.

#!/usr/bin/python3.7    

import socket               # Import socket module
import thread
import time
import serial

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

input = '5A03010d0a75'    
print "Sending request... "+input
ser.write(input.decode("hex"))
print "Request sent."

output=""
while True:
  output += ser.read(1)
  #time.sleep(0.1)
  print "Reading... "+output.encode('hex')

Он обрабатывает ответ, но отсутствуют байты, он должен получить строку длиной 56 байтов вместо 53.

Это вывод: enter image description here

a5030119010000010001000a20120118180130090100020505030117501701051421000301040120010516039833630004060104c200007d

3 пропущенных байта

Последовательная конфигурация - это то, что производитель говорит в документации. Это устройство хорошо работает с другим моим приложением, созданным в Delphi.

EXTRA Это сравнение с моим приложением delphi и сценарием py:

Delphi app
A5030119010000010001000A20120118180130090100020505030117501701051421000301040120010516039833630004060104C200007D
Python script
a503011901000001000100    1201181801300901000205050301175017010514210003010401  010516039833630004060104c200007d

1 Ответ

1 голос
/ 09 июля 2019

Решением было установить максимальный байт для метода serial.read (). Это должно быть связано с рабочим поведением устройства

#!/usr/bin/python3.7
#sudo python /home/testing.py

import serial
import time


ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=5
)

input = '5A03010d0a75'    
print "Sending request... "+input
ser.write(input.decode("hex"))
print "Request sent."

output=""
time.sleep(1)
while ser.inWaiting() > 0:
  output += ser.read(10) #setting it to 10 will fix this problem

print "Reading... "+output.encode('hex')
...