Zustand der Schrittkette im ST

ramsimo

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


in der AS-sprache gibt es einen Flag 'SFCCurrentStep' der den Zustand der Schrittkette anzeigt, nun mein Prorblem: die Schrittkette ist im ST geschrieben wurde, wie kriegt man dort den Zustand der Schrittkette vermittelt bekommen?

Danke
 
Es gibt ungefähr 1001 Arten eine Schrittkette in ST zu schreiben.
Bring mal ein Codeschnipsel damit man das Prinzip erkennen kann.
Dann kann man dir helfen.
Gruß
Dieter
 
Möchtest du dir den aktuellen Schritt darüber anzeigen lassen?
Dann in der lokalen Deklaration
Var_Output
SFCCurrentStep:String;
End_Var

anlegen
Oder was meinst du mit Zustand?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Rheumakay
Var_Output
SFCCurrentStep:String;
End_Var
meinst das geht auch im Strukturierten Text? das kenne ich nur von AS.
mit dem Zustand ist gemeint wo die Schrittkette sich befindet bzw bei welchem Schritt

@ Blockmove

Das Programm ist hauptsächlich IF-Anweisungen und CASE-OF
 
ne-das geht ausschließlich mit AS (sonst kannst du die SFC´s vergessen).
Du hast also eine Schrittkette ausschließlich in ST geschrieben ?!
Dann könntest du doch entsprechend die einzelnen Schritte einer String Variabel zuweisen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Rheumakay

also das Programm habe ich nicht geschrieben, also meine Aufgabe besteht darin den Zustand der einzelnen Schrittketten auszugeben, ist allerdings bei mehreren Schrittketten sehr aufwändig deswegen frage ich ob es sowas wie "SFCCurrentStep" auch im ST gibt. In AS habe ich es immer so gemacht:
SFCCurrentStep:string; und dann in der Visu bei Textausgabe"<Name_Schrittkette>.SFCCurrentStep", richtig easy
 
Wenn du bei AS diese Variable deklarierst, wird die automatisch mit dem jeweiligen Schritt aus dem AS-Editor belegt. Genaugenommen: Es wird der nötige Code automatisch erzeugt. Das passiert quasi "intrinsisch". Wenn deine Schrittkette aber in ST geschrieben ist, dann wird wahrscheinlich ein INT exisitieren, dass die Schrittnummer beherbergt oder aber der Programmierer hat für jeden Schritt ein SR angelegt...oder eine boolesche Variable oder oder oder.

In jedem dieser Fälle wird dir jedoch nicht automatisch der Schrittname oder sonstiges in eine von dir deklarierte Variable geschrieben. Wie auch? Die Schrittnamen stehen bestenfalls im Kommentar zum Code und da du nicht über einen übergeordneten Editor diese Schrittkette erstellt hast, existiert auch kein Automatismus, welcher diese Variable in irgendeiner Weise beschreiben könnte respektive den nötigen Code erzeugt.

Also legst du sie jetzt an und gehst durch's Programm, wo du dann in jedem Schritt den entsprechenden Namen in diese Variable legst. Fleißarbeit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Majestic_1987

Danke! ich habe nicht so große erfahrung mit CoDeSys aber hab gerade was über Aufzählungstyp <enum> gelesen und mir überlegt dass so zu machen:
Type step: (string0,string1,string2,....stringn);
end_type
und dann im programm :
0: <Anweisungen>;
1: <Anweisungen>;
2: <Anweisungen>;
.
.
n: <Anweisungen>;
wie würdest es machen, kannst du mir ein Prgrammbeispiel zukommen lassen?
 
So kannst du es in der Tat machen und erschlägst damit zwei Fliegen mit einer Klappe.
Die andere Alternative ist, ein Integer (welcher Art auch immer) zu verwenden, ebenfalls mit Case zu arbeiten und dann zum Beispiel zu schreiben:

Code:
CASE iStepNo OF
1: 
     strStepName := 'Schritt 1';
     (*...*)
2:
     strStepName := 'Schritt 2';
     (*...*)
3:
     strStepName := 'Schritt 3';
     (*...*)
ELSE
     strStepName := 'Undefiniert';
     (*...*)
END_CASE

Was den Vorteil hätte, dass du theoretisch den Schrittnamen variabel gestalten kannst. Beispielsweise für ne Sprachumschaltung (im SPS-Code eher unschön) oder wenn sich Schrittnamen im Prozess ändern (du fertigst verschiedene Produkte und eine Schrauber-Station schraubt mal ne Deckplatte fest und mal nen Kühlkörper). Dann wäre sowas hier machbar:

Code:
2:
     IF eProductType = 'Modell A' THEN
          strStepName := 'Schritt 2 - Montiere Kühlkörper';
     ELSIF eProductType = 'Modell B' THEN
          strStepName := 'Schritt 2 - Montiere Abdeckplatte';    
     END_IF
     (*...*)

OB man das jetzt braucht oder nicht, sei mal dahingestellt. Ich wollte nur Vor- und Nachteile aufzeigen. Vorteil von der ENUM-Variante: Es geht flott und du brauchst eigentlich nur den Variablentyp der Schrittvariable im Deklarationsteil zu ändern.
 
Zurück
Oben