powered by CADENAS

Manual

Manual

7.8.11. Merkmalalgorithmen

[Hinweis] Hinweis

Ein Beispiel zu Merkmalalgorithmen finden Sie im Trainingskatalog ($CADENAS/training/training.cip) unter \v11_news\value_ranges\value_ranges_with_condition\din_1771.prj.

Über sog. Merkmalalgorithmen werden Abhängigkeiten zwischen Variablen ausgedrückt. In der beispielhaften folgenden Abbildung sehen Sie, dass die Variable NENN durch das Produkt aus den Variablen H, B und L dargestellt wird.

NENN = '$H.x$B.x$L.'

Merkmalalgorithmus einrichten - Beispiel

  1. Klicken Sie auf den Button Neu.

  2. Tragen Sie unter Name den Variablennamen NENN ein.

  3. Wählen Sie unter Speicherort die Option Nur in Tabelle oder In Geometrie und Tabelle.

    (Bei Speicherort "Nur in Geometrie" kann kein Merkmalalgorithmus verwendet werden.)

  4. Wählen Sie unter Status die Option Merkmalalgorithmus.

  5. Öffnen Sie unter Formel mit Klick auf ... das erweiterte Eingabefeld.

    Klicken Sie auf den Button $VAR=.

    --> Der unter Name eingetragene Variablenname wird als erster Ausdrucksbestandteil des Merkmalalgorithmus’ ins Feld geschrieben.

  6. Legen Sie die Zuordnung fest, welche die Variable NENN definieren soll.

    --> Da es sich bei NENN um eine Textvariable handelt, lautet der Ausdruck NENN = '$H.x$B.x$L.'.

    "Merkmalalgorithmus" Dialogfenster

    "Merkmalalgorithmus" Dialogfenster

    [Hinweis] Hinweis

    Die Verwendung einer korrekten Syntax ist sehr wichtig:

    • Textvariablen

      Machen Sie bei Textvariablen die Angaben unbedingt innerhalb der beiden einfachen Anführungszeichen. Im Format DollarzeichenVariablennamePunkt können Variablen als Platzhalter in den Algorithmus aufgenommen werden. Auch Kombinationen mit anderen Schrift- bzw. Rechenzeichen und Verknüpfungen über IF- und ELSEIF-Funktionen (siehe Erklärung weiter unten) sind möglich.

    • Zahlvariablen

      Bei Zahlvariablen sind keine Hochkommata erforderlich. Einer Zahlvariable kann ein fester Zahlenwert und/oder auch eine Berechnung, die ihrerseits Variablen enthält, zugewiesen werden.

    Schließen Sie den Dialog mit Klick auf OK.

    -> Der Eintrag wird unter Formel gesetzt.

  7. Klicken Sie auf Übernehmen.

    -> Die Variable NENN wird in die Auflistung aller Projektvariablen aufgenommen.

    -> Die Variable NENN wird mit dem entsprechenden Icon für Merkmalalgorithmus gekennzeichnet.

Buttons für das Erstellen der Formel

