Я Студент-электронщик, интересующийся управлением приборами. Использование C# для этой цели и базовые знания приложений форм C#.
Кроме того, существует стандартный набор команд, разработанный IVI Foundation, под названием «Команды SCPI». Это простой подход к управлению прибором, и вы не можете написать код SCPI для полнофункциональной системы управления прибором. Здесь роль играют «водители». Большинство производителей предоставляют драйверы устройств при покупке их продукта. С помощью этого файла драйвера вы можете создавать полнофункциональные и быстро реагирующие программы. Также вы можете разработать собственный драйвер для своих нужд. Но хотя SCPI является стандартным для всех типов инструментов, некоторые множественные команды начинают создавать проблемы. Например, вы пишете код для бренда A, но этот код не работает для того же устройства бренда B, которое делает то же самое с устройством бренда A.
Основная цель — создание программного обеспечения для расчета потерь в кабеле для нескольких коаксиальных кабелей. Для выполнения этой задачи необходимо использовать анализатор спектра и генератор радиочастотных сигналов. У нас есть пара анализаторов спектра и множество генераторов сигналов.
С помощью одной программы мы можем управлять всеми нашими устройствами. Это моя проблема.
Я хочу создать адаптивное программное обеспечение, которое будет работать со всеми нашими анализаторами спектра и генераторами сигналов. Как я могу это сделать?
Во-первых, я думаю, что могу создать драйвер для каждого устройства, и основная программа выберет правильный драйвер, запросив у пользователя подсказку или что-то в этом роде. Но я не знаю, как этого добиться.
Во-вторых, я могу написать основную часть программного обеспечения для каждой комбинации устройств и включить эту часть в файл .txt в основное программное обеспечение во время выполнения. Я знаю, что это нубский подход, но думаю, что смогу сделать это без проблем. И я ничего не знаю о первом подходе.
В-третьих, я могу написать все команды устройств для каждого из них в программе и использовать условия if для выбора между случаями. Или конструкция корпуса переключателя. Это единственный способ. Если я не могу сделать это с другими вариантами.
Возможно, вы не поймете меня до сих пор, потому что я не могу точно описать проблему, потому что я Я разработчик программного обеспечения-любителя.
Предположим, что у вас есть генератор сигналов. Вы хотите выбрать частоту 10 МГц. Это Agilent 33120A. Чтобы добиться этого с помощью компьютера, вам необходимо отправить эту команду на устройство.
Код: Выделить всё
SOUR:FREQ 10 MHZ
Код: Выделить всё
SENS:FREQ 10 MHZ
Чтобы создать программу с C# мы используем API для связи с устройствами. Если вы используете протокол GPIB, имя API — NI488.2. Если вы используете RS232, вы можете использовать VISA API и т. д. Кстати, наш протокол — GPIB.
При использовании GPIB мы используем оболочки для простой интеграции команд SCPI со средой C#. Например, после добавления GPIB-библиотек в ссылки вы можете использовать это для отправки команд через интерфейс форм C#;
Код: Выделить всё
ibwrt("SOUR:FREQ 10 MHZ", "SOUR:FREQ 10 MHZ".Length);
Но они используют одно и то же программное обеспечение. Генератор сигналов IFR может использовать для работы «SENS:FREQ».
Перед началом операции может появиться всплывающее окно с запросом драйверов устройств. Я не знаю. Они первыми пришли мне на ум. Но если бы вы были на моем месте, как бы вы этого достигли? И если вы выберете вариант, пожалуйста, скажите мне, как это сделать. Я застрял в этом. И сейчас в программе около 2000 строк кода. "ibwrt" не единственная часть программы, ни "SENS:FREQ"...
Для других задач есть еще "SENS:BAND:RES", "INIT:CONT" и т.д. Это не важно.
Надеюсь, вы поняли мой вопрос, потому что я знаю, что не смогу ответить правильно.
Если у вас есть вопросы по поводу проблемы, задавайте их в комментариях.
Спасибо.
TL; DR
Мне нужно отправлять команды для каждого устройства через интерфейс C# Forms. Я имею в виду, что у устройств есть свои специальные команды, и мне нужно создать одно программное обеспечение, которое сможет управлять каждым устройством по выбору пользователя, вместо того, чтобы создавать программное обеспечение для каждого устройства.
Подробнее здесь: https://stackoverflow.com/questions/253 ... e-software