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

Сбор данных
Я подключаюсь к преобразователю время-амплитуда (TAC) SR620 с помощью pyvisa модуль на питоне. Могу правильно настроить прибор (установить значения параметров, режим измерения...). Соответственно меняется все на передней панели. Я подключаюсь с помощью этого
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
XHST? запрос возвращает раздел j (j=0–9) гистограммы
отображается в виде 4-байтовых двоичных целых чисел, начиная с младшего байта. Каждая
секция состоит из данных по 25 точкам гистограммы (всего 100 байт
плюс терминатор). Между последовательными точками нет разделителя.
Если используется интерфейс rs232, необходимо выбрать 8-битное слово данных
для правильной передачи этих данных. Возвращенные данные группируются в 250 ячеек, а не в число, заданное на передней панели. Эта команда позволяет
быстро прочитать все содержимое гистограммы. Если гистограмма
пуста, возвращаются недопустимые цифры -0.
Итак, я понимаю, что мне нужно собрать 10 разделов, состоящих из 25 4-байтовые целые числа в двоичном формате. С терминатором(\r\n) в конце каждого раздела, который я удаляю, чтобы не смешивать целые числа с '\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("\x00\x00\x00\x0e\x00\x00\x00$\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x07\x00\x00\x00{\x00\x00\x00z\x00\x00\x00o\x00\x00\x00\x0f\x00\x00\x00p\x00\x00\x00x\x00\x00\x00g\x00\x00\x00n\x00\x00\x00_\x00\x00\x00s\x00\x00\x00W\x00\x00\x00Z\x00\x00\x00]\x00\x00\x00D\x00\x00\x00_\x00\x00\x00U\x00\x00\x00L\x00\x00\x00_\x00\x00\x00\r\n'
[62, 14, 36, 11, 12, 12, 7, 123, 122, 111, 15, 112, 120, 103, 110, 95, 115, 87, 90, 93, 68, 95, 85, 76, 95]
[1]: b'X\x00\x00\x00J\x00\x00\x00_\x00\x00\x00d\x00\x00\x00K\x00\x00\x00X\x00\x00\x00U\x00\x00\x00L\x00\x00\x00Y\x00\x00\x00[\x00\x00\x00W\x00\x00\x00^\x00\x00\x00f\x00\x00\x00u\x00\x00\x00^\x00\x00\x00t\x00\x00\x00q\x00\x00\x00|\x00\x00\x00}\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00}\x00\x00\x00\x07\x00\x00\x00u\x00\x00\x00\x7f\x00\x00\x00\r\n'
[88, 74, 95, 100, 75, 88, 85, 76, 89, 91, 87, 94, 102, 117, 94, 116, 113, 124, 125, 120, 0, 125, 7, 117, 127]
[2]: b'l\x00\x00\x00{\x00\x00\x00z\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00t\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x15\x00\x00\x00{\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00"\x00\x00\x00\x14\x00\x00\x00p\x00\x00\x00\t\x00\x00\x00y\x00\x00\x00\x06\x00\x00\x00y\x00\x00\x00\x02\x00\x00\x00p\x00\x00\x00j\x00\x00\x00g\x00\x00\x00\r\n'
[108, 123, 122, 1, 6, 2, 116, 23, 23, 21, 123, 24, 0, 7, 34, 20, 112, 9, 121, 6, 121, 2, 112, 106, 103]
[3]: b'^\x00\x00\x00k\x00\x00\x00Y\x00\x00\x00r\x00\x00\x00Z\x00\x00\x00i\x00\x00\x00T\x00\x00\x00`\x00\x00\x00F\x00\x00\x00G\x00\x00\x00E\x00\x00\x00W\x00\x00\x00T\x00\x00\x00a\x00\x00\x00Q\x00\x00\x00W\x00\x00\x00f\x00\x00\x00k\x00\x00\x00]\x00\x00\x00k\x00\x00\x00R\x00\x00\x00l\x00\x00\x00i\x00\x00\x00p\x00\x00\x00W\x00\x00\x00\r\n'
[94, 107, 89, 114, 90, 105, 84, 96, 70, 71, 69, 87, 84, 97, 81, 87, 102, 107, 93, 107, 82, 108, 105, 112, 87]
[4]: b'\r\ng\x00\x00\x00s\x00\x00\x00z\x00\x00\x00j\x00\x00\x00v\x00\x00\x00i\x00\x00\x00|\x00\x00\x00p\x00\x00\x00\x7f\x00\x00\x00q\x00\x00\x00d\x00\x00\x00p\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\n\x00\x00\x00w\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00}\x00\x00\x00\x14\x00\x00\x00\x17\x00\x00\x00\n\x00\x00\x00\x04\x00\x00\x00'
[103, 115, 122, 106, 118, 105, 124, 112, 127, 113, 100, 112, 4, 3, 2, 4, 10, 119, 0, 35, 125, 20, 23, 10, 4]
[5]: b'\x00\x00\r\n\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00y\x00\x00\x00{\x00\x00\x00\x01\x00\x00\x00|\x00\x00\x00o\x00\x00\x00r\x00\x00\x00i\x00\x00\x00P\x00\x00\x00]\x00\x00\x00X\x00\x00\x00g\x00\x00\x00U\x00\x00\x00Q\x00\x00\x00R\x00\x00\x00U\x00\x00\x00b\x00\x00\x00I\x00\x00\x00k\x00\x00\x00g\x00\x00\x00Z\x00\x00\x00[\x00'
[2573, 131072, 262144, 393216, 7929856, 8060928, 65536, 8126464, 7274496, 7471104, 6881280, 5242880, 6094848, 5767168, 6750208, 5570560, 5308416, 5373952, 5570560, 6422528, 4784128, 7012352, 6750208, 5898240, 5963776]
[6]: b'\x1e\x00\x00\x00\r\ne\x00\x00\x00^\x00\x00\x00k\x00\x00\x00S\x00\x00\x00u\x00\x00\x00s\x00\x00\x00n\x00\x00\x00o\x00\x00\x00f\x00\x00\x00t\x00\x00\x00\x03\x00\x00\x00v\x00\x00\x00\n\x00\x00\x00y\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00u\x00\x00\x00j\x00\x00\x00w\x00\x00\x00z\x00\x00\x00u\x00\x00\x00l\x00\x00\x00\x0f\x00\x00\x00e\x00\x00\x00'
[168624128, 101, 94, 107, 83, 117, 115, 110, 111, 102, 116, 3, 118, 10, 121, 0, 126, 117, 106, 119, 122, 117, 108, 15, 101]
[7]: b'\x00\x00\x00\x00\x00\x00\r\n\x7f\x00\x00\x00\x1c\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[30, 8325645, 1835008, 917504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[8]: b'\x00\x00\x00\x00\x00\x00\x00\x00\r\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[0, 168624128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[9]: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[0, 0, 2573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Подробнее здесь: https://stackoverflow.com/questions/791 ... instrument