Термогигрометр ИВТМ 7М 5Д

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Термогигрометр ИВТМ 7М 5Д

Сообщение Juri »

UPDATE: решение тут

Есть прибор
При подключении, в системе появляются устройства в разделе устройства HID:
1 HID-совместимое устройство, определенное поставщиком
2 USB-устройство ввода
На сайте производителя есть библиотека обращения к прибору.(Новая библиотека обмена EksisExchange)
Выдержка из описания библиотеки:
4). EKSIS_USB_Read

function EKSIS_USB_Read(aTechNum: PAnsiChar; aMem: AnsiChar; aAddr: DWord; aData: PByte; aCount: Word): Boolean;

bool EKSIS_USB_Read(char* aTechNum, char aMem, DWORD aAddr, BYTE* aData, WORD aCount);

Функция, читающая данные из памяти прибора через USB по заданному адресу. В случае успеха возвращает True.

Описание аргументов:
aTechNum – восьмизначный технологический номер прибора (например, «10001337»);
aMem – тип памяти (I,R,F);
aAddr – адрес памяти прибора, по которому будет производиться чтение;
aData – указатель на адрес память компьютере, куда будет проводиться чтение;
aCount – количество читаемых байт.

5). EKSIS_USB_Write

function EKSIS_USB_Write(aTechNum: PAnsiChar; aMem: AnsiChar; aAddr: DWord; aData: PByte; aCount: Word): Boolean;

bool EKSIS_USB_Write(char* aTechNum, char aMem, DWORD aAddr, BYTE* aData, WORD aCount);

Функция, записывающая данные в память прибора через USB по заданному адресу. В случае успеха возвращает True.

Описание аргументов:
aTechNum – восьмизначный технологический номер прибора (например, «10001337»);
aMem – тип памяти (I,R,F);
aAddr – адрес памяти прибора, по которому будет производиться чтение;
aData – указатель на адрес память компьютере, куда будет проводиться чтение;
aCount – количество читаемых байт.

6). EKSIS_USB_Command

function EKSIS_USB_Command(aTechNum: PAnsiChar; aCommand: Byte; aData: PByte; aPCount: PWord): Boolean;

bool EKSIS_USB_Command(char* aTechNum, BYTE aCommand, BYTE* aData, WORD* aPCount);

Функция, посылающая команду прибору через USB и, если aData не nil/null, возвращающая ответ на команду. В случае успеха возвращает True.

Описание аргументов:
aTechNum – восьмизначный технологический номер прибора (например, «10001337»);
aCommand – байт команды;
aData – указатель на буффер для ответа на команду;
aPCount – указатель на переменную, в которую будет передена количество байт ответа прибора.
Я попробовал написать вызов функций Command и Read. Но ничего не получилось. Никаких ошибок не выскакивает, но и никаких следов того, что библиотека работала не возникло.
Как правильно настроить вызов dll исходя из ее описания выше?

Помимо этого прибора есть второй с таким же названием но старой модификации, с портом RS232. Для него есть протокол обмена, и я с него получаю данные нормально. Файл "RS232 protocol ivtm-7 m5.pdf" именно к этому прибору.

Есть еще вариант вообще не пользоваться dll, т.к. на странице описания протокола есть такая запись:
Описание протокола обмена USB

Измерители определяются операционной системой как HID-устройство. Обмен ведется по каналу Control Transfers посредством Feature Reports блоками до 128 байт со скоростью до 64000 байт в секунду. Точный размер передаваемого блока (заголовок + данные + контрольная сумма) устройство передаёт в своихHID device capabilities (HidP_GetCaps).
Данные передаются в неизменном бинарном виде. Логически обмен данными построен схожим с обменом по RS-232 способом: чтение и запись данных производится по определенным адресам в измерительном устройстве, а каждая модификация измерителя имеет свою карту адресов по которым осуществляется обмен, попытки доступа к адресам вне данной карты воспринимаются как ошибочные и соответствующим образом сигнализируются в ответах.
Как реализовать такой обмен?
Вложения
x86.7z
(1014.92 КБ) 87 скачиваний
Последний раз редактировалось Juri 28 мар 2021, 01:31, всего редактировалось 1 раз.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Термогигрометр ИВТМ 7М 5Д

Сообщение IvanLis »

.h
файл с dll имеется?

Если да, то можно воспользоваться Shared Library Wizard
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Термогигрометр ИВТМ 7М 5Д

Сообщение dadreamer »

Command.vi
aTechNum : String format = C String Pointer

Read.vi
aTechNum : String format = C String Pointer
aMem : Type = Numeric , Data type = Unsigned 8-bit Integer
aAddr : Data type = Unsigned 32-bit Integer
aData : Type = Numeric , Data type = Unsigned 8-bit Integer , Pass = Pointer to Value

Остальное правильно. Также можно сделать все CLFN жёлтыми (Run in any thread), разработчик разрешил.
Есть еще вариант вообще не пользоваться dll
Дёргать USB HID через Визу или WinAPI - так себе перспектива, т.к. понадобится выполнить множество низкоуровневых операций. В данном случае этим занимается библиотека и нет необходимости разбираться с протоколом. Попробуйте сперва "домучать" эту обёртку от разработчика. Если не получится, тогда поглядите статью отсюда и потом примеры на форумах NI. Есть и вот такая альтернатива, возможно, будет проще. Но всё равно описание протокола изучить придётся.
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Re: Термогигрометр ИВТМ 7М 5Д

Сообщение Juri »

Спасибо! Все получилось. Если кому-то пригодится, решение прилагаю
Вложения
111.png
111.png (10.49 КБ) 1152 просмотра
Read.7z
(875.63 КБ) 94 скачивания
Ответить

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