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