CPU (4xx) geht in "Stop", nachdem ich 2 DI + 1 DO hinzugefügt habe...

eigentlich meinte ich nicht das setzen eines "irgendwas", sondern
das Rangieren von einen Eingang auf einen Anderen. Das finde ich
mehr als Unglücklich. Eingänge als Variabel zu mißbrauchen ist unüblich,
Da stimme ich Dir zu 100% zu.
Ich hatte schonmal einen Kommentar verfaßt... " Wer macht denn sowas"
Meine Lösung sieht übrigens nicht so aus
Code:
U E0.0
= E108.2
(siehe meinen Kommentar #16 )
Das ging nämlich grundlegend schief !
Ein Fan dieser Lösung bin ich sowieso nicht.
Es ist unübersichtlich und störanfällig, sobald mal wer auf die Idee kommt, die Peripherie zu lesen.
dafür gibt es andere Variabeln, wie Merker, Temponäre Variabeln oder
Variabeln in Datenbausteine. Das es funktioniert ist schön macht aber
in diesen Fall überhaubt keinen Sinn, nur um bei einer so Leistungsfähigen
Steuerung eine AWL Zeile zu spraren. Das hört sich an wie, ich nehme
jetzt mein Feuerzeug aus den Handschuhfach, bei einen Auto mit 350PS,
damit es schneller fährt.
Zitat aus #18 : (Kurzfassung )
Code:
Ich habe mir tatsächlich die Mühe gemacht, 1 freien - nicht über WORD oder DWORD- Zugriff im Progi abgearbeiteten Merker zu finden.
 
Für meinen "Stopp"- Taster habe ich die Verknüpfung über den DB1 beibehalten.
Also doch keine "Wild-West"- Programmierung, wie man sie vielleicht in einer Simu machen könnte. ( das unterlasse ich aber auch, weil daraus schlechte "Angewohnheiten" entstehen könnten )

Ich stimme Dir zu, daß man bei einer SPS niemals den bequemsten, einfachsten Weg nur auf Grund von Faulheit suchen sollte.
Diese Lösung rächt sich irgendwann durch Instabilität oder vollkommen unnachvollziehbares Verhalten.
Eine Fehlersuche kann dann sehr schnell mal ein paar Stunden dauern...
Die Stillstand-Kosten muß ich den Profis nicht erklären.

Ich habe mir alle Tipps angenommen. Jetzt funktioniert es so, als hätte es fast ein Profi programmiert. ( und sieht auch im Programm fast so aus, auch dank der Hilfe dieses Forums )

Die Signatur von IBFS
"Die Bitterkeit schlechter Qualität hält noch lange an, wenn die Süße des Preises längst verflogen ist... "
entspricht meiner Meinung. Viel treffender kann man "Rum-Gemurkse" nicht beschreiben << und ich will nicht murksen.
Deshalb frage ich lieber einmal mehr, bevor Mist in eine SPS hinein produziert wird.

Mfg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist das dein Ernst :confused: alles immer nur mit "=".

Ich stelle mir gerade vor es gäbe kein S und kein R.
Meine Programme hätten viel mehr Zwischenmerker
und wären viel länger und unübersichlicher.

Nimm es mir nicht übel, aber ich bin über diese Zeile
mehr als verwundert.

Frank
Ich mache nicht alles grundsätzlich mit "="

Wenn man aber ein "Set" verwendet, muß man sich auch um das "Reset" kümmern.
Für das Beispiel in #17 (!!!) hatte ich da Bedenken.
_____________________________________________________

Übrigens mußte ich mich manchmal auch um das Rücksetzen eines "=" kümmern.
z.B.: wenn in AWL ein SPB / SPNB erfolgt

Dieser Code ist Off Topic !!
Er hat mit dem eigentlichen Thema nichts zu tun, erläutert nur meine Aussage !
Code:
U M0.0
U M0.1
SPB M001
= M0.2
M001: NOP 0
Wenn die Bedingung für = M0.2 erfüllt wurde, ist der M0.2 = high. ( und bleibt es auch )
Entspricht einem S M0.2

Mfg
 
Übrigens mußte ich mich manchmal auch um das Rücksetzen eines "=" kümmern.
z.B.: wenn in AWL ein SPB / SPNB erfolgt

Dieser Code ist Off Topic !!
Er hat mit dem eigentlichen Thema nichts zu tun, erläutert nur meine Aussage !
Code:
U M0.0
U M0.1
SPB M001
= M0.2
M001: NOP 0
Wenn die Bedingung für = M0.2 erfüllt wurde, ist der M0.2 = high. ( und bleibt es auch )
Entspricht einem S M0.2

Mfg

niemals nicht, wird der merker M0.2 high sein!

Code:
*
 M0.0 | M0.1 | VKE | SPB | M0.2
------+------+-----+-----+------
   0  |   0  |  0  |  0  |  0
   1  |   0  |  0  |  0  |  0
   0  |   1  |  0  |  0  |  0
   1  |   1  |  1  |  1  |  0
 
Ich mache nicht alles grundsätzlich mit "="

Wenn man aber ein "Set" verwendet, muß man sich auch um das "Reset" kümmern.
Für das Beispiel in #17 (!!!) hatte ich da Bedenken.

häh, wie Bitte was gibt es den hier auszusetzen, das funktioniert wenigstens
Code:
O  E 0.0
O  E 108.2
S  #irgendwas

Setzen und Rücksetzen ist eine der Elemtarsten Anweisungen bei der Programmierung
von Speicherprogrammierbaren Steuerungen. Ersteinmal war das nur ein Beispiel,
ich hätte auch für dich folgendes schreiben können.

Code:
O  E 0.0
O  E 108.2
O  #irgendwas
=  #irgendwas

Diese Anweisungen führen zu den selben Ergebnis wie deine in Beitrag #17 angezweifelten Code.


Ob eine Speicherung mit "=" oder mit "SR" gemacht wird, ich muss immer wissen was
ich da tue und natürlich muss sich der Programmierer um das Rücksetzen kümmern wenn
er es den will. Es kann ja sein das "#irgendwas" einmal im Maschinenzyklus während einer
Initalisierungsroutine gesetzt werden soll und nie..nie wieder zurückgesetzt werden darf.
Wo ist jetzt das Problemm.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
U M0.0
U M0.1
SPB M001
= M0.2
M001: NOP 0
Wenn die Bedingung für = M0.2 erfüllt wurde, ist der M0.2 = high. ( und bleibt es auch )
Entspricht einem S M0.2

Dann fehlt ein SET ansonsten ist die Bedingung ohne Sprung für die Zuweisung ja immer 0.

Aber wozu sollte man sowas tun? Wer macht Sprünge und führt innerhalb einer Sprunganweisung VKE abhängige Zuweisungen aus?

Gäbe es Bedingte Lade und Transferbefehle ich hätte glaub ich 90% weniger Sprünge. Da binde ich mir doch keinen Sprung ans Bein der nur VKE abhängige Anweisungen überspringt.

Kann so etwas Sinn Machen?
 
Dann fehlt ein SET ansonsten ist die Bedingung ohne Sprung für die Zuweisung ja immer 0.

Aber wozu sollte man sowas tun? Wer macht Sprünge und führt innerhalb einer Sprunganweisung VKE abhängige Zuweisungen aus?

Gäbe es Bedingte Lade und Transferbefehle ich hätte glaub ich 90% weniger Sprünge. Da binde ich mir doch keinen Sprung ans Bein der nur VKE abhängige Anweisungen überspringt.

Kann so etwas Sinn Machen?

Wieso ist die Bedingung "immer 0" ??

:ROFLMAO: Ein Bild sagt mehr als 1000 Worte...
 

Anhänge

  • Demo.JPG
    Demo.JPG
    52,7 KB · Aufrufe: 22
Wieso ist die Bedingung "immer 0" ??

:ROFLMAO: Ein Bild sagt mehr als 1000 Worte...

Bei seinem Aufruf ist die Bedinung immer Null. Da ja das VKE für den Sprung verantwortlich ist. Und wenn der Sprung nicht ausgeführt wird weil das VKE 0 ist ist, bleibt es das auch solange kein neues Ergebnis den Wert ändert. Ein nicht ausgeführter Sprung verändert das VKE nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nana

Hallo,

vollmi schrieb:
Ein nicht ausgeführter Sprung verändert das VKE nicht.

vl schrieb:
niemals nicht, wird der merker M0.2 high sein!

Der nicht ausgeführte Sprung bei "SPB M001" setzt das VKE auf "1", und jetzt ratet mal, was der M 0.2 dann für einen Status hat ?

Gruß

Question_mark
 
Diese Art etwas Speichern zu machen ist mehr als ungünstig, also
um das zu erkennen muß mann ja schon wirklich eine Wahrheitstabelle
erstellen, trotzdem nützt die in diesen fall auch nichts.
Gerade weil einer der Besten Step 7 Programmier, den ich kenne (4L) dieses
auch nicht erkannt hat kann mann, nur davor abraten so einfache Sachen
so Kompliziert zu lösen


Ich habe das jetzt noch mal durch PLCSIM laufen lassen und nur den OB1
mit folgenden Inhalt eingefügt und bin zur folgender Wahrheitstabelle
gekommen.

Code:
      U M0.0
      U M0.1
      SPB M001
      = M0.2
M001: NOP 0
 
 
 M0.0 | M0.1 | VKE | SPB | M0.2
------+------+-----+-----+------
   0  |   0  |  1  |  0  |  1
   1  |   0  |  1  |  0  |  1
   0  |   1  |  1  |  0  |  1
   1  |   1  |  1  |  1  |  0   *
 
* dieser Fall tritt nur ein wenn M0.0 & M0.1 beim OB1
  anlauf auf "1" war oder nach diesen Anweisungen
  der M0.2 zurück gesetzt wurde.

Warum jetzt das VKE "1" wird, liegt daran das bei VKE abhängingen
Sprungfunktionen das Statusbit und VKE auf "1" und OR und /ER auf "0"
gesetzt werden, auch bei nicht erfüllter Sprungfunktion.


schön wäre ja zu erfahren unter welchen bedingungen der M0.2 gesetzt
werden soll und vor allen dingen wann er wieder zurück gesetzt werden
soll und welcher tiefere sinn dahinter steckt?
 
Zuletzt bearbeitet:
Auszug aus der STEP7 Hilfe:

Code:
Format 
SPB <Sprungmarke>
 
Operand             Beschreibung
<Sprungmarke>   Symbolischer Name des Sprungziels. 

Beschreibung 
Wenn VKE = 1, unterbricht SPB <Sprungmarke> den linearen Programmablauf und springt an das Sprungziel. Der lineare Programmablauf wird am Sprungziel fortgesetzt. Das Sprungziel wird durch eine Sprungmarke angegeben. Es kann sowohl vorwärts als auch rückwärts gesprungen werden. Sprünge können nur innerhalb eines Bausteins ausgeführt werden, d. h. die Sprunganweisung und das Sprungziel müssen innerhalb desselben Bausteins liegen. Das Sprungziel darf innerhalb dieses Bausteins nur einmal vorhanden sein. Die maximale Sprungweite liegt bei -32768 bzw. +32767 Wörtern des Programmcodes. Die tatsächliche maximale Anzahl der Anweisungen, die übersprungen werden können, hängt von der Kombination der Anweisungen innerhalb des Programms ab (Ein-, Zwei- oder Dreiwortanweisungen).
 
[COLOR=royalblue][B]Wenn VKE = 0, wird der Sprung nicht ausgeführt. Das VKE wird auf "1" gesetzt, und der Programmablauf wird mit der folgenden Anweisung fortgesetzt.[/B][/COLOR]
 
  
Statuswort
             BIE A1 A0 OV OS OR STA VKE /ER
schreibt:  -    -   -   -   -    0    1    1    0

 
Beispiel
AWL               Erläuterung
U E 1.0 
U E 1.2 
SPB JOVR        //Springe, wenn VKE = 1, zur Sprungmarke JOVR.
L EW8            //Der Programmablauf wird hier fortgesetzt, wenn der Sprung nicht ausgeführt wird.
T MW22 
JOVR: U E 2.1 //Der Programmablauf wird nach dem Sprung zur Sprungmarke JOVR hier fortgesetzt.


Gruß
190B
 
Zuviel Werbung?
-> Hier kostenlos registrieren
noch mal das Statuswort, damit mann es richtig lesen kann

Code:
Statuswort
 BIE ! A1 ! A0 ! OV ! OS ! OR ! STA ! VKE ! /ER
-----+----+----+----+----+----+-----+-----+----- 
  -  ! -  ! -  ! -  ! -  ! 0  !  1  !  1  !  0
 
Hallo Helmut von der Reparatur,

Danke für das "Nachbessern". Im Editor sieht es doch anders aus wie das tatsächliche Ergebnis. :ROFLMAO:

Gruß
190B
 
Warum jetzt das VKE "1" wird, liegt daran das bei VKE abhängingen
Sprungfunktionen das Statusbit und VKE auf "1" und OR und /ER auf "0"
gesetzt werden, auch bei nicht erfüllter Sprungfunktion.

Uff das wusste ich garnicht. Da wär ich sicher igendwann man drauf reingefallen. Da denkt man man hätte mittlerweile die Kniffe in der S7 Programmierung raus und dann kommt wieder sowas daher :sm19:
 
Diese Art etwas Speichern zu machen ist mehr als ungünstig, also...
Es war ein Beispiel, KEIN Lösungsvorschlag für irgendwelche Sachen.
( und ich habe mit der Grafik gezeigt, das dieses Beispiel schief geht ! )
... schön wäre ja zu erfahren unter welchen bedingungen der M0.2 gesetzt
werden soll und vor allen dingen wann er wieder zurück gesetzt werden
soll und welcher tiefere sinn dahinter steckt?
Es steckt kein "tieferer Sinn" dahinter ! <= für dieses Beispiel ist es leider so, daß eigentlich gar kein Sinn dahinter steht.
#23 => Dieser Code ist Off Topic !!


Dieses Beispiel habe ich auf Grund des Kommentars #17 ...

Zitat von "Helmut_von_der_Reparatur"
Code:
O E 0.0O E 108.2S #irgendwas
Warum muss mann es bei einfachsten Bitverknüpfungen schon so
kompleziert machen?

Zitatende von "Helmut_von_der_Reparatur"
nur mal erwähnen wollen. ( siehe auch #18 )
_______________________________________________________________

Sehr geehrter "Helmut_von_der_Reparatur":
Ich wollte Dir nicht die Zeit oder Nerven stehlen...
Irgendwas ist da irgendwo "untergegangen".

Ich bedanke mich ganz herzlich für Deine sehr hilfreichen Kommentare und die Mühe...

Mfg
 
Diese Art etwas Speichern zu machen ist mehr als ungünstig, also...
Es war ein Beispiel, KEIN Lösungsvorschlag für irgendwelche Sachen.
( und ich habe mit der Grafik gezeigt, das dieses Beispiel schief geht ! )

Es steckt kein "tieferer Sinn" dahinter ! <= für dieses Beispiel ist es leider so, daß eigentlich gar kein Sinn dahinter steht.
#23 => Dieser Code ist Off Topic !!


Dieses Beispiel habe ich auf Grund des Kommentars #17 ...


nur mal erwähnen wollen. ( siehe auch #18 )
_______________________________________________________________

Sehr geehrter "Helmut_von_der_Reparatur":
Ich wollte Dir nicht die Zeit oder Nerven stehlen...
Irgendwas ist da irgendwo "untergegangen".

Ich bedanke mich ganz herzlich für Deine sehr hilfreichen Kommentare und die Mühe...

Mfg


Das mit den zitieren hat in den Beitrag #36 nicht geklappt, ich versteh
den ganzen Beitrag nicht.

PS. meine Zeit kannst du nicht stehlen, die teile ich mir selber ein :rolleyes:
 
Zuletzt bearbeitet:
Zurück
Oben