Альтернатива VISA для работы с последовательным портом

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы

Re: Альтернатива VISA для работы с последовательным портом

Postby Kvanto on 07 Mar 2011, 21:06

а как их из этой библиотеки вытащить, SubVI делать?
User avatar
Kvanto
VIP
VIP
 
Posts: 414
Joined: 26 Jan 2011, 17:56
Medals: 3
Activity (1) Bronze (1) Автор (1)
LabVIEW Version: 10.0
Karma: 52
CLAD hardware teachers

Re: Альтернатива VISA для работы с последовательным портом

Postby Jakob Brontfeyn on 08 Mar 2011, 11:08

Kvanto wrote:а как их из этой библиотеки вытащить, SubVI делать?


вот тебе пара VI примеров к этой библиотеке:


Вообще такую методику работы с компортом,
успешно применяю, смотри, например, здесь:
viewtopic.php?f=14&t=2728&p=23964#p23964
Attachments
Sersnoop.vi
(45.59 KiB) Downloaded 516 times
Loopback.vi
(34.84 KiB) Downloaded 493 times
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1695
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 226
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby Колега on 13 May 2011, 04:37

Jakob Brontfeyn wrote:Я с VISA никогда не работаю,
вот есть альтернативные VI



А чем лучше эти альтернативы?
Колега
advanced
advanced
 
Posts: 195
Joined: 21 Feb 2011, 10:31
LabVIEW Version: 2009
Karma: 1

Re: Альтернатива VISA для работы с последовательным портом

Postby mzu2006 on 14 May 2011, 06:04

Вкратце:

Альтернативы:
1. Сильно уменьшают размер инсталлятора
2. Могут работать чуть лучше с некоторыми проблемными устройствами (встречался ровно 1 раз)

Но:
1. Почти все они работают только на Windows (не Linux, не MAC OS и тем более не Wndows Mobile)
2. Некоторые из них плохо распараллеливаются (.NET решение)
3. Нулевая масштабируемость (нужно подключить тот же прибор через ethernet, а не через COM порт - переписывай прогу).
4. Отсутствие поддержки от NI
5. VISA - это больше чем работа с последовательным портом.
User avatar
mzu2006
doctor
doctor
 
Posts: 2456
Joined: 16 Aug 2008, 02:12
Location: St-Petersburg (RU), Phila, Boston, Washington DC
Medals: 3
Professionalism (1) Tutorials (1) Black (1)
LabVIEW Version: 7.1 10 11 12
Karma: 279
CLAD CLD I/O PDA VIP vision bloggers teachers

Re: Альтернатива VISA для работы с последовательным портом

Postby Pavel on 14 May 2011, 07:07

Пожалуй, я соглашусь с mzu2006, за исключением п.3. С 8 версии ЛВ к визе практически не было нареканий, и во всех проектах мы ее использовали весьма плотно. Соглашусь, были глюки, но они возникли в довольна-таки экстремальных ситуациях. Но так как последовательный порт использовался частенько, то была библиотека которая реализовывала обмен данными как через визу так через winapi.
Pavel
developer
developer
 
Posts: 271
Joined: 31 Jul 2009, 08:07
Medals: 1
Activity (1)
LabVIEW Version: 8.5
Karma: 39
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby IvanLis on 05 Dec 2011, 16:48

Господа, поделитесь опытом.....

Не секрет, что есть люди, которые работают под Linux, а программировать на :labview: приходится из Windows.

Но не всегда есть желание и возможности перегружать систему, а иногда ооочень хочется работать с устройством используя последовательный или параллельный порт. VISA нормально работает лишь под ограниченным списком Linux систем, так что приходится крутиться.

Я поступаю следующим образом. Есть "прослойка" написанная на Python, которая считывает данные с COM порта, а потом пересылает их на localhost по TCP. Откуда их :labview: уже успешно читает.

Может есть нормально работающие альтернативы VISA для Linux, более конкретно Ubuntu?
User avatar
IvanLis
professor
professor
 
Posts: 4571
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 721
hardware VIP bloggers teachers

Re: Альтернатива VISA для работы с последовательным портом

Postby gogo on 11 Feb 2013, 12:03

Sersnoop.vi не смог открыть в 11 labview
В Loopback.vi не понял почему это называют альтернативой виза, если все подвп содержат блоки визы.
gogo
beginner
beginner
 
Posts: 17
Joined: 07 Jun 2010, 19:58
LabVIEW Version: 9
Karma: 0

Re: Альтернатива VISA для работы с последовательным портом

Postby dadreamer on 15 Sep 2015, 12:30

Скажу сразу, меня VISA устраивает более чем полностью. Из чистого любопытства копался в старых релизах :labview: и нашёл кое что интересное. До внедрения Визы (версии :labview: 2.5 — 6.1) работа с низкоуровневыми устройствами (COM/LPT, GPIB, DAQ) выполнялась через специальные инструменты, так называемые Device Manager :vi: , которые вызывали соответствующий "драйвер" (CIN особого типа) - serpdrv для COM/LPT, gpibdrv - для GPIB и т.д. (чуть подробнее здесь). Начиная с 7-й версии с целью унификации и стандартизации эти "драйвера" выпилили из :labview: и заменили Визой. О жизненном цикле "драйвера" serpdrv и о том, почему ему на смену пришла VISA, можно узнать из статьи одного из участников R&D - La Mort du Serpdrv. Ради интереса я взял serpdrv из LV 6.1 и проверил на двух системах: Win XP x32 + LV 2011 x32 и Win 7 x64 + LV 2013 x32. Удивительно, но он до сих пор работает, по крайней мере при нуль-модемной передаче по RS-232 никаких ошибок не возникало. Если так подумать, то он и должен был работать, т.к. за 50 с лишним лет стандарт RS-232 не только стал традиционным, но и морально устарел (это касается и железа, и программной части). В связи с этим фактом я решил выдернуть из LV 6.1 все :vi: и сам serpdrv и положить сюда - может, кому-то окажется полезным. Сам я, скорее всего, никогда этим не воспользуюсь. Что внутри "драйвера", я детально не смотрел, обратил лишь внимание, что на Windows по сути это обёртка над Communications Functions из kernel32.

:vi: с "драйверами" под Windows, Linux и Classic Mac:
serpdrv.zip
lv2010
(184.34 KiB) Downloaded 193 times

Пример простейшего сеанса приёма-передачи:
Snippet.png

!!! Чтобы эти :vi: заработали, нужно положить serpdrv рядом с labview.exe (режим разработки / IDE). В режиме скомпилированного приложения / RTE serpdrv нужно поместить рядом с lvrt.dll, то есть в папку C:\Program Files (x86)\National Instruments\Shared\LabVIEW Run-Time\[Ваша_версия_LV]\ (версии :labview: начиная с 6.0 и выше), либо рядом с экзешником (версия :labview: 5.0).

Плюсы и минусы этих инструментов:
[+] Работают без инсталляции, в отличие от VISA, нужен лишь "драйвер" рядом с программой;
[+] Очень маленький размер "драйвера" (не более 25 КБ);

[-] Работают только в 32-битных версиях :labview: ;
[-] Нет поддержки терминального символа (termination char);
[-] Нет поддержки тайм-аута операций чтения/записи;
[-] Нет возможности перечисления портов для получения списка всех портов в системе;
[-] На выходе :vi: не error cluster, а числовой код ошибки (немного усложняет построение dataflow на БД).

При наличии некоторого количества свободного времени поддержку терминатора, тайм-аута чтения/записи и кластера error in/out можно довольно легко реализовать в самом :labview: с помощью дополнительных SubVI (см. исходники LVSerial).

Также сам serpdrv из LV 6.1 можно скачать здесь, более ранние версии лежат тут. Версия из LV 6.1 под Linux лежит здесь. Для классического Macintosh'а serpdrv не нужен.
IvanLis wrote:Может есть нормально работающие альтернативы VISA для Linux, более конкретно Ubuntu?

Если всё ещё актуально, как вариант, попробуйте этот serpdrv и :vi: из архива, у меня есть уверенность на 85%, что заработает, и всё-таки это лучше, чем городить огород из врапперов.

Собираюсь взглянуть более детально на функции девайс менеджера, если хватит времени и сил.
Last edited by dadreamer on 21 Jul 2016, 22:43, edited 5 times in total.
User avatar
dadreamer
professor
professor
 
Posts: 3060
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

Re: Альтернатива VISA для работы с последовательным портом

Postby Jakob Brontfeyn on 15 Sep 2015, 13:03

Для приема произвольных посылок, рекомендую применить этот алгоритм:
http://www.labviewportal.org/viewtopic. ... 850#p65830
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1695
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 226
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby Borjomy_1 on 15 Sep 2015, 15:05

Для приема произвольных посылок, рекомендую применить этот алгоритм:
viewtopic.php?f=21&t=8250&p=65850#p65830

