createextmodule

Функция получения доступа к удаленной исполнительной системе.

Синтаксис:

obj_context = createextmodule(name);

Аргументы:

Имя Тип данных Описание
name string Строковый аргумент в формате: имя_DLL@имя_объекта

Описание:

createexmodule – функция создает внешний объект DLL из скрипта;

Результат:

Имя Тип данных Описание
obj_context boolean В случае ошибки функция возвращает 0

Пример 1:

//Эта метка нужна для того, чтобы сориентировать элементы на схеме в каком режиме им работать - локальном или удалённом
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;

Пример скрипта, использующего функции доступа к удалённой исполнительной системе

Пример 2:

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

Скрипт внутри отображающих блоков схемы

Дополнительные материалы

Нет.