Aufgabe zur SPS Programmierung - Flanke in FBS

Zuviel Werbung?
-> Hier kostenlos registrieren
Weil ich zu erst mit CODESYS zugange bin
Ich habe Fragen, die ich mir aber erspare. Als kleiner Hinweis für dich: Im Endeffekt gehts nicht darum Codesys/Beckhoff/Phoenix/Siemens/.. gleich gut zu "beherrschen" sondern zu wissen welche Regeln in der Steuerungstechnik gelten und wie du Aufgaben zerlegen und umsetzen kannst. Dann kommst du in verschiendensten Umgebungen zurecht.
 
Der Ansatz ist schon gut, aber die Zuweisungen sind noch falsch.

Überleg am besten mal laut für dich, was gerade in deinem Code steht. Ich hab für solche Zwecke eine kleine Stoffschildkröte an meinem Arbeitsplatz, weil eine Quietsche-Ente nicht so cool aussieht. (Stichwort: Quietscheentchen-Debugging)
mit 2 Netzwerken habe ich verstanden. bei der nächster aufgaben soll man schauen was passiert wen man die taucht.

1 wenn AUS nur dann 1 wen EIN 0 und auf 1 ändert. Eingang 1 =Ausgang 1 wen beide vorher 0 wahren. (richtig ?)
2 EIN mit sich selbst verknüpft. EIN § EIN_ALT (negiert weil EIN zur vor 0 sein soll ) AUS 1 = EIN_ALT 1 das EIN_ALT ist dann meine Verknüpfung zur EIN ( richtig ?)
 

Anhänge

  • Screenshot 2024-07-10 085446.png
    Screenshot 2024-07-10 085446.png
    11,4 KB · Aufrufe: 37
Zuviel Werbung?
-> Hier kostenlos registrieren
Allgemein solltest du vermeiden, Ausgänge mehrfach zu beschreiben. Das kann unter Umständen funktionieren (beispielsweise mit Setzen/Rücksetzen), aber zu Anfang solltest du das lassen.

In deinem letzten Beispiel ist das Netzwerk 1 völlig nutzlos. Du schreibst den Wert von EIN auf die Variable AUS. Im nächsten Netzwerk weist du der Variable AUS aber schon wieder einen anderen Wert zu. Darüber solltest du mal noch genauer nachdenken.

Du hast schonmal den richtigen Ansatz (zumindest soweit ich das verstanden habe). Versuch doch mal zwei Netzwerke zu erstellen, in denen jeweils nur eine Zuweisung erfolgt. Im Netzwerk 1 programmierst du sämtliche Logik, die die Variable AUS betrifft. Und im Netzwerk 2 sollte die Variable AUS nicht nochmal vorkommen. Damit solltest du deine erste Aufgabe gut lösen können.
 
Allgemein solltest du vermeiden, Ausgänge mehrfach zu beschreiben. Das kann unter Umständen funktionieren (beispielsweise mit Setzen/Rücksetzen), aber zu Anfang solltest du das lassen.

In deinem letzten Beispiel ist das Netzwerk 1 völlig nutzlos. Du schreibst den Wert von EIN auf die Variable AUS. Im nächsten Netzwerk weist du der Variable AUS aber schon wieder einen anderen Wert zu. Darüber solltest du mal noch genauer nachdenken.

Du hast schonmal den richtigen Ansatz (zumindest soweit ich das verstanden habe). Versuch doch mal zwei Netzwerke zu erstellen, in denen jeweils nur eine Zuweisung erfolgt. Im Netzwerk 1 programmierst du sämtliche Logik, die die Variable AUS betrifft. Und im Netzwerk 2 sollte die Variable AUS nicht nochmal vorkommen. Damit solltest du deine erste Aufgabe gut lösen können.
Habe ich Sie richtig verstanden?
 

Anhänge

  • Screenshot 2024-07-10 092712.png
    Screenshot 2024-07-10 092712.png
    9,7 KB · Aufrufe: 38
Kurze Antwort: Nein.

