Vamos animar o painel de tendências já criado (mas vazio) com um gráfico das mudanças da variável ao longo do tempo. No entanto, antes de olhar para as tendências, eles precisam ser configurados e de alguma forma definir os valores para que se acumulem no banco de dados. É necessário que o sistema tenha uma variável que altere seu valor. É necessário travar a configuração correspondente nesta variável para que os valores sejam adicionados ao arquivo. Para o tipo de ponto de dados Flap, temos um DPE denominado Flow e digite int. Este DPE servirá para conhecer as tendências. Para simular o comportamento do sistema, já criamos um script de controle Model. Eu sugiro usá-lo para simular a taxa de fluxo. Vamos abrir o script do modelo:
, « » ( C) main(). main() , DPE - (callback-), main , callback-.
main :
main()
{
dpConnect("OnOpen_CB1", "System1:Flap1.Commands.Open");
dpConnect("OnOpen_CB2", "System1:Flap2.Commands.Open");
dpConnect("OnOpen_CB3", "System1:Flap3.Commands.Open");
for (;;) {
dpSet("System1:Flap1.Inputs.Flow", rand());
dpSet("System1:Flap2.Inputs.Flow", rand());
delay(1);
}
}
DPE callback ( for(;;)), 1 2, 1 delay. main , CTRL-.
(, — dpSet, . , ).
CTRL- ( ) , , para.
. Trends. Trend gedi.
— . — Value over value «» . — , X — , Y — . , — , . , .
Append — . Curve ()
… #1_1, :
… ( , ) #1_2. Close. Trends
Trends Main, TRENDS. , - , , … .
, , ( ), . , «». , X , , . , , . , . «- , », «1:1» , .
«» ruler:
Shift , .. « ».
, . . . .. . , .
, , . , , .. . para. Flap1.Input.Flow _archive.
Archive Settings. _archive, .
:
, :
, (, ) . WinCC OA Oracle. 3.17 InfluxDB, , NextGen . . ( ) . , . « » -, . , , «». ( , «» ) , - . , , — . , . NextGen InfluxDB, , , , «».
, , . ValueArchive_0000.
Active, Apply.
. Main, , , :
, — . , . , , . «Active» «Apply».
, ( , ) - . - SQL-. WinCC OA SQL Query. ( gedi Module) System Management.
Reports:
SQL-Query. ALL Value type ( , ).
SELECT DPE, . , , « — », . — originalvalue originalstime. Configuration Elements of the SELECT Statements «Append» «Insert», . . , .
From , .
, Flap* Elements of the FROM statement.
Data:
Create query, Start query, .
. - SQL-. Main EXPORT.
Click . SQL-, SQL-query :
dpQuery. dpQuery dpGet , , SQL-, , dpGet . — SQL. , WinCC OA — dyndynanytype. . , , — . , .
main(mapping event)
{
dyn_dyn_anytype Tab;
dpQuery("SELECT ALL '_original.._value', '_original.._stime' FROM 'Flap*'", Tab);
}
Tab, - . Log Viewer DebugN. , . . — DebugN , «» . , , . — , . , — , , , . , DebugN , , , . , .
Em última análise, o manipulador do botão EXPORT tem a seguinte aparência:
main(mapping event)
{
dyn_dyn_anytype Tab;
dpQuery("SELECT ALL '_original.._value', '_original.._stime' FROM 'Flap*'", Tab);
DebugN("SQL", Tab);
}
Depois de salvar o script, inicie a janela principal novamente para execução. Vamos encontrar a janela Log Viewer (sempre abre automaticamente quando o sistema é iniciado), limpe a saída do log com o botão "cruzar" para nossa conveniência:
Pressione o botão EXPORT em tempo de execução e veja a saída no log:
O descarregamento acabou sendo muito grande e nem tudo é mostrado, o que o LogViewer relata honestamente:
É uma pena, mas lógico. A saída de alguns megabytes de texto para um diário não é uma boa escolha. Na prática, a variável Tab pode ser analisada e reproduzida com sua matemática. Você pode exibir informações em uma tabela e assim por diante.