# Warum Ausgänge nicht als Eingänge verwenden



## Valentin96317 (9 Oktober 2020)

Hallo Zusammen,

Ich mache gerade Probeprüfungen für die Weiterbildung zum staatlich geprüften Mechatroniktechniker. Dabei bin ich über eine Frage gestolpert.
"Darf man Ausgänge in der Programmierung auch als Eingänge verwenden? Bitte begründen Sie ihre Entscheidung."
Ich kann mich noch dran erinnern, dass uns der Lehrer das mal erklärt hat. Leider weiß ich die Begründung nicht mehr. Kann mir jemand bitte weiterhelfen.

Gruß

Valentin


----------



## PN/DP (9 Oktober 2020)

Du meinst vermutlich Übergabeparameter von Bausteinen? Und daß man Ausgangsparameter nicht lesen soll?

Falls Ausgangsparameter als Referenz übergeben werden, dann führt ein Schreiben in den Ausgangsparameter dazu, das sofort die beim Bausteinaufruf "außen" angeschlossene Variable geändert wird. Bei einem (späteren Zurück-)Lesen wird aus der angeschlossenen Variable gelesen - deren Wert kann sich aber zwischenzeitlich geändert haben
- durch Multitasking oder Alarmverarbeitung
- oder weil an mehreren Ausgängen die selbe Variable angeschlossen ist
- oder weil eine Variable angeschlossen ist die man nicht lesen kann (Peripherieausgang)
Daher soll/darf man das besser nie nicht machen.

Harald


----------



## Heinileini (9 Oktober 2020)

Und wenn nun doch Eingänge und Ausgänge gemeint sind, die die SPS über Eingangs- oder Ausgangs-Karten/-Module mit der AussenWelt (Sensoren und Aktoren) verbinden?
Man kann nicht Ausgänge als Eingänge verwenden! Das sind gaaanz unterschiedliche Dinge! EinbahnStrassen, die aber in entgegengesetzten Richtungen verlaufen, sozusagen. 

Wahrscheinlich wird hier danach gefragt, ob man im Programm Ausgänge abfragen kann/soll/darf.
Grundsätzlich kann man und genauso grundsätzlich sollte man es sich gar nicht erst angewöhnen.
Einem Ausgang sollte man an nur 1 Stelle im Programm einen Wert zuweisen, damit das Programm lesbar und seine Auswirkungen nachvollziehbar und vorhersehbar bleiben.
Ohne dass man an zig Stellen im Programm kontrollieren und ausserdem im Auge behalten muss, in welcher Reihenfolge diese Stellen im Programm durchlaufen werden.
Die 1 Stelle ist bei einer Fehlersuche klar über die Querverweise zu finden.
Hält man sich daran, so wäre eine Abfrage des Ausgangs eigentlich harmlos, ABER sie wäre auch witzlos, denn man kennt ja eindeutig die Stelle, wo der Ausgang "gemacht" wird und man hat genau da die Information, die man auswerten möchte und man kann sie genau da auch direkt in eine Variable speichern, statt den Ausgang hierfür zu missbrauchen.


----------



## sazegoo (12 Oktober 2020)

(Ich gehe mal von SPS-Ausgängen aus):
Technisch gesehen ja, im Prinzip ist der Ausgang nur ein Merker der am Ende des Zyklus noch auf einem Ausgang ausgegeben wird.
Ob das zum Programmierstil passt da scheiden sich die Geister. Ich finde es übersichtlicher nicht über zusätzliche Merker zu gehen.

Offtopic:


Heinileini schrieb:


> Einem Ausgang sollte man an nur 1 Stelle im Programm einen Wert zuweisen, damit das Programm lesbar und seine Auswirkungen nachvollziehbar und vorhersehbar bleiben.
> Ohne dass man an zig Stellen im Programm kontrollieren und ausserdem im Auge behalten muss, in welcher Reihenfolge diese Stellen im Programm durchlaufen werden.



Wie machst du das dann in Schrittketten in denen Beispielsweise ein Zylinder mehrmals ausfahren muss?
Meiner Meinung nach macht einen Ausgang bedingt (durch if/case etc. SCL oder S KOP/FUP) zu setzen durchaus Sinn und ist der Leserlichkeit nicht hinderlich.


----------



## Heinileini (12 Oktober 2020)

sazegoo schrieb:


> Wie machst du das dann in Schrittketten in denen Beispielsweise ein Zylinder mehrmals ausfahren muss?


Ich gestehe, dass ich das auch schon gemacht habe, zu S5-AWL-Zeiten. Und innerhalb einer Schrittkette kann das ein durchaus übersichtlicher und naheliegender Lösungsweg sein.
Wie das immer so ist: Ausnahmen bestätigen die Regel ... in dem Sinne, dass man nicht von Ausnahme reden würde, wenn es keine Regel gäbe.
Es wird ja lediglich vor auschweifendem Gebrauch bzw. Missbrauch dieser Möglichkeit gewarnt. 
Und die Ansichten darüber, was als übersichtlich empfunden wird, gehen recht weit auseinander. Geschmackssache eben.


----------



## PN/DP (12 Oktober 2020)

Für die Lesbarkeit sind bedingte S/R nicht hinderlich, wenn man so eine Programmstelle vor sich hat. Wenn aber an vielen Stellen im Programm ein Ausgang gesetzt oder rückgesetzt wird, dann viel Spaß bei der Fehlersuche, wenn ein Ausgang nicht so kommt wie er sollte. Typisch für solche Programmiererei sind unnötige Angst-Rücksetz-Orgien an allen möglichen Programmstellen, weil der Programmierer dem eigenen Programm nicht traut  wenn nach einer sorgfältigen Verriegelung etwas später womöglich alles wieder über den Haufen geworfen wird ...
Wenn Kunden zur Problembehebung das Programm beobachten wollen/müssen, dann wird solche Programmierung (mit mehrfachen S/R/Zuweisungen an Ausgänge) für Lieferanten oft verboten, weil die Problemanalyse-Zeit des Kunden ein Vielfaches teurer ist als einige einmalig eingesparte Programmierer-Stunden.



