Элемент управления PyVisa для AG34970a device.write приводит к ошибке при записи строковой переменной - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь управлять картой gp-коммутатора в слоте 3 AG34970a, используя pyvisa.

Когда я ввожу это в консоль.

dac.write("ROUTe:CLOSe (@301,302,303,304,305,306,307,308)")

переключатель работает нормальнои тихо, и консоль выводит

(48L, <StatusCode.success: 0))

мое устройство называется dac.

, но когда я пытаюсь использовать вместо него строковую переменную, ответ в консоли такой же, но прибор издает звуковой сигнали не закрывает переключатели.Код ошибки на устройстве - ошибка 103, которая, по моему мнению, означает недопустимый разделитель, но поскольку один из них работает, я не понимаю, почему другой не будет.

switch_str = '"ROUTe:CLOSe (@301,302,303,304,305,306,307,308)"'
dac.write(switch_str)

Разве невозможно использовать переменную вв сочетании с командой .write?

Я разобрался.Ну вроде.Все, что происходило не так, происходило, когда я соединял свою строку перед передачей ее на устройство.Я закончил тем, что стал более явным с частями команды записи, которые должны были оставаться постоянными и только проходить в списке каналов для закрытия.Я до сих пор не уверен, почему это не работало раньше, но сейчас.Спасибо за вашу помощь.

fields = ['301', '302', '303', '304', '305', '306', '307']

voltage = dac.query_ascii_values('MEAS:VOLT:DC? AUTO,DEF,(@101:107)')
               #convert the resulting voltage values into floats
    flvolts=[float(i) for i in voltage]
               #create a dictionary with the fields and corresponding voltage values
     dictionary=dict(zip(fields, flvolts))
               #evaluate the voltage list to determine the lowest value
     minval = min(flvolts)
               #produce a list of gp-switch channels that need to be closed to get cells balanced
               #targetval was created further up.  initially it is the same as minval but minval can
               #change.  Targetval shouldn’t
     switch_list=({k for (k,v) in dictionary.items() if v >= targetval})
               #begin generating the string to be sent to the device by converting the floats to strings
     str_list=[str(i) for i in switch_list]
               #Set up an empty list
     formatted_str_list=""
               #Format str_list into a string of comma separated numbers.
     for i in str_list:
          formatted_str_list += str(i) + ","     
               #instruct the device to close the channels that need drained
               #because they are higher than the minval
     dac.write("ROUTe:CLOSe (@" + formatted_str_list + "308)")

1 Ответ

0 голосов
/ 06 октября 2018

Попробуйте обернуть строку только одинарными или двойными кавычками, а не обоими.Возможно, вам говорят, что «это недопустимый параметр разделения (:,;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...