WinCC V5.1 Tag Logging Archivierung bei 2 Triggern

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2022
Beiträge
21.965
Reaktionspunkte
6.836
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte in WinCC V5.1 eine binäre Variable archivieren bei jedem Signalwechsel und zusätzlich spätestens alle 5 Minuten.
Hat jemand eine Idee wie ich das hinbekomme?

Zur Zeit archiviere ich die Variable nur bei Signalwechsel in einem Erfassungszyklus von 1s. Die Archivvariable wird in einem Trend dargestellt und der Trend stellt leider keine Kurve dar, wenn in dem dargestellten Zeitabschnitt kein Archiveintrag vorhanden ist bzw. zeichnet keine Kurve vor dem ersten Archivwert und keine Kurve nach dem letzten Archivwert im Zeitabschnitt. Die Variable ändert sich nur ein paar mal pro Stunde, das muß aber sekundengenau in dem Trend zu sehen sein, ohne die unschönen "Lücken" in der Kurve.

Harald
 
Ich hab's gefunden.
Ich muß die Erfassungsart "Azyklisch" einstellen und als Startereignis eine Global Script Funktion oder eine Triggervariable angeben. Wahrscheinlich werde ich mir morgen eine zusätzliche Triggervariable in der SPS programmieren, das geht am schnellsten, ich will nicht lange experimentieren. Es sei denn, jemand hat schon ein passendes Skript?

Wie kann eine Prozessvariable nur zu bestimmten Zeitpunkten (azyklisch) archiviert werden?
Welche Bedeutung hat die Erfassungsart einer Archivvariablen im WinCC Tag Logging?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe dann doch eine Global Script Funktion programmiert - man muß ja nicht so verschwenderisch mit PowerTags umgehen ;)
Weil ich das Skript nur für eine einzige Variable brauche, habe ich es nicht parametrierbar gemacht.
Code:
#include "apdefap.h"

// Trigger für Archivierung der Variable 0440AM073040000
// Die Funktion wird aus dem Tag Logging zyklisch alle 500ms aufgerufen
// Bei Änderung des Rückgabewertes wird die Variable 0440AM073040000 archiviert
// 21.11.2014 Harald

// static Variablen
INT  si_0440AM073040000_Tlg_Counter = 2 ;
BOOL sx_0440AM073040000_LastState = FALSE ;
BOOL sx_0440AM073040000_LastReturned = FALSE ;

BOOL Tlg_TrigArc_0440AM073040000 ()
{
  BOOL xVarNow, xArcNow ;

  // Variable archivieren wenn sie sich ändert oder spätestens nach 5 Minuten (= 300s = 600 Aufrufe)

  xVarNow = GetTagBit("0440AM073040000") ;
  xArcNow = xVarNow ^ sx_0440AM073040000_LastState ;
  sx_0440AM073040000_LastState = xVarNow ;

  if (!xArcNow)
  {
    si_0440AM073040000_Tlg_Counter-- ;     // Countdown (-1 je 500ms)
    if (si_0440AM073040000_Tlg_Counter <= 0) xArcNow = TRUE ;
  }
  if (xArcNow)
  {
    si_0440AM073040000_Tlg_Counter = 600 ; // Reset Counter: 5 Minuten = 300s = 600 * 500ms
  }

  sx_0440AM073040000_LastReturned ^= xArcNow ;
  return sx_0440AM073040000_LastReturned ;
}

Harald
 
Zurück
Oben