Wahlschalter über Analogeingang.

Zuviel Werbung?
-> Hier kostenlos registrieren
D.h. Du hast 1 Schalter mit 2 Kontakten (Schliessern), von denen der eine in Stellung 1 geschlossen ist und der andere in Stellung 2 (und keiner von beiden in Stellung 0).
Dafür benötigst Du 2 DigitalEingänge und nix AnalogEingang - das sind doch schon 2 BOOLesche Eingänge!.
In der Steuerung kann man (z.B. in Hinblick darauf, dass eines Tages noch weitere BetriebsArten hinzukommen könnten) die drei Informationen (Auto, Man bzw. "weder noch") in einer Variablen zusammenfassen.
Hiermit kommt erst das Thema Integer auf den Plan. Du könntest z.B. in Anlehnung an die Beschriftung des Schalters die Zustände folgendermassen codieren:
0 bedeutet keine BetriebsArt angewählt,
1 bedeutet MAN angewählt,
2 bedeutet AUTO angewählt.
Dass Du es nicht schaffst, diese Umkodierung von 1-aus-n in Form von einzelnen Bits bzw. BOOLschen Variablen in die ZahlenDarstellung (INT) und aus der Zahl zurück in 2 oder mehrere BOOLsche Variablen mit CASE oder IF THEN ELSE hinzubekommen, mag ich kaum glauben. Überleg noch ein Bisschen und frag ggfs noch mal nach. ;)
Den Begriff "IF-Schleife" solltest Du bitte ganz schnell wieder aus Deinem Wortschatz streichen. Mit IF kann man sich zwar Schleifen basteln, aber dafür gibt es bessere "HilfsMittel".
 
Hey. :]

Nochmals vielen Dank für die rege Beteiligung. Und bitte habt etwas Nachsicht mit mir als Amateur. Ich tue mich tatsächlich sehr schwer mit Programmierung jeglicher Art. :[

Um mein Hauptproblem nochmal zusammenzufassen:
Ich habe als Eingang zum einen den vermeintlichen Integer durch die Schalterstellungen 1-0-2. Zum anderen sind die Stellungen 1 und 2 ja mittels der Boolescher Eingänge S_WBA und S_WBM belegt. Diese sollen wiederum die Ausgänge (welche Später zur Ansteuerung der Aktorik verwendet werden) "Auto" und "Man" erzeugen. Laut meinem Verständnis würde ich also schlichtweg die globalen Variablen neu zuweisen: S_WBA := Auto und S_WBM := Man. Laut Dozent ist dies aber nicht der richtige Weg.

Ich danke euch auch für die Codebeispiele. Erscheint mir soweit verständlich. Nur leider fehlt ja die gewünschte Entkopplung bzw. die laut Aufgabenstellung zu erzeugenden Ausgänge " Auto " und "Man". Dies ist quasi der Kern der Teilaufgabe.

lG und schonmal ein schönes Wochenende

Mathias
 
Ok super!

Ich Schielauge habe den Code nicht gründlich genug gelesen. Mir dreht sich sowieso schon alles ob der ganzen SPS-Materie :D

Danke euch allen!!!

Abschließende Frage:
Sollte ich noch weitere Fragen zu meiner Arbeit haben, die sich nicht mehr um den Wahlschalter (Achtung starkes Wortspiel) drehen, kann ich diese auch in diesen Beitrag posten oder jeweils ein neues Thema erstellen?

Grüüüüße.
 
Nur leider fehlt ja die gewünschte Entkopplung bzw. die laut Aufgabenstellung zu erzeugenden Ausgänge " Auto " und "Man".
a) im einfachsten Fall (ohne INT):
Code:
MAN := S_WBM ;
AUTO := S_WBA ;

b) die vorsichtigere Variante (auch noch ohne INT), um sicherzustellen, dass nicht MAN und AUTO gleichzeitig TRUE sein können:
Code:
MAN := S_WBM AND NOT S_WBA ;
AUTO := S_WBA AND NOT S_WBM ;

c) die Variante mit BOOL ==> INT und dem umgekehrten Weg INT ==> BOOL:
Code:
// BOOL ==> INT :
If  S_WBM AND NOT S_WBA Then
    iBTA := 1 ;
ElsIf S_WBA AND NOT S_WBM Then
    iBTA := 2 ;
Else
    iBTA := 0 ;
End_If ;

// INT ==> BOOL :
MAN := iBTA = 1 ;
AUTO := iBTA = 2 ;
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei ich nach Deiner obigen Beschreibung immer noch S_WBM/S_WBA für die Symbole Deiner beiden zu erzeugenden Ausgangssignale Man/Auto und nicht für die digitalen Eingänge des Wahlschalters halte.
Aber egal.

Und mach' dann lieber einen seperaten Post.
 
Um Missverständnissen vorzubeugen, hier nochmal die Screens der Aufgabenstellung. Für mich sind S_WBA/S_WBM die Eingänge des Schalters und Auto/Man die Ausgänge bzw. neuen Eingänge fürs Hauptprogramm.

Eingänge:
eingänge.png

zu erzeugenden Ausgänge:

Ausgänge.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei ich nach Deiner obigen Beschreibung immer noch S_WBM/S_WBA für die Symbole Deiner beiden zu erzeugenden Ausgangssignale Man/Auto und nicht für die digitalen Eingänge des Wahlschalters halte.
Dann habe ich mich mit dieser Aussage geirrt.


Und der Rat zu Haralds Code ist nach wie vor korrekt:
Für den Betriebsmodus ein Byte/Word/Int nutzen - da kann immer nur ein Wert drinstehen :cool:
Kann man auch hinterher wieder auf BOOL aufdrösen, z.B.
Code:
IF xS_Hand AND NOT xS_Auto THEN     //BA-Schalter Stellung Hand
  iMode := 1;
ELSIF xS_Auto AND NOT xS_Hand THEN  //BA-Schalter Stellung Auto
  iMode := 2;
ELSE
  iMode := 0;
END_IF;

xBA_Hand := iMode = 1;
xBA_Auto := iMode = 2;
xBA_Aus  := iMode = 0;

Harald
 
Statt beidem sollten die Vergleiche verwendet werden:
;)
Ihr beiden Haralds habt ja sooo Recht! Warum nicht einfach, obwohl's auch umständlich geht?
Bin ja selbst ein If-Konstrukte-vermeiden-wo-es-nicht-unumgänglich-ist-Verfechter, wie ich hier im Forum schon mehrfach bewiesen habe und jetzt habt ihr mich voll erwischt! :oops:
Das kann ich nicht auf mir sitzen lassen und ändere meinen obigen CODE gleich noch. ;)
 
c) die Variante mit BOOL ==> INT und dem umgekehrten Weg INT ==> BOOL:
Code:
// BOOL ==> INT :
If  S_WBM AND NOT S_WBA Then
    iBTA := 1 ;
ElsIf S_WBA AND NOT S_WBM Then
    iBTA := 2 ;
Else
    iBTA := 0 ;
End_If ;

// INT ==> BOOL :
MAN := iBTA = 1 ;
AUTO := iBTA = 2 ;
Und wenn man auch dem StyleGuide gerecht werden möchte (k.A. inwieweit sich da Siemens und der Rest der Welt unterscheiden), legt man für die Wahlschalter-Zustände 0, 1 und 2 noch Konstanten an:
Code:
VAR CONSTANT
    MODE_OFF  : Int := 0;
    MODE_MAN  : Int := 1;
    MODE_AUTO : Int := 2;
END_VAR



// BOOL ==> INT :
If  S_WBM AND NOT S_WBA Then
    iBTA := MODE_MAN ;
ElsIf S_WBA AND NOT S_WBM Then
    iBTA := MODE_AUTO ;
Else
    iBTA := MODE_OFF ;
End_If ;

// INT ==> BOOL :
MAN  := iBTA = MODE_MAN ;
AUTO := iBTA = MODE_AUTO ;
 
@Heinrich,
weil ich gerade wieder über das schöne Bildchen (und die zugehörigen schönen Erinnerungen) gestolpert bin, für Dich zur Auffrischung:

Ihr beiden Haralds ...
attachment.php


Wer von euch beiden ist jetzt hucki
Der, der nicht Harald ist ...
:ROFLMAO:
:D :D :D
 
Zurück
Oben