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

ADAM-6017 – это интеллектуальный модуль аналогового ввода, аналог  ADAM-5017, который работает как самостоятельное устройство сети Ethernet. Для реализаций операций с модулем ADAM-6017  используется программный модуль Unit2. При выборе в главном меню пункта «Чтение данных модуля 6017» появляется форма, аналогичная рассмотренной для модуля ADAM-5017. Для проведения операции чтения данных модуля ADAM-6017 применяется функция ADAMTCP_Read6KAI, возвращающая код завершения операции:

function ADAMTCP_Read6KAI(szIP : PChar; wModule : Word; wID : Word;

              wGain : PWord; wHex : PWord; dlValue : PDouble) : Integer; StdCall.

Функция, кроме уже известных параметров, использует следующие:

► wModule - название модуля ADAM-6017;

► wGain – указатель на код диапазона;

► wHex – указатель на шестнадцатеричное значение;

► dlValue – указатель на значение, представленное в вольтах.

Фрагмент программы, описывающий применение данной функции:

wModuleName := StrToInt(cboModuleName.Text);

wDeviceID := StrToInt(edtDeviceID.Text);    {ID-адрес  устройства }

//--- установка  значения кода диапазона для  каждого  канала ---

wGain[0] := ADAMTCP_BI_10V;  // значение кода для  канала:0

wGain[1] := ADAMTCP_BI_10V;  // значение кода для  канала:1

wGain[2] := ADAMTCP_BI_10V;  // значение кода для  канала:2

wGain[3] := ADAMTCP_BI_10V;  // значение кода для  канала:3

wGain[4] := ADAMTCP_BI_10V;  // значение кода для  канала:4

wGain[5] := ADAMTCP_BI_10V;  // значение кода для  канала:5

wGain[6] := ADAMTCP_BI_10V;  // значение кода для  канала:6

wGain[7] := ADAMTCP_BI_10V;  // значение кода для  канала:7

wGain[8] := ADAMTCP_BI_10V;  // среднее  для  каналов

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

                 wModuleName, wDeviceID, @wGain, @wData, @fValue);

if ( iRetVal <> 0 ) then begin

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

                                     +IntToStr(iRetVal));

    ADAMTCP_Disconnect();

    ADAMTCP_Close();

    close;                        end;

 //--- Показ значений аналогового  ввода ---

memoAIMsg.Lines.Clear();

for I := 0 to 7 do

           memoAIMsg.Lines.Add('Канал: ' + IntToStr(i) + ' ->  Данные: '

                   + InToStr(wData[i]) + '  Значение: ' + Format('%6.3f', [fValue[i]]) );

        memoAIMsg.Lines.Add('Среднее значение каналов : ' + ' ->  Данные: '

                + IntToStr(wData[8]) + '  Значение: ' + Format('%6.3f', [fValue[8]]) );

Данные, считываемые по каждому каналу, выводятся в виде десятичного числа и в единицах измерения – в вольтах.

1.3.  Реализация аналогового вывода модулем ADAM-5024

Модуль ADAM-5024 представляет собой 4-канальное устройство аналогового вывода, обеспечивающее цифро- аналоговое преобразование кодовых значений, выраженных в формате инженерных единиц, в аналоговые выходные сигналы. Используя сервисное программное обеспечение, пользователь может задать скорость нарастания выходного сигнала, его начальное значение и тип (ток или напряжение). Для осуществления аналогового вывода следует выбрать пункт «Запись данных в модуль 5024». В результате этого появляется форма, представленная ниже.

Значения в вольтах записываются в четыре канала модуля. Для  проверки правильности работы модуля можно запустить утилиту или измерить напряжение прибором на соответствующем выходе. Реализация аналогового вывода осуществляется в программном модуле Unit 8 с помощью функции ADAMTCP_WriteReg:

function ADAMTCP_WriteReg(szIP : PChar; wID : Word; wStartAdress : Word;

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

Функция использует уже известные параметры, а также следующие:

► wCount - количество каналов, используемых для вывода данных;

► byData - указатель на выводимые значения.

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

//--- Запись данных в регистр ---

        wDeviceID := StrToInt(edtID.Text);

        wStartAddress := StrToInt(edtStartAddress.Text);

        wCount := StrToInt(edtCount.Text);

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

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

           ADAMTCP_Disconnect();

           ADAMTCP_Close();

           close();

        end;

          for i := 0 to wCount - 1 do

wData[i] := StrToInt('$'+(FindComponent('edtData' + IntToStr(i)) As TEdit).Text);

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

                                                       wStartAddress, wCount, @wData);

1.4.  Организация взаимодействия модулей ADAM-5024 и ADAM-5017

Между модулями аналогового ввода и вывода можно осуществить взаимодействие, которое позволит провести  передачу данных из одного устройства в другое. Для этого следует соединить один из каналов модуля  ADAM-5024, например третий, с любым свободным каналом модуля ADAM-5017, например с седьмым.  Организация взаимодействия между модулями  осуществляется в программном модуле Unit11, форма которого приведена на рисунке ниже. Для записи и чтения данных используются уже знакомые нам функции ADAMTCP_WriteReg и ADAMTCP_ReadReg. Моделируемое напряжение на выходе канала (на форме слева) поступит на вход ADAM-5017 и отобразится в окне «Значения» справа после нажатия кнопки «Чтение».

2. Организация цифрового ввода/вывода

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

Модуль ADAM-5055S имеет 16 каналов дискретного ввода/вывода. Каждый его канал может быть независимо сконфигурирован как входной  или выходной с помощью DIP-переключателя, расположенного на плате устройства. Выходные каскады каналов выполнены в виде транзисторных ключей по схеме с открытым коллектором, обеспечивающих непосредственное управление маломощной нагрузкой. Входные каналы модуля ADAM-5055S могут быть использованы для контроля состояния концевых выключателей или датчиков приближения, а также для приема других дискретных сигналов.