Изучение утилиты ADAM-5000TCP-6000 Utility. Программирование модулей Advantech в среде DELPHI: Методические указания к лабораторным работам, страница 5

В программном модуле Unit 5 осуществляется чтение значений с цифровых входов и выходов модуля. Имеется возможность считывания в двух режимах: ручном и автоматическом. В автоматическом режиме  получение новых значений происходит через определённый временной интервал, значение которого пользователь с помощью элемента прокрутки может устанавливать сам. Для удобного просмотра значений на форме, представленной на рисунке ниже, имеются кнопки цифровых входов и выходов, на которых загораются лампочки в случае установления в соответствующем канале значения 1. Управление тремя каналами цифрового ввода DI4, DI5, DI6 можно осуществить с помощью зелёных кнопок, расположенных на демонстрационном чемодане.

 


На компонентах GroupBox3 и GroupBox4 формы расположены кнопки типа TSpeedButton, которые обозначают соответственно цифровые выходы и входы. Ввод цифровых значений осуществляется функцией ADAMTCP_ReadCoil, которая возвращает код завершения операции:

function ADAMTCP_ReadCoil(szIP : PChar; wID : Word; wStartAddress : Word;

              wCount : Word; byData : PByte) : Integer; StdCall;

Ниже приведен фрагмент программы, использующий эту функцию.

//---  чтение  содержимого   ---

        wDeviceID := StrToInt(edtID.Text);

        wStartAddress := StrToInt(edtStartAddress.Text);

        wCount := StrToInt(edtCount.Text);

        if ( (wCount < 1) or (wCount > 128) ) then  begin

           ShowMessage('Количество каналов должно быть от 1 до 128');

           ADAMTCP_Disconnect();

           ADAMTCP_Close();

           close;

        end;

        for i := 0 to wCount - 1 do

           byData[i] := 255;

        iRetVal := ADAMTCP_ReadCoil(PChar(edtIPAddress.Text), wDeviceID,

                                               wStartAddress, wCount, @byData);

        if ( iRetVal <> 0 ) then begin

          ShowMessage('ADAMTCP_ReadCoil() Отказ!, Код  ошибки: '

                                    + IntToStr(iRetVal) );

          ADAMTCP_Disconnect();

          ADAMTCP_Close();

          close;

        end;

        memoMsg.Lines.Clear();

        j := wStartAddress;

        for i := 0 to wCount -1 do begin

            memoMsg.Lines.Add('Адрес: ' + IntToStr(j) + '   Значение: '

                                                 + IntToStr(byData[i]));

           inc( j );

           if byData[i] = 1 then

(FindComponent('DO' + IntToStr(i)) As TSpeedButton).Enabled := true

else  (FindComponent('DO' + IntToStr(i)) As TSpeedButton).Enabled := false;

        end;

2.2.  Реализация цифрового вывода модулем ADAM-5055S

Для осуществления цифрового вывода модулем ADAM-5055S необходимо выбрать пункт «Запись  данных  в  модуль 5055».  После  этого  появляется  форма, представленная ниже. Для проведения цифрового вывода используется  функция  ADAMTCP_WriteCoil. Функция записывает значения 0 или 1 в каналы цифрового вывода ADAM-5055S и возвращает код завершения операции. Для операции записи данных в ADAM-5055S используется программный модуль Unit6.

 


Описание функции:

function ADAMTCP_WriteCoil(szIP : PChar; wID : Word;

        wStartAddress : Word;  wCount : WORD; byData : PByte) : Integer; StdCall;

Приведем фрагмент программы с использованием функции.

//--- Запись данных ---

        wDeviceID := StrToInt(edtID.Text);

        wStartAddress := StrToInt(edtStartAddress.Text);

        wCount := StrToInt(edtCount.Text);

        if ( (wCount < 1) or (wCount > 128) ) then begin

           ShowMessage('Количество каналов должно быть от 1 до 128');

           ADAMTCP_Disconnect();           ADAMTCP_Close();

           close;

        end;

        for i := 0 to wCount - 1 do  begin

           if(  (FindComponent('RadioGroup'

                  + IntToStr(i)) As TRadioGroup).ItemIndex=0)

              then  byData[i] := 0

              else   byData[i] := 1;

        end;

        iRetVal := ADAMTCP_WriteCoil(PChar(edtIPAddress.Text),

                              wDeviceID, wStartAddress, wCount, @byData);

        if ( iRetVal <> 0 ) then begin

        ShowMessage('ADAMTCP_WriteCoil() Отказ!, Код ошибки:'

                                 + IntToStr(iRetVal) );

        ADAMTCP_Disconnect();

        ADAMTCP_Close();

        close;                             end;

2.3.  Реализация цифрового ввода модулем ADAM-6050

Устройство ADAM-6050 содержит 12 каналов цифрового ввода  и 6 каналов цифрового вывода. Все цифровые каналы ввода поддерживают функции блокировки входа для обработки сигнала и счетчика. Для каналов цифрового вывода можно осуществить функцию вывода импульса. Реализация цифрового ввода модулем ADAM-6050 осуществляется в программном модуле Unit3, форма которого представлена на рисунке ниже. На форме расположены компоненты memoDIMsg и memoDOMsg  типа TMemo, в которых осуществляется вывод значений по каналам соответственно цифрового ввода и вывода. Остальные элементы формы аналогичны рассмотренным в предыдущих разделах.

Для чтения данных ADAM-6050 используется функция ADAMTCP_Read6KDIO, возвращающая код завершения операции.

Описание функции:

function ADAMTCP_Read6KDIO(szIP : PChar; wModule : Word; 

              wIDAddr : Word; byDI : PByte; byDO : PByte) ):Integer; StdCall;

Параметры функции (за исключением ранее представленных):

► byDI – указатель на значение канала цифрового ввода;

► byDO – указатель на значение канала цифрового вывода.

Ниже приводится фрагмент программы, содержащий функцию.

//--- чтение каналов DI/DO для модулей серии ADAM-6000  ---