Umgang mit Status- und Steuerwörtern

clumsi

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

da ich die SPS-Programmierung eigentlich eher nebenbei gelegentlich mache, fehlt mir bei einigen Umsetzungen noch etwas Erfahrung, um die Dinge möglichst praktisch und professionell umzusetzen.

Aktuell geht es um die Verarbeitung des Steuer- und Statuswort, um einen Freuquenzumrichter zu steuern. Prinzipiell funktioniert alles, und die Steuerbits habe ich einzeln per Visu-Buttons direkt angesteuert. Auch die Statusbits werden für den Testbetrieb direkt in einer Visu-LED dargestellt. ==> Per Button kann ich den Motor starten, nun muss es aber ins Programm.

Hier gleich die erste Frage:
Code:
Steuerwort: INT;
...
Steuerwort.1 := VISU_BUTTON_1;
Steuerwort.2 := VISU_BUTTON_2;
...
zum Testen sieht es noch so aus.

Wie bildet ihr die einzelnen Bits von Steuer- und Statuswörtern ab, um diese im SPS-Programm nutzen zu können?

Code:
Steuerwort: INT;
ANTRIEB_EIN: BOOL;
ANTRIEB_START: BOOL;
.... für alle Steuerwort-Bits
ANTRIEB_EIN := Steuerwort.1;
ANTRIEB_START := Steuerwort.2;
.... für alle Steuerwort-Bits

Ist diese Lösung sinnvoll, oder geht das auch einfacher/besser?

Wie löst man am besten die Initialisierung? Es gibt sowas wie eine Zustandsmaschine, d.h. die Bits müssen der Reihe nach geschaltet werden, bis der Motor tatsächlich dreht. Erstellt man hierfür üblicherweise feste Inhalte für das Steuerwort, und belegt es dann mit einem vordefinierten Byte, oder steuert ihr bitweise wie oben geschrieben in Ablaufsprache?

Wenn der eigentliche Programmablauf in einem FUP-Programm stattfindet, sollte es sowas wie "Motor start" geben, da wäre es irgendwie nicht so praktisch, wenn ich in der Ablaufsteuerung dann einzelne Bits des Steuerwortes ansprechen muss..... Macht hier dann die Verwendung von Funktionen Sinn??

Ich wäre euch sehr dankbar, wenn ihr mir ein paar Hinweise geben könntet, wie eine Programmierstrategie für die Verwendung solcher Steuer- und Statuswörter aussehen könnte.

Danke und Grüße,
clumsi
 
Ich persönlich verwende meist einen Baustein, der die einzelnen Bits zu einem Steuerwort rangiert, das Statuswort aufschlüsselt und auch gleich die Ist-/Sollwerte in ein weiterverwendbares (REAL) Format konvertiert. Der Baustein bekommt dann nur die Startadresse der IO-Daten des Umrichters mitgeteilt.
 
In TwinCAT 3 nutze ich eine UNION aus einer Struktur von BIT Variablen und dem Status/Control Word. Durch die UNION liegen die BIT Variablen auf den gleichen Speicheradressen wie die Bits der jeweiligen Wörter. Damit spare ich mir das mappen im Code. (Zugriffe auf BIT Variablen haben eine etwas schlechtere Performance, wer darauf achten muss sollte also aufpassen)

Code:
TYPE U_CtrlWord :UNION
    CtrlWord: WORD;
    CtrlBits: ST_ControlWord;
END_UNION
END_TYPE

TYPE ST_ControlWord :
STRUCT
    RdyForOperation:BIT;
    DisableVoltage:BIT;
    EmStop:BIT;
    EnableOperation:BIT;
    EnablePulses:BIT;
    EnableRamp:BIT;
    EnableSetpoint:BIT;
    AckError:BIT;
    StartFunc1:BIT;
    StartFunc2:BIT;
    CtrlDataValid:BIT;
    RotRightSetOn:BIT;
    RotLeftSetOn:BIT;
    Reserved:BIT;
    ParamSetBit0:BIT;
    ParamSetBit1:BIT;
END_STRUCT
END_TYPE
 
Zuletzt bearbeitet:
Zurück
Oben