Показать сообщение отдельно
  #12  
Старый 19.12.2009, 11:41
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Пока у меня есть немного свободного времени немного помогу.
Для начала предлагаю вынести функции dll в отдельный модуль.
скачайте Isabox_h.zip, распакуйте файл Isabox_h.pas в папку проекта, а в форме удалите описания функций и запишите
Код:
implementation

uses Isabox_h;
Кстати там были ошибки, там где звездочки правильно писать
Код:
Function ibcReadPort(address: WORD; var value: Byte):ByteBool; stdcall; External 'Isabox.dll';
или использовать указатели.
bool записал как ByteBool на всякий случай.
В MSDN про bool написано что в Visual C++ 4.2 занимает 4 байта в Visual C++ 5.0 и выше - 1 байт.

Скачал ТО на WAD-DAC16-16( у вас это устройство или другое? ).

Попробуйте так
Код:
var
  Form1: TForm1;

  OpenInterf, OpenContr: DWORD; //будут использоваться для открытия и регистрации
  Vkluc: ByteBool = false; // я проверю как сработала функция
  S: string; // то для моих сообщений
  r: word; // для чтения из порта

implementation

uses Isabox_h;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  ibcClearControllerList();
  ibcClearInterfaceList();
  OpenInterf := ibcOpenInterface(0, 115200, 0); // девайс на COM0,а NULL = 0.
  memo1.Lines.Add('OpenInterf := ' + IntToStr(OpenInterf)); // проверим подключение

  OpenContr := ibcOpenController(OpenInterf, $1, $300, $30F); // адрес устройства $1 из сообщений IsaBox администратора,а адреса $300-300F штатные,к которым привязан контроллер.
  memo1.Lines.Add('OpenContr := ' + IntToStr(OpenContr)); // проверим подключение, надеюсь джамперы выставленны именно для адресов $300-300F

  ibcControl(false); // периодически пробуйте без этого ( может sleep(200); ниже был необходим
  ibcControl(true); // собираю шину,как советует руководство

  sleep(200); // в примерах на турбо паскале вроде здесь должно быть

  for i := 0 to 10 do // и пробую,авось на каком-то разу все-таки "пробьет"...
  begin
    Vkluc := ibcWritePort($307, $80); // пробую записать в порт управляющее слово
    if Vkluc = true then
      S := 'True'
    else
      S := 'False';
    memo1.Lines.Add(S);
    sleep(500);
    // на экране в форме выводит False False false ...
  end;

end;
Я там добавил пару сообщений в memo1, покажите, что получилось, а я пока еще подумаю, почитаю руководство.

Ответить с цитированием