# Ausgänge über Hilsmerker setzen



## Mores (29 Dezember 2008)

Mal ne Frage in die Runde,
wir hatte unlängst eine Diskussion, in welcher ein erfahrener SPS´ler die These vertrat, daß man nie direkt auf Ausgänge zugreift sondern hierfür *immer* Merkel benutzt.
Mir stellt sich nun die Frage :  hat dieser Mann recht, und wenn ja, warum ?

Vielleicht bringt jemand Licht ins Dunkel ... 
Beste Grüße
Mores


----------



## Gerhard K (29 Dezember 2008)

ich bin überhaupt für indirekte adressierung der ausgänge,sonst findet man diese ja in der symbolliste.
nein im ernst,ich finde sowas nur verschwendung der resourcen.ausser vielleicht bei schrittketten.


----------



## SBC-User (29 Dezember 2008)

ich bin auch nicht für das rangieren von ios, da dies wie schon genannt je nach anzahl phys. datenpunkte. desweiteren stellt dieses mapping immer eine fehlerquelle dar.

aber: ich persönlich finde die systemmatik in sofern nicht falsch, wie man sich quasi im anwenderprogramm nen prozessabbild schaffen kann, fürs debugen evtl. ganz nützlich

EDIT:

aber dazu muß ich sagen das ich trotzdem rangiere, was aber eher daran liegt das bei saia der wiederverwendbare code so ne schwierigere sache ist im fupla, was dazu führt das ich durch die entsprechenden fc / fb eine rangierung durch dessen schnittstelle habe


----------



## riesermauf (29 Dezember 2008)

Also ich kenn da eine Automatisierungsfirma die legt alle I/O's
auf Merker und verarbeitet diese dann.


----------



## Onkel Dagobert (29 Dezember 2008)

Mores schrieb:


> ..sondern hierfür *immer* Merkel benutzt...


Frau Merkel wird euch was pfeifen!

Was wird der erfahrene SPSler wohl gemeint haben? Kann es sein dass die Ausgänge mehrfach zugewiesen wurden? Dann wäre der Weg über Merker begründet.


Gruß, Onkel


----------



## jabba (29 Dezember 2008)

Das hängt von der Sichtweise ab.
Man muss daher genauer wissen, um was es da ging .

Ich bin z.B. prinzipiell dagegen die Ausgänge direkt zu schalten,
das hängt aber vom Programm ab.

Was hier gemeint sein könnte, das man z.B S/R der Ausgänge direkt ausführt , und damit quasi z.B. die Schrittkette programmiert.

Bei mir gibt es eine Schrittkette z.B. nur aus Merkern und diese steuern die Ausgänge.

Ich könnte mir vorstellen das der programmierer genau diese damit sagen wollte.
Das verwenden von Merkern die unabhängig von den Ausgängen gesetzt werden macht es nach meiner Meinung einfacher Änderungen durchzuführen.
Nehmen wir mal eine einfache Schrittkette.
Wenn jetzt z.B. ein Schieber schon einen Schritt früher fahren soll,
würden die vom Schieber abgefragten Bewegungen auch früher starten.
Bei der Umsetzung über z.B. Merker (geht ja auch anders) würde ich nur bei der Ansteuerung des Schiebers einen anderen Schritt eintragen.
Ich gebe zu, hängt aber auch von der Anlage ab.
In meinem Fall habe ich aber z.B. immer einen handbetrieb und eine Automatik. Abhängig von der Betriebsart  werden die Ausgänge geschaltet, im Netzwerk vom Ausgang sehe ich dann sofort von was der Ausgang angesteuert wird.

ich hoffe das war auf die schnelle einigermaßen verständlich.


----------



## Larry Laffer (29 Dezember 2008)

... ich hänge mich da jetzt mal bei *Onkel Dagobert* und *Jabba* mit dran. Ich weise Ausgänge generell nur einmal im Programm zu. Diese Zuweisungen kommen natürlich zu 95% aus Schrittketten. Man kann natürlich auch an jedem Schritt den jeweiligen Ausgang setzen oder rücksetzen. Das macht sich dann in der Suche über die Querverweisliste richtig toll, wenn man einen Ausgang 30 mal mit "S" und genauso oft mit "R" sieht. Das ist dann für die Fehlersuche was Feines.
Im Grunde ist dies aber jetzt auch nur eine Bestätigung der bereits genannten Argumente ...

Gruß
LL


----------



## SBC-User (29 Dezember 2008)

ich merke das es hier grundsätzlich um maschinensteuerungen u. vergleichbares geht, da ich aber aus der gebäudeautomation komme, sieht das wieder ein wenig anders aus, in diesen systemen gibt es in der regel unveränderliche regeln nach denen ausgänge gesetzt werden, natürlich werden diese programmweit auch nur von einer bedingung resultieren einem merker geschalten, im bereich der schrittketten-steuerung würde ich für meinen teil auch nicht auf die idee kommen innerhalb der schrittkette direkt nen ausgang zu beschalten, sondern wie schon angemerkt über eine "im notfall verriegelte" veroderung (je nach anforderung) den ausgang am ende der schrittkette setzen oder rücksetzen


----------



## Mores (29 Dezember 2008)

Larry Laffer schrieb:


> ... ich hänge mich da jetzt mal bei *Onkel Dagobert* und *Jabba* mit dran. Ich weise Ausgänge generell nur einmal im Programm zu. Diese Zuweisungen kommen natürlich zu 95% aus Schrittketten. Man kann natürlich auch an jedem Schritt den jeweiligen Ausgang setzen oder rücksetzen. Das macht sich dann in der Suche über die Querverweisliste richtig toll, wenn man einen Ausgang 30 mal mit "S" und genauso oft mit "R" sieht. Das ist dann für die Fehlersuche was Feines.
> 
> Gruß
> LL



