Я управляю несколькими инструментами (осциллографом, регистратором данных и т. Д.) С помощью Python через PyVisa, и недавно я решил предварительно определить множество соответствующих синтаксисов функций инструментов как функции с переменными.Пример:
def scope_reset():
import visa
instr = visa.ResourceManager().open_resource('foo')
instr.write('*RST')
def logger_reset():
import visa
instr = visa.ResourceManager().open_resource('bar')
instr.write('*RST')
def reset_instrument(instruments):
if 'scope' in instruments:
scope_reset()
if 'logger' in instruments:
logger_reset()
Однако я хочу предварительно определить каждую из этих переменных инструмента ( instr в этом примере) и просто дать команду, выполнив что-то вроде этого:
def scope_reset():
scope.write('*RST')
def logger_reset():
logger.write('*RST')
def reset_instrument(instruments):
if 'scope' in instruments:
scope_reset()
if 'logger' in instruments:
logger_reset()
Другими словами, я хочу избавиться как от импорта виз, так и от определения переменной инструмента в функциях прямого инструмента, как в первых двух.Должен ли я:
- Создать класс, который определяет переменную?Сможет ли передаваемая переменная прибора из экземпляра класса (это объект?) Выполнить свою работу, не будучи вызванной вызовом «импортной визы» в каждой функции, которая хочет использовать переменную?
- Сделать файл .py для каждого инструмента, импортировать визу и определить инструмент в начале?Я предполагаю, что это не сработает, потому что импорт функции «оставил бы» импорт визы и переменную инструмента, импортируя только функцию instr.dosomething (), которая не имеет ни малейшего представления о том, что означает «instr».
- Лучшее решение?(ставлю на это)