sazegoo schrieb:


> Wie machst du das dann in Schrittketten in denen Beispielsweise ein Zylinder mehrmals ausfahren muss?




```
O Schritt_1
O Schritt_5
O Schritt_7
= Q_Zylinder
```

Harald


----------



## Rudi (12 Oktober 2020)

Valentin96317 schrieb:


> Hallo Zusammen,
> 
> Ich mache gerade Probeprüfungen für die Weiterbildung zum staatlich geprüften Mechatroniktechniker. Dabei bin ich über eine Frage gestolpert.
> "Darf man Ausgänge in der Programmierung auch als Eingänge verwenden? Bitte begründen Sie ihre Entscheidung."
> ...



Man weis nicht wie die Frage gemeint ist. Ich vermute mal "Kann man Ausgänge im Programm als Zwischenspeicher nutzen"


----------



## PN/DP (12 Oktober 2020)

Valentin96317 schrieb:


> "Darf man Ausgänge in der Programmierung auch als Eingänge verwenden? Bitte begründen Sie ihre Entscheidung."


Wie lang ist denn die Weiterbildungs-freie Phase vom Valentin? Am Freitag kurz vor Mittag hier die Frage abladen und dann vielleicht am Dienstag die Antworten einsammeln? Und sich zwischendurch gar nicht um die Nachfragen kümmern?

Eigentlich müssten wir nun noch jede Menge spekulative Beiträge hier posten, die das Wort "Ausgänge" enthalten, damit ihm das Finden der erwarteten Antworten nicht zu leicht gemacht wird 

Harald


----------



## TheLevel (13 Oktober 2020)

PN/DP schrieb:


> Eigentlich müssten wir nun noch jede Menge spekulative Beiträge hier posten, die das Wort "Ausgänge" enthalten, damit ihm das Finden der erwarteten Antworten nicht zu leicht gemacht wird
> 
> Harald


Auch mich interessiert der Ausgang dieses Threads


----------



## Heinileini (13 Oktober 2020)

TheLevel schrieb:


> Auch mich interessiert der Ausgang dieses Threads


Dein Beitrag enthält zwar das Wort Ausgang, aber was ist daran spekulativ?


----------



## Heinileini (16 Oktober 2020)

PN/DP schrieb:


> Wie lang ist denn die Weiterbildungs-freie Phase vom Valentin? Am Freitag kurz vor Mittag hier die Frage abladen und dann vielleicht am Dienstag die Antworten einsammeln?


Die SendePause dauert an. Diese Woche scheint nicht "Valentins Tag" zu sein. Vielleicht tut sich nach den HerbstFerien wieder etwas? 

Auf die leicht modifizierte Frage "Warum Ausgänge nicht *wie* Eingänge verwenden?" habe ich eine Antwort anzubieten:
Weil man normalerweise Eingänge nur abfragt und ihnen keinen Wert zuweist. Ausgänge, denen man nie einen Wert zuweist sind jedoch total überqualifiziert (= "over fluid").


----------



## Lipperlandstern (16 Oktober 2020)

Heinileini schrieb:


> Weil man normalerweise Eingänge nur abfragt und ihnen keinen Wert zuweist. Ausgänge, denen man nie einen Wert zuweist sind jedoch total überqualifiziert (= "over fluid").



Was willst du machen wenn du 8 Ausgänge auf der Karte hast aber nur 5 brauchst ? Man könnte die ja spaßeshalber auf Eingänge verdrahten und regelmäßig testen. Ob das gemeint ist mit : Ausgänge als Eingänge ? BTW : so haben wir früher in den ersten Busmodulen die Anwesenheit überprüft


----------



## Heinileini (17 Oktober 2020)

Lipperlandstern schrieb:


> Was willst du machen wenn du 8 Ausgänge auf der Karte hast aber nur 5 brauchst ?


... und zufällig fehlen einem noch drei Eingänge und eine ganze EingangsKarte dafür zu spendieren, wäre nicht "nachhaltig" genug.
Dann regelmässig testen, ob die SPS nicht vielleicht doch dem Wunschdenken nachgegeben hat? Meinst Du das, Axel?


----------



## Unimog-HeizeR (17 Oktober 2020)

Hallo Zusammen.

Es gibt aber Hersteller, die haben tatsächlich "Universal-E-A"
Da kann man dann in der HW Konfiguration einstellen,
ob es ein Eingang oder Ausgang sein soll.

Gruß Timo


----------



## DeltaMikeAir (17 Oktober 2020)

Unimog-HeizeR schrieb:


> Hallo Zusammen.
> 
> Es gibt aber Hersteller, die haben tatsächlich "Universal-E-A"
> Da kann man dann in der HW Konfiguration einstellen,
> ...



Ja, z.b. Schneider Lexium 62


----------



## Unimog-HeizeR (17 Oktober 2020)

Vipa
Insevis
u.v.a.


----------



## PN/DP (17 Oktober 2020)

"Universal-E-A" um Platz und/oder Anschlußklemmen zu sparen
z.B. Saia


----------



## Mrtain (18 Oktober 2020)

Jetter, zum Beispiel die Module JX3-DIO16 (Allerdings nur die letzen 8 ) und das JX3-MIX1


----------

