ЖУРНАЛ «СТА» №4/2006
ло спецификациям VXIbus [3], IEEE 488.1 [4] и IEEE 488.2 [5]. По завершении работы с прибором клиент должен ликвидировать соеди- нение посредством вызова процедуры destroy_link() . После того как успеш- но отработала данная процедура, рабо- та с прибором возможна только после вызова create_link() . С ОЗДАНИЕ СЕРВЕРА VXI-11 НА ПЛАТФОРМЕ QNX Одним из способов оснащения при- бора интерфейсом Ethernet является применение готовой микропроцессор- ной платы, поддерживающей данный интерфейс. Компактные и функцио- нальные устройства данного типа вы- пускаются фирмами Octagon Systems, Fastwel, Advantech и др. Абстрагиро- ваться от аппаратной реализации мик- ропроцессорных плат можно, выбрав в качестве операционной системы RTOS QNX Neutrino. Основные предпосылки такого выбора: близость QNX Neutrino к операционным системам Unix и, как следствие, наличие реализации ONC/RPC, а также широкая номенк- латура поддерживаемых аппаратных платформ. Итак, имеем процессорную плату с интерфейсом Ethernet и развёрнутым па- кетом QNX Momentics 6.3 (среда разра- ботки). Кроме серверной части, понадо- бится клиент – пусть его роль будет вы- полнять ПЭВМ под управлением опера- ционной системы Windows XP. На кли- ентском вычислительном узле должны быть развёрнуты программы AG VISA (библиотека ввода/вывода для взаимо- действия с приборами доступна по адресу h t t p : / / a d n . t m . a g i l e n t . c o m / index.cgi?CONTENT_ID=1035&LAST_ CONTENT_ID=747) и NTRpcInfo (ана- лог Unixутилиты rpcinfo, доступна по адресу http://www.securitylab.ru/soft- ware/232914.php). Попробуем посмотреть на реальный прибор и наш сервер со стороны кли- ента. В качестве прибора, уже поддер- живающего спецификацию VXI11, возьмём генератор сигналов Agilent Technologies 33220А. Пусть IPадрес прибора будет 192.168.10.94, а созда- ваемого сервера — 192.168.10.81. Вос- пользуемся утилитой NTRpcInfo для получения информации о механизме и процедурах RPC на данных сетевых уз- лах (листинг 1). Из этого эксперимента видно, что в генераторе сигналов заре- гистрированы две программы, проце- дуры которых можно вызвать посред- ством ONC/RPC по протоколу TCP. Согласно спецификации [1] номер 395183 имеет канал Core, то есть все процедуры, определённые для данного канала, могут быть вызваны удалённо. Программа под номером 395180 в спе- цификациях VXI11 не определена. Для разрабатываемого же сервера ка- налы Core и Abort не определены (что совершенно естественно), а экспери- мент показывает наличие полноцен- ной службы распределения портов ONC/RPC (зарезервированные для та- кой службы идентификатор 100000 и порт 111), поддерживающей одновре- менно 3 версии спецификации ONC/RPC на базе протоколов ТСР и UDP. Тот факт, что программ с иденти- фикатором 100000 нет в генераторе, оз- начает, что полноценного распредели- теля портов там тоже нет, а развернута только урезанная реализация, рассчи- танная на работу только с двумя про- граммами (395183 и 395180). Генерация ONC/RPC-заглушки Первое, что необходимо сделать на пути к реализации сервера VXI11, — это создать файлызаглушки серверной части. Роль заглушки – ожидание за- просов со стороны клиента на запуск процедур с известной сигнатурой и по приходу таких запросов вызов этих про- цедур с передачей им полученных от клиента параметров. Так как интерфей- сы RPCпроцедур различны, то и за- глушка для каждого нового интерфейса должна быть сгенерирована заново. Интерфейсы процедур каналов Core, Abort и Interrupt определены в специ- фикации VXI11 с использованием но- тации RPCL (RPC Language). Необхо- димо скопировать спецификацию ка- налов Core и Abort в файл с расширени- ем «.x» (спецификацию канала Interrupt копировать не надо, так как данная программа должна поддерживаться клиентом, а не сервером). В состав опе- рационных систем семейства Unix обычно входит утилита rpcgen, которая предназначена для генерации кода за- глушек RPC; есть такая утилита и в QNX Momentics. Пусть спецификации каналов Core и Abort помещены в файл Device.x. Попробуем сгенерировать за- глушку средствами QNX Momentics: $rpcgen –C /tmp/Device/Device.x cannot find any C preprocessor (cpp) Весьма неожиданный результат: ути- лита rpcgen есть, а сгенерировать за- глушку с её помощью нельзя. К сожа- лению, в составе QNX Momentics 6.3 отсутствует препроцессор glibc, и ути- лита rpcgen неработоспособна. Поэто- му для генерации придётся воспользо- ваться какойлибо другой Unixсисте- мой (так как сгенерировать код за- глушки нужно только один раз, то это не должно вызвать особых затрудне- ний), например FreeBSD или Linux. 60 СТА 4/2006 П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / ИН С Т Р УМЕ Н ТАЛ Ь НЫ Е СИС Т ЕМЫ www.cta.ru Листинг 1 Генератор сигналов Agilent Technologies 33220А Микропроцессорная плата с QNX Momentics 6.3 (запущена программа-демон portmap [2]) С:\tmp>ntrpcinfo 192.168.10.94 Getting RPC information for: 192.168.10.94 =============================== Program: **DONE** Program ID : 395180 Version: 1 Port: 1024 Protocol: TCP =============================== Program: **DONE** Program ID : 395183 Version: 1 Port: 1024 Protocol: TCP С:\tmp>ntrpcinfo 192.168.10.81 Getting RPC information for: 192.168.10.81 ================================= Program: **DONE** Program ID : 100000 Version: 4 Port: 111 Protocol: TCP ================================= Program: **DONE** Program ID : 100000 Version: 3 Port: 111 Protocol: TCP ================================= Program: **DONE** Program ID : 100000 Version: 2 Port: 111 Protocol: TCP Program: **DONE** ================================= Program ID : 100000 Version: 4 Port: 111 Protocol: UDP ================================= Program: **DONE** Program ID : 100000 Version: 3 Port: 111 Protocol: UDP ================================= Program: **DONE** Program ID : 100000 Version: 2 Port: 111 Protocol: UDP
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy