Я имею в виду реализацию своего рода демона / службы в C / C ++ для linux, которая могла бы взаимодействовать с конкретным устройством gpib через оболочку (используя библиотеку linux-gpib).
Идея в том, что демон будет сканировать все существующие устройства и создаст файл / канал /dev/gpib#-*
(где *
будет их адрес на указанной шине gpib) для каждого устройства. Использование будет таким, как /dev/com#
, Затем я мог бы ввести в командной строке:
echo "*IDN?" > /dev/gpib1-12
который отправит «* IDN?» Строка к устройству 12 на борту 1. Пока это мирный пирог …
Проблема начинается, когда я хочу получить данные с устройства. Я хочу, чтобы он работал аналогично, чтобы
cat /dev/gpib1-12
выписал бы, что говорит устройство … Но я не могу знать, какую команду, которую я отправил устройству, заставил бы устройство возвращать строку (значение), а какую — нет. Итак, мои варианты:
/dev/gpib#-*
труба. Это должно быть подано черезсигналы‘ а также ‘ждет».По понятным причинам (производительность и / или задержка) я не хочу реализовывать решение 1. Я не знаю, как сделать другое, хотя … Я чувствую, что это возможно реализовать на всемогущем Linux, но как? Я читал этот и я думаю, что некоторое вращение функции select()
это верный путь вперед, но я не могу понять, как использовать его для моей проблемы. Я тоже наткнулся на этот, где парень объясняет, как сделать что-то похожее, но ооочень другое (код mosfet.c).
Вопрос в том: Как я могу немедленно обнаружить и отреагировать на попытку чтения с другой стороны канала / FIFO / файла с помощью сигнализации, ожидания или прерывания?
Спасибо за ответы.
PS: здесь половина седьмого утра (да, еще одна бессонная ночь), поэтому, пожалуйста, извините за мой сломанный английский …
PPS: О, да, и если кто-нибудь уже знал бы о таком демоне gpib для linux, или если мысль, которую я спрашиваю (доступ к отдельным устройствам через файловый ввод / вывод), была бы возможна через библиотеку linux-gpib, пожалуйста, дайте мне знать. Я прочитал документацию и документацию для linux-gpib, но ничего полезного не нашел. Все библиотеки linux-gpib предоставляют привязки к C, Python и т. Д.
PPS: Есть ли другие варианты использования труб?
Если вам просто нужен хороший терминал для вашего устройства gpib, вы можете использовать python (или даже лучше ipython).
linux-gpib поставляется с оболочкой Python (для просмотра кода Вот). так что в вашей оболочке откройте python, набрав python
В интерпретаторе Python вы можете легко общаться с устройством, как это
>>>import Gpib
>>>device = Gpib.Gpib(pad=2)
Откроется подключение к устройству gpib с основным адресом 2. Для связи с ним просто выполните
>>>device.write('*IDN?')
>>>device.read()
'HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0'
Чтобы упростить его еще больше, используйте ipython вместо простого python. Это дает вам завершение вкладок и многое другое.
Других решений пока нет …