Коллеги, приветствую!
Разрабатываю тесты для проверки работоспособности железа. Система тестирования Заказчика требует, чтобы каждый тест "был в себе", т.е. упакован в llb и не имел каких-либо внешних зависимостей. Для упрощения работы с измерительным оборудованием был написан HAL и API к нему с помощью LabVIEW OOP, но возникла проблема - VI, находящиется в llb не поддерживают dynamic dispatching, т.е. классы я запокавать таким образом не могу. Каким образом можно решить такую проблему и можно ли вообще? Предполагаю, вынесением классов вне llb, в папку рядышком с тестом, но пока не понимаю как это реализовать.
Source distribution
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Source distribution
Не всякое упрощение полезно. Так ли необходимы классы? Посмею высказать мысль, что классы оправданы исключительно для коллективной работы над проектом, когда пользователи и изготовители класса - разные люди.ladik писал(а):Для упрощения работы с измерительным оборудованием был написан HAL и API к нему с помощью LabVIEW OOP
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Source distribution
В целом использование классов было вызвано именно этим. Помимо собранных тестов, Заказчик хочет видеть простую в использовании библиотеку, с помощью которой он бы смог сам разрабатывать тесты. В случае каких-то изменений на уровне железа, код тестов меняться не должен. Ничего более удобного для этих задач придумать не получилось.
Дорогу осилит идущий.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Source distribution
Попробуйте использовать PPL т.е. имеется класс, с абстрактными методами, который скомпилирован в PPL и класс(ы) которые наследуются от этого абстрактного класса, с конкретной реализацией его методов... Ну и главное приложение (exe) которое управляет всем этим хозяйством. У меня такая архитектура работает.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Source distribution
Здесь Андрей Дмитриев все разложил по полкам
Classes in llb or multiple classes in same folder?
https://forums.ni.com/t5/LabVIEW/Classe ... -p/1073695
Classes in llb or multiple classes in same folder?
https://forums.ni.com/t5/LabVIEW/Classe ... -p/1073695
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Source distribution
К главному приложению доступа, к сожалению нет. Т.е. я не могу туда встроить абстрактный класс. Exe на вход получает llb, vi's которой описаны отдельным конфиг файлом - с этим ничего не поделать.
Дорогу осилит идущий.
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Source distribution
taras_33, Blackman, спасибо за наводки , примерно к такому же сценарию и пришёл. С той лишь разницей, что VI's с классами, методами, драйверами железа хранятся не в llb, а просто рядом в папке, хотя тут можно и по отдельным llb распихать. Споткнулся на том моменте, что по такому же принципу нужно было FGV запускать, которая хранит ссылки на инстансы классов. Ошибка была в том, что после вызова FGV через Call by Reference закрывал на неё ссылку, таким образом FGV выгружалась из памяти и не хранила значения между вызовами, после правки всё заработало.
Дорогу осилит идущий.