Чтение двоичных данных из прибора последовательного портаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Чтение двоичных данных из прибора последовательного порта

Сообщение Anonymous »

Введение
Я хотел бы получить двоичные данные от прибора (SR620) с помощью RS-232. Данные представляют собой гистограмму, состоящую из 250 ячеек. Программа Python, которую я создал, работает хорошо, когда данные не собираются (я получаю 250 нулей), но как только я начинаю измерение, выходные данные становятся странными, и я не могу их использовать. Я объясню сбор данных, структуру двоичных данных и дам краткую версию программы со всеми соответствующими элементами. Затем я описываю вывод, полученную ошибку и способы устранения неполадок.
Мои вопросы:
  • есть ли другие команды, которые я мог бы/должен использовать для получения двоичных данных?
  • связано ли это с другими командами, алгоритмом, устройством и т. д.?
    < li>Откуда проблема, программа, само устройство?
Сбор данных
Подключаюсь к преобразователю время-амплитуда (TAC) SR620 с помощью модуля pyvisa на Python. Могу правильно настроить прибор (установить значения параметров, режим измерения...). Соответственно меняется все на передней панели. Я подключаюсь с помощью этого

Код: Выделить всё

rm = pyvisa.ResourceManager()
## Connecting to counter
TAC = rm.open_resource(self.TAC_address,
baud_rate = 19200,
data_bits = 8,
stop_bits = StopBits(20),
parity    = Parity(0))
В этом эксперименте я подсчитываю задержки между эталоном и событием на детекторе (обычно в диапазоне микросекунд). Мне нужны образцы N_Samples и получить гистограмму задержек. Я начинаю измерение с помощью TAC.write("STRT"). Обратите внимание, что когда я собираю гистограмму непосредственно в виде целого числа с машины (используя специальную функцию HSPT), она работает хорошо, но «медленно». В двоичном формате это намного быстрее, но "глючит".
Структура данных
Чтобы получить гистограмму в двоичном формате, я использую специальную команду XHST. В документации говорится

Код: Выделить всё

XHST? j
The XHST? query returns section j (j=0 to 9) of the
histogram display as 4 byte binary integers least
significant byte first. Each section consists of the
data for 25 histogram points (100 bytes total plus
terminator). There is no separator between
successive points.

If the rs232 interface is being
used an 8 bit data word must be chosen to
correctly transmit this data. The data returned is
binned into 250 bins- not the number set by the
front panel. This command allows one to rapidly
read the entire contents of the histogram display. If
the histogram is blank the illegal numbars -0 are
returned.
Итак, я понимаю, что мне нужно собрать 10 разделов, состоящих из 25 4-байтовых целых чисел в двоичном формате. С терминатором() в конце каждого раздела, который я удаляю, чтобы не смешивать целые числа с '\r\n'. Базой для этого шага является j в диапазоне (0,10): data = TAC.query("XHST? "+str(j)).
Program< /h2>

Код: Выделить всё

## imports
import pyvisa
from pyvisa.constants import StopBits, Parity
import struct
import time

## Connecting to counter
rm = pyvisa.ResourceManager()
TAC = rm.open_resource(self.TAC_address,
baud_rate = 19200,
data_bits = 8,
stop_bits = StopBits(20),
parity    = Parity(0))

## Setting parameters
TAC.write(f"SCLR")  ## clear measurement and display
TAC.write(f"WAIT 2") ## 2*2 ms delay between words
TAC.write(f"MODE 0") # 0 time mode
TAC.write(f"SIZE 10000") # number of samples
TAC.write(f"GSCL 2,250")  # number of bins

## Starting measurement (acquisition)
TAC.write("SRCE 0") # Input A
TAC.write(f"SCEN 1") # 1 single acquisition
TAC.write(f"AUTM 0") # no auto restart
TAC.write("STRT")

## Wait for the end of measurement
state = 0
while state != 1:
state = int(TAC.query("*STB? 0"))
## returns 0 as long as measurement in progress
print(f'State : {state}')
time.sleep(5)

## retrieve data
self.meanlist = [] # result is stored here
for j in range(0,10):
data = TAC.query("XHST? "+str(j))
time.sleep(0.1)
data = data.rstrip("\r\n") # remove terminator to not mix integers and \r\n
data = data.encode() # convert to bytes
print(data)
# data = struct.unpack("

Подробнее здесь: [url]https://stackoverflow.com/questions/79134370/reading-binary-data-from-serial-port-instrument[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»