|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.05.2013, 12:11 | #1 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Управление устройством: проблемы с типами данных в сторонней DLL
Здравствуйте. Возникла следующая ситуация. Куплено устройство, подключается по СОМ-порту или по сети.
Для работы с устройством поставляется DLL, к ней идёт PDF-файл с документацией. Вот пример описания функции, из документации (выделю жирным шрифтом ключевое). BOOL HEX_qVEL (long ID, const char* szAxes, double* pdValueArray) Get Closed-Loop Velocity Функция, возвращает скорости движения шести штанг, в массиве Get the current value of the closed-loop velocity for szAxes. Arguments: ID ID of controller szAxes string with axes, if "" or NULL all axes are queried. pdValueArray array to be filled with the velocity settings of the axes Returns: TRUE if no error, FALSE otherwise с устройством поставлялась библиотека типов (если я правильно её называю), т.е. определения процедур в pas-файле. В файле определяется тип и процедуры, в том числе упомянутая HEX_qVEL: Код:
всё было прекрасно, но купили новое почти такое же устройство, маркировка которого изменилась на одну букву. Новая модель. соответственно, с ним новая dll, система команд частично поменялась, но основная проблема возникла в том, что я уже не могу работать с некоторыми процедурами, с которыми работал ранее, а именно с теми, в которые передаются массивы для примера беру эту же процедуру, описание её в документации идёт один в один, только поменян префикс: BOOL PI_qVEL (long ID, const char* szAxes, double* pdValueArray) однако, в заголовочном файле она определена по другому. Никаких промежуточных типов, вроде TDoubleArray, не вводится!: Код:
Я делаю так: Код:
пока нужные значения не получаю, и не могу разобраться, то ли проблема с типами, то ли причина в чём-то другом Последний раз редактировалось AnTe; 29.05.2013 в 12:15. |
29.05.2013, 12:22 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...на те боже, что мне негоже. Где приложенная документация старая и новая, где сами библиотеки, старые и новые? Нам телепатически разбираться только на основании вырванных кусков?
Могу оказать и целевую помощь, не забесплатно конечно.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
29.05.2013, 18:29 | #3 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Конечно, можно было бы выложить и весь диск, идущий в комплекте :D с парой тысяч листов документации, поставить ТЗ, которое, правда, до сих пор утвердить не могут
Для того, чтобы не грузить читателей массой ненужных подробностей, я специально выделил момент, который меня интересует, а именно, передача массива в функцию одной из динамических библиотек, в документации на которую этот тип указан как double. Опыта работы с динамическими библиотеками, взаимодействия различных языков языками практически нет, вот и подумалось, не штатная ли это ситуация, раз практически никаких комментариев к способу передачи параметров не было, кроме того, что входная переменная - Double, в которой параметры, всего параметров шесть. Если вариантов передачи много, зависят от способа, как была разработана ДЛЛ, и т.д. тогда буду для начала копать глубже хотя бы доки на устройство. За предложение спасибо, но это точно не на данном этапе. |
29.05.2013, 21:33 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
На мой взгляд, именно первый вариант записи интерфейса более сомнителен.
По второму варианту записал бы первую пробу именно так, как у Вас (только аккуратно проанализировал бы возвращаемую функцией величину). Если возвращаемая величина говорит, что функция отработала успешно, попытался бы проанализировать, что именно заполнила функция: - во-первых, на вход подал бы массив подлиннее, предварительно заполнил его одними единицами (FFFFFFFF), и выяснил длину возвращаемых данных, - во-вторых зависит от результата "во-первых": если возвращено 4 байта, попытался бы трактовать, как адрес (сравнил по величине с другими адресами), для разнообразия проверил бы на single и longint. |
29.05.2013, 21:53 | #5 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
Цитата:
Нет, конечно, если информация суперсекретная и вы давали подписку о неразглашении (у STM, к примеру, такое есть при получении некоторых милитари-позиций), тогда можно понять. Но тогда и вы пишите, так мол и так, ничего больше сказать невмоготу. Даташита не дам, ибо партизан. А так, разбирайтесь сами со "сферическими конями"/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
30.05.2013, 00:21 | #6 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
Код:
Последний раз редактировалось Человек_Борща; 30.05.2013 в 00:30. |
|
30.05.2013, 08:19 | #7 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
s-andriano, Человек_Борща, спасибо большое! Про один из вариантов опробования я уже даже подумывал сначала, но забыл, а некоторые были новые перепробую все!! нужно локализовать пробелму
raxp, абсолютно ничего секретного, более того, даже оф.сайт нарыл, вот старая железка M-850 http://www.physikinstrumente.com/en/...?sortnr=700800 и новая, "replaced by the following new product", H-850 http://www.physikinstrumente.com/en/...?sortnr=700801 pdf по главной DLL я что-то не нахожу, может плохо искал, потом выложу её, и саму DLL, если понадобится или если просто кому-то понадобится ) Просто я наоборот старался не загружать участников форума излишними подробностями и конкретизировал свой вопрос парой строк из примеров, возможно, для специалистов проще когда всё под рукой Дойду до цеха (как обычно, план расписан как попало, и железяки в сборе ), там попробую предложенные варианты. По результатам отпишусь. |
06.06.2013, 09:18 | #8 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Наконец-то добрался, чуток разобрался. Докладываю
Во-первых, получилось так, что как раз описанные выше функции работают. Выдавали ерунду они по другой причине, я один из режимов не активировал. Если ничего не помогает - очень начинает помогать прочтение документации! Однако, проблемы не закончились. Довольно странная штука получается: те функции, которые по логике не должны работать - работают, а те, которые определены правильно - не работают. Я локализовал проблему, приведу для примера две функции, из документации. Местами немного повторюсь: BOOL PI_MOV (long ID, const char* szAxes, const double* pdValueArray) - Set Target Position .. BOOL PI_qMOV (long ID, const char* szAxes, double* pdValueArray) - Get Target Position вот как они определены в заголовочном файле, который подсунул производитель контроллера и собственно дллки: function PI_MOV(ID: LongInt; const szAxes: PChar; const pdValueArray: PDouble): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF}; function PI_qMOV(ID: LongInt; const szAxes: PChar; var pdValueArray:Double): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF}; Как справедливо заметил Александр, первый вариант - это правильный, а второй вариант - это какая-то лабуда. Но так сказал производитель. Вызываю два варианта так: Код:
Код:
т.о. второй, "неправильный" вариант, - работает!! Теперь ещё пробую, раз в PI_MOV тип передаваемого массива всё же указатель на double - передаю значение для движухи по одной оси, Код:
но мне-то нужно, чтобы перемещение шло одновременно по шести осям! А массив функция брать категорически отказывается технически устройство готово к перемещению по всем осям, его можно запустить альтернативной функцией, на вход которой подаётся команда в виде строки. Меня беспокоит сам факт, что в библиотеке некоторые функции не хотят работать, и я хочу с этим разобраться. я правильно понимаю, что всё делаю верно, и эти глюки говорят о криво собранной библиотеке, и являются поводом задать разработчику вопрос что за нафиг? Пробовал в библиотеке типов убрать буковку "P" и передавать массив без указателей - в рантайме вываливается с access violation пробую импортировать библиотеку типов средствами Delphi7 - (Project | Import Type Library) - "Ошибка при загрузке библиотеки". Быть может, я не туда лезу, эта функция для специального типа библиотек? (повторюсь, не шарю в этом совсем ) на всякий случай выкладываю(на офсайте так и не нашёл): длл-ка http://www.multiupload.nl/W96HNJ5VMU заголовочный файл http://www.multiupload.nl/3T32VN7J9O описание её функций: http://www.multiupload.nl/ZG20PJY6WX Последний раз редактировалось AnTe; 06.06.2013 в 09:34. |
06.06.2013, 10:16 | #9 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Т.е. вы признали, что нужна документация, сами ее изучили, а сюда вываливаете свои интерпретации. Вам самому-то не кажется это странным?
DLL-ка есть, описание функций появилось, уже что-то. Теперь хорошим тоном будет и приложить в теме документацию, которая у вас перед глазами.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
06.06.2013, 13:20 | #10 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
raxp, какую именно документацию Вы имеете в виду? В принципе, я могу залить весь диск, который шёл в комлекте, это 264 мегабайта
Прикрепляю папку Manuals из него http://www.multiupload.nl/HPRDEC8Z5H просто я и сейчас не вижу смысла даже в этой документации для поиска сути проблемы и локализовал проблему из лучших побуждений UPD добавил ещё папку Samples с диска http://www.multiupload.nl/QVJ843CWW3 и GCS_Library_Setup http://www.multiupload.nl/4BZ98ZARGA Последний раз редактировалось AnTe; 06.06.2013 в 13:36. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужно написать программу под WinCE управление внешним устройством | kompotius | Фриланс | 0 | 16.05.2012 16:32 |
Получение данных из сторонней dll | Memfis1992 | Общие вопросы Delphi | 4 | 21.10.2010 09:19 |
удаленное управление устройством! | Gambler | Работа с сетью в Delphi | 11 | 29.10.2009 12:12 |
Управление исполнительным устройством через компьютер | Scutarius | Свободное общение | 3 | 28.07.2009 15:56 |
Проблемы с типами данных в Delphi | Paul11j | Помощь студентам | 4 | 15.05.2009 22:59 |