Функция получения доступа к удаленной исполнительной системе.
obj_context = createextmodule("имя_DLL@имя_объекта");
createexmodule – функция создает внешний объект из DLL из скрипта;
В случае ошибки функция возвращает 0.
//Эта метка нужна для того, чтобы сориентировать элементы на схеме в каком режиме им работать - локальном или удалённом define remote_mode initialization //Параметры соединения для каждого из приборов src1_host = "192.168.1.50:22375;connecttimeout=4000 timeout=1000"; src2_host = "192.168.1.51:22375;connecttimeout=4000 timeout=1000"; load_name = "datarcv#default.conf"; debugger_unit_name = "$(Root)\avrordbg.dll@debugger"; //Создаём объекты для подключения кадра к приборам source1 = createextmodule(debugger_unit_name); source2 = createextmodule(debugger_unit_name); var connected1: boolean, connected2: boolean, fhash: integer; connected1 = 0; connected2 = 0; end; //Функция обработки соединения 1 procedure DoProcessConnection1 if (not connected1) then begin if (dbginitialize(source1,src1_host,load_name,fhash) = 0) then begin if dbgstart(source1) = 0 then connected1 = 1; end else connected1 = 0; end else begin if dbgexchange(source1) <> 0 then connected1 = 0; end; end; //Функция обработки соединения 2 procedure DoProcessConnection2 if (not connected2) then begin if (dbginitialize(source2,src2_host,load_name,fhash) = 0) then begin if dbgstart(source2) = 0 then connected2 = 1; end else connected2 = 0; end else begin if dbgexchange(source2) <> 0 then connected2 = 0; end; end; //Установка соединения if not paintstep then begin //Асинхронная обработка соединений в отдельных потоках asyncprocess //Подключение канала 1 DoProcessConnection1; //Подключение канала 2 DoProcessConnection2; end; end; finalization //Уничтожение соединения freeobject(source1); freeobject(source2); source1 = 0; source2 = 0; end;
Пример скрипта, использующего функции доступа к удалённой исполнительной системе
ifdef remote_mode //Удалённый режим - есть индикация статусов и дублирование var data1: double, data2: double, status1: integer, status2: integer; initialization //Добавляем переменную в канал обмена данными //через интерфейс прямого доступа к каналу обмена данными if (source1 <> 0) then begin dbgaddreadvar(source1,data_1,signal_name); dbgaddreadvar(source1,status_1,signal_name+".status"); end; if (source2 <> 0) then begin dbgaddreadvar(source2,data_2,signal_name); dbgaddreadvar(source2,status_2,signal_name+".status"); end; end; //Собственно индикация //Активность канала данных - соединение factive1 = (status_1 = 0) and (source1 <> 0) and connected1; factive2 = (status_2 = 0) and (source2 <> 0) and connected2; //Выбор значения по каналам if factive1 then Text1.Text = floattostrf(data_1,0,4,6) else if factive2 then Text1.Text = floattostrf(data_2,0,4,6); //Мигаем с частотой 500 мсек если один из каналов сдох if (factive1 and (not factive2)) or (factive2 and (not factive1)) then ErrorFrame.Visible = flash(500) else ErrorFrame.Visible = not (factive1 and factive2); elseif //Локальный режим - просто рисуем указанный сигнал formattext Text1.Text = floattostrf({signal_name},0,4,6); end; ErrorFrame.Visible = 0; endif
Скрипт внутри отображающих блоков схемы