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

        wModuleName := StrToInt(cboModuleName.Text);

        wDeviceID := StrToInt(edtDeviceID.Text);

        for i := 0 to 15 do   begin

           byDI[i] := 255;

           byDO[i] := 255;

        end;

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

                                              wModuleName, wDeviceID, @byDI, @byDO);

        if ( iRetVal <> 0 ) then  begin

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

                                    + IntToStr(iRetVal) );

           ADAMTCP_Disconnect();

           ADAMTCP_Close();

           close;

        end;

        //--- Показ значений цифрового  ввода ---

        memoDIMsg.Lines.Clear();

       for I := 0 to 15 do  begin

           if byDI[i] = 255 then break;

           memoDIMsg.Lines.Add('Цифровой  ввод:' + IntToStr(i)

                                                    + '   Значение: ' + IntToStr(byDI[i]) );

           if byDI[i] = 1

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

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

       end;

        //--- Показ значений цифрового вывода ---

        memoDOMsg.Lines.Clear();

          for I := 0 to 15 do  begin

             if byDO[i] = 255 then break;

             memoDOMsg.Lines.Add('Цифровой вывод:' + IntToStr(i)

                                                       + '   Значение:' + IntToStr(byDO[i]) );

             if byDO[i] = 1

               then (FindComponent('DO'

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

               else  (FindComponent('DO'

                        + IntToStr(i)) As TSpeedButton).Enabled := false ;

           end;

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

Для вызова формы реализации цифрового вывода ADAM-6050, представленной на рисунке ниже, следует выбрать пункт «Запись данных в модуль 6050». Форме соответствует программный модуль Unit4.

Для осуществления цифрового вывода применяется функция  ADAMTCP_Write6KDO, возвращающая код завершения операции:

function ADAMTCP_Write6KDO(szIP : PChar; wModule : Word; wIDAddr :  

         Word;  wStartDO : Word; wCount : Word; byDO : PByte) : Integer; StdCall;

Соответствующий фрагмент программы:

//--- Цифровой вывод для модулей серии ADAM-6000 ---

        wModuleName := StrToInt(cboModuleName.Text);

        wDeviceID := StrToInt(edtID.Text);

        wStartDO := StrToInt(edtStartDO.Text);

        wCount := StrToInt(edtCount.Text);

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

           ShowMessage('Номер  имеет  значение  от 1 до 6');

           ADAMTCP_Disconnect();

           ADAMTCP_Close();  close

       end;

       for i := 0 to wCount - 1 do   begin

          if((FindComponent('RadioGroup' + IntToStr(wStartDO+i))

            As TRadioGroup).ItemIndex = 0 ) then   byData[i] := 0

                                                                   else    byData[i] := 1;

        end;

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

                        wModuleName, wDeviceID, wStartDO, wCount, @byData);

        if ( iRetVal <> 0 ) then  begin

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

                                            + IntToStr(iRetVal));

           ADAMTCP_Disconnect();

           ADAMTCP_Close();   close;

        end;

3. Сигналы тревог, их формирование и отображение

3.1. Организация чтения потока данных

При организации чтения потока данных у пользователя имеется возможность прослеживать значения, записанные в модулях ADAM-5055S и ADAM-5017, в любой момент времени. После выбора пункта «Чтение потока данных» появляется форма, представленная ниже. Соответствующие действия содержатся в модуле Unit9. 

Для обработки потока данных необходимы 4 следующие функции:

1)  ADAMTCP_AddTCPForStream – определяет IP-адрес базового блока ADAM-5000/TCP, участвующего в посылке потока данных;

2)   ADAMTCP_StartStream – сообщает о начале приёма потока данных, поступающих от ADAM-5000/TCP;

3)  ADAMTCP_ReadStreamData – получает поток данных от микроконтроллера базового блока;

4)  ADAMTCP_StopStream – сообщает об окончании приёма потока данных.

 


Описание названных функций имеет следующий вид.

Function ADAMTCP_AddTCPForStream( szIP : PChar ) : Integer; StdCall.

Function ADAMTCP_StartStream( var hEvent : Integer ) : Integer; StdCall.

Function ADAMTCP_ReadStreamData (szIP : PChar;                        

                                        var StreamData : TStreamData ) : Integer; StdCall.

Function ADAMTCP_StopStream : Integer; StdCall.

Функции используют в качестве параметров ссылку hEvent на событие, которая передаётся библиотеке DLL, и переменную StreamData, которая относится к типу TStreamData, описывающему структуру потока данных [3].

Ниже приводится описание процедур обработки нажатия кнопки «Старт»  формы и временного сканирования слотов базового блока.

procedure TForm9.btnStartClick(Sender : TObject);

var

   iRetVal : Integer;

   hEvent  : Integer;

   strMsg  : string;

begin

   btnStart.Enabled := false;

   btnStop.Enabled := true;

   btnExit.Enabled := false;

   hEvent := CreateEvent(NIL, false, false, NIL);

   //--- добавления устройства ADAM-5000/TCP для обработки потока ----

   iRetVal := ADAMTCP_AddTCPForStream(PChar(edtIPAddress.Text));

   if ( iRetVal < 0 ) then  begin

      ShowMessage('Отказ соединения!, Код ошибки: ' + IntToStr(iRetVal) );