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

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

Thema: sprechende Variablen vs. durchnummerieren

  1. #1
    Registriert seit
    16.12.2009
    Ort
    Süddeutschland
    Beiträge
    173
    Danke
    37
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich dreh mich mit ein paar gedanken im Kreis und würde dazu gern um eure Hilfe bitten:

    Eine Steuerung hat sehr viele Digitalausgänge. Ich habe diese in etwa wie folgt deklariert:
    O_EG_WOHNZ_LICHT_SUED AT %Q*:BOOL;
    O_EG_WOHNZ_LICHT_DECKE AT %Q*:BOOL;
    etc. etc.

    Problem: Häufig wäre es zweckmäßig zu sagen "IF OUTPUT[2] = TRUE then", anstatt zu sagen "IF O_EG_WOHNZ_LICHT_SUED = TRUE then", weil es dadurch leichter softwaretechnisch anzusprechen ist (z.B in Schleifen, etc).

    Frage: wie kann ich die sprechenden Variablen behalten, aber trotzdem Ausgänge z.b in einer FOR-Schleife der Reihe nach ansprechen. Mache ich nämlich einfach ein Array (OUTPUT ARRAY [1..120] OF BOOL) so funktioniert zwar alles wunderbar, aber ich muß dafür auf meine sprechenden Variablen verzichten..
    Zitieren Zitieren sprechende Variablen vs. durchnummerieren  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Kannst den Array 0-120 nicht auf die Structur zurückkopieren?

  3. #3
    Avatar von forellengarten
    forellengarten ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.12.2009
    Ort
    Süddeutschland
    Beiträge
    173
    Danke
    37
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Verpolt Beitrag anzeigen
    Hallo,

    Kannst den Array 0-120 nicht auf die Structur zurückkopieren?
    ist halt nur nicht die eigentliche lösung.
    toll wäre z.b ein konstrukt wie:

    output[1] := O_EG_LICHT AT %Q*:BOOL;

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Beispiel wie man das mit einem Zeiger-Array machen könnte:

    Da müsstest dir ein lokales oder globales Array anlegen:
    Code:
    ptrOutputs : ARRAY [0..120] OF POINTER TO BOOL;
    und dann in einer Funktion die z.B. beim Anlauf aufgerufen wird die Zeiger mit den entsprechenden Adressen initialisieren:
    Code:
    ptrOutputs[0] := ADR(O_EG_LICHT);
    ptrOutputs[1] := ...
    Dann kannst du in einer Schleife oder über einen index mit:
    Code:
    ptrOutputs[index]^ := FALSE;
    index := index + 1;
    ptrOutputs[index]^ := TRUE;
    auf deine Ausgänge zugreifen. Wichtig ist dabei der Dereferenzierungs-Operator "^".

    Die Möglichkeit soetwas zu programmieren finde ich einen wesentlichen Vorteil des Codesys ST gegenüber dem Siemens SCL, denn da gibt es keine (echten) Pointer. Wenn man da sowas umsetzen will, muss man wirklich erst vorher alles in das Array hinein- und nachher wieder herauskopieren.

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Hm, ich habe das gerade mit Twincat und einem BC versucht. Leider funktioniert das mit dem Pointer zwar auf eine BOOL Variable, aber nicht auf einen Ausgang. Weiß der Teufel warum es hier wieder eine Ausnahme gibt.
    Die ADR()-Funktion habe ich gegen BITADR() ausgetauscht, aber bei meinem Controller funktioniert das leider nicht

  6. #6
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    Funktioniert wahrscheinlich deshalb nicht weil Bools 1 Byte groß sind, die einzelnen Ausgänge aber nicht.

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    Funktioniert wahrscheinlich deshalb nicht weil Bools 1 Byte groß sind, die einzelnen Ausgänge aber nicht.
    Menno, irgendwas ist ja immer. Drecks-Sprachen sind das...

    Machte mich auch gerade stutzig dass mit BITADR() MX0.0 und IX0.0 die gleichen Adressen haben sollen.
    Man könnte jetzt hingehen und die Ausgangsbits als Byte deklarieren, dann muss man aber in der E/A-Zuweisung ganz schön rumfrickeln. An einer Kundenanlage würde ich das so niemals programmieren.

    Wenn das so mit meinem Pointer-Array funktioniert hätte wäre es ja ok.

  8. #8
    Avatar von forellengarten
    forellengarten ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.12.2009
    Ort
    Süddeutschland
    Beiträge
    173
    Danke
    37
    Erhielt 1 Danke für 1 Beitrag

    Standard

    @Thomas_v2.1

    besten Dank, auch fürs Austesten (und Feststellen daß es nicht geht ). Pointer könnten da der richtige Ansatz sein. Ich werde auf jeden Fall mal versuchen in dieser Richtung weiterzukommen. Da ich eher noch "basic" herumprogrammiere bin ich trotzdem über inputs dankbar!

  9. #9
    Registriert seit
    24.10.2010
    Beiträge
    9
    Danke
    6
    Erhielt 10 Danke für 9 Beiträge

    Standard

    Sprechende, selbsterklärende Mnemos (Symbole) sind manchmal ein wahrer Hemmschuh bei der Erzeugung von Programmen.

    Im Falle der angesprochenen Ein- und Ausgänge ist aber mein Ratschlag klar und eindeutig:

    >>> Die Bezeichner des Stromlaufplanes <<<

    Da sich diese an den Seitennummern des Stromlaufplanes orientieren, haben somit Ziffern einen gewissen Vorrang.

    Bei einer sauber ausgeführten Elektroinstallation wird man die gleichen Bezeichner auch auf den Sensoren oder Aktoren finden. Der Weg von der Anlage in das Programm ist somit ziemlich direkt.

    Störend könnte nur sein, dass bei einer VDE gerechten Bezeichnung auch mathematische und IT Operatoren enthalten sind wie Punkte, Doppelpunkte Minuszeichen und Gleichheitszeichen. Das kann bei höheren Sprachen zu Verwirrungen führen.




    BFlat
    Zitieren Zitieren Bezeichner  

  10. #10
    Registriert seit
    24.10.2010
    Beiträge
    9
    Danke
    6
    Erhielt 10 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    kommen eigentlich äußerst selten vor. Denn bei der Zuordnung der E/A geht man meistens nach anderen Gesichtspunkten vor, z.B. Gruppenbildung für Ausstattungsvarianten einer Maschine oder Anlage.

    Da wird man um das zu-Fuß kopieren in eine Speicherstruktur nicht herum kommen um hinterher die Variablen elegant und selbsterklärend ansprechen zu können.

    Interessant ist, dass es offenbar Systeme gibt, in denen man E/A garnicht z.B. als Array ansprechen kann. Ob es wohl damit zu tun hat, dass sich Mikroprozessoren offenbar noch immer schwer tun (=rechenzeitfressend) Einzelbits anzusprechen. Ich kann mir gut vorstellen, dass in vielen Systemen das nächste Bit an der selben Stelle im nächsten Byte steht. die dazwischenliegenden 7 Bits schenkt man einfach her. Speicherplatz kostet sowieso nichts mehr.

    Andererseits wurde genau aus diesem Grund das E/A Abbild erfunden. Normalerweise greift man nämlich nicht auf das Eingangsbit direkt, sondern auf dessen Abbild im Arbeitsspeicher der SPS zu. Dieses Abbild wird zwischen den Programmzyklen aufgefrischt. Dieses "Auffrischen" ist dann ein relativ komplexer Ablauf in welchen z.B die Eingänge einzeln abgefragt und entsprechend die Abbildmerker gesetzt werden. Dann könnten die Eingänge zwar brav nebeneinander in einem 8 Bit Eingangswort stehen, während im Abbildspeicher platzverschwenderisch nur immer das unterste des 8 Bit Speicherwortes besetzt ist.




    BFlat
    Als Mutmaßer
    Zitieren Zitieren Strukturierte E/A  

Ähnliche Themen

  1. Sprechende SPS
    Von forellengarten im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 22.09.2011, 10:07
  2. ANY Variablen
    Von rsu76 im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 31.08.2010, 14:18
  3. Variablen
    Von Anger im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.04.2010, 15:12
  4. Antworten: 5
    Letzter Beitrag: 30.11.2009, 10:27
  5. Graph neu durchnummerieren?
    Von the bang 2 im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 07.11.2007, 14:36

Lesezeichen

Berechtigungen

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