При выборе конкретного пункта появляется форма, компоненты которой позволяют осуществить те или иные операции над соответствующими модулями. Пункт «Операции с ADAM-5000/TCP» содержит подпункты для реализации действий с модулями базового блока ADAM-5000/TCP:
· чтение и запись данных для модуля 5055S;
· чтение данных модуля 5017;
· запись данных в модуль 5024;
· взаимодействие модулей 5024 и 5017.
Для подключения методов библиотеки к проекту Delphi используется функция ADAMTCP_Open, которая возвращает значение 0 в случае успешного подключения. Отключает библиотеку процедура ADAMTCP_Close. Для создания физического соединения с аппаратными средствами используют функцию, которая возвращает код завершения операции соединения:
ADAMTCP_Connect(<IP-адрес>, <порт, используемый Modbus/TCP> ,
<ConnectionTimeout>, <SendTimeout>, <ReceiveTimeout>),
где порт имеет по умолчанию номер 502, а три последних параметра задают соответствующие интервалы ожидания.
Процедура ADAMTCP_Disconnect разрывает созданное соединение.
Названные подпрограммы обрамляют конкретные действия с модулями, которые реализуются по соответствующим алгоритмам.
1. Организация аналогового ввода/вывода
1.1. Реализация аналогового ввода для модуля ADAM-5017
Модуль ADAM-5017 – это 16-разрядное устройство дифференциального аналогового ввода, которое обеспечивает программирование входного диапазона на всех 8 каналах. Значения для напряжения могут быть представлены в милливольтах (±150 мВ, ±500 мВ) и в вольтах (±1В, ±5В и ±10В), для тока – в миллиамперах (±20 мА, 4-20 мА). Модуль обеспечивает данные компьютеру в технических единицах (милливольт, вольт, миллиампер).
Ниже представлена форма, созданная для работы с модулем.
Чтение данных может проводиться в двух режимах: ручное и автоматическое считывание. При ручном способе пользователь может получать новую информацию после очередного нажатия кнопки «Чтение». Автоматическое считывание проводит обновление данных через определённое время, которое задаётся параметром «Временной интервал». В верхней части формы находится группа параметров, ей соответствует в программном модуле Unit7 элемент GroupBox1 со следующими компонентами типа TEdit:
► edtIPAddress – IP-адрес устройства, с которым выполняется соединение;
► edtID – номер устройства (для ADAM-5000/TCP всегда равно 1);
► edtStartAddress – стартовый адрес для считывания данных;
► edtCount – количество каналов, с которых считывают значения.
Кнопка btnRead компонента GroupBox2 предназначена для получения информации в ручном режиме. Для проведения автоматического режима на элементе объединения GroupBox3 расположены следующие компоненты:
► edtTime – временной интервал получения новых данных;
► TrackBar1 – движок для задания временного интервала;
► UpDown1 – счетчик тоже для задания временного интервала;
► btnStart и btnStop – кнопки запуска и останова процесса считывания.
Кроме того, на форме имеются кнопка btnExit для выхода из подпрограммы, компонент edtVersion для вывода номера версии библиотеки DLL, а также текстовая область memoMsg для демонстрации в окне формы считываемых значений.
После того как была подключена библиотека DLL и связь с устройством установлена, приложение обращается к функции ADAMTCP_ReadReg, с помощью которой осуществляется чтение данных модуля ADAM-5017:
function ADAMTCP_ReadReg(szIP : PChar; wID : Word; wStartAddress : Word;
wCount : Word; wData : PWord ): Integer; StdCall.
Функция использует параметры szIP - IP-адрес, wID – номер устройства (ID), который для ADAM-5000/TCP всегда равен 1, StartAddress - стартовый адрес для чтения, wCount - количество каналов, wData - массив шестнадцатеричных чисел, содержащихся в регистре временного хранения информации. Ниже приведен фрагмент программы с означенной функцией.
wDeviceID := StrToInt(edtID.Text); { ID устройства }
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] := $1234;
iRetVal := ADAMTCP_ReadReg(PChar(edtIPAddress.Text),
wDeviceID,wStartAddress, wCount, @wData);
if ( iRetVal <> 0 ) then begin
ShowMessage('ADAMTCP_ReadReg() Отказ!, Код ошибки:'
+ IntToStr(iRetVal) );
ADAMTCP_Disconnect();
ADAMTCP_Close();
close(); end;
memoMsg.Lines.Clear();
j := wStartAddress;
for i := 0 to wCount-1 do begin
fValue[i] := (wData[i] - 32767.5)*10/32767.5;
memoMsg.Lines.Add ('Адрес:' + IntToStr(j) + ' Значение:'
+ IntToHex(wData[i],4) + '[hex] Значение:' + IntToStr(wData[i])
+ ' Значение: ' + Format('%6.3f', [fValue[i]]));
inc( j );
end;
memoMsg.Lines.Add('');
Данные отображаются в десятичном, шестнадцатеричном виде и в инженерных единицах.
1.2. Реализация аналогового ввода модулем ADAM-6017
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.