Содержание
Эта ДЕМО конфигурация показывает как использовать сервер научной графики - &PlotSrv для рисования красивых графиков на мнемосхемах и для автоматической генерации отчетов или Web страниц. При этом сервер &PlotSrv генерирует файлы изображений с графиками, а текстовая часть создается в виде HTML.
Сервер основан на использовании пакета GNUPLOT, свободно распространяемого с исходными кодами. См. также 1, 2, 3.
Если очень кратко, это работает так. При клике на сенсор тега клиент вызывает PlotSend с заданием на рисование, например:
// Если нажат сенсор - начать рисование...
if ClickButton=1 then
if ClickTag=tagPlot1 then begin
b:=PlotSend('@Clear'+EOL
+'@TimeOut 5000'+EOL
+'@HomeDir '+AdaptFileName('..\Temp')+EOL
+'@DoneMsg &DemoPlot @Done '+AdaptFileName('..\bitmaps\plot1.bmp')+EOL
+'@FailMsg &DemoPlot @Fail '+AdaptFileName('..\bitmaps\plot1.bmp')+EOL
+'@> set encoding utf8'+EOL
+'@> set output "plot1.gif"'+EOL
+'@> set terminal gif small size 300,200'+EOL
+'@> set title "График по формуле (impulses, lines)" font "PT Mono,8"'+EOL
+'@> set xlabel "Время, секунд" font "PT Sans,12"'+EOL
+'@> set ylabel "Значение, отн.ед." font "PT Serif,10"'+EOL
+'@> plot [0:10] sin(x+'+StrFix(random(0,5),1,3)+')/sqrt(x) with impulses,\'+EOL
+'@> cos(x+'+StrFix(random(0,5),1,3)+')/sqrt(x) with lines lw 2 lc 3'+EOL
+'@! unix gif2bmp plot1.gif '+AdaptFileName('..\bitmaps\plot1.bmp')+EOL
+'@run plot1.job plot1.dat '+AdaptExeFileName('plot1.bat')+EOL)>0;
nPlot1:=nPlot1+1;
b:=Voice(snd_Click);
end;Посланное задание выполняет сервер &PlotSrv.
Результатом рисования будет генерация файла ..\bitmaps\plot1.bmp с графиком.
По окончании генерации файла клиент получает сообщение @Done ..\bitmaps\plot1.bmp.
Клиентский код должен обновить сенсоры на мнемосхемах, связанные с графиком.
В обработчике консольных команд клиент по сообщению @Done обновляет и перезагружает изображение сенсора мнемосхемы, чтобы показать созданный график на экране.
Собственно, это делает вызов типа WinDraw('DemoPlot|Reload=plot1').
Например:
{
Analyse data coming from standard input.
}
procedure StdIn_Process(Data:string);
var cmd,arg:String; b:Boolean;
begin
cmd:=''; arg:='';
if GotCommand(Data,cmd,arg) then begin
{}
if IsSameText(cmd,'@Done') then begin
if IsSameText(ExtractFileName(arg),'plot1')
then b:=WinDraw('DemoPlot|Reload=plot1');
Data:='';
end;
{}
if IsSameText(cmd,'@Fail') then begin
Problem('Could not draw '+arg);
Data:='';
end;
{}
if Length(Data)>0 then begin
Trouble(' Unrecognized command "'+Data+'".');
Data:='';
end;
end;
cmd:=''; arg:='';
end;Естественно, надо следить, чтобы имена сенсора и файла были согласованы.
Также следует избегать избыточных операций рисования без необходимости.
Желаем успешного использования demo_gnuplot.
CRW-DAQ Copyright (c) 2001-2024 Alexey Kuryakin daqgroup@mail.ru