Ob man jetzt einen Ausgang x-mal setzt / rücksetzt oder einen Merker. Wo liegt da der Unterschied ?
Außer dem, daß es sich anders liest.

Im Übrigen brauche ich dann für jeden Ausgang (welchen ich ja genauso abfragen kann) einen Merker (Resourcenverbrauch).

So ganz leuchtet diese Vorgehensweise noch nicht ein.


----------



## MSB (29 Dezember 2008)

Also gehen wir mal von einer Schrittkette aus:
Entweder der aktuelle Schritt wird durch eine Zahl repräsentiert,
oder durch Merker, oder durch Bits in irgend einem DB.

Also mit anderen Worten: ein Schrittmerker ist sowieso sinnvoll.

In der Schrittkette selbst habe Ausgänge meiner Meinung nach schlicht nichts verloren.

Also schreibst du bei der Ausgangszuweisung:
O Schritt_1
O Schritt_2
= Motor

O Schritt_2
O Schritt_3
= Ventil

...


Ausgänge setzen bzw. rücksetzen sollte man sowieso vermeiden, wo auch immer möglich.

Mfg
Manuel


----------



## jabba (29 Dezember 2008)

Mores schrieb:


> Ob man jetzt einen Ausgang x-mal setzt / rücksetzt oder einen Merker. Wo liegt da der Unterschied ?
> Außer dem, daß es sich anders liest.


 
Da ist kein Unterschied, nur das man nicht Merker oder Ausgänge X-mal setzen/rücksetzen sollte. Aber auch das ist eine Sache der Ansicht.
Versuch mal ein Programm in AWL zu lesen, ohne Kommentare über 500 Zeilen, in denen ein Ausgang z.B. 10mal gesetzt und wieder zurückgesetzt wird.

Wir reden hier nicht davon was technisch möglich ist, nur was sinnvoll ist.
Der Programmiere hat ja nur gesagt so etwas sollte man nicht und geht nicht.
Man kann das so machen, und als Know-How Schutz deklarieren  
Und wenn hier einer von Resourcen spricht, in der Beziehung hab ich noch nie Probleme gehabt, und ich setzte aus Kostengründen immer nur das notwendigste ein.


----------



## rostiger Nagel (29 Dezember 2008)

...also ich stimme da auch jabba, MSB und LL zu Merker oder DBX zu verwenden und Ausgänge nicht in S/R Gliedern verwenden ist schon sehr sinnvoll. Das mit den Resourcen ist auch so eine sache, die CPU's sind heute so Leistungsfähig, wenn man da wirklich an Grenzen stößt nimm man die nächst größere....

gruß helmut


----------



## Onkel Dagobert (29 Dezember 2008)

Mores schrieb:


> Ob man jetzt einen Ausgang x-mal setzt / rücksetzt oder einen Merker. Wo liegt da der Unterschied ?..


Theoretisch gibt es keinen Unterschied, praktisch allerdings schon! Der Unterschied liegt in der einfacheren Rückverfolgbarkeit. Hast du fünf Merker, die einen Ausgang setzen, so hast du auch fünf "Pfade" zum Rückverfolgen.

Ebenso trifft es auf Programmänderungen zu. Was machst du, wenn durch einen Umbau eine grundsätzliche Verriegelung notwendig wird? Spätestens dann wird "umverdrahtet". Man findet leider immer wieder solche Schei..Programme. Meist sind es simple Vorrichtungen, manchmal auch komplexere Sachen. Es sind in jedem Fall immer wieder böse Fallen.


Gruß, Onkel


----------



## Larry Laffer (30 Dezember 2008)

Ich verändere mal zur Veranschaulichung das Beispiel von MSB ein bißchen. Dann wird das angesprochene mehrfach Setzen/Rücksetzen vielleicht auch klarer ... 



MSB schrieb:


> In der Schrittkette selbst habe Ausgänge meiner Meinung nach schlicht nichts verloren.
> 
> Also schreibst du bei der Ausgangszuweisung:
> u (
> ...


 
Gruß
LL


----------



## rostiger Nagel (30 Dezember 2008)

@LL
das trifft es so wird es gemacht :s12:

gruß Helmut


----------



## kermit (30 Dezember 2008)

dann stemm ich mich mal gegen die Rangiererei:

bei S7 V5.4 mit Operandenvorrang Symbol ist es nicht notwendig, zu rangieren.

Wird bei einem Ausgang eine zusätzliche Verknüpfung notwendig, und die Verwendung ist unübersichtlich über das Programm verstreut, hat man immer noch die Möglichkeit, diesen Ausgang durch einen Merker zu substituieren (davon abgesehen, dass so eine verstreute Verwendung fragwürdig ist).


----------



## kermit (30 Dezember 2008)

Mores schrieb:


> ...
> So ganz leuchtet diese Vorgehensweise noch nicht ein.


das hatte ich überlesen ... also beantworte ich mal diese Frage:

stell Dir eine SPS wie z.B. die S5 vor: dort ist nur absolute Programmierung möglich. Jeder Programmierer bekommt für seinen Code einen Arbeitsbereich zugewiesen, in dem auch seine E/A im Merkerbereich liegen. Und dann wird mit dem Werkzeug des Rangierens der Codeschnipsel in den größeren Zusammenhang eingebunden. Daher kommt das. Und inzwischen pflegt man weitere gute Gründe dafür, obwohl inzwischen keine Hindernisse durch die absolute Adressierung mehr da sind und somit der ursprüngliche Grund weggefallen ist.


----------



## eNDe (30 Dezember 2008)

Hallo
weil es gerade gut zum Thema passt, hier ein praktisches Beispiel.
Vor mir liegt ein S5-Programm für eine relativ einfache Maschine (Ablaufsteuerung). Der Programmierer hat sich wahrscheinlich irgend etwas gedacht als er das Programm entwickelt hat. Laut Aussage des Betreibers ist die Maschine aber nie vernünftig gelaufen.


Hier mal der Code des ersten PB (PB254) komplett:

```
NETZWERK   1
0000      :U   E  8.0
0001      :=   M  64.0
0002      :U   E  8.1
0003      :=   M  64.1
0004      :U   E  8.2
0005      :=   M  64.2
0006      :U   E  8.3
0007      :=   M  64.3
0008      :U   E  8.4
0009      :=   M  64.4
000A      :U   E  8.5
000B      :=   M  64.5
000C      :U   E  8.6
000D      :=   M  64.6
000E      :U   E  8.7
000F      :=   M  64.7
0010      :***
 
NETZWERK   2
0011      :U   E  9.0
0012      :=   M  65.0
0013      :U   E  9.1
0014      :=   M  65.1
0015      :U   E  12.6
0016      :=   M  65.2
0017      :U   E  9.2
0018      :=   M  65.3
0019      :U   E  9.3
001A      :=   M  65.4
001B      :U   E  9.5
001C      :=   M  65.5
001D      :U   E  9.6
001E      :=   M  65.6
001F      :U   E  9.7
0020      :=   M  65.7
0021      :
0022      :***
 
NETZWERK   3
0023      :U   E  10.0
0024      :=   M  66.0
0025      :U   E  10.1
0026      :=   M  66.1
0027      :U   E  10.2
0028      :=   M  66.2
0029      :U   E  10.3
002A      :=   M  66.3
002B      :U   E  10.4
002C      :=   M  66.4
002D      :U   E  10.5
002E      :=   M  66.5
002F      :U   E  10.6
0030      :=   M  66.6
0031      :U   E  10.7
0032      :=   M  66.7
0033      :***
 
NETZWERK   4
0034      :U   E  11.0
0035      :=   M  67.0
0036      :U   E  11.1
0037      :=   M  67.1
0038      :U   E  11.2
0039      :=   M  67.2
003A      :U   E  11.3
003B      :=   M  67.3
003C      :U   E  11.4
003D      :=   M  67.4
003E      :U   E  11.5
003F      :=   M  67.5
0040      :U   E  11.6
0041      :=   M  67.6
0042      :U   E  11.7
0043      :=   M  67.7
0044      :***
 
NETZWERK   5
0045      :U   E  12.0
0046      :=   M  68.0
0047      :U   E  12.1
0048      :=   M  68.1
0049      :U   E  12.2
004A      :=   M  68.2
004B      :U   E  12.3
004C      :=   M  68.3
004D      :U   E  12.4
004E      :U   E  23.0
004F      :=   M  68.4
0050      :U   E  12.5
0051      :=   M  68.5
0052      :UN  M  24.7
0053      :U   E  9.4
0054      :=   M  68.6
0055      :U   E  12.7
0056      :=   M  68.7
0057      :***
 
NETZWERK   6
0058      :U   E  13.0
0059      :=   M  76.0
005A      :U   E  13.1
005B      :=   M  76.1
005C      :U   E  13.2
005D      :=   M  76.2
005E      :U   E  13.3
005F      :=   M  76.3
0060      :U   E  13.4
0061      :=   M  76.4
0062      :U   E  13.5
0063      :=   M  76.5
0064      :U   E  13.6
0065      :=   M  76.6
0066      :U   E  13.7
0067      :=   M  76.7
0068      :***
 
NETZWERK   7
0069      :U   E  18.0
006A      :=   M  74.0
006B      :U   E  18.1
006C      :=   M  74.1
006D      :U   E  18.2
006E      :=   M  74.2
006F      :U   E  18.3
0070      :=   M  74.3
0071      :U   E  18.4
0072      :=   M  74.4
0073      :U   E  18.5
0074      :=   M  74.5
0075      :U   E  18.6
0076      :=   M  74.6
0077      :U   E  18.7
0078      :=   M  74.7
0079      :***
 
NETZWERK   8
007A      :L   EW 64
007B      :T   MW 100
007C      :L   EW 72
007D      :T   MW 102
007E      :L   EW 80
007F      :T   MW 104
0080      :L   EW 88
0081      :T   MW 106
0082      :L   EW 96
0083      :T   MW 108
0084      :L   EW 104
0085      :T   MW 110
0086      :L   EW 112
0087      :T   MW 112
0088      :L   EW 120
0089      :T   MW 114
008A      :***
 
NETZWERK   9
008B      :O   M  3.1
008C      :O   M  7.5
008D      :U   M  76.0
008E      :O(
008F      :O   M  3.2
0090      :O   M  7.5
0091      :U   M  76.1
0092      :)
0093      :S   M  24.7
0094      :U   M  68.4
0095      :R   M  24.7
0096      :***
 
NETZWERK   10
          :BE
```
Das Ganze natürlich ohne ein Wort Kommentar.
Im Anhang kann man die Programmstruktur bewundern. 
Fazit für mich: Es gibt eben absolute Könner. An denen sollte man sich kein Beispiel nehmen.
Ansonsten: Allen einen guten Rutsch und schon mal Prosit Neujahr !
eNDe


----------



## MarkusP (30 Dezember 2008)

eNDe schrieb:


> Hallo
> Der Programmierer hat sich wahrscheinlich irgend etwas gedacht als er das Programm entwickelt hat.



Wenn ich nicht gerade meine Lieblings SPS programmiere, programmiere ich bei Bedarf auch öfters so...

Damit schaffe ich mir so quasi eine gewisse "Hardware-Unabhängigkeit" und kann meinen Code auf verschiedenen AG's sofort weiterverwenden. Ist nicht besonders schön (Geschmacksache), aber der Vorteil überwiegt die Nachteile. Damit bin ich bei den von mir verwendeten Kleinststeuerungen sehr flexibel, wenn der Auftraggeber aus Kostengründen wieder einmal eine andere SPS einbaut.

TwinCAT mappt übrigens E/A's die mit %I* bzw. %Q* addressiert sind, eigentlich ja auch auf "Merker", die dann eben im Systemmanager gemappt werden.

Ich wünsche Euch Allen einen guten Rutsch in's neue Jahr :sm19:


----------



## Gerri (5 Januar 2009)

Ich arbeite zwar nicht mit Schrittketten aber ob man einen Merker oder einen Ausgang setzt ist völlig gleich (abgesehen von den remanenten Merkern bei Ausgangsanwendungen). Wenn mehrere Merker in einer ODER-Vernküpfung einem Ausgang zugewiesen sind dann macht das keinen Unterschied. Für mich ist es nicht sinnvoll die Eingänge und Ausgnänge auf Merker zu legen. Jedenfalls nicht auf Biegen und Brechen. 
Ein Kollege fasst alle ein und ausgangsbits zu Merkwörter zusammen und trennt diese dann in Merkbits. Das macht sehr viel Spass wenn jemand mit Hilfe des E-Plans als Ausgangsbasis arbeiten muß.

Prinzipiell schreibe ich aber auch nur einmal in Oder-verknüpfungen auf Ausgänge.
Die Fehlersuche wird dadurch einfacher.
Gegen ein mehrmaliges verwenden von Eingängen spricht jedoch nichts.

Das Argument bei Ändern der EIngangsadresse mit Merkern "flexibler" zu sein kann mit Hilfe des "umverdrahtens" und der "Symboltabelle" entkräftet werden.


----------



## Ludewig (6 Januar 2009)

Es ist m.E. definitiv S5-Denke, die da mitspielt.

In einem 61131-3 Kontext ist das verwirrende Zeitverschwendung. Ich  erinere mich nur zu gut an einen ziemlich jungen Programmierer, der nicht dazu in der Lage war, bei einer S7-300 eben schnell 2 Ausgänge umzuverdrahten. Er müsse sein komplettes Programm ändern!? Offenbar programmierte er nicht einmal symbolisch.

Ich ändere die Adresse in der globalen Variablentabelle und gut ist. Der Download ist dabei das langsamste.


----------



## MSB (6 Januar 2009)

Ludewig schrieb:


> Es ist m.E. definitiv S5-Denke, die da mitspielt.
> 
> In einem 61131-3 Kontext ist das verwirrende Zeitverschwendung. Ich  erinere mich nur zu gut an einen ziemlich jungen Programmierer, der nicht dazu in der Lage war, bei einer S7-300 eben schnell 2 Ausgänge umzuverdrahten. Er müsse sein komplettes Programm ändern!? Offenbar programmierte er nicht einmal symbolisch.
> 
> Ich ändere die Adresse in der globalen Variablentabelle und gut ist. Der Download ist dabei das langsamste.



Also wenn man das bei Siemens macht, ist das langsamste dabei die Konsistenzprüfung ... der Download geht dann wieder


----------



## bike (7 Januar 2009)

Die Rangierungen sind nicht ein Relikt aus der S5 Zeit.
Es ist doch einfacher und klarer wenn ich eine Bibliothek habe, die völlig unabhängig von der Hardware funktioniert.
Zum Anpassen muss lediglich der Rangierbaustein angefasst werden und es funktioniert. 
Die Ausgänge sollen einen Bezug zum Hardwareplan haben und müssen an die Konstruktion angepasst werden.
Diese Anpassung kommt bei uns von der Harwarekonstuktion, damit haben wir nichts zu tun.
Die Argumente mit symbolischer Programmierung sind doch nicht stichhaltig.
Bei jeder Änderung Konzistensprüfen und was ist wenn ein Sybol geändert wurde? Dann muss manuell nachgearbeitet werden.

Jeder nach seiner Vorliebe, doch gerade wenn mehrere Entwickler an Projekten arbeiten ist die Lösung mit rangieren nach unserer Erfahrung besser geeignet.


bike


----------



## kermit (7 Januar 2009)

bike schrieb:


> Die Rangierungen sind nicht ein Relikt aus der S5 Zeit.
> Es ist doch einfacher und klarer wenn ich eine Bibliothek habe, die völlig unabhängig von der Hardware funktioniert.
> Zum Anpassen muss lediglich der Rangierbaustein angefasst werden und es funktioniert.
> Die Ausgänge sollen einen Bezug zum Hardwareplan haben und müssen an die Konstruktion angepasst werden.
> ...


0,00% ACK (deshalb Vollzitat)


darf ich aus


bike schrieb:


> ...
> Die Argumente mit symbolischer Programmierung sind doch nicht stichhaltig.
> Bei jeder Änderung Konzistensprüfen und was ist wenn ein Sybol geändert wurde? Dann muss manuell nachgearbeitet werden.
> ...


folgern, dass Du nicht mit Operandenvorrang Symbol programmierst?

dann könnte ich


bike schrieb:


> ...
> Jeder nach seiner Vorliebe, ...


 zu 100% unterstreichen ...


----------



## bike (9 Januar 2009)

Diese Ansichten kenn ich auch von meinen Kollegen, doch wenn jemand einige Zeit mit unserem System arbeit findet meist ein Umdenken statt.

Der Bezug zum symbolischen Programmieren haben wir immer, in den Programmmodulen.
Doch wie schon geschrieben, ist die Entwicklung von Funktionen unabhänngig von der Hardware. 
Die Ein- und Ausgänge haben den direkten Bezug zur Ortsbezeichnung. 
Die Hardwarekonstruktion erzeugt die Hardwarekonfiguration und den Rangierbaustein.
Dann wird noch die Logik dazugeladen und die Maschine ist fertig.

Wegen der Art zu programmiern kann ich sagen: wir programmieren zum Grossteil mit Quellen, die dann auch von einem Versionsverwaltungssystem verwaltet werden.
Klar gibt es auch Sytrem für die Verwaltung von Siemensprojekten, doch die sind, wie auch hier schon beschrieben, nicht so das gelbe vom Ei. Ausserdem gibt es noch andere Systeme als Siemens ;-)

Zumindest können wir uns darauf einigen, dass jeder Entwickler seine Vorlieben hat und die auch pflegen soll. 

"Entwickler sind Künstler und welcher Künstler lässt sich schon gern in seine Kunst dreinreden?"

bike


----------



## kermit (9 Januar 2009)

bike schrieb:


> ...
> Der Bezug zum symbolischen Programmieren haben wir immer, in den Programmmodulen.
> ...


Diesen Satz verstehe ich nicht.



bike schrieb:


> ...
> Doch wie schon geschrieben, ist die Entwicklung von Funktionen unabhänngig von der Hardware.
> ...


Entsprechend vergebe ich in meiner (vorläufigen) Zuweisungsliste (Symboltabelle) für die notwendigen Operanden einfach eine Platzhalteradresse. Oder besser: ich schreibe einen vollständig gekapselten FB, den ich nur noch an seiner Schnittstelle zu beschalten brauch (wobei ich hier von Forumskollegen auch schon gehört habe, dass das nicht immer möglich sein soll).



bike schrieb:


> ...
> Die Ein- und Ausgänge haben den direkten Bezug zur Ortsbezeichnung.
> ...


Derartige Information verbergen wir in den Symbolkommentaren.



bike schrieb:


> ...
> Die Hardwarekonstruktion erzeugt die Hardwarekonfiguration und den Rangierbaustein.
> Dann wird noch die Logik dazugeladen und die Maschine ist fertig.
> ...


Bei uns wird entsprechend die ZuLi durch die HW-Konstruktion erstellt und die zuvor verwendeten Dummy-Adressen nun durch die wirklich vorhandenen ersetzt. Die Logik erfährt dann eine Konsistenzprüfung und fertig. Den Rangierbaustein braucht es dann nicht (@Larry: ich hatte mal gespeichert, dass Du auch Rangierer wärst - aber ich lese ein Danke unter meinem obigen Beitrag?). 



bike schrieb:


> Diese Ansichten kenn ich auch von meinen Kollegen, doch wenn jemand einige Zeit mit unserem System arbeit findet meist ein Umdenken statt.
> ...


den kann ich mir aber jetzt leider wirklich nicht verkneifen: das nenne ich Betriebsblindheit


----------



## MSB (10 Januar 2009)

Ich komme jetzt mit mehreren Anmerkungen von "bike" nicht klar!

1. Was ist Hardwareunabhängig
- Siemens, Allen Bradley, sonstige
- Ventil mit oder ohne Rückmeldung
- Motor mit FU oder Klappertechnik

2. Sprichst du jetzt von Serienmaschinen oder Sondermaschinen?

3. Ich glaube du musst bei deinem "System" noch ein wenig weiter ausholen,
im Moment verstehe ich nur eine Mischung aus Bahnhof und Unverständnis.

Mfg
Manuel


----------



## bike (10 Januar 2009)

MSB schrieb:


> Ich komme jetzt mit mehreren Anmerkungen von "bike" nicht klar!
> 
> 1. Was ist Hardwareunabhängig



Da ist ganz einfach, mich als Entwickler interessiert nicht wie die Hardware aussieht, es können mehrere Maschinen sein, die die selbe Funktionen haben, bei denen die Schaltschränke verschieden aufgebaut sind. 



MSB schrieb:


> - Ventil mit oder ohne Rückmeldung
> - Motor mit FU oder Klappertechnik


Diese Funktionen sind im Programm programmiert, haben aber zu der Hardware, sprich Schaltschrank/Maschine, keinen direkten Bezug. Es werden die Koppelmeker gelesen bzw geschrieben und die Rangierung stellt die Verbindung zu der Maschine her.



MSB schrieb:


> 2. Sprichst du jetzt von Serienmaschinen oder Sondermaschinen?



Es sind Serien-Sondermaschinen ;-)
Nein im Ernst die Grundlage ist ein Serienprodukt, jedoch ist nach meiner Erfahrung nahezu jede grössere Anlage sonder, da der Kunde, wenn er Serie von der Stange will,bestimmt nicht bei einem deutschen Hersteller ordert, sondern sich einen billigeren Lieferanten aussucht. Unsere bzw meine Kunden sind Automobilisten die komplette Fertigungsstrassen bestellen.



MSB schrieb:


> 3. Ich glaube du musst bei deinem "System" noch ein wenig weiter ausholen,


Also es ist nicht "mein" System, sondern das System wie wir es in ca 10 Jahren erdacht und umgesetzt haben.



MSB schrieb:


> im Moment verstehe ich nur eine Mischung aus Bahnhof und Unverständnis.
> 
> Mfg
> Manuel


Ich hoffe ich habe jetzt die Fragen erklären können.

Ansich wollte ich nur zeigen, dass Koppelmerker sehr wohl einen Grund und eine Daseinsberechtigung haben und es verschiedene Arten gibt zu Programmieren.

bike


----------



## kermit (10 Januar 2009)

bike schrieb:


> ...
> Also es ist nicht "mein" System, sondern das System wie wir es in ca 10 Jahren erdacht und umgesetzt haben.
> ...


entschuldige bitte, aber das Konzept der Koppelmerker und Rangierbausteine ist uralt. Deiner Aussage nach habt Ihr also zehn Jahre für Konzeption und Umsetzung benötigt? Ich unterstelle nun, dass VW (oder wer auch immer) Euch *vor* zehn Jahren die Rangiererei aufs Auge gedrückt hat und Ihr *in* den letzten zehn Jahren damit leben gelernt habt.


----------



## bike (10 Januar 2009)

kermit schrieb:


> entschuldige bitte, aber das Konzept der Koppelmerker und Rangierbausteine ist uralt. Deiner Aussage nach habt Ihr also zehn Jahre für Konzeption und Umsetzung benötigt? Ich unterstelle nun, dass VW (oder wer auch immer) Euch *vor* zehn Jahren die Rangiererei aufs Auge gedrückt hat und Ihr *in* den letzten zehn Jahren damit leben gelernt habt.


Also so wenn du es so verstehst, okay. 
Doch das ist so bestimmt nicht so. Eine Konzern, wie der in dem ich arbeite, ist vielleicht langsam, aber so langsam bestimmt nicht ;-)

Die Koppelmerker sind nicht in 10 Jahren entstanden, sondern das Gesamtkonzept wie programmiert werden kann, dass Programme und Programmteile wieder verwertbar sind. Dazu gehört eben auch die Rangierung von EA. 
Es ist ein leichtes Programmfehler in Programmen nachträglich zu beheben, selbst wenn die Programme 5 oder mehr Jahre alt sind. Wir können unsere neuen Programmteile problemlos in "alte" Programme einfügen und sind daher sehr flexibel.

bike


----------



## kermit (10 Januar 2009)

bike schrieb:


> ... Dazu gehört eben auch die Rangierung von EA.
> Es ist ein leichtes Programmfehler in Programmen nachträglich zu beheben, selbst wenn die Programme 5 oder mehr Jahre alt sind. Wir können unsere neuen Programmteile problemlos in "alte" Programme einfügen und sind daher sehr flexibel.
> 
> bike


zunächst muss ich zugeben, dass die Programme, die ich schreibe, insofern nicht vergleichbar sind, da der Code normalerweise auf eine 64kB MMC passt. Die Rechenleistung einer 300er ist dafür i.d.R. ausreichend.

Aber auch bei mir ist der Code modular aufgebaut - es könnten mehrere Personen die Softwaremodule der Maschine schreiben (z.B. Kartonierer: Einlegevorrichtung in Becherkette ist ein eigener FB, oder auch Leimung oder auch Geschwindigkeitssteuerung. Diese Module haben nur kleine Schnittstellen nach aussen und werden dementsprechend dann voll gekapselt erstellt).

Programmfehler nach IBN habe ich normalerweise nicht - wenn dann handelt es sich um Schwächen, die später bei Produktionsarten zu Tage treten, die auf irgend eine Art und Weise die ursprünglich angenommenen Dimensionen über- oder unterschreiten. Diesen Mangel dann zu beheben bedarf es keiner EA-Rangierei.

Neue Programmteile in alte Programme zusätzlich mit aufzunehmen bedarf (bei mir) auch keiner EA-Rangiererei - wenn man die Zuweisung an der Schnittstelle des FB nicht als Rangieren versteht (insofern rangiere ich doch - weil, was sonst ist das Beschalten eines FB?).


----------



## bike (11 Januar 2009)

kermit schrieb:


> Programmfehler nach IBN habe ich normalerweise nicht -



Schön für dich.
Wir bekommen es jetzt noch mit Fehlern zu tun, die in Maschinen sind, die damals noch mit S7 Ver 3.x entwickelt wurden.
Daher ist auch die Archivierung als Quellen sinnvoll.
Ich sehe inzwischen, dass wir von völlig verschiedenen Ausgangspunkten die Problematik sehen.
Programme zu schreiben, die auf 64k passen, wäre schön. ;-)

bike


----------



## kermit (11 Januar 2009)

bike schrieb:


> ...
> Ich sehe inzwischen, dass wir von völlig verschiedenen Ausgangspunkten die Problematik sehen.
> Programme zu schreiben, die auf 64k passen, wäre schön. ;-)
> 
> bike


ging mir ähnlich, als Du geschrieben hast, dass Du es mit ganzen Automobilfertigungslinien zu tun hast. Ich hab nur mit Convenience-Food TK-Fertigungslinien zu tun (und entfernt auch mit einer Druckerei), die dort eingesetzten Automaten sind weitgehend autarke Maschinen, deren Programm idR eben auf die genannten 64kB passt...

Insofern: in Deiner Umgebung haben die Koppelmerker wohl ihre Daseinsberechtigung - und ich komme ohne sie aus

LG vom manchmal bösen, kleinen grünen Frosch


----------



## Perfektionist (19 Januar 2009)

man soll ja nicht von einem Wildschwein auf die ganze Rotte schliessen, aber das kam heute raus, als das Telefon mit den Worten klingelte: "Meine Visu zeigt keinen Fehler an, der Elektriker sagt, da müsse der A16.1 kommen, schau doch mal _geschwind_ ins Programm, warum der nicht kommt ..."


```
OB 1                                        DBADR=0000                 LAE=8
                            Q u e r v e r w e i s e
+------------------------------------------------------------------------------+
¦ A   16.1  ¦                         ¦                                        ¦
+-----------+-------------------------+----------------------------------------¦
¦ AW  16    ¦                         ¦                                        ¦
+------------------------------------------------------------------------------¦
¦FB143:1/T AW                                                                ¦¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦¦
+------------------------------------------------------------------------------+
Sprung zu:FB143
F         F         F         F         F         F         F         F  Hilfe
1         2 Sprung  3         4 Einzeln 5OhneDopp.6         7         8 Zurueck
```
:roll:

```
Netzwerk 1
Name :ECRIT A
 
     :U   M    2.5
     :R   M  144.4
     :U   M    1.3
     :UN  M  150.6
     :U   M  144.7
     :R   M  144.7
     :UN  M    3.1
     :O   M    3.2
     :SPB =M001
     :U   M  142.3
     :=   M  142.4
M001 :L   MB   4
     :L   KF +0
     :><F
[B][COLOR=red]    :SPB =M002[/COLOR][/B]
[B][COLOR=red]    :L   MW 142[/COLOR][/B]
[B][COLOR=red]    :T   AW  16[/COLOR][/B]
     :L   MB 144
     :T   AB  36
     :U   M  118.1
     :=   M  174.7
     :UN  M   90.7
     :SPB =M002
     :L   MB 145
     :T   AB  37
     :UN  M   46.0
     :SPB =M002
     :L   MB 148
     :T   AB  38
M002 :***
```


```
OB 1                                        DBADR=0000                 LAE=8
                            Q u e r v e r w e i s e
+------------------------------------------------------------------------------+
¦ M  142.1  ¦                         ¦                                        ¦
+-----------+-------------------------+----------------------------------------¦
¦ MW 142    ¦                         ¦                                        ¦
+------------------------------------------------------------------------------¦
¦FB 12:1/T MW       FB100:1/S          FB100:14/S         FB100:18/R         ¦¦
¦FB104:3/R          FB104:4/R          FB104:10/S         FB137:2/L MW       ¦ ¦
¦FB137:2/L MW       FB138:2/L MW       FB138:2/L MW       FB139:2/L MW       ¦ ¦
¦FB139:2/L MW       FB142:3/T MW       FB143:1/L MW       FB143:2/L MW       ¦ ¦
¦FB143:3/L MW                                                                ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦ ¦
¦                                                                            ¦¦
+------------------------------------------------------------------------------+
Sprung zu:FB 12
F         F         F         F         F         F         F         F  Hilfe
1         2 Sprung  3         4 Einzeln 5OhneDopp.6         7         8 Zurueck
```
:sb7::sb7::sb7:

und glaubt ja nicht, dass FB100 oder FB104 zyklisch abgearbeitet werden, aber in FB142 wird ein Datenwort auf das MW142 kopiert:sw22:


----------



## bike (19 Januar 2009)

Da hast du? oder der Entwickler etwas falsch gemacht.


Deine Erfahrung widerspricht nicht unseren Vorgabe.
Denn wir haben einen Rangierbaustein, der die E/A auf Merker rangiert.
Ohne transferieren von Worten auf Ausgänge oder indirekte Adressierung.

Eines ist klar:
Gegen schlechte Programmierung hilft nichts.

bike


----------



## Perfektionist (20 Januar 2009)

da piekst man EINE Sau, und an _anderer_ Stelle in der Rotte grunzt es *ROFL*

nein, ernsthaft: ich wollte lediglich aufzeigen, welch bizarre Blüten manche "Systeme" treiben. Der Programmierer, der für den gezeigten Code verantwortlich zeichnet, wird diesen selbstverständlich auch gegen Kritik verteidigen wollen. Und der Codeschnipsel ist nicht von einer Garagenfirma, sondern der Maschinenlieferant ist ein namhafter Druckmaschinenhersteller. Aber als Servicemensch komm ich an die Maschine, hab auf meiner Kappe stehen, dass ich S5/7 kann, klapp das PG auf und muss sofort erklären, dass ich nicht innerhalb einer halben Stunde die Frage beantworten kann, warum der Ausgang nicht kommt (zudem existierte nicht mal eine Programmdokumentation - der Anlagenstillstand trat ein, als ein Elektriker zuvor die Litiumbatterie wechselte "und das Programm aus dem EPROM neu geladen" hatte).


----------



## bike (21 Januar 2009)

Ich wurde aber nicht getroffen 

Wenn dieses Programm von einer Firma aus Augsburg ist und die Vorsilbe der Maschinen Roto oder Octo ist, dann ist daran auch ein Firma aus Nürnberg, die auch Antriebe herstellt, schuld.
Ich kenne diese Probleme auch und finde es einfach ausgedrückt bescheiden.
Die Argumentation die dann kommt ist: für verschiedene Druckwerke die selbe Software und daher diese Art der Programmierung.

bike


----------



## s-valve (25 Januar 2009)

Nachdem was ich mal gelernt habe und bei unseren Steuerungen auch gängige Praxis ist, schreibt man nie direkt auf die Ausgänge und liest auch (fast) nie direkt die Eingänge, sondern liest immer nur das PAE und schreibt dann auf das PAA. Ein direkter Zugrif auf die E/A ist während des Zyklus auch möglich, macht aber meines Wissens keiner bei den Ausgängen, ausser seine SPS ist so lahm, dass ... aber dann hat dieser Jemand noch ganz andere Probleme. Bei den Eingängen sieht das schon etwas anders aus, bspw. Zählereingänge, welche dann aber auch nur mit einer periodischen Abarbeitung des Hauptprogramms genutzt werden sollten.

Aber ich denke Mores ging es wohl um die Frage wie sinnvoll das hier schon beschriebene anwendungsunabhängige zuweisen von Ausgängen als Merker ist.
Ich wiederhole damit jetzt hier mal die Aussage von 80% meiner Vorredner:
Es werden immer Merker für die Eingänge und die Ausgänge genutzt, um unabhängig von der Hardware den Code möglichst unverändert zu lassen. 

Nichts ist schlimmer als wenn sich Adressen von Baugruppen ändern und das ganze Programm durchgepflügt werden muss. Da setzt man eben den Merker in der Deklarationsseite neu und spart eine menge Arbeit, auch was die QS angeht.
Vorteil eines Bausteins für das routen der Merker auf die Ausgänge ist auch, dass man dann dort sehr elegant einen softwareseitigen Lampentest einbinden kann.

Grüße,
M


----------



## Perfektionist (26 Januar 2009)

ist es den "80%" Vorrednern schon mal passiert, dass es heisst: hier haben wir eine Maschine mit einer 312er. Nun brauchen wir fünf Maschinen. Jetzt bauen wir mal nicht fünf Steuerungsschränke, sondern einen mit einer 317er statt der fünf 312er ... ? Nun, Ihr 80%, nun rangiert mal schön in eurem Code. Ich schreib mal eben nur die Aufrufschnittstellen der FB neu ...

@bike: es hat sich inzwischen herausgestellt, dass die betreffende Steuerung zwar im Lieferumfang, aber ein Zukaufteil war. Inwieweit der Zulieferer Vorgaben hatte - k.A. An anderer Baustelle hab ich auch ein Programm vom Hersteller - da ist definitiv bei der Dokumentation geschlammpt worden (Operanden ohne Symbol, verschobene Netzwerkkommentare ...). Aber das alles inzwischen uralt.


----------



## s-valve (26 Januar 2009)

Aufrufschnittstellen der FBs neu schreiben? Was haben die FB E/A mit dem HW-Tausch zu tun?

Für den Fall des Austausches von mehreren Steuerungen und andersrum sind wohl immer in gewissem Maße Sonderlösungen zu schaffen.


----------



## Perfektionist (26 Januar 2009)

```
FUNCTION_BLOCK "Beispiel_FB"
TITLE =
VERSION : 0.1
 
VAR_INPUT
  Befehl_setze : BOOL ; 
  Befehl_ruecksetze : BOOL ; 
END_VAR
VAR_OUTPUT
  Signalzustand : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =
      U     #Befehl_setze; 
      S     #Signalzustand; 
      U     #Befehl_ruecksetze; 
      R     #Signalzustand; 
END_FUNCTION_BLOCK
DATA_BLOCK "Beispiel_Instanz1"
TITLE =
VERSION : 0.0
"Beispiel_FB"
BEGIN
   Befehl_setze := FALSE; 
   Befehl_ruecksetze := FALSE; 
   Signalzustand := FALSE; 
END_DATA_BLOCK
DATA_BLOCK "Beispiel_Instanz2"
TITLE =
VERSION : 0.0
"Beispiel_FB"
BEGIN
   Befehl_setze := FALSE; 
   Befehl_ruecksetze := FALSE; 
   Signalzustand := FALSE; 
END_DATA_BLOCK
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
 
VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //Priority of OB Execution
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ; //Reserved for system
  OB1_RESERVED_2 : BYTE ; //Reserved for system
  OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "Beispiel_FB" , "Beispiel_Instanz1" (
           Befehl_setze             := "Befehlstaste1",
           Befehl_ruecksetze        := "Befehlstaste2",
           Signalzustand            := "Ausgang1");
      CALL "Beispiel_FB" , "Beispiel_Instanz2" (
           Befehl_setze             := "Befehlstaste3",
           Befehl_ruecksetze        := "Befehlstaste4",
           Signalzustand            := "Ausgang2");
END_ORGANIZATION_BLOCK
```


```
Ausgang1          A 0.0  BOOL 
Ausgang2          A 0.1  BOOL 
Befehlstaste1     E 0.0  BOOL 
Befehlstaste2     E 0.1  BOOL 
Befehlstaste3     E 0.2  BOOL 
Befehlstaste4     E 0.3  BOOL 
Beispiel_FB         FB 1   FB  1 
Beispiel_Instanz1 DB 1   FB 1 
Beispiel_Instanz2 DB 2   FB 1
```



> Was haben die FB E/A mit dem HW-Tausch zu tun?


sehr viel - weil ich daran meine E/A ranrangiere ...


----------

