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

Сбор данных
Я подключаюсь к преобразователю время-амплитуда (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))
Структура данных
Чтобы получить гистограмму в двоичном формате, я использую специальную команду XHST. В документации указано
XHST? j
XHST? запрос возвращает раздел j (j=0–9) гистограммы
отображается в виде 4-байтовых двоичных целых чисел, начиная с младшего байта. Каждая
секция состоит из данных по 25 точкам гистограммы (всего 100 байт
плюс терминатор). Между последовательными точками нет разделителя.
Если используется интерфейс rs232, необходимо выбрать 8-битное слово данных
для правильной передачи этих данных. Возвращенные данные группируются в 250 ячеек, а не в число, заданное на передней панели. Эта команда позволяет
быстро прочитать все содержимое гистограммы. Если гистограмма
пуста, возвращаются недопустимые цифры -0.
Итак, я понимаю, что мне нужно собрать 10 разделов, состоящих из 25 4-байтовые целые числа в двоичном формате. С терминатором(
Код: Выделить всё
\r\n
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]