Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Gibt es eine möglichkeit in Deklarationsteil gewisse Definitionen Auszuschliessen.

  1. #1
    Registriert seit
    17.02.2012
    Ort
    Schweiz
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe folgende Frage: Besteht die Möglichkeit eine If Then Anweisung oder über einer Variable in deklarationsteil gewisse Sachen Ein- oder Auszuschliessen.
    Beispiel: Ich habe einen Baustein der für die Temperatur und Feuchtigkeit zuständig ist. Nun hat aber nicht immer jede Zone beides. Eine Methode ist wenn es die Feuchtigkeit nicht in diese Zeilen gibt das mit (* *) aus zu dokumentieren.
    Ich möchte nicht unnötig Variablen generieren die dann nicht verknüpft werden.

    Das wird immer gebaucht
    (* ------ Temperatur: Hardware Abbild der Widerstandssensor PT1000 Klemmen ----- *)
    Temp_Data_IN_KL AT %I*: INT; (* Temperatur Data IN der Klemme*)
    Temp_Status_IN_KL AT %I*: USINT; (* Temperatur Status IN der Klemme*)
    Temp_Data_OUT_KL AT %Q*: INT; (* Temperatur Data OUT der Klemme*)
    Temp_Status_OUT_KL AT %Q*: USINT; (* Temperatur StatusOUT der Klemme*)


    Das ist Situativ
    (* ------ Feuchtikeit: Hardware Abbild der 0-10V Eingangsklemme Klemmen ----- *)
    Feucht_Data_IN_KL AT %I*: INT; (* Feuchtikeit Data IN der Klemme*)
    Feucht_Status_IN_KL AT %I*: USINT; (* Feuchtikeit Status IN der Klemme*)
    Feucht_Data_OUT_KL AT %Q*: INT; (* Feuchtikeit Data OUT der Klemme*)
    Feucht_Status_OUT_KL AT %Q*: USINT; (* Feuchtikeit StatusOUT der Klemme*)
    Zitieren Zitieren Gibt es eine möglichkeit in Deklarationsteil gewisse Definitionen Auszuschliessen.  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... möchtest du in der Variablen-Deklaration/-Zuweisung etwas "ausblenden" oder an einem Baustein etwas nicht benutzen ?

  3. #3
    Registriert seit
    23.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich nehmen an, dass es dir darum geht nicht für alle möglichen Zonen jeweils Adressvariablen zu erstellen die nicht immer genutzt werden -
    würde mich auch interessieren ob und wie sowas geht! Falls du dass meinst ... Bin zwar etwas länger nicht mehr aktiv dabei gewesen aber das Problem sehe ich in der Erzeugung des tpy Files, darüber erfolgen ja die Verknüpfungen der Adressen im TC SystemManager. Da kannst du ja nachher keine PLC haben in der über ein z.B. "if then else" immer wieder einen andere Adressierung vorhanden ist ... ich lasse mich aber auch gerne korrigieren ...

  4. #4
    Registriert seit
    17.02.2012
    Ort
    Schweiz
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Als Beispiel:

    If Zone_hat_RH then
    (* ------ Temperatur: Hardware Abbild der Widerstandssensor PT1000 Klemmen ----- *)
    Temp_Data_IN_KL AT %I*: INT; (* Temperatur Data IN der Klemme*)
    Temp_Status_IN_KL AT %I*: USINT; (* Temperatur Status IN der Klemme*)
    Temp_Data_OUT_KL AT %Q*: INT; (* Temperatur Data OUT der Klemme*)
    Temp_Status_OUT_KL AT %Q*: USINT; (* Temperatur StatusOUT der Klemme*)

    (* ------ Feuchtikeit: Hardware Abbild der 0-10V Eingangsklemme Klemmen ----- *)
    Feucht_Data_IN_KL AT %I*: INT; (* Feuchtikeit Data IN der Klemme*)
    Feucht_Status_IN_KL AT %I*: USINT; (* Feuchtikeit Status IN der Klemme*)
    Feucht_Data_OUT_KL AT %Q*: INT; (* Feuchtikeit Data OUT der Klemme*)
    Feucht_Status_OUT_KL AT %Q*: USINT; (* Feuchtikeit StatusOUT der Klemme*)


    Else

    (* ------ Temperatur: Hardware Abbild der Widerstandssensor PT1000 Klemmen ----- *)
    Temp_Data_IN_KL AT %I*: INT; (* Temperatur Data IN der Klemme*)
    Temp_Status_IN_KL AT %I*: USINT; (* Temperatur Status IN der Klemme*)
    Temp_Data_OUT_KL AT %Q*: INT; (* Temperatur Data OUT der Klemme*)
    Temp_Status_OUT_KL AT %Q*: USINT; (* Temperatur StatusOUT der Klemme*)

    End_if

  5. #5
    Registriert seit
    28.08.2014
    Beiträge
    21
    Danke
    0
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Hi,
    zumindest in CoDeSys V3.x kann man das über "Conditional Pragmas" lösen. Gibt ein paar Beispiele in der Hilfe.

    Da kann man bspw. folgendes machen:

    Code:
    VAR
        {IF hasvalue(g_xCreateVar,'1')}
             xTest    : BOOL := TRUE;
        {END_IF} 
    END_VAR
    xTest wird nur erzeugt, wenn die (globale) Variable g_xCreateVar auf TRUE steht.
    Gibt noch andere Möglichkeiten. Man kann die Deklaration auch abhängig davon machen in welcher Applikation die POU aufgerufen wird. Einfach mal ausprobieren.
    Geändert von singleton (24.02.2016 um 14:22 Uhr)

  6. Folgender Benutzer sagt Danke zu singleton für den nützlichen Beitrag:

    RobiHerb (24.02.2016)

  7. #6
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Nein sowas geht nicht. Es gibt nur eine Hand voll Pragma Direktiven in TwinCAT2 und die machen auch nicht das, was du gerne hättest.
    Du kannst ja mehrere Varianten von deinem FB erstellen, die in eine Bibliothek packen und dann immer den Verwenden der zum Aufbau passt. Das wäre für mich die sauberste Lösung.

    Generell wäre ich auch bei Präprozessor-Anweisungen sehr vorsichtig. In C / C++ werden ifdef und Co meist nur zum debuggen verwendet, weil man sich damit auch ordentlich Sch...e eintreten kann.
    Geändert von MasterOhh (24.02.2016 um 14:28 Uhr)
    Sänd from mei Kombjudder mitse Dastadurr.

  8. #7
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Huch? Doppelpost.
    Sänd from mei Kombjudder mitse Dastadurr.

  9. #8
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    Ich halte es in der SPS (unabhängig vom System) für höchst gefährlich Deklarationen dynamisch zu erstellen da dies unweigerlich zu schweren Ausnahmefällen zur Laufzeit führen kann. Denn wie soll der Compiler vernünftig prüfen ob die Variable in dem Moment wo du sie lesen/schreiben willst auch tatsächlich exitsiert? .NET würde dir eine Null Reference Exception in nettem Popup liefern, deine Anlage würde einfach stehen bleiben....
    Regards NRNT

  10. #9
    Registriert seit
    28.08.2014
    Beiträge
    21
    Danke
    0
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ist ja auch nicht wirklich dynamisch wie bspw. in .NET. Das wird zur Compilezeit beim Code generieren erzeugt.

  11. Folgender Benutzer sagt Danke zu singleton für den nützlichen Beitrag:

    RobiHerb (24.02.2016)

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 16.04.2014, 19:08
  2. Antworten: 3
    Letzter Beitrag: 24.04.2013, 14:52
  3. Antworten: 8
    Letzter Beitrag: 08.10.2010, 10:10
  4. Antworten: 12
    Letzter Beitrag: 28.09.2010, 10:31
  5. Antworten: 8
    Letzter Beitrag: 19.10.2005, 18:19

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •