
Originally Posted by
EdgarRR
Hallo,
bei diesen SPS-Sprachen ist, das alle immer wieder die Norm 61131 bemühen aber trotz dem keine einheitliche Sprache sondern immer wieder dialekte von diese Norm angelegt
werden
Hier meine Fragen:
1.Werden die Sparchen KOP / FUP / ST / AS noch gebraucht ?
Ja
2.Sollte nicht nur Textuelle-Sprachen verwendet werden ?
Nein.
Schau dir mal COBOL an. Wenn du nicht einen masochistischen Spass am Tippen hast, verstehst du auf Anhieb was ich meine.
3.Sollte als Programmiersprache nicht z.B. Java verwendet
werden.
Au ja. Ein Stromstossrelais auf einer kleinen SPS:
Code:
final static boolean[] Eingaenge;
Eingaenge[] = new Boolean[14];
final static boolean[] Ausgaenge;
Ausgaenge[] = new Boolean[10];
/*
Im Gegensatz zu C,Pascal oder Makroassembler gibt es nun leider keine Möglickeit, die physikalischen Adressen der Ein-und Ausgänge anzugeben. Sprache erweitern oder native Bibliothek einbinden?
*/
final static boolean[] Merker;
/*
So eine Definition belegt pro boolean 32 Bits. Das
ist nicht schlechte Implementierung, sondern so festgelegt.
Wenn man?s ändern würde, merkt man es spätestens, wenn man ein boolean in einen stream schreibt (casts gibts ja nicht).
*/
Merker[] = new Boolean[256];
/*
Ok, wir wollten ja gar nicht 256 Merker verwenden, sondern nur 3:
boolean clock, master,slave;
wuerde es auch tun, aber wenn ich die zu einem Bus-Partner,
z.B. Bedienpanel schicke, wie weiss ich welcher welcher
ist ? Paket packen:
byte[] panelInfo=new byte[5];
panelInfo[2]=myFancyBitPacker.pack(slave,master); ?
ProfiBus.send(panelInfo);
*/
Merker[0]=Eingang[0]; // clock=Eingang[0];
/*
Flip-Flop:
*/
if (Merker[0]) Merker[2]=Merker[1];
if (^Merker[0]) Merker[1]=^Merker[2];
Ausgang[0]=Merker[2];
/*
Das war jetzt ein Stromstossrelais. JAVA typisch könnte
das Flip-Flop auch gleich eine Klasse sein:
*/
public class FlipFlop {
boolean clock,master,slave;
public setInput(boolean in){
clock=in;
}
public getOutput(){
return master;
}
/*
jetzt tut es noch nix. 1.Vorschlag:
*/
public setInput(boolean in){
clock=in;
if(clock) slave=^master;
else master=^slave;
}
/*
Jetzt tut es was. Vielleicht wäre es aber noch
schöner, es zu einer "autonom" agierenden
Komponente zu machen, aus der man Netwerke "bauen"
kann:
Irgenwo im aufrufenden Programm stünde dann:
FlipFlop flipFlop1;
Eingang[0].addPropertyChangeListener(flipFlop1);
flipFlop1.output.addPropertyChangeListener(Ausgang[0]);
*/
public propertyChanged(PropertyChangeEvent e){
if(e.get.// Auswertung von Art des Events und neuem Wert
if(clock) slave=^master; else
master=^slave;
}
/*
So, jetzt haben wir 2 Dinge geschafft:
1. die Reihenfolge der Abarbeitung ausgehebelt.
Schaltnetze mit invertierenden Rückführeingängen lösen
jetzt Event-Stürme aus. Nachbildung eines Schütz, das
seinen Spulenanschluss unterbricht, perfekt möglich.
2.Im ersten Ansatz waren die Variablen statisch. Auftritt
GarbageCollector, um den Event-Müll abzufahren.
*/
}
Diese Sprache ist sehr standardisiert.
Und deshalb müssten sich die SPS-typischen booleans daran halten, wie booleans für die gelegentliche Verwendung in allgemeinen Programmen definiert wurden.
Als Entwicklungs-System könnte
eine Open Source Anwendung dienen z.B. Eclipse.
Ja, das geht auch so. Man kann ja ein Eclipse-Plugin für jede der vorhandenen Sprachen schreiben: Editor, Compiler, Eingabe-Syntaxprüfung, automatische Ergänzungsvorschläge, Debugger, Simulator.
Das kann dann Step7 und alle anderen ähnlichen Werkzeuge ablösen. Neue SPS-Marke braucht nur ein paar Erweiterungen.
Dann haben wir alles zusammen, um eine richtig komfortable Analyse draufzusetzen:
Du gehst an eine unbekannte Maschine, wo unerlärlicherweise der Ausgang A46.3 ("Hubtisch senken") nicht kommt. Das Tool lädt sich das undokumentierte SPS-Progamm aus der CPU. Du klickst auf "Explain state", tippst A46.3 ein und kreuzt an "explain not true". Das Tool vollzieht über beliebige Netzwerke die Ergebnisbildung nach und zeigt dir:
1.Möglichkeit E16.3 und E32.3 müsssten 1 sein.
2.Möglichkeit: M45.2 müsste 1 sein. M45.2 würde in PB 22 NW 3 speichernd gesetzt, wenn zu den vorhandenen Bedingungen hinzukäme: E46.7=1
Aus dem Schaltplan:
16.3 Handbetrieb,
E32.3 manuell senken,
E46.7 Initiator Tisch oben
Bookmarks