![]() |
|
|
#1
|
|||
|
|||
![]() Здравствуйте всем.
Случилось у меня,что приобрел я однажды некий крутой девайс АЦП-ЦАП.Теперь не могу к нему программно доступиться,хотя документация есть.Проблемма в том,что примеры даны на языке С,в котором я ... ну ничего не... Здесь я подаю материалы,как они поданы в примере документации.Может кто-нить поможет мне перевести эти команды в делфовский вид и запустить таки этот мудреный девайс? В исходнике прилагается некая DLL библиотека IsaBox.dll ------------------------------------------------------------- Пример сборки шины и доступа к портам В данном примере подключим устройство на COM2. Скорость обмена по COM-порту 115200 кбит/с, адрес контроллера 0x05. Код:
#define COM2 1 #define LOCAL_PORT 5100 void main(void) { unsigned long ComInterface, ComController; unsigned short PortValue; // 1. Очистка реестров интерфейсов и контроллеров ibcClearControllerList();// это функции библиотеки IsaBox.dll ibcClearInterfaceList(); // 2. Регистрация интерфейса ComInterface = ibcOpenInterface(COM2, 115200, NULL);// это функции библиотеки IsaBox.dll // 3. Регистрация контроллеров ComController = ibcOpenController(ComInterface,0x05,0x300,0x309); // 0x300,0x309 - адреса портов ввода-вывода сего девайса } Вот что попробовал сделать я.Ввиду моего малого опыта программирования,я решил библиотеку IsaBox.dll подключить статически. ------------------------------------------------------------------ Код:
... var OpenInterf:cardinal; implementation {$R *.dfm} {N+,E+} // так содрал с руководства Фараонова Procedure ibcClearControllerList; Far; External 'Isabox.dll'; Procedure ibcClearInterfaceList; Far; External 'Isabox.dll'; Function ibcOpenInterface(Com:byte;baud:longint;p:pointer):cardinal; Far; External 'Isabox.dll'; Function ibcOpenController(handle:longint;adr:longint;adr0:longint;adr1:longint):cardinal; Far; External 'Isabox.dll'; procedure TForm1.Button1Click(Sender: TObject); begin ibcClearControllerList(); ibcClearInterfaceList(); OpenInterf:=ibcOpenInterface(COM2,115200,nil);// на этом загвоздка.Выдает error end; lmikle: пользуем теги!!! Вот и все.При пошаговой отладке две первые команды проходят,а третья выдает ошибку.В чем дело не знаю.Может я типы неправильно назвал или записал не так? Может кто из опытных ребят поможет привести модуль в рабочий вид? Заранее всем спасибо. userlife |
#2
|
|||
|
|||
![]() 1. Не факт, что ты правильно импортировал функции библиотеки. Для первых функций, кторые без параметров, модель вызова не важна. А вот для третьей - очень даже важна. Попробуй пометить импортируемые функции как stdcall;
2. Не уверен, что типы параметров у тебя указаны правильно. Надо смотреть точное поисание заголовка фуниций в документации и уже тогда выбирать типы соотв. параметров. Например, там, где указано unsigned short лучше использовать WORD; По имени библиотеки можно найьт описание функций. Например: Код:
unsigned long ibcOpenInterface(unsigned char ComPort, unsigned long Baudrate, HANDLE OpenPortHandle); я бы оттранслировал бы так: Код:
function ibcOpenInterface(ComPort : Byte; Baudrate : DWORD; OpenPortHandle : THandle) : DWORD; stdcall; external 'IsaBox.dll'; |
#3
|
|||
|
|||
![]() Спасибо,товарищ Модератор.
Сделал так как Вы рекомендовал и отладчик плеваться эррорами перестал.Пришлось методом программного втыка добавить выключение-включение девайса (о чем в руководстве почему-то не сказано),потом он перестал виснуть на запросах портов.Пишет ли он в них что-то (например управляющие слова) пока неизвестно,но вычитать оттуда моей программой еще ничего не удалось.Не читаются пока порты.Сидел полдня,тыкал-тыкал,типы данных менял и увы - ничего. Кстати,за подобный вопрос в Королевстве Делфи на меня надулись и посмотрели очень злобно.Я наверное задаю дурные вопросы? Не проффесионал ведь.Хобби только.А вам спасибо за человечность.Все ж когда-то были начинающими.Не так ли? |
#4
|
|||
|
|||
![]() Ну, вообще, на будущее запомни, что сишные библиотеки обчно надо импортировать, указывая соглашение о передачи параметров именно как stdcall. А нет ли для этой штуки COM-интерфейса. С ним бы было тебе гораздо проще, т.к. импорт производится автоматически, да и работать чуть удобнее, хотя, в общем, работает и чуть медленнее.
|
#5
|
|||
|
|||
![]() Вся эта штуковина в черном длинном корпусе разработана под шину ISA.
Но поскольку у меня ноутбук и ничего в него уже не сунешь,ребята в этом самом ящике сделали прототип этой самой шины и подцепили его к USB.Так что прежде всего я установил USB драйвер,потом зарегистрировал в Виндовсе IsaBox.dll. В устройствах после инсталляции появляется новый COM порт,который можно выбрать из свободных с номерами от COM1 аж по COM16. Далее там прилагается готовая программа IsaBox Administrator.Так через нее этот девайс виден и даже работает,но для моих целей требуется собственное программирование.То,что есть в прилагаемой документации,пока реализовать не удалось.Сейчас снова буду рыться в науке.Поробую заводить в порты и выводить из них вручную этим самим Администратором. Результаты сообщу как только что-нибудь получится. |
#6
|
|||
|
|||
![]() COM, который я имел в виду - это Component Object Model, а не COM-порт
![]() |