Категорически не советую. Тем более, что произвольных посылок у производителей автоматизации НЕ БЫВАЕТ. Каждая посылка сопровождается кодом начала, кодом завершения, а также содержит идентификатор типа посылке, на основании которых производится прием. В случае с посылкой в формате ASCII присутствует код начала посылки и ЕДИНЫЙ код конца посылки (т.н. терминальный символ). Этот принцип БАЗОВО поддержан в :labview: и в любом низкоуровневом драйвере для ЛЮБОЙ платформы. Будь то Windows, будь то ассемблер. Эта реализация начинается на уровне микросхемы драйвера последовательного порта. Для приема устанавливается код терминального символа. Последующее чтение производится вызовом функции "VISA Read" с указанием максимально возможного размера посылки. При чтении АВТОМАТИЧЕСКИ будет считана вся посылка до терминального символа. Никаких дополнительных операций производить НЕ НАДО. Требуется проверить результат на таймаут (в случае таймаута нет конца посылки - устройство выключено) и на присутствие кода начала посылки (в противном случае посылка принята не с начала, обычно бывает при первом чтении, при постоянной работе быть не должно). Этого достаточно для надежного приема.
В случае с бинарной посылкой формат используется следующий:
голова - код начала посылки, код тела посылки и/или длина посылки + другие данные, которые имеют одинаковое значение для всех посылок данного устройства. Размер головы посылки также фиксирован для устройства
тело посылки - содержит изменяемые по формату данные. Формат непротиворечиво соответствует коду посылки
хвост - контрольная сумма (если надо) тела посылки+головы и код конца посылки
Для приема бинарной посылки терминальный символ отключается. Производится чтение головы посылки, ее разбор. На основании разбора головы посылки вычисляется длина тела посылки. После чего вычитывается тело посылки известной длины и хвост. Проверяется соответствие кодов начала и конца посылки.
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby dadreamer on 15 Sep 2015, 15:38

Borjomy_1 wrote:Этот принцип БАЗОВО поддержан в :labview: и в любом низкоуровневом драйвере для ЛЮБОЙ платформы. Будь то Windows, будь то ассемблер. Эта реализация начинается на уровне микросхемы драйвера последовательного порта.

В функционале Windows API нет ничего для указания терминального символа:
https://msdn.microsoft.com/ru-ru/library/ff802693.aspx
http://stackoverflow.com/questions/4803 ... dows-via-c
http://www.codeproject.com/Articles/306 ... ion-on-Win
http://z-oleg.com/delphi/hardw5.htm
и особенно http://stackoverflow.com/questions/2308 ... e-eof-char
Так что обработка терминального символа - целиком задача драйвера VISA, т.е. на низком уровне выполняется либо непрерывный сбор, либо работа по событиям, и последующий парсинг строки по терминатору. По той же причине в serpdrv нет поддержки терминального символа - это просто не реализовано.
User avatar
dadreamer
professor
professor
 
Posts: 3060
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

Re: Альтернатива VISA для работы с последовательным портом

Postby Borjomy_1 on 15 Sep 2015, 16:08

Значит, наврал. Однако могу точно сказать, что драйвера, которыми пользовался 10-15 лет назад под DOS (в данном случае говорю про MOXA) уже тогда использовали в функционале терминальный символ. И везде, где речь идет о промышленной автоматизации, обработка терминального символа присутствует.
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby dadreamer on 16 Sep 2015, 12:12

В доказательство своих слов сделал даже картинку:
2015-09-16_13-18-56.jpg

Это кусок кода, вызываемый функцией viRead из visa32.dll. Как видим, visa32.dll внутри себя использует NiViAsrl.dll, где размещены служебные функции для работы с последовательным протоколом. Эта маленькая функция на картинке как раз выполняет побайтовое сравнение считанной из порта строки с терминатором. Возвращаемое значение - это индекс терминатора в строке. В конкретном случае в порт была записана строка "a [\r = 0xD = Enter] b", т.е. три символа, и собственно [\r = 0xD = Enter] - это терминатор. :vi: VISA Read указано считать 3 символа. Согласно алгоритму, функция вернёт значение 1. Полученный индекс инкрементируется и выполняется копирование памяти из буфера со считанной строкой в пустой буфер. Так что очевидно, что обработка терминатора целиком возложена на API для работы с портом. И кстати, NiViAsrl также использует везде ReadFile/WriteFile из kernel32 для чтения из порта/записи в порт, т.е. ничего принципиально нового тут не изобретено.
User avatar
dadreamer
professor
professor
 
Posts: 3060
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

Re: Альтернатива VISA для работы с последовательным портом

Postby Borjomy_1 on 16 Sep 2015, 12:51

В какой момент происходит сравнение? Дело в том, что, как правило, терминатор - то последним идет. И если вы заказали 10 байт, а пришло 3, из них терминатор последний, то функция не будет ждать, когда придет еще 7 (т.е наступления таймаута). Иначе смысла никакого нет работать с терминатором.
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

Re: Альтернатива VISA для работы с последовательным портом

Postby dadreamer on 16 Sep 2015, 12:57

Borjomy_1, заказал для VISA Read 3 символа. Приходит 1, потому что 2-й - это терминатор, он обрезается. Всё работает так, как и должно. Заодно проверил вчерашний вопрос, соответствует тому, что вы написали. Если сделать второй заход VISA Read, то придёт остаток строки и сработает тайм-аут.
Borjomy_1 wrote:В какой момент происходит сравнение?

Если вы о парсинге строки, то он выполняется при вызове VISA Read. Цепочка вызовов такова: VISA Read -> visa32.dll -> NiViAsrl -> ReadFile -> парсинг строки и обрезка по терминатору -> выдача готовой строки наверх
User avatar
dadreamer
professor
professor
 
Posts: 3060
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 760
I/O VIP vision internet

PreviousNext

Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 5 guests

cron