Masseneingänge (Inputs) verarbeiten

stonix
2009-05-07
2009-05-09
  • stonix - 2009-05-07

    Hallo an alle CoDeSysler,

    habe mich eben als "neuling" hier im Forum angemeldet und bin selbst auch neu auf diesem Gebiet.

    Stehe vor einem Problem und weis nicht, ob dieses Problem ganz einfach oder auch überhaupt nicht zu lösen ist. Hier die Beschreibung:

    Ich habe einen programmierbaren Controller (WAGO 750-841) und die all bekannte CoDeSys V2.3. Wir wollen an diesen Controller eine Vielzahl an Eingängen verarbeiten. Maximal 150 digitale Inputs (mehrere 8 DI - WAGO 750-400 Module) an einem Controller.

    In den Resourcen finden wir die Taskkonfiguration. Allerdings lassen sich maximal 32 Prioritäten einstellen (0-31). Gleiche Prioritäten lässt die Programmierung nicht zu.

    Gibt es noch andere Möglichkeiten Ereignisse "Interrrupt-Ähnlich" abzuarbeiten? Alle Eingänge können gleiche Prioritäten haben, ist aber nicht zwingend notwendig. Da nach dem Verlassen eines Interrupts sowieso dort weiter gemacht wird wo unterbrochen wurde, ist die Reihenfolge der Abarbeitung egal.

    Für weitere Fragen, einfach posten, mailen oder per ICQ. Würde mich sehr auf einen Lösungsansatz freuen.

    Zusatzinfo: Der Controller macht sonst nichts weiter. Es läuft kein aufwendiges Hauptprogramm oder ähnliches. Es geht nur hauptsächlich um die Massenabfertigung der Eingänge.

    Vielen Dank an alle. Hoffe bald auf Antwort anfleh.

     
  • gravieren - 2009-05-07

    Hi

    Ich verstehe dein Problem nicht.

    Schreibe doch ein Zyklisches Programm.

    Alle z.b. 150 Eingange werden sodann abgearbeitet.

    Oder verstehe ich etwas falsch ?

     
  • stonix - 2009-05-08

    Ja, das wär auch eine Möglichkeit. Allerdings sehe ich dort eventuell ein Problem des zeitlichen Ablaufs.

    Ein Programm hat ja bekanntlich ein Anfang und ein Ende. Es wird zyklisch durchlaufen und kann, je nach dem wie komplex der Code ist, eine bestimmte Anzahl an Zyklen pro Sekunde durchlaufen werden.

    Jetzt kommen die 150 Eingänge ins Spiel. An jedem Eingang liegen kurze Impulse mit einer Impulsdauer von 240 Millisekunden an. Ein Impuls kann auf jedem Eingang pro Minute etwa 1 bis 70 mal auftreten.

    Angenommen "worst case":

    Es tritt auf einmal an jedem Eingang ein Impuls auf.

    Ist der Controller schnell genug um die 150 Eingänge zu erkennen? Wieviel Zeit darf ein Unterprogramm maximal brauchen, damit für die restlichen Eingänge auch die Chance beilbt erkannt zu werden?

    (Hab's schon ausgerechnet, das wären max. 1,6 ms, eher 1,5 ms).

    Wie schnell arbeitet der Controller?

    Am liebsten würde ich für jeden Eingang einen Interrupt erzeugen lassen, welche alle die gleiche Priorität haben. Somit hätte ich das Problem nicht mit dem zeitlichen Ablauf. Ist sowas möglich?

     
  • gravieren - 2009-05-08

    Hi

    Zitat:
    Ein Programm hat ja bekanntlich ein Anfang und ein Ende. Es wird zyklisch durchlaufen und kann, je nach dem wie komplex der Code ist, eine bestimmte Anzahl an Zyklen pro Sekunde durchlaufen werden.
    O.K. Die Zykluszeit.

    Zitat:
    Jetzt kommen die 150 Eingänge ins Spiel. An jedem Eingang liegen kurze Impulse mit einer Impulsdauer von 240 Millisekunden an.

    O.K. Bei einer Zykluszeit von z.b. 100 ms KEIN Problem.

    Zitat:
    Ein Impuls kann auf jedem Eingang pro Minute etwa 1 bis 70 mal auftreten.
    O.K.

    Zitat:
    Angenommen "worst case":
    Es tritt auf einmal an jedem Eingang ein Impuls auf.
    Ist der Controller schnell genug um die 150 Eingänge zu erkennen?
    Prizipiell:
    - ALLE EIngänge werden erst eingelesen
    - Das PLC-Programm durchlaufen
    - ALLE Ausgänge gesetzt.

    Und das alles geschieht bei jedem PLC-Zyklus.

    Zitat:
    Wieviel Zeit darf ein Unterprogramm maximal brauchen, damit für die restlichen Eingänge auch die Chance beilbt erkannt zu werden?
    (Hab's schon ausgerechnet, das wären max. 1,6 ms, eher 1,5 ms).
    Wie schnell arbeitet der Controller?
    Siehe oben.

    Zitat:
    Am liebsten würde ich für jeden Eingang einen Interrupt erzeugen lassen, welche alle die gleiche Priorität haben.
    Und was dann ?
    Sodann das PLC-Programm abarbeiten ?

    Was aber passiert, wenn bei der Abarbeitung sich wieder und wieder ein Eingang ändert ?

    Zitat:
    Somit hätte ich das Problem nicht mit dem zeitlichen Ablauf.
    Jedoch etliche andere Probleme

    Lass dir das noch mal durch den Kopf gehen.

    Wenn du z.b. einen Zähler benötigst, dessen Zykluszeit zu gross ist, kann du so was brauchen.

    Z.b. Bei Änderung eines Eingangs wird nur z.b.

    wert := Wert + 1;

    ausgeführt.

     
  • stonix - 2009-05-08

    Jup ich hab mir alles durch den Kopf gehen lassen. Das mit den gleichen Interrups kann in der tat etliche weitere Probleme verursachen.

    Ich hab schon eine Lösung gefunden, zumindest einen Lösungsansatz. Wer will, der kann hier posten, ich stell dann den Code rein. Mit dem Code wäre man in der Lage 8 Bit, bzw. 16 Bit gleichzeitig abzufragen.

    Vielen Dank für die Wegweisung. Es ist wirklich hilfreich zu wissen, in welcher Richtung eine Lösung liegt, die besser zu verarbeiten ist.

    Ein schönes Wochenende freu

    Stefan

     
  • gravieren - 2009-05-08

    Hi

    Zitat:
    Mit dem Code wäre man in der Lage 8 Bit, bzw. 16 Bit gleichzeitig abzufragen.
    Sicherheitshalber nochmals:

    Hier der Steuerungsablauf schematisch.

    NEXT:

    PAE --> Prozess Abbild Eingang Einlesen aller Eingänge (Automatisch) ca. 15 uS

    PLC-Progi abarbeiten (Zykluszeit z.b. ca. 100 mS)

    PAA --> Protess Abbild Ausgänge schreiben aller Ausgänge (Automatisch) ca. 15 uS

    GOTO NEXT

    Hier ein Link siehe die Seite 25 an

    (Auch die Seite 51 ist interessant)

    http://books.google.de/books?id=b1e-ELW ... t&resnum=4 m

     
  • stonix - 2009-05-09

    Das sieht ja noch besser aus. Werde mich am Montag da gleich ran machen.

    Vielen Dank!

     

Log in to post a comment.