Есть прибор
При подключении, в системе появляются устройства в разделе устройства HID:
1 HID-совместимое устройство, определенное поставщиком
2 USB-устройство ввода
На сайте производителя есть библиотека обращения к прибору.(Новая библиотека обмена EksisExchange)
Выдержка из описания библиотеки:
Я попробовал написать вызов функций Command и Read. Но ничего не получилось. Никаких ошибок не выскакивает, но и никаких следов того, что библиотека работала не возникло.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 – указатель на переменную, в которую будет передена количество байт ответа прибора.
Как правильно настроить вызов dll исходя из ее описания выше?
Помимо этого прибора есть второй с таким же названием но старой модификации, с портом RS232. Для него есть протокол обмена, и я с него получаю данные нормально. Файл "RS232 protocol ivtm-7 m5.pdf" именно к этому прибору.
Есть еще вариант вообще не пользоваться dll, т.к. на странице описания протокола есть такая запись:
Как реализовать такой обмен?Описание протокола обмена USB
Измерители определяются операционной системой как HID-устройство. Обмен ведется по каналу Control Transfers посредством Feature Reports блоками до 128 байт со скоростью до 64000 байт в секунду. Точный размер передаваемого блока (заголовок + данные + контрольная сумма) устройство передаёт в своихHID device capabilities (HidP_GetCaps).
Данные передаются в неизменном бинарном виде. Логически обмен данными построен схожим с обменом по RS-232 способом: чтение и запись данных производится по определенным адресам в измерительном устройстве, а каждая модификация измерителя имеет свою карту адресов по которым осуществляется обмен, попытки доступа к адресам вне данной карты воспринимаются как ошибочные и соответствующим образом сигнализируются в ответах.