Тест dll с использованием .NET (COM-порт)

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Собираюсь написать dll-ку для работы с COM-портом в своей программе (VISA по некоторым причинам не желательна в использовании). Решил я для начала затестить как это все крутится-вертится в :labview:. Прикреляю простую сборку в dll и тривиальный код LV. В dll-ке один класс Class1, к котором реализован метод public string[] PortList(), который выдает список портов в системе. Требуется .NET framework (у меня 3.5).

Прошу затестить как это у вас работает, на каких версиях .NET framework. Что пишется при отсутствии framework'а?
Что пишется при отсуствии dll? Быстрота и т.п :drink:
Вложения
LabVIEW code.zip
(6.73 КБ) 497 скачиваний
Последний раз редактировалось Konstantin Sumenko 13 сен 2008, 23:30, всего редактировалось 1 раз.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Viktor »

Я проверил - работает.
У меня Vista Ultimate, :labview: 8.5.1 и тоже .NET framework 3.5
dll.gif
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Понятно, что пишется, если удалить dll, если не трудно, приведите текст ошибки, пожалуйста.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Viktor »

Crowbar писал(а):Понятно, что пишется, если удалить dll, если не трудно, приведите текст ошибки, пожалуйста.
Вот так это выглядит без dll:
dll1.PNG
dll2.PNG
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Forward »

XP sp2, LV 8.5, framework 3.5 - работает!

Без dll см. рисунок:
Вложения
com_port_name.png
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Спасибо. Еще вопрос: как быстро у вас выдается список портов (особенно интересуют ситуации, когда в системе их много и среди них есть подвисшие (например от bluetooth адаптеров))?
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Viktor »

Crowbar писал(а):Спасибо. Еще вопрос: как быстро у вас выдается список портов (особенно интересуют ситуации, когда в системе их много и среди них есть подвисшие (например от bluetooth адаптеров))?
bluetooth адаптера у меня нет, я запустил файл-менеджер для мобильника, подключаемого через СОМ1, но сам мобильник не присоединил. Вот результат:
http://gerasimovviktor.narod.ru/dll1/dll1.htm
(список портов выдается мгновенно)
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Ок :thank:
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Eugen Graf »

Протестил, выдаётся примерно за одну-две секунды, причём если выдавать список с помощью VISA, то это длится у меня около 15 секунд из за заинсталлированых Ethernet-Serial адаптеров.

У меня Vista и LV 8.6.1, а где узнать версию .NET Framework-a?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Например, в панели управления>установка/обновление программ.
Вобщем, неспешно напишу я библиотеку, хотя ничего сложного там нет, а дальше посмотрим :D
Единственный минус, это наличие на компьютере framework'a (хотя весит он не более 5 мб).
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Eugen Graf »

Посмотрел, у меня версия 3.0

С удовольствием поюзаю твою библиотеку :super:
Может быть помогу в разработке, если помощь нужна. Сейчас по-моему .NET Framework есть у каждого юзеры винды, так что проблемы с её наличием не вижу никакой :dntknw:
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Ок. Первые вопросы возникнут, когда я начну работать с обработчиком ошибок в библиотеке, вернее с их представлением для LV.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Базовую dll я написал. Пока в нее входят:
1) PortList() - выдает список портов
2) Config(...) - привязка к конкретному порту, установка скорости, паритета, кол-ва байт данных, кол-во стоповых бит. Планирую сюда же добавить установку timeout'а по чтению, а не устанавливать ее внутри метода Read(), а так же установку величины буфера по чтению.
3) Open() - октрывает порт
4) Close() - закрывает порт
5) Read() - чтение заданного кол-ва байт из буфера, установка таймаута (это я перенесу в конфиг), метод возвращает строку.
6) Write() - пишет строку в порт.

Можно расширить операцию Read (путем отдельных методов или перегрузки метода Read):
*) ReadExisting- немедленно считает все байты в буфере
*) ReadTo - считает строку до заданного вхождения
*) Read - считает n-ое кол-во байт от заданного смещения
*) ReadLine - считает все до вхождения элемента, установленного заранее свойством (Get).
Можно расширить операцию Write:
*) WriteLine - пишет строку и за ней заранее установленный элемент.

Стоит добавить ф-ии очистки буферов чтения/записи а так же свойство get: IsOpen, сигнализирующее открыт ли порт. И метод, возвращающий кол-во байт, находящихся в буфере.

Отдельная история с кластером ошибки: то, что на выходе constructor и pinvoke node'а малоинформативно (а именно, там все время один и тот же код), поэтому я планирую использовать обработчик ошибок с выбросом собственных сообщений об ошибке.

Пока так, какие будут предложения?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Eugen Graf »

Сорри, я не пойму при чём тут DLL? Ты же можешь сделать VIs или я что то главное пропустил?

Меня волнует прерывание чтения с порта до таймаута из другого цикла, это возможно с использованием .NET?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Тест dll с использованием .NET (COM-порт)

Сообщение Konstantin Sumenko »

Конечно наверху VI, но dll содержит класс в котором реализованы все методы и свойтсва для работы с портом. Для доступа к ним используются PInvoke и Property nodes. Обертки VI, пока не делал.
По второму вопросу точно пока не отвечу, но по-моему можно.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»