![]() |
|
|
|
|
#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-порт
![]() |