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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: SCL: Variable mit dynamischen Namen (Bezeichner) deklarieren?

  1. #1
    Registriert seit
    28.03.2009
    Beiträge
    83
    Danke
    16
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,
    benutze in meinem SCL Code Konstanten (Function_block) in der ich Stationsnamen als String abspeichere.
    Diesen missbrauchten FB deklariere ich dann als Instanz in FB's, bei der ich diese Konstanten benötige.

    Code:
    FUNCTION_BLOCK Defaults
    
    
    CONST
            station01            :=  'L0STA01xyz'; //Name der Station x im richtigen Format
    END_CONST
    
    VAR
    station01 : string[10]:=station01
    End_VAR
    
    ;
    End_Function_Block
    Ich möchte mir das zweimalige Schreiben ersparen. Kennt jmd einen workaround, bei der ich beim roten Bezeichner irgendwie dynamisch den namen der entspr. Konstante zuweisen kann?
    Oder sonst eine Idee, wie ich das optimieren könnte?
    Es sind sehr viele Stationen, der Inhalt ist wichtig für die Kommunikation mit einem übergeordneten System und Anhand vom Namen, sollte halt ganz intuitiv der Inhalt ersichtlich sein (ideal: bezeichner=inhalt).
    Zitieren Zitieren SCL: Variable mit dynamischen Namen (Bezeichner) deklarieren?  

  2. #2
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard

    Wie wäre es wenn du den Stationsnamen an einer Eingangsvariable übergibst?
    Zitieren Zitieren Eingangsvariable  

  3. #3
    logo78 ist offline Benutzer
    Themenstarter
    Registriert seit
    28.03.2009
    Beiträge
    83
    Danke
    16
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Du darfst dich virtuell gedrückt fühlen, wenn Du mir sagen kannst,
    wie ich einen zusammengesetzten Datentyp (hier String) als eine
    Konstante ('L0STA01xyz') einem FC/FB als IN übergeben kann.

    Siemens erwartet an dieser Stelle "Adressen", wo er diesen String findet.
    Sprich: Lokaldaten oder eben halt einen DB. Konstanten gehen nicht.
    Oder ich würde es splitten in einen dutzend 'chars' als IN.

    Ansonsten muss ich ja meine Konstanten (eigentlich Zeichenkette)
    irgendwie in diesen DB bekommen, darum die anfängliche Fragestellung

  4. #4
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Wie wäre es mit einem Array of Station... das so groß machen wie du Stationen hast + Reserve...

    Drauf zugreifen kannst du dann mittelst Station[01].Variable

    Grüße

    Marcel

  5. #5
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    Wo ist Dein Problem mit dem deponieren der Zeichenkette im DB? Die Zeichenkette 'station01' bekommt eine feste Länge, hier 9+2 für die Hochkommas.

    Ein Alternative wäre, wenn der Text 'station' immer gleich bleibt, einfach einen Zählindex hinzunehmen!
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  6. #6
    logo78 ist offline Benutzer
    Themenstarter
    Registriert seit
    28.03.2009
    Beiträge
    83
    Danke
    16
    Erhielt 4 Danke für 4 Beiträge

    Standard

    @Matze:
    daran habe ich auch schon gedacht.
    Allerdings möchte ich das 'Handling' dieser Variable
    für den Endanwender (Inbetriebnehmer) so einfach
    und intuitiv wie möglich gestalten, so das kein Spielraum
    für Missverständnisse bleiben. Ziemlich schwierig mit Siemens.

    Das Problem ist die Entwicklungsumgebung. Wenn du das
    entsprechende Array Station[01].Variable auswählst/anklickst,
    kriegste' im KOP/FUP-Editor nicht den Anfangs-bzw. Initialwert angezeigt. Nicht bei Arrays.

    Wenn das angezeigt werden würde, so wie bei der Datensicht
    eines DB's, würde man den "Inhalt" ('L0STA01xyz') sehen und es wäre
    eine sehr gute Möglichkeit.

    Edit: Typo.
    Geändert von logo78 (24.01.2012 um 08:23 Uhr)

  7. #7
    logo78 ist offline Benutzer
    Themenstarter
    Registriert seit
    28.03.2009
    Beiträge
    83
    Danke
    16
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von MCerv Beitrag anzeigen
    Wo ist Dein Problem mit dem deponieren der Zeichenkette im DB? Die Zeichenkette 'station01' bekommt eine feste Länge, hier 9+2 für die Hochkommas.
    Ein Alternative wäre, wenn der Text 'station' immer gleich bleibt, einfach einen Zählindex hinzunehmen!
    Das Problem habe ich im Anfangsposting erwähnt. Exclusiv für dich, werde ich mich mal selbst zitieren.
    [..]
    Ich möchte mir das zweimalige Schreiben ersparen. Kennt jmd einen workaround, bei der ich beim roten Bezeichner irgendwie dynamisch den namen der entspr. Konstante zuweisen kann?
    Es sind sehr viele Stationen, der Inhalt ist wichtig für die Kommunikation mit einem übergeordneten System und Anhand vom Namen, sollte halt ganz intuitiv der Inhalt ersichtlich sein (ideal: bezeichner=inhalt).[..]

  8. #8
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    @logo78

    soviele Stationen in einem FC? Ist ein Multiinstanzaufruf nicht möglich / sinvoll? Evtl. mit weiteren Unterbausteinen?
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  9. #9
    logo78 ist offline Benutzer
    Themenstarter
    Registriert seit
    28.03.2009
    Beiträge
    83
    Danke
    16
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Danke für den gutgemeinten Hinweis. Mir sind die Techniken mit Unterbaustein, respektive Multiinstanzen bekannt.

    Die Stationen sind nicht in einem FC. Wie oben bereits erwähnt, ist das in dem SCL deklarierte FB mit den "Konstanten" eine ART Workaround, dessen Werte dann in anderen FB's mitbenutzt werden können.
    Eine Möglichkeit quasi in der bescheidenen Siemenswelt, bei der "globale Variablen" benutzt werden können.

    Ich bin mir nicht sicher, ob du das Problem richtig verstanden hast. Ich helfe Dir
    Du hast 100 Stationen die als Namen eine vordefinierte Zeichenkette (String[8]) haben.
    Du musst in deinem Ablauf auf diese Strings zugreifen, neue Aufträge damit vergleichen, etc...
    Aufgabe 1)Wie hämmere ich 100 mal einen String[8] in das SPS Programm, so dass es global überall benutzt werden kann.
    Aufgabe 2)Wie kriege ich es hin, dass man trotzdem damit intuitiv arbeiten kann (Bezeichner=Inhalt). Schnödes Copy&Paste im SCL-Code ausgeschlossen.

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    eine SCL-Konstante ist keine Variable im eigentlichen Sinn. Im Grunde ist es nur ein Platzhalter für den vorgegebenen Inhalt. Somit ist es dann auch nicht möglich, auf diese "Konstante" in oder von einem anderen Baustein zuzugreifen. Das geht nur mit Variaben.
    Du mußt dir also Global-Variablen (z.B. einen entsprechenden DB) erschaffen, den du dann entsprechend zuweisst und überall verwendest ...

    Gruß
    Larry

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 18.08.2010, 07:49
  2. Zugriff auf Variable über String mit Var-Namen
    Von grosser_marco im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 03.09.2009, 07:43
  3. Antworten: 3
    Letzter Beitrag: 12.03.2009, 09:45
  4. Antworten: 1
    Letzter Beitrag: 12.09.2008, 16:06
  5. SCL Timer aufrufen/deklarieren
    Von plc_tippser im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.07.2005, 14:04

Lesezeichen

Berechtigungen

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