Lange Antwort: Es ist ein Schritt in die richtige Richtung. Jetzt sind die Zuweisungen nicht mehr nutzlos, aber richtig sind sie deswegen nicht. In deinem ersten Netzwerk bekommt AUS immer den Wert von EIN. Ist das richtig so? Die Aufgabenstellung war an der Stelle doch ziemlich eindeutig, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Glück gibt es bei nur 3 Variablen und 2 Netzwerken nicht so viele Varianten, aber anscheinend probierst du die alle aus... Es ist aber nur eine richtig - und die war bei dir noch nicht dabei 😢 Lies nochmal deinen Code durch und versuche zu verstehen, was der Code macht. Und vergleiche nochmal deinen Code mit der detaillierten Aufgabenstellung.

Jetzt hast du aber mir geholfen: in deinem Bild in Beitrag #24 hast du das Netzwerk 1: EIN---AUS
Lässt sich der Code so fehlerlos übersetzen? Dann wäre das die Antwort auf meine Frage in Beitrag #12
PS: Frage an die Experten: gibt es in Codesys FBS den Operator AND auch mit nur einem Eingang? Oder wie sieht simples Kopieren eines BOOL aus?
 
Kurze Antwort: Nein.

Lange Antwort: Es ist ein Schritt in die richtige Richtung. Jetzt sind die Zuweisungen nicht mehr nutzlos, aber richtig sind sie deswegen nicht. In deinem ersten Netzwerk bekommt AUS immer den Wert von EIN. Ist das richtig so? Die Aufgabenstellung war an der Stelle doch ziemlich eindeutig, oder?
DANKE. AUS ist erst 1 wen es zur vor 0 war. 0 = EIN_AUS Wie ich es realisieren soll verstehe ich nicht. (wie weise ich zu das das EIN zur vor 0 war?)🤷‍♂️
EIN_ALT 0 ---- EIN 1 ----- erst jetzt AUS 1 (mein Gedanken fahrt )
 
EIN_ALT 0 ---- EIN 1 ----- erst jetzt AUS 1 (mein Gedanken fahrt )
Der Gedanke ist richtig, jetzt fehlt nur die Umsetzung ;)

Edit: Vielleicht hilft es dir, nochmal darüber nachzudenken, welche Aufgaben deine Variablen erfüllen. Du hast die drei Variablen EIN, EIN_ALT und AUS. Eines davon ist eine Eingangsvariable (Info in den Baustein rein), eines davon ist eine Ausgangsvariable (Info aus dem Baustein raus) und das dritte ist nochmal was anderes.
 
Der Gedanke ist richtig, jetzt fehlt nur die Umsetzung ;)

Edit: Vielleicht hilft es dir, nochmal darüber nachzudenken, welche Aufgaben deine Variablen erfüllen. Du hast die drei Variablen EIN, EIN_ALT und AUS. Eines davon ist eine Eingangsvariable (Info in den Baustein rein), eines davon ist eine Ausgangsvariable (Info aus dem Baustein raus) und das dritte ist nochmal was anderes.
:unsure: Ist das Dritte Bustein Funktion / Zustand (Info im Baustein)
Wie kann man das da stehlen ?
Deklaration: EIN_ALT: BOOL;
Rumpf: ???
🤯
 
Der Gedanke ist richtig, jetzt fehlt nur die Umsetzung ;)

Edit: Vielleicht hilft es dir, nochmal darüber nachzudenken, welche Aufgaben deine Variablen erfüllen. Du hast die drei Variablen EIN, EIN_ALT und AUS. Eines davon ist eine Eingangsvariable (Info in den Baustein rein), eines davon ist eine Ausgangsvariable (Info aus dem Baustein raus) und das dritte ist nochmal was anderes.
"" Zunächst wird der Ausgang „AUS“ dann gleich 1, wenn der Eingang „EIN = 1“ ist und im Rechenzyklus zuvor 0 war („EIN_ALT = 0“).
 

Anhänge

  • Screenshot 2024-07-10 112107.png
    Screenshot 2024-07-10 112107.png
    12,6 KB · Aufrufe: 31
Jetzt hast du aber mir geholfen: in deinem Bild in Beitrag #24 hast du das Netzwerk 1: EIN---AUS
Lässt sich der Code so fehlerlos übersetzen? Dann wäre das die Antwort auf meine Frage in Beitrag #12
Egal ob man ein And oder Or setzt, sobald man den 2. Eingang löscht wird der Baustein entfernt und der Code auf E ---- A geändert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Überleg am besten mal laut für dich, was gerade in deinem Code steht. Ich hab für solche Zwecke eine kleine Stoffschildkröte an meinem Arbeitsplatz, weil eine Quietsche-Ente nicht so cool aussieht. (Stichwort: Quietscheentchen-Debugging)
Beruflich hatte ich nie ein Büro für mich allein. Also kann ich nur bestätigen, dass ...
"Während des Erklärungsprozesses fällt dem Programmierer der Fehler auf."
... nicht jedoch, dass ...
"Der Vorteil des Quietscheentchens gegenüber einer anderen Person ist, dass niemand gestört werden muss."
Ein QuietscheEntchen hat zumindest ein grösseres Potenzial als eine stumme SchildKröte, die lieben Kollegen zu stören.
Ich hatte weder ein QuietscheEntchen noch eine SchildKröte, ABER immerhin einen Würfel als EntscheidungsHilfe in der SchreibTischSchublade. ;)

.... ich hab sie nicht mal gelesen...
Woher erfährt man, ob etwas lesenswert gewesen wäre, wenn man es denn gelesen hätte, es aber nicht gelesen hat???

Ich wollte jetzt die Stelle zitieren, wo geschrieben wurde, dass AUS auf TRUE bleibt, bis EIN wieder zu FALSE wird. Ich finde nichts entsprechendes mehr.
Aber heftig dagegen protestieren möchte ich trotzdem noch. AUS soll nur 1 einzigen Zyklus lang auf TRUE bleiben, wenn eine Flanke detektiert wurde. Andernfalls wäre doch AUS := EIN ... also ziemlich "overfluid"!?!
 
Zuletzt bearbeitet:
@Scat1980 Denkst du, dass du mit Netzwerk 1 in deinem Beispiel die Teilaufgabe für das AUS-Signal gelöst hast?
Und schau dir nochmal den Teil in der Aufgabenstellung an, wo beschrieben wird, wie das Signal EIN_ALT gebildet wird.

Ich hatte weder ein QuietscheEntchen noch eine SchildKröte, ABER immerhin einen Würfel als EntscheidungsHilfe in der SchreibTischSchublade. ;)
Der Geek in mir möchte wissen, wie viele Seiten dein Würfel hatte :p
 
"" Zunächst wird der Ausgang „AUS“ dann gleich 1, wenn der Eingang „EIN = 1“ ist und im Rechenzyklus zuvor 0 war („EIN_ALT = 0“).
71531-bfa4d50d022f5596dd2df2689b72fca0.png
Der zweite Eingang in Netzwerk 2 muss weg. Hier wird lediglich der aktuelle Zustand von EIN in die Variable EIN_ALT kopiert.
Damit wird in Netzwerk 1 der aktuelle Zustand von EIN mit dem im vorherigen Zyklus aktuellen Zustand von EIN per AND verknüpft.

AND- und OR-Verknüpfungen sollte es theoretisch mit nur 1 Eingang geben, da A AND A = A bzw. A OR A = A ist.
Aber Vorsicht, das gilt nicht für XOR, da A XOR A = FALSE ist und XOR nur für 2 Eingänge definiert ist.

Dass es nicht egal ist, in welcher Reihenfolge die Anweisungen
AUS := EIN AND NOT EIN_ALT ;
und
EIN_ALT := EIN ;
ausgeführt werden, sollte eigentlich klar sein, denn
EIN_ALT := EIN ;
AUS := EIN AND NOT EIN_ALT ;
ist nchts anderes als
A AND NOT A
und das ist immer FALSE.
 
Anhang anzeigen 79653
Der zweite Eingang in Netzwerk 2 muss weg.
Die Aufgabenstellung verlangt aber ausdrücklich:
Es geht in dieser Aufgabe darum, einen vorgegebenen Text so genau wie möglich in Funktionsbausteinsprache (FBS) zu übersetzen.
(...)
Danach bestimmt man für den nächsten Rechenzyklus den aktuellen Wert des Eingangs, indem man den Eingang „EIN“ mit der Funktion „AND“ mit sich selbst verknüpft und dann dem internen Signal „EIN_ALT“ zuweist.

Wie das Netzwerk demnach aussehen müsste, hatte ich ihm schon in Beitrag #2 gezeigt, da hat der Fragesteller leider nichts weiter draus gelernt, als sich beleidigt zu fühlen... 🤷‍♂️
 
Zurück
Oben