Diskussion, Meinungen erwünscht !! (ST)

Joh90

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Diskussion, Meinungen erwünscht !! (ST) Programmier Aufgabe

Schönen guten Abend,


wir sind gerade am wild diskutieren und bräuchten mal einige Meinungen. Ist es im strukturierten Text (ST) möglich den Name eines Structelements auszulesen? Zum Beispiel:


struct_beispeil: STRUCT
var1 : BOOL;
var2 : BOOL;
var3 : BOOL;
END_STRUCT


Irgendwie das erste Element var1 der struct_beispiel auszulesen. Die Länge und der Datentyp ist ja möglich aber der Variablen Name.


Wir sind auf eure Vorschläge und Meinungen sehr gespannt.



Grüße
 

Anhänge

  • 03_Mein_Wunsch.jpg
    03_Mein_Wunsch.jpg
    347,3 KB · Aufrufe: 14
  • 02_Task_typ_und_Task_var_und_Task_watch.jpg
    02_Task_typ_und_Task_var_und_Task_watch.jpg
    355,4 KB · Aufrufe: 16
  • 01_FB_typ_und_FB_input_output_und_FB_code.jpg
    01_FB_typ_und_FB_input_output_und_FB_code.jpg
    334,8 KB · Aufrufe: 25
  • 00_Hilfe_dynamische Variable.pdf
    703,6 KB · Aufrufe: 3
Zuletzt bearbeitet:
Da wir hier im IEC-Bereich sind: Nein, es gibt dort keine Introspektion. So würde man es nennen wenn im Programm Informationen über das eigene Programm abgerufen werden können.

Bei Programmen in der Automatisierungsumgebung sehe ich keinen sinnvollen Einsatzzweck für so etwas. Siemens versucht beim TIA-Portal und den neuen Steuerungen Anweisungen einzubauen mit denen das evtl. möglich wäre.

Warum würdest du so etwas benötigen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
dank Thomas_v2.1 bin dabei eine struct mit x Werten an einen Input Eingang eines FBs zu übergeben. Nur leider wird mit dem Zeiger das erste Element, zweite Element, dritte Element, usw. an die erste Stelle der struct im FB geschrieben. Was gar kein Problem wäre wenn die struct fest wäre. Mein Wunsch ist es aber irgendeine struct zu übergeben, welche dann automatisch im FB ausgewertet wird. Das wäre z.B. ich definiere eine Struct mit dem Befehl: go, wait, stop, drive -> diese übergebe ich mit einem Zeiger dem FB und dieser setzt automatisch die richtigen Befehle. Was natürlich genauso funktionieren soll, wenn ich eine Struct definiere mit: stop und drive (andere Reihenfolge und weniger Befehlen).
Vielleicht hast du eine Idee?
Danke für deine Antwort.
 
Vielleicht verstehe ich das falsch was du vorhast, aber du könntest eine struct verwenden welche z.B. ein Integer für den Befehl beinhaltet (go, wait, stop, drive, etc.) und dann einen Parametersatz der je nach Befehl unterschiedlich ausgewertet wird. Der grundsätzliche Aufbau der Strukturen sollte dann identisch sein, nicht verwendete Parameter eines Befehls werden dann ignoriert.

Bei Codesys gibt es soweit ich weiß auch das Konzept eines unbestimmten Zeigers, der man dann zwecks besseren Zugriffs auf eine entsprechende Struktur casten kann (wie man es aus Sprachen wie C kennt). Ich persönlich sehe solche Konstrukte in einer SPS aber eher ungern.
 
Ich finde deinen Vorschlag sehr interessant! Mich würde aber interessieren, ob bei einem Parametersatz ohne Kenntnisse über den FB einfach die ParameterReihenfolge getauscht werden könnte oder ob z.B. ein Parameter einfach gelöscht werden könnte und dadurch jeder weiterer Parameter in der Task-Structreihenfolge um einen Eintrag nach unten/hinten verrutschen könnte. Im Grunde soll ein Parametersatz übergeben werden, aber mit verschiedener Reihenfolge und mit verschiedener Anzahl. Jetzt ist es so, dass wenn ich keine Kenntnisse über die struct in der Task habe, nicht weiß auf welche stelle in die struct im FB geschrieben wird. Beispiel: also die Namen in der Task-struct sind var1,var2,var3,var4.... im FB ist eine struct definiert mit "REFERENCE TO" und den Variablen "var1,var3,var2,var5" . Wenn nun in der Task-struct var2 = TRUE ist ==> FB-struct var3 =TRUE. Ich will aber, dass eine Art Sortierung der Variablen stattfinden, damit var1 = var1, var2 = var2, var3 = var3, var4 = var 4. Jetzt ist es so: erstes Element = erstes Element, zweites Element = zweites Element, drittes Element = drittes Element usw. die Variablen Namen der Task-struct sind nicht identisch mit denen der FB-struct ( bei FB-struct := ACCESS ADR (Tast-struct)).

Ich hoffe ich konnte das verständlich rüber bringen.
PS ich nutze AS.4.0
 
So wie das verstehe willst du irgendwelche Abläufe dynamisch / einstellbar machen.

Für solche Zwecke erstelle ich eine UDT

Code:
cmd : INT;
subcmd : INT;
Para1 : DINT;
Para2 : DINT;
Para3 : DINT;
...

Die eigentliche Ablauf steht dann in einem (oder mehreren) DB als Array [1..x] of UDT.

In den entsprechenden FBs wird dann eben cmd und subcmd entsprechend decodiert.

Beispiel:
Code:
cmd=10 Positioniere Achse absolut
subcmd=01 X-Achse
subcmd=02 Y-Achse
subcmd=04 Z-Achse
Parameter1=Position
Parameter2=Speed

cmd=30 Starte Bearbeitung
subcmd=01 Bohren
subcmd=02 Gewindeschneiden
Parameter1=Tiefe

...

Ist natürlich nicht so elegant, wie in heutigen Hochsprachen, funktioniert aber.
Durch die Verwendung von Arrays sind Dinge wie Einfügen, Sortieren, Gruppieren ohne Riesenaufwand möglich.

Gruß
Dieter
 
Danke Dieter, ich programmiere in AS 4.0 . Leider finde ich dort keine User Defined Types. Wo hast du den code denn geschrieben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Joh90

Für das Verfahren spielt es eigentlich keine Rolle ob du UDTs hast.
Ich kenne AS 4.0 nicht und weiss nicht, ob z.b. ein Array of struct möglich ist.
Im Prinzip lässt sich das Verfahren mit jeglicher Form von indirekter Adressierung / Zeigerzugriffen realisieren.
Ist halt nur eine Frage des Komfort bzw. des Aufwands.

Gruß
Dieter
 
Zurück
Oben