(siehe Abb. „"Merkmalalgorithmus" Dialogfenster“)

  • $VAR=

    Dieser Button überträgt die unter Name angezeigte Variable ins Eingabefeld.

  • IF

    Ein durch eine IF-Bedingung aufgebauter Algorithmus kann wie folgt aussehen:

    IF ( ) THEN 
       D3 = 
    ELSE 
       D3 = 
    ENDIF

    Zwischen den Klammern () geben Sie Ihre Bedingung ein (z.B. "L1.EQ.10").

    Hinter THEN D3 = geben Sie den Wert ein, den D3 annehmen soll, wenn die Bedingung erfüllt wird.

    Hinter ELSE D3 = steht der Wert für D3, falls die Bedingung nicht erfüllt wird. Mit ENDIF beschließen Sie die Bedingung.

    Beispiel mit Werten:

    IF (L1.EQ.10) THEN
    D3 = 20
    ELSE
    D3 = 30
    ENDIF
  • ELSEIF

    Sollen Fallunterscheidungen getroffen werden, kann mit ELSEIF-Anweisungen gearbeitet werden.

    Beispiel mit Werten

    IF (L1.EQ.10) THEN 
    D3 = 10 
    ELSEIF (L1.EQ.20) THEN 
    D3 = 20 
    ELSEIF (L1.EQ.30) THEN 
    D3 = 30 
    ELSE
    D3 = 40
    ENDIF 

    [Hinweis] Hinweis

    ELSEIF-Fallunterscheidungen müssen am Ende mit einem ELSE abgeschlossen werden.

  • Mehrere IF-Bedingungen hintereinander geschaltet innerhalb einer Merkmalalgorithmus-Variablen.

    Die Verwendung einer einzigen IF-Bedingung mit ELSEIF-Fallunterscheidungen würde oft zu viel aufwändigeren Lösungen mit viel mehr ELSEIFs führen.

    Aufbau der Bedingungen anhand eines Beispiels:

    IF ( KG.EQ.'-')THEN
     NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.'
    ELSE
     NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.-$KG.'
    ENDIF
    IF ( ZAK.EQ.'-')THEN
     NB1 = '$NB1.'
    ELSE
     NB1 = '$NB1.-$ZAK.'
    ENDIF
    IF( YSR.EQ.'1'.AND.SIE.EQ.'-')THEN
     NB1 = '$NB1. ZUB-C'
    ELSEIF( YSR.EQ.'1'.AND.SIE.EQ.'1')THEN
     NB1 = '$NB1. ZUB-CL'
    ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'-')THEN
     NB1 = '$NB1. ZUB-$YSR.C'
    ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'1')THEN
     NB1 = '$NB1. ZUB-$YSR.CL'
    ELSEIF( YSR.EQ.'-'.AND.SIE.EQ.'1')THEN
     NB1 = '$NB1. ZUB-L'
    ELSE
     NB1 = '$NB1.'
    ENDIF                                            

    Im  ersten IF wird NB1 initialisiert.
    
    
    
                                        
    Im zweiten IF wird an NB1 etwas drangehängt.
    
    
    
                                         
    Im dritten IF wird nochmal etwas drangehängt.
    
    
    
    
    
    
    
    
    
    
    
                                             

    Wichtige Hinweise:

    • Die erste IF-Bedingung muss eine eine ELSE-Alternative enthalten, damit die Initialisierung der Variablen sichergestellt ist. Die übrigen IF-Bedingungen können optional ELSE-Alternativen enthalten.

      Korrekt:

      IF (OPZ1.EQ.'-' )THEN
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.'
      ELSE
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.'
      ENDIF
      IF (OPZ2.EQ.'-' )THEN
       LINAALG = '$LINAALG./'
      ELSE
       LINAALG = '$LINAALG./$OPZ2.'
      ENDIF...

      Nicht korrekt:

      IF (OPZ1.NE.'-' )THEN
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.'
      ENDIF
      IF (OPZ2.NE.'-' )THEN
       LINAALG = '$LINAALG./$OPZ2.'
      ENDIF...

      Ebenfalls korrekt: Wenn als erstes ein einfaches Statement ohne Bedingung steht, kann auf ein "ELSE" ganz verzichtet werden, da das Statement die Variable immer initialisiert.

      CNSTYPECODE = '$MODEL.$W.-$ST.-$THETA.-$TYPE.-$SPRING.'
      IF(K.EQ.1)THEN
       CNSTYPECODE = '$CNSTYPECODE.-K'
      ENDIF
      IF(FK.EQ.1)THEN
       CNSTYPECODE = '$CNSTYPECODE.-FK'
      ENDIF
      IF(N.EQ.1)THEN
       CNSTYPECODE = '$CNSTYPECODE.-N'
      ENDIF
    • Die erste Bedingung, die immer berechnet wird, muss eine Endlos-Schleife verhindern. Weitere "if...endif" rufen immer die erste Bedingung auf und fügen einen zusätzlichen Wert an.

      Verwenden Sie daher in der ersten Bedingung für die ELSE-Fallunterscheidung nicht die Variable der Zuweisung.

      Korrekt:

      IF (OPZ1.EQ.'-' )THEN
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.'
      ELSE
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.'
      ENDIF
      IF (OPZ2.EQ.'-' )THEN
       LINAALG = '$LINAALG./'
      ELSE
       LINAALG = '$LINAALG./$OPZ2.'
      ENDIF...

      Nicht korrekt: (Unterschied in rot)

      IF (OPZ1.EQ.'-' )THEN
       LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.'
      ELSE
       LINAALG = '$LINAALG./$OPZ1.'
      ENDIF
      IF (OPZ2.EQ.'-' )THEN
       LINAALG = '$LINAALG./'
      ELSE
       LINAALG = '$LINAALG./$OPZ2.'
      ENDIF...

Fehlervermeidung

Stellen Sie sicher, dass Merkmalalgorithmen keine Rekursionen enthalten.

Rufen Sie für ein schnelles Testen in der Tabelle die Funktion Variablenabhängigkeiten anzeigen auf. Einfache Abhängigkeiten sind in Ordnung. Diese werden durch einen einfachen Pfeil dargestellt. Rekursive Abhängigkeiten sind Fehler. Dieser werden durch einen Doppelpfeil dargestellt. Fehler werden sowohl im Nachrichtenfenster als auch später beim Testen im Dialogfenster QA-Check angezeigt.

Die folgende beispielhafte Abbildung zeigt eine Abhängigkeit zwischen A und B.

Formel: A = B

Einfache Abhängigkeit -> OK

Einfache Abhängigkeit -> OK

Die folgende beispielhafte Abbildung zeigt eine rekursive Abhängigkeit. Der Variablenmanager zeigt A=B und B=A. Im Dialogfenster Variablenstruktur sehen Sie eine Doppelpfeil zwischen A und B. In der 3D Historie an betroffenen Elementen ein rotes Kreuz , das Dialogfenster Benachrichtigungen weist den Fehler aus und die 3D Ansicht zeigt kein Modell.

Rekursive Abhängigkeit -> Fehler

Rekursive Abhängigkeit -> Fehler

Im Dialogfenster QA-Check erscheint die Fehlermeldung

QA-Check mit Fehler "Rekursion im Algorithmus"

QA-Check mit Fehler "Rekursion im Algorithmus"