SPS.sub Unterschiedliche Zuweisungen bei unterschiedlichen Programmen

  • Hallo,


    ist es möglich in der SPS.sub gewisse Aus- und Eingänge für unterschiedliche Module zuzuweisen?


    Der folgende Code steht in der SPS.sub

    Code
    IF (A_PALETTE_VOLL==TRUE) AND (E_SGM_FRG_PALETTE==TRUE) THEN
      i_LAGENNUMMER = 0
    ENDIF



    Dort möchte ich bei einem Hauptprogramm es so haben wie es dort steht. Bei einem anderen Hauptprogramm möchte ich gerne bei der FRG_Palette ein False haben, bei einem weiteren anderem Hauptprogramm benötige ich diesen Teil des Codes gar nicht.


    Das ist nur ein kleiner Auszug aus der SPS.sub. Ich müsste ein paar mehr Codes nur für spezielle Hauptprogramme haben.


    Kann mir da jemand einen Tip geben?




    Gruß


    Corvax

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,


    mein Vorschlag:


    eine Integer Variable global deklarieren mit dem Namen Programmnummer.


    Diese Variable jeweils unterschiedlich am Anfang eines Modules beschreiben.


    Im sps.sub eine Switch-Case Anweisung mit den unterschiedlichen Programmnummern und Abfragen programmieren.


    Grüße
    K(A)RL

    Im Real Life sind wir Mitarbeiter im Customer Support der KUKA Deutschland GmbH, haben also viel Erfahrung mit den hier besprochenen Produkten. Wir posten hier i.d.R. während unserer Arbeitszeit (wenn es die sonstige Arbeitsbelastung zulässt) und auch im Wissen von KUKA. Unsere hier getroffenen Aussagen sind Hilfestellungen für euch, allerdings keine offiziellen KUKA Stellungnahmen. Für tiefergehende und umfangreiche Problemstellungen, gibt der KUKA Support offizielle Aussagen.

  • Man könnte so einfache Verknüpfungen auch zu Beginn des jeweiligen Hauptprogrammes auf ein $CYCFLAG linken, und dann in der SPS.SUB nur noch das $CYCFLAG abfragen.


    Was auch geht, ist: aus der SPS.SUB in eigene Routinen des Hauptprogramms verzweigen, in welchen der spezifische Code steht. Das hat allerdings den Nachteil, dass das Hauptprogramm nicht mehr teachbar oder änderbar ist, solange der Submit-Interpreter rennt.


    Grüße,
    Michael

  • Danke schonmal für die Tipps.


    Habe bisher nur den Grundkurs Steuerung bei Kuka besucht. Deshalb hab ich noch nicht so den Durchblick und kann nur wenig mit den Antworten anfangen.


    Kann man nicht einfach in der SPS.sub bestimmte Codes ein Programm zuweisen? Weiß die SPS.sub welches andere Modul/Programm gerade angewählt ist?


    Ich habe pro Programm ein Hauptmodul und dort durchlaufe ich 4 - 6 Unterprogramme.


    Zitat


    eine Integer Variable global deklarieren mit dem Namen Programmnummer


    Wie erstelle ich eine globale Variable? Schreibe ich dort den Namen meines Hauptprogrammes rein?



    Folgenden Code habe ich in der Cell.src stehen. Das ist doch eine Switch-Case Anweisung. Was besagt dieser Code?


    Gruß


    Corvax

  • Zitat


    Wie erstelle ich eine globale Variable? Schreibe ich dort den Namen meines Hauptprogrammes rein?


    Du kannst z.B. in der Config.dat eine Variable anlegen, etwa so:


    Code
    DECL INT Programmnummer = 0


    In deinem Hauptprogramm (oder Unterprogramm) schreibst du dann einen Wert in diese Variable, a la:

    Code
    Programmnummer = 1



    In der SPS.Sub fragst du diese Programmnummer ab und reagierst entsprechend:


    usw.


    Du kannst das natürlich auch mit einer SWITCH-CASE Anweisung machen, aber das ist sicherlich Geschmacksache.

  • @ Corvax: Generell möchte ich Dich warnen wollen, diese administrativen Aufgaben in die SPS.SUB auszulagern. Das führt sehr schnell zu Verstrickungen und Selbstblockaden sowie zu Unübersichtlichkeiten bei zeitlichen Abhängigkeiten zwischen beiden Tasks.
    Ich habe jetzt bei mehreren Anlagen große Teile der Anlagensteuerung in den Submit-Interpreter ausgelagert, das geht erstaunlich problemlos. Aber immer wenn sowohl Roboter-Task als auch Submit-Interpreter dieselben Parameter beeinflussen wollen, wird's arbeitsintensiv. Es lohnt den Aufwand nicht.
    In Deinem Codeschnipsel geht es scheinbar darum, einen Zähler zurückzusetzen, wenn bestimmte äußere Bedingungen gegeben sind. Mein Rat: lass sowas den Roboter machen und nicht die SPS.SUB, denn wenn Du es den Roboter machen lässt, kannst Du selbst entscheiden, WANN es geschieht. In Deinem Beispiel kann es Dir z. B. passieren, dass die SPS.SUB das Ergebnis noch mit der alten Programmnummer ausgewertet hat, der Roboter aber schon eine neue Programmnummer bekommen hat, die eigentlich die andere Vorgehensweise benötigt hätte. Und wenn Du sagst, dass Du mehrere solche Stellen hast, dann musst Du auch zu verhindern wissen, dass z. B. die Umstellung der Programmnummer irgendwo mittig dazwischen stattfindet, das Ergebnis wäre sonst chaotisch. Und das ist nur EIN Beispiel.


    Du kannst Dir ein eigenes Modul machen, was immer auf der Steuerung verbleibt, mit globalen Unterroutinen, die solche Aufgaben übernehmen, dazu muss man nicht die SPS.SUB quälen. Dort kannst Du auch programmspezifische Abläufe reinbringen, je nach einer global gespeicherten Programmnummer oder sonstiger Parameter. Mach Dir eine Funktionsbibliothek, die dem Bewegungsprogramm die nötigen Antworten zurückgibt, das wird jemanden mit wenig KUKA-Erfahrung am ehesten weiterbringen.


    Nur ein Vorschlag...
    Grüße,
    Michael

  • Danke schonmal für die Antworten.


    Heißt das, ich könnte einfach die jeweiligen Codes direkt in meine Unterprogramme schreiben, dort wo sie auch direkt gebraucht werden und nur bestimmte allgemeine Sachen in der SPS.sub lassen?


    Sprich ich könnte jetzt nachdem ich sage:


    Greifer hat Teil losgelassen, Lagenummer wird um +1 erhöht und wenn ich die maximale Anzahl Lage erreicht habe, ich dort den Zähler auch resetten kann?


    Code
    IF b_Teil_im_Greifer THEN
    i_LAGENNUMMER = i_LAGENNUMMER +1


    Code
    IF i_LAGENNUMMER >= c_Anzahl_LAGEN THEN
    i_LAGENNUMMER==0
  • Kann man so nicht pauschal beantworten. Kommt immer auf den konkreten Fall an.
    Normalerweise sollte doch z.Bsp. beim Lösen eines Werkstückgreifers auch auf einen Eingang gewartet werden,
    wenn man die Zählergeschichte dahinter erledigt, dann hat sich das mit dem Vorlauf auch schon von selbst erledigt.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden