Tabelle

Abbildung: Tabelle

Tabellen sind Rechteckflächen, die in eine bestimmte Zahl von Zeilen und Spalten gegliedert sind. Die Unterteilung einzelner Spalten und Zeilen kann eingestellt werden, außerdem lassen sich Spalten ausblenden. Eine Tabelle kann mehr Zeilen und Spalten enthalten, als bei der gewählten Größe des Elements jeweils angezeigt werden. Verdeckte Bereiche lassen sich jedoch mit Hilfe von Bildlaufleisten sichtbar machen. Wenn der Inhalt einer Zelle nicht sichtbar ist, muss die zugehörige Spalte verbreitert werden. Dazu ist auf die rechte Spaltenbegrenzung mit der linken Maustaste zu klicken und diese nach rechts zu ziehen. Auf entsprechende Weise lassen sich Spalten auch schmaler machen. Als Alternative zum Verbreitern der Zelle kann der Inhalt auch mittels eines Tooltips, durch Positionieren der Maus über der entsprechenden Zelle, angezeigt werden.

Wird auf eine Spaltenüberschrift geklickt, so werden die Zeilen der Tabelle nach den Einträgen der betreffenden Spalte sortiert. Zeilen mit niedrigeren Werten werden über Zeilen mit höheren Werten gesetzt. Texte ("Strings") werden nach ihrem ASCII-Wert sortiert: Alle Großbuchstaben werden, alphabetisch geordnet, vor die Kleinbuchstaben gesetzt, die wiederum alphabetisch gereiht sind. Klicken Sie ein zweites Mal auf die Spaltenüberschrift, so wird die Spalte absteigend (hoher Wert vor niedrigem) sortiert.

Tabellen als Grafikobjekte von WinCC OA dienen dazu, Zahlen und Texte in Listen darzustellen. Angewendet werden Tabellen in Meldeschirmen, um Systemwarnungen, allgemeine Zustandsinformationen über Anlagen, in genormter Form ausgeben zu können. Mit Tabellen können auch Datenpunktwerte gesetzt oder Aktionen ausgelöst werden. Ein Beispiel wäre die Quittierung eines Alarms, der zuvor in der Tabelle angezeigt wurde.

Anmerkung: Bei Verwendung von True Colors kann nur mit blinkenden Farben bei Zellhintergründen gearbeitet werden. Eine animierte Farbe für den Hintergrund der gesamten Tabelle ist nicht möglich.
Anmerkung:

Bestimmte Datentypen sind als Zellenwert nicht erlaubt. Dies sind: function_ptr, shared_ptr, vector, enum, class and struct.

Wird ein Wert dieser Typen als Zellenwert verwendet, wird stattdessen ein Leersting gesetzt und eine Warnung im Logviewer ausgegeben.

So erstellen Sie eine Tabelle

  1. Klicken Sie auf das Werkzeug für Tabelle .
  2. Klicken Sie in die Panelarbeitsfläche. Bestimmen Sie die Größe.
  3. Der Tabellen-Editor öffnet sich:

Abbildung: Tabellen-Editor - Registerkarte Spalten

  1. Unter Gesamt wird angegeben, aus wie vielen Spalten die Tabelle besteht. Die erste Spalte wird automatisch angelegt. Tragen Sie für die erste Spalte die folgenden Daten ein:

  • Aktuell: Name der zurzeit ausgewählten Spalte.

  • Name: Der Spaltenname. Mit der Schaltfläche unten rechts (grünes Symbol) wird der Name in die Combobox Aktuell übernommen.

  • Titel: Die Bezeichnung, welche die Spalte im Panel haben wird (mehrsprachiger Text möglich).

  • Format: Das ausgewählte Textformat für die bestimmte Spalte. Die Schaltfläche mit der Beschriftung "..." öffnet den Format-Selektor. Für Informationen zur Zusammensetzung des Format-Strings siehe Format-String.

Anmerkung:

Bei der Formatierung der Tabelle mittels HTML muss darauf geachtet werden, dass nur ein bestimmtes Subset an HTML Tags zur Verfügung stehen, siehe: http://doc.qt.io/qt-5/richtext-html-subset.html

  • Breite: Spaltenbreite in Punkten.

  • sichtbar: Wenn angehakt, wird die Spalte im Panel nicht angezeigt.

  • editierbar: Wenn angehakt, ist es möglich, die Spalte im Panel zu editieren.

  • Tooltip: Text der als Tooltip erscheinen soll. Kann bei mehrsprachigen Projekten für jede Sprache separat angeben werden (siehe auch "column ToolTipText" bzw. "namedColummToolTipText").

Anmerkung:

Damit Ihre Tabelle auch tatsächlich editierbar ist, müssen Sie mit der Funktion "appendLine" bzw. mit der Funktion "appendLines" Zeilen anhängen! Für langstrings, dyn_langString können Sie den Langeditor zum Editieren verwenden.

Mit den Schaltflächen mit den Icons fügen Sie eine neue Spalte vor oder nach der aktuell ausgewählten ein, löschen oder übernehmen die Einträge.

  1. Klicken Sie auf die Schaltflächen links unterhalb (Pfeilsymbol nach unten), um die nächste Spalte einzufügen.

  2. Wechseln Sie zur Registerkarte Zeilen.

Abbildung: Tabellen-Editor - Registerkarte Zeilen

VORSICHT:

Beachten Sie, dass in als "pnl" gespeicherten Panels Titelzeilen/Zeilen nur dann zur Laufzeit angezeigt werden, wenn die Spalte auch Zeilen, die per Skript hinzugefügt wurden, enthält. Wenn Sie nur Titelzeilen/Zeilen im GEDI definieren, aber keine Zeilen per Skript (z.B. appendLine) hinzufügen, werden die Titelzeilen/Zeilen nur in "xml" Panels zur Laufzeit angezeigt. Beachten Sie zudem, dass, wenn Sie die Funktion deleteAllLines verwenden, alle Zeilen inklusive Titeln gelöscht werden. Wenn Sie Zeilen nachträglich hinzufügen, werden die Default-Titeltexte angezeigt und nicht die im Gedi definierten Texte.

  1. Geben Sie in den Feldern die entsprechenden Werte ein. Unter Höhe definieren Sie die Höhe der Zeilen. Diese kann auch allgemein eingegeben werden, auch wenn keine Zeile vorhanden ist oder ausgewählt wurde.

  2. Wechseln Sie auf die Registerkarte Allgemein.

Abbildung: Tabellen-Editor - Registerkarte Allgemein

  • Titelsichtbarkeit:damit zeigen Sie Ihre Spalten- oder Zeilentitel an oder nicht.

  • Titelbreite: definiert die Breite der Zeilentitel.

  • Schriftart: legt die Schriftart Ihrer Tabelle fest.

  • Vert. Scrollbar/Horiz. Scrollbar: legt fest, wann und ob ein Scrollbalken angelegt wird.

  • Gitternetztyp: Combobox, wo Sie wählen können, ob ein Gitter für die Zellen verwendet werden soll. Möglichkeiten sind: Kein (Kein Gitter), Vertikal, Horizontal und Horizontal und vertikal.

  1. Wählen Sie Ihre Optionen auf der Registerkarte "Allgemein".

  2. Klicken Sie Schließen.

Ist Ihre Tabelle fertig und Sie wollen Änderungen vornehmen, führen Sie einen Doppelklick auf die Tabelle aus oder klicken Sie im Eigenschaftenfenster auf das Feld Editor ....

Sortierung

Klickt man auf den Spaltentitel einer Tabelle, aufgeschaltet zur Laufzeit im Modul VISION, so wird die Tabelle einer bestimmten Sortierreihenfolge unterzogen (von oben nach unten/von unten nach oben). Beim Sortieren wird ein Pfeil in die Titelspalte gezeichnet, der die sortierte Spalte und Reihenfolge anzeigt.

Beispiel

Ein Beispiel für ein Script, das in einer Tabelle Zeile erzeugt, lautet beispielsweise folgendermaßen. Spezifisch für eine Tabelle ist das Attribut "appendLines" welches in der Funktion setValue() verwendet wird, um an die Tabelle Zeilen hinzuzufügen (Sie können auch die Variante objektName.appendLines(); ) verwenden. Es ist nämlich zu beachten, dass eine neu erzeugte Tabelle keine Zellen besitzt, diese müssen erst explizit durch Hinzufügen von Zeilen auf folgende Weise erzeugt werden:

      main()
      {
      setValue("","appendLines", 6 );
      }
   

Beispiel

Die Grafikattribute appendLine, updateLine, appendLines, updateLines, cellValue können pro Zelle auch any_type Variablen setzen, die aus folgenden 3 Elementen (2 und 3 sind optional, es dürfen aber nicht mehr als 3 Elemente enthalten sein) zusammengesetzt sein können:

  1. Wert der Zelle
  2. Hintergrundfarbe der Zelle
  3. Vordergrundfarbe der Zelle

Damit kann man gleichzeitig und beschleunigt Wert, Vorder- und Hintergrundfarbe eines Tabellenelementes (Spalte1 = erste Spalte, Spalte2 = zweite Spalte) setzen.

      main()
      {
        dyn_anytype x,y;
        x[1]="abcd";
        x[2]="[100,0,0]";
        x[3]="_3DFace";
        y[1]="test";
        y[2]="[0,100,0]";
        y[3]="_3DText";
        setValue("TABLE2","updateLine",1,"Spalte1",x,"Spalte2",y);
      }
   

Beispiel

Ein Beispiel für ein Script, das die Zeile, die angeklickt wurde, löscht, lautet beispielsweise folgendermaßen. Spezifisch für eine Tabelle sind die Attribute "currentCell" und "deleteLineN" in den Funktionen getValue() und setValue(). Das erste besitzt zwei Parameter vom Typ int. Mit Hilfe des ersten lässt sich die Zeilennummer, mit dem zweiten die Spaltennummer der aktiven Zelle abfragen und setzen. Das Attribut, "deleteLineN" besitzt einen Parameter vom Typ int, der die Nummer der Zeile angibt, die gelöscht werden soll.

      main()
      {
        int zeile, spalte;
        getValue("", "currentCell", zeile, spalte);
        setValue("", "deleteLineN", zeile);
      }
   

Beispiel

Ein Script, das auf eine Tastatureingabe in eine Zelle hin die Funktion work() ausführt, könnte etwa folgendermaßen lauten. Zu der main()-Funktion, welche den Zelleninhalt verarbeitet, sind besonders die Übergabeparameter zu bemerken: Sie liefern die Zeilennummer als Variable vom Typ int, den Spaltennamen und das Ergebnis der Tastatureingabe des Benutzers als Strings. Soll der Zelleninhalt im weiteren nicht vom Typ string sein, so kann er mit Hilfe der Funktion sscanf() umgewandelt werden. Im Beispiel wird eine ganze Zahl als Wert erwartet, was die Eingabe einer Folge von Ziffern ohne Punkt voraussetzt. Um fehlerhafte Benutzereingaben abzufangen, wird abgefragt, ob sich der Zelleninhalt hat umwandeln lassen. War das nicht möglich, wird in der Zelle "Fehler!" ausgegeben. Auf jeden Fall aber muss eine Tastatureingabe in eine Tabellenspalte, mit der ein Control-Script verbunden ist, ausdrücklich in der jeweiligen Spalte gespeichert werden! Das geschieht durch das Attribut cellValueRC in der Funktion setValue(), mit welchem sich der Wert einer Zelle abfragen und setzen lässt. Es besitzt einen Parameter vom Typ int, der die Zeilennummer, sowie einen String-Parameter, der den Spaltennamen der betreffenden Zelle enthält. Dem dritten Parameter wird der Zelleninhalt übergeben. In der Funktion work wird der Wert, der vom Benutzer eingegeben wurde mit dem Wert 3 zusammengezählt und in die Zelle geschrieben.

main(int zeilennr, string spaltenname, string eingabe)
{
   int ok, wert;
   ok = sscanf(eingabe, "%d", wert);
   if(ok == 1)
   {
     int h = work(wert);
     setValue("TABLE2", "cellValueRC", zeilennr, spaltenname,h);
   }
else
   setValue("TABLE2","cellValueRC",zeilennr,spaltenname,"Fehler!");
}
 int work(int wert)
{
  wert = wert + 3;
  return wert;
}

Beispiel

Ein Script für eine Tabelle, deren Zeilen vier Ventilen zugeordnet sind, und die in einer Spalte den Ventildurchfluss anzeigt, der in der fünften Zeile immer aktuell addiert wird, könnte beispielsweise folgendermaßen lauten. Die Funktion dpConnect() ruft bei jeder Änderung des Online-Werts einer der Datenpunktvariablen "VD01.Durchfluss" bis "VD01.Durchfluss" die Funktion zeigrech() auf. Diese setzt die Werte der Spalte "Durchfluss" auf die je übermittelten Online-Werte. Die einzelnen Zeilen werden durch Werte der Spalte "Ventil" angesprochen, die in der Tabelle auch ausgeblendet sein kann.

main()
{
dpConnect("zeigrech","VD01.Durchfluss:_online.._value",
          "VD02.Durchfluss:_online.._value",
          "VD03.Durchfluss:_online.._value",
          "VD04.Durchfluss:_online.._value");  /* Beachten Sie, dass die Funktion
auf der gleichen Zeile geschrieben werden soll (ohne Zeilenumbrüche) */
}
zeigrech(string dp1, int fl1, string dp2, int fl2,
string dp3, int fl3, string dp4, int fl4)
{
setValue("", "updateLine", 1, "Ventil", "VD01","Durchfluss", fl1);
setValue("", "updateLine", 1, "Ventil", "VD02","Durchfluss", fl2);
setValue("", "updateLine", 1, "Ventil", "VD03","Durchfluss", fl3);
setValue("", "updateLine", 1, "Ventil", "VD04","Durchfluss", fl4);
setValue("", "updateLine", 1, "Ventil", "Summe","Durchfluss",
                      fl1+fl2+fl3+fl4);  /* Beachten Sie, dass die Funktion auf der
gleichen Zeile geschrieben werden soll (ohne Zeilenumbrüche) */

Beispiel

Welche Zeile und welche Spalte geklickt wurde, finden Sie wie folgt heraus:

main(int row, string column, string value)
{
    DebugN("Reihe",row,"Spalte",column);
}
Anmerkung:

Wenn eine nicht editierbare Zelle einer Tabelle mit der linken Maustaste angeklickt wird, wird das Event "Clicked" ausgelöst. Bei einer editierbaren Zelle wird das Event "Clicked" über Enter oder Zellenwechsel ausgelöst.

Anmerkung: Das Event "RightMousePressed" wird beim Rechtsklick auf den Tabellenheader ausgelöst. Hierfür wird die spezielle Zeilennummer "-2" weitergegeben.

Für Tabellen-Funktionen siehe Control Grafik/Tabellen Funktionen.

Anmerkung:

Mehrspaltige Tabellenheader können nur über die Funktion "columnHeader" mittels "New Line" "\n" in Control gesetzt werden.

HTML innerhalb der Tabelle

Für die Verwendung von HTML innerhalb einer Tabellenzeile muss die Formatierung der Zelle oder Spalte auf HTML gesetzt werden. Dies kann entweder über den Konfigurationsdialog der Tabelle oder dynamisch (z.B. mittels "cellFormatRC") erfolgen.

Beispiel

Nachfolgendes Beispiel fügt HTML Elemente (Text + Bild) innerhalb einer Tabellenzeile hinzu.

  string picPath = "arc.png";
  this.appendLine("#1", "<b><i>My Icon:</i></b> <img src='pictures:"+picPath+"'></img>");
  this.cellFormatRC(0, "#1", "[h,,,ALIGNMENT_CENTER]");

Es ist zu beachten, dass bei der Verwendung von HTML Inhalten in der Tabelle die Einstellungen der Ausrichtung ebenfalls innerhalb des HTML Inhalts erfolgen müssen (=> align Attribut, siehe Beispiel unterhalb). Einstellungen mittels Control/GEDI Konfiguration werden nicht für HTML Inhalte angewandt.

Beispiel

<div>My content</div>
<table border=1 align="center">
<tbody>
<tr><td>My centered table content</td></tr>
</tbody>
</table>