25. Mai 2019, 03:30:34
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[gelöst] Programmierung in SPS.SUB


normal_post Autor Thema: [gelöst] Programmierung in SPS.SUB  (Gelesen 1800 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

07. April 2019, 18:10:40
Gelesen 1800 mal
Offline

EddiFox


Hi Leute,

ich hätte da mal ne Frage bezüglich das setzten von Variablen/Ausgänge in der SPS.SUB

IF (EINGANG==TRUE) THEN
  AUSGANG=TRUE
ENDIF

oder sollte man lieber schreiben...

IF (EINGANG==TRUE)  AND (AUSGANG==FALSE) THEN
  AUSGANG=TRUE
ENDIF


Im zweiten Beispiel wird der Ausgang nur gesetzt wenn er (nicht) gesetzt ist,
also wird er nicht ständig überschrieben.

Oder spielt das keine Rolle?
« Letzte Änderung: 29. April 2019, 09:01:56 von EddiFox »
  • gefällt mir    Danke
Bis denne
Oliver
KUKA - 3 Jahre dabei und immer noch am grübeln... :)

Heute um 03:30:34
Antwort #1

Werbung

Gast

07. April 2019, 19:50:10
Antwort #1
Offline

panic mode


Die Sache ist, je länger das Programm ist, desto länger ist die Verarbeitungszeit, während die Lesbarkeit geringer ist. Jeder Vergleich ist eine andere Anweisung und unnötige Vergleiche sind verschwenderisch.

Wenn man wirklich jeden Tick (aus Sicht der CPU-Ressourcen) genau betrachtet, gibt es auch Gründe, Vergleiche zu minimieren, da sie ineffizient sind (Auswirkungen auf die Verzweigungsvorhersage), obwohl der Compiler die Unterschiede ausgleichen kann.

so... warum nicht

IF EINGANG THEN
  AUSGANG=TRUE
ENDIF
  • gefällt mir    Danke

07. April 2019, 20:01:59
Antwort #2
Offline

EddiFox


Ok,

also verstehe ich das richtig, das es egal ist das ein Ausgang/Variable immer wieder neu auf TRUE
gesetzt wird obwohl schon TRUE ist?

Mir ist die erste Variante sowieso lieber, schon wegen der Lesbarkeit, wie du schon sagtest.
  • gefällt mir    Danke
Bis denne
Oliver
KUKA - 3 Jahre dabei und immer noch am grübeln... :)

07. April 2019, 20:19:52
Antwort #3
Offline

Spiral


Warum nicht einfacher:

$AUSGANG=$EINGANG
  • gefällt mir    Danke

07. April 2019, 20:58:28
Antwort #4
Offline

EddiFox


Hallo Spiral,

ja hast Recht, das ist der einfachste weg.

Mal nen typisches Beispiel...
;ANTRIEBE EINSCHALTEN
IF ($EXT) AND (DI21BT_ANTRIEBE_AUS) AND (DI22BT_ANTRIEBE_EIN) AND (NOT $PERI_RDY) AND ($USER_SAF) THEN
  DO42AUTOEXT_DRIVES_ON=TRUE
  DO43AUTOEXT_DRIVES_OFF=TRUE
  $TIMER[8]=0
  $TIMER_STOP[8]=FALSE 
ENDIF

Also könnte ich ($EXT) rausnehmen da sich die Antriebe ohne ($EXT) eh nicht einschalten lassen oder?
Und zu (NOT $PERI_RDY), könnte ich auch rausnehmen. Dem Antrieb ist es doch Egal ob das Signal nochmal
kommt, auch wenn er schon An?
Und mit  ($USER_SAF) ist es wie mit ($EXT), ohne Sicherheit lässt sich der Antrieb nicht einschalten oder?

Das wären dann 3 Abfragen weniger die verarbeitet werden müssten.
  • gefällt mir    Danke
Bis denne
Oliver
KUKA - 3 Jahre dabei und immer noch am grübeln... :)

Heute um 03:30:34
Antwort #5

Werbung

Gast

08. April 2019, 00:37:44
Antwort #5
Offline

panic mode



nicht dasselbe... das aendert Ausgang auch wehn Eingang ist FALSE. original laest Ausgang unvreraendert (egal ob TRUE oder FALSE) wehn Eingang ist FALSE
« Letzte Änderung: 08. April 2019, 00:40:06 von panic mode »
  • gefällt mir    Danke

09. April 2019, 18:25:28
Antwort #6
Offline

Spiral


@panic mode

je nach dem was man erreichen will.
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH