Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2011, 21:38   #1
Денис_83
 
Регистрация: 12.07.2011
Сообщений: 3
Восклицание Работа с платой ввода/вывода PCI-1762

Здравствуйте уважаемые программисты!
Буду очень признателен тем, кто сможет доступно (для начинающего, поневоле, горе-программиста) подсказать по работе с платой ввода/вывода фирмы Aavantech PCI-1762
Задача, которая стоит передо мной: научиться принимать и передавать данные при помощи PCI-1762 при помощи Delphi
В комплект поставки с платой входят примеры на Delphi, но к сожалению большинство изложенное в них не понятно.
Самый первый вопрос, как инициализировать плату в Delphi по базовому адресу?
Заранее спасибо!
Денис_83 вне форума Ответить с цитированием
Старый 12.07.2011, 23:37   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
В комплект поставки с платой входят примеры на Delphi, но к сожалению большинство изложенное в них не понятно.
Самый первый вопрос, как инициализировать плату в Delphi по базовому адресу?
TC, как насчет открыть руководство пользователя и мануал на плату дискретного ввода-вывода >> 1 2 << и пройтись пошагово ?




http://support.advantech.com.tw/Supp...yword=PCI-1762

Тестовый примерчик <Port_rw> из официального SDK самое оно. Убедитесь, что Advantech Device Manager вы уже установили, так как к проекту статически линкуется <adsapi32.dll>
Код:
// открываем и читаем
procedure Tfrmstart.cmdRunClick(Sender: TObject);
var
  I, Code: Integer;
begin
  ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
  If (ErrCde <> 0) Then
  begin
    DRV_GetErrorMessage(ErrCde, pszErrMsg);
    Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
    Exit;
  end;
  { Get text from TEdit control }
  Val('$' + txtIOAddr.Text, gwPort, Code);
  FormRun.frmRun.Show;
end;

// первичная инициализация и перечисление
procedure Tfrmstart.FormCreate(Sender: TObject);
var
  MaxEntries, OutEntries : Smallint;
  NumOfDevice            : Smallint;
  i, ii                  : Integer;
  tempStr                : String;
  testRes                : boolean;
begin
  gwPort := $300;
  bRun := False;

  { Here MaxEntries = OutEntries }
  ErrCde := DRV_DeviceGetNumOfList(MaxEntries);
  If (ErrCde <> 0) Then
  begin
       DRV_GetErrorMessage(ErrCde, pszErrMsg);
       Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
       Exit;
  end;

  { Add type of PC Laboratory Card }
  ErrCde := DRV_DeviceGetList(DeviceList[0], MaxEntries, OutEntries);
  If (ErrCde <> 0) Then
  begin
       DRV_GetErrorMessage(ErrCde, pszErrMsg);
       Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
       Exit;
  end;

  For i := 0 To (MaxEntries - 1) do
  begin
    tempStr := '';
    For ii := 0 To MaxDevNameLen do
        tempStr := tempStr + DeviceList[i].szDeviceName[ii];
    lstDevice.Items.Add(tempStr);
  end;

  labIOAddr.Enabled := False;
  txtIOAddr.Enabled := False;
  cmdRun.Enabled := False;
end;

// выбираем
procedure Tfrmstart.lstDeviceClick(Sender: TObject);
var
  tempNum, i, ii         : Integer;
  nOutEntries            : Smallint;
  TestRes                : Boolean;
  TempStr                : String;
begin
  tempNum := Pos('DEMO', lstDevice.Items[lstDevice.ItemIndex]);
  if (tempNum <> 0) then
     TestRes := True
  else
     TestRes := False;

  { Avoid to open Advantech Demo Card }
  If (TestRes) Then
  begin
    labIOAddr.Enabled := False;
    txtIOAddr.Enabled := False;
    cmdRun.Enabled := False;
  end;

  If (Not TestRes) Then
  begin
    { Check if there is any device attached on this COM or CAN }
    dwDeviceNum := DeviceList[lstDevice.ItemIndex].dwDeviceNum;
    txtIOAddr.Text := '300';
    labIOAddr.Enabled := True;
    txtIOAddr.Enabled := True;
    cmdRun.Enabled := True;
  end;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.07.2011, 20:15   #3
Денис_83
 
Регистрация: 12.07.2011
Сообщений: 3
По умолчанию

Спасибо большое за пример. Меня больше интересует инициализация платы и ввод/вывод (чтение/запись) информации (конкретный пример на Delphi).
В примерах, которые идут к плате, на ввод (DI) и вывод (DO) подключается некий модуль DAQDOLib_TLB и вся работа строится через него. При попытке запустить компилятор, даже без внесения изменений в исходный текст программы, выдается ошибка "[Fatal error] File not found DAQDOLib_TLB.dcu".
Все примеры к плате и Advantech Device Manager работают исправно, но при запуске примера предлагается выбрать устройство. Подскажите, пожалуйста, возможно ли обойти этот выбор и установить данную плату по умолчанию?
Денис_83 вне форума Ответить с цитированием
Старый 13.07.2011, 20:35   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

очевидно вы просто читаете между строк, в приведенном выше примере приведены инициализация и чтение.

Цитата:
текст программы, выдается ошибка "[Fatal error] File not found DAQDOLib_TLB.dcu
а это потому-что это импорт интерфейсов либы (DLL) и вы этот импорт хэдеров с библиотеки не сделали ...войдите в меню импорта интерфейсов в самой Delphi и импортируйте с этой DLL, в итоге у вас появится DAQDOLib_TLB.pas, который следует подключить к своему проекту.

Цитата:
Все примеры к плате и Advantech Device Manager работают исправно, но при запуске примера предлагается выбрать устройство. Подскажите, пожалуйста, возможно ли обойти этот выбор и установить данную плату по умолчанию?
а подумайте над DRV_DeviceGetList(DeviceList[0]
у вас идет перечисление, вот и выделяйте нужную из списка и устанавливайте программно.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 28.07.2011, 19:50   #5
Денис_83
 
Регистрация: 12.07.2011
Сообщений: 3
По умолчанию

Спасибо большое! Все получилось!
Денис_83 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с портом ввода вывода Assemblerru Общие вопросы C/C++ 5 25.04.2012 01:33
C++, переопределение ввода-вывода Erisu Помощь студентам 9 16.06.2011 16:27
Работа с платой видеозахвата. eldalex Общие вопросы C/C++ 22 09.03.2011 23:00
Операторы ввода и вывода wsws123 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2011 18:12
работа с протами ввода вывода Assemblerru Win Api 4 05.03.2010 20:53