TIA SCL_Programm zu Komplex?

SPCIQ9

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich glaub, ich bräuchte mal die Hilfe von einem SPS-Spezialisten.

Ich hab eine Schrittkette in FUP, in welcher wiederum ein Schritt einen Baustein aufruft, der dann in SCL programmiert ist (werden soll).

Jetzt habe ich leider noch nicht viele Berührungspunkte mit SCL gehabt und tu mir schwer, das zu programmieren. Ein Teil ist zwar da, aber wirklich lauffähig ist das nicht..

Ich muss 2 Achsen an eine Position verfahren, dort eine Aktion ausführen, und dann an die nächste Position verfahren. Die Abstände in X sind ab der ersten Postition gleich und auch die Y Abstände.

Wenn aber ein Fehler auftritt, muss im Programm wohin gesprungen werden und es muss was anderes ausgeführt werden, wenn das erfolgreich war, muss er wieder zurück springen und bei der nächsten Position weiter machen.

Ich komm damit einfach nicht klar, gibt es jemand, der mir da mal helfen würde? Ich kann es auch gerne noch genau ausführen per PN, sprengt nur hier den Rahmen. Kann es aber ganz genau beschreiben, was wann passieren soll mit welchen Aus und Eingängen etc.

Danke schon mal!!
 
Die Kunst des Programmierens ist in Teil-Abschnitten zu denken (und zu coden).
Ich würde hier mal so anfangen, dass du dir einen Baustein für die (eine) Achse erstellst. Dieser Baustein könnte dann alle Funktionen, die du von der Achse erwartest, umsetzen. Z.B. übergibst du ihm eine Zielposition und eine Geschwindigkeit und ein Start-Bit und erhältst von ihm den Status der Achse zurück und z.B. auch ein Bit, dass dann TRUE ist wenn die Achse ihre Zielposition erreicht hat.
Diesen Baustein bringst du erst mal zum Laufen. Wenn er dann fehlerfrei funktioniert dann kannst du ihn an deinen Ablauf ankoppeln.

Gruß
Larry
 
Die Kunst des Programmierens ist in Teil-Abschnitten zu denken (und zu coden).
*ACK*
Und zur Kunst des Programmierens gehört auch zu bedenken, dass nicht jeder Schalter immer so kommt wie man er im Idealfall kommen müsste
Und dass nicht jeder Maschinenführer immer nachdenkt bevor er Knöpfe drückt.
Ein Aspekt der oft und gerne vernachlässigt wird.....

Sorry für OT
 
Nur als kleiner Anreiz...

bitte nicht abfragen ob eine Bedingung nicht erfüllt ist, nach unten springen, darauf reagieren, wieder "zurück" nach oben und gegebenenfalls erneut die gleiche Bedingung abfragen, die "aus welchem Grund auch immer" erneut nicht erfüllt ist und er wieder erst runterspringt... Wäre fatal ein nie endender Zyklus?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur als kleiner Anreiz...

bitte nicht abfragen ob eine Bedingung nicht erfüllt ist, nach unten springen, darauf reagieren, wieder "zurück" nach oben und gegebenenfalls erneut die gleiche Bedingung abfragen, die "aus welchem Grund auch immer" erneut nicht erfüllt ist und er wieder erst runterspringt... Wäre fatal ein nie endender Zyklus?!

In einer SPS muss man doch gar nicht nach oben springen. Man wartet einfach bis die SPS wieder da vorbei kommt
 
In einer SPS muss man doch gar nicht nach oben springen. Man wartet einfach bis die SPS wieder da vorbei kommt

Ja richtig, nur das der TE schrieb das er springen "müsse" und ich nur diesen kleinen Hinweis geben wollte. (Ich weiß nicht warum er springen muss, kann ja seinen Grund haben den ich nicht kenne)

Denn Sprungmarken und Sprünge sind noch immer programmierbar und leider sehe ich auch heute noch sehr viele Neuanlagen von Mitbewerbern die nahezu ausschließlich in AWL programmieren und in einem FC mit 150 Netzwerken am Anfang einen "Sprungverteiler" und lauter Sprungmarken setzen, welche nach erledigter Arbeit teilweise alle beim gleichen Sprungverteiler zurückspringen. Teilweise scheint nur für AWL auch eine 1500er verbaut zu werden, denn groß sind die meisten Programme nicht.

Man kann eben auf viele Arten programmieren, egal ob es sinnvoll ist oder nicht. Aber von Sprüngen halte ich persönlich nicht viel und sehe oft genug kleine Schnitzer die zu Fehlern in der Zykluszeit führen.
 
Wenn er eine Schrittkette machen soll in SCL, geht das am besten und übersichtlich mit
einer Art Sprungverteiler der „CASE“ Anweisung, dagegen gibt es doch nichts auszusetzen,
wenn man dazu die Bordmittel von TIA nutzt wie zb Konstanten für die Sprungziehle und
Region um es zu Strukturieren.
Also ich kann mir das schon sehr gut vorstellen, es so zu lösen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn er eine Schrittkette machen soll in SCL, geht das am besten und übersichtlich mit
einer Art Sprungverteiler der „CASE“ Anweisung, dagegen gibt es doch nichts auszusetzen,
wenn man dazu die Bordmittel von TIA nutzt wie zb Konstanten für die Sprungziehle und
Region um es zu Strukturieren.
Also ich kann mir das schon sehr gut vorstellen, es so zu lösen.


Aber als erfahrener Programmierer würdest Du nach Abarbeitung des Sprunges nicht wieder an den Anfang des Sprungverteilers springen sondern ans Ende um im nächsten Zyklus dann erneut zu prüfen oder?

Das machen aber leider nicht alle und deshalb eben der Hinweis - aufpassen.
 
Aber als erfahrener Programmierer würdest Du nach Abarbeitung des Sprunges nicht wieder an den Anfang des Sprungverteilers springen sondern ans Ende um im nächsten Zyklus dann erneut zu prüfen oder?

Das machen aber leider nicht alle und deshalb eben der Hinweis - aufpassen.

Sag wir es mal so, das mir so etwas keine Probleme bereiten wird.
Der TE darf ruhig mal Erfahrungen sammeln und auch Fehler machen,
ansonsten gibt es keine Weiterentwicklung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber von Sprüngen halte ich persönlich nicht viel und sehe oft genug kleine Schnitzer die zu Fehlern in der Zykluszeit führen.
Sicherlich, das Prinzip "kleine Ursache mit grosser Wirkung" ist nichts ungewöhnliches und beschränkt sich nicht auf die Programmierung von Sprüngen.
Sprünge, also die "lineare" Abarbeitung eines Programms abbrechen und an einer anderen Stelle des Programmes fortsetzen, sind nicht von Hause aus verwerflich.
Wenn eine Funktion aufgerufen wird, ist das ein Sprung. Wenn von der abgearbeiteten Funktion hinter die aufrufende ProgrammStelle zurückgekehrt wird, ist das ein Sprung.
Wenn aufgrund eines Ereignisses (z.B. WeckAlarm) die aktuelle ProgrammAusführung unterbrochen wird, ist das auch ein Sprung hin und später wieder zurück.
Ist der OB1 abgearbeitet und wird er im nächsten Zyklus (nach "Umwegen" durch's BetriebsSystem) wieder von vorn begonnen, . . . u.s.w..
ProgrammVerzweigungen (à la IF . . ELSEIF . . ELSE . . ENDIF oder CASE), abhängig von irgendwelchen Bedingungen, sind auch nur Sprünge, die jedoch als "legal" empfunden werden.
ProgrammSchleifen (FOR, DO, WHILE, REPEAT, LOOP oder wie auch immer sie heissen) werden zumindest von den HochSprachenProgrammierern bedenkenlos als "legal" empfunden.
Aber assemblerähnliche Sprachen (z.B. AWL) kennen diese Strukturen nicht. Da ist man einfach darauf angewiesen, sie mit bedingten und unbedingten Sprüngen nachzubilden.
Grafisch angehauchte Sprachen (KOP, FUP) tun sich naturgemäss schwer, Verzweigungen, Schleifen oder "einfache" Sprünge zu realisieren.
Aber hierfür wurde immerhin die bedingte Ausführung (EN/ENO) für alle möglichen Funktionen realisiert, die AWL so nicht kennt und durch Sprünge umsetzen muss.
SprungBefehle im Sinne von GOTO sind insofern "verwerflich", als sie dazu verleiten oder es zumindest ermöglichen, SpaghettiCode zu produzieren. Aber niemand wird dazu gezwungen, damit SpaghettiCode zu schreiben.
Man sollte schon wissen, was man tut, welche Gefahren lauern und das Programm so schreiben, dass es (für andere) nachvollziehbar bleibt. Und man sollte bedenken, dass man schon nach wenigen Wochen oder Monaten selbst zu den anderen gehört, die beim Lesen des Programms kopfschüttelnd vor einem Rätsel stehen.




.
 
Zurück
Oben