В программном модуле 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 ---
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.