Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Ausgänge mehrmals setzen? TIA V13

  1. #21
    Automatio ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.10.2015
    Beiträge
    29
    Danke
    14
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke Ronin, jetzt ist das ganze um so einiges klarer.

    Wir haben ein Touchpanel, auf dem wir die 28 Lagerplätze visualisieren um sie einzeln und unabhängig voneinander (jedoch nicht gleichzeitig) ansteuern zu können.
    Dabei wird eingelagert wenn ein Lagerplatz angeklickt wurde und ausgelagert wenn ein voller Lagerplatz angeklickt wurde.
    Dazu habe ich den FB gemacht, um das ganze 1mal zu programmieren und dann je nach Lagerplatz der betätigt wurde, meine "Koordinaten" des Lagerplatzes in diese Instanz zu laden.
    Wie das einfacher gehen soll, ist mir nicht ganz klar.

    Ich werde jetzt auf jeden Fall mal versuchen, die Ausgänge mit einer IN/OUT Variable zu verknüpfen.

    Gruss
    Automatio

  2. #22
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von Automatio Beitrag anzeigen
    Wie das einfacher gehen soll, ist mir nicht ganz klar.
    Im Prinzip müsste es nicht soviel anders sein als das was du hast. Man löst nur die Liftansteuerung heraus.
    Die Aufgabe des FBs bleibt weiterhin dass er eine Anforderung gibt "Bitte Lift kommen" und von mir aus noch "bitte hier hin fahren" (Koordinaten).
    Der Liftansteuerungs-Teil nimmt die Anforderung und Koordination und führt seine Bewegungsaktion aus.

    Man könnte im einfachsten Fall ein Array[1..28] of Struct (oder UDT) in einem DB erstellen wobei der Struct ungefähr folgendes enthält...
    • Anforderung_Einlagen
    • Anforderung_Auslagern
    • Koordinaten


    Jede deiner FB-Instanzen bekommt seine eigene Anforderung übergeben (Lagerplatz 1 = DB_Anfoderungen.Platz[1]).
    Der Lift-Programmteil wertet dann das gesamte Array von 1..28 aus, nimmt sich nach irgendwelchen Kriterien eine Anfoderung und führt diese aus.

    Das ist vereinfacht das was vollmi vorgeschlagen hat.
    Vorteil ist dass die Entscheidung wann der Lift welche Aufträge macht, einen Hand- oder Einrichtbetrieb fährt, von einer zentralen Stelle im Code getroffen wird.
    Auch wenn der Lift plötzlich wegen eines Programm- oder Sensorfehlers einen Blödsinn macht ist es wahrscheinlich leichter wenn man an zentraler Stelle suchen kann.

    Stell dir dein Programm einmal ein wenig abstrakt vor als würden Leute den Lift fahren.
    In jedem Regal sitzt einer der auf, ab, links, rechts schreit und der Lift-Fahrer machts blind.
    Wenn dann plötzlich 2 Regale zum schreien anfangen oder eines einen Handbetrieb will, gibt's Probleme.
    Bei Variante zwei schreien zwar mehrere Regale dass Sie was brauchen.
    Welches Regal zuerst und wie der Lift dorthin zu fahren hat entscheidet dort der Lift-Fahrer.
    Auch die Hand- und Einrichtbetriebe, die ja eher weniger mit den Regalen zu tun haben, managed dann der Liftfahrer selber.
    Geändert von RONIN (27.04.2016 um 14:28 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  3. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Automatio (27.04.2016)

  4. #23
    Automatio ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.10.2015
    Beiträge
    29
    Danke
    14
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Ich mache das ganze im FUP und muss zugeben, dass ich noch nie mit DBs gearbeitet habe, wenn sie automatisch erstellt werden ist gut und dann wars das für mich, da muss ich mich wohl mal einarbeiten.

    Aber um nochmal auf den Lift zurück zu kommen:
    Die Liftpositionierung mache ich in einem extra FB, von dem ich nur 1 habe.
    Da habe ich dann Soll > Istposition etc drin.
    Wie kriege ich am einfachsten die Sollposition dieser 28 Plätze?
    Ich würde jetzt einen FB erstellen, bei dem ich wieder meine 28 Instanzen erstelle und mithilfe von MOVE Blöcken in meine SollVariable schreibe, wobei das wahrscheinlich auch nicht geht, da ich ja dann 28 von denen bräuchte.
    Ausser vielleicht, wenn ich sie als IN/OUT Variable deklariere?

    Ich stehe in dieser Hinsicht vollkommen auf dem Schlauch.

    Gruss
    Automatio

  5. #24
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.302
    Danke
    682
    Erhielt 591 Danke für 452 Beiträge

    Standard

    Ich mach das normal so. Ich habe für die Stellplätze eine Struktur. z.B.
    Belegt : Bool;
    Inhalt : DINT
    Anforderung : Bool;
    KoordinateX : INT; // Tiefe
    KoordinateY : INT; // Höhe
    KoordinateZ : INT; // Regal
    Reserve : Array[0..20] of Word;

    Die Struktur ist üblicherweise als UDT angelegt um sie leicht erweitern zu können das Array ist nur Platzhalter und wird entsprechend verkleinert wenn die Elemente erweitert werden so das der Strukt immer gleich bleibt und nicht unnötig DBs neu geladen werden müssen.

    Der UDT ist in einem VerwaltungsDB in einem Array abgelegt. Das Array kann z.B. Eindimensional sein und einfach entsprechend Plätze wie Regalplätze vorhanden sind. z.B.
    Regal : Array [0..30] of UDT_Stellplatz;

    Jetzt hast du deine FBs jeder kriegt seinen Arrayplatz angeschlossen an IN/OUT (weil einige Elemente muss er nur lesen, einige elemente muss er nur schreiben und manche muss er beides können).
    FB1 := Regal[1]
    FB1 := Regal[2]
    FB1 := Regal[3420]

    Jetzt will man aus Regalplatz 1 was entnehmen. Dann schreibt FB1 in Regal[1].Anforderung eine Eins.

    Der Liftbaustein durchsucht zyklisch das ganze Array und schaut ob ne Anforderung ansteht. Wenn eine Ansteht dann schaut er sich die dazugehörigen Korrdinaten an und fährt dahin. Setzt bei Ankunft die Anforderung zurück behält sich aber ein Busy weil er ja jetzt belegt ist. Und fährt z.B. zum Ausgabeplatz. Der Regalbaustein für Platz 1 setzt in der Struktur das Belegt zurück (Denn der Lift hat ja jetzt den Inhalt) und löscht z.B. die Inhaltsbezeichnung.

    Und so läuft das halt ab. Sozusagen, laufen die Waren als Strukturen denselben weg wie die Physik. Das Item 10 ist entweder in Regalplatz 1 - xx verstaut oder auf dem Lift oder weg. Aber es ist weder gleichzeitig auf dem Lift noch in zwei Regalplätzen.

    Da gibts aber bestimmt Bücher drüber mit verschiedenen Ansätzen wie es hier im Forum auch sehr viele verschiedene Beispiele gibt.

    Bei grösseren Regalen macht es ja auch sinn Fahrten kurz zu halten. Manchmal will man bestimmte Gegenstände nicht direkt nebeneinander Lagern. etc.

    mfG René

  6. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    Automatio (28.04.2016)

  7. #25
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von Automatio Beitrag anzeigen
    Ich mache das ganze im FUP und muss zugeben, dass ich noch nie mit DBs gearbeitet habe, wenn sie automatisch erstellt werden ist gut und dann wars das für mich, da muss ich mich wohl mal einarbeiten.
    Ok, ab hier wird es mit Worten schwieriger...

    Daher hab ich ziemlich genau das was vollmi oben beschreibt, wenn auch grob und ungepflegt, als Beispiel erstellt. Siehe Anhang
    Beispiel 1: Zeigt dir wie das mit dem INOUT und dem mehrfachen Beschreiben mit dem gleichen Datenpunkt geht.
    Beispiel 2: Zeigt in etwa das was vollmi oben beschrieben hat.

    Wie gesagt, die Beispiele sind grob und nur schnell runtergetippt.
    (Zum Beipiel würde man die Anforderung möglicherweise nicht als separates Array programmieren sondern direkt in die Regaldaten und der Lift durchsucht die gesamten Regaldaten)

    Die Beispiele sollen dir nur vermitteln was wir meinen bzw. dir die verwendeten Programmiertechniken (Datenbausteine, UDTs, STRUCTs, ARRAYs, Multiinstanzen, variabel indexierter Arrayzugriff) näher bringen.
    Nur mit Text wird das eher länger dauern...

    PS.:
    Wir wollen dich hier nicht in irgendeine Richtung drängen, sind nur Vorschläge für andere Herangehenweisen.
    Angehängte Dateien Angehängte Dateien
    Geändert von RONIN (27.04.2016 um 16:21 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  8. Folgende 2 Benutzer sagen Danke zu RONIN für den nützlichen Beitrag:

    Automatio (28.04.2016),vollmi (27.04.2016)

  9. #26
    Automatio ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.10.2015
    Beiträge
    29
    Danke
    14
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Vielen Dank für deinen Aufwand Ronin!!
    Ich muss mich da erst noch mehr in die Materie einarbeiten, aber ich werde deine Lösungsansätze auf jedenfall ausprobieren.
    Du schreibst von 2 Beispielen, du hast aber nur eines angehängt?

  10. #27
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von Automatio Beitrag anzeigen
    Du schreibst von 2 Beispielen, du hast aber nur eines angehängt?
    Im Projekt ist ein Satz Bausteine mit dem Präfix "BSP1" und einer mit "BSP2"
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  11. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Automatio (28.04.2016)

  12. #28
    Automatio ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.10.2015
    Beiträge
    29
    Danke
    14
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nach einigen Programm und Hardwareproblemen funktioniert das Lager nun endlich.
    Nochmals ein riesen danke an RONIN, vollmi und alle anderen die mir hier geholfen haben.

    Ich habe das ganze nun folgendermassen gelöst:
    Der Lift fährt immer, wenn er nicht in der Sollposition ist. Die Sollposition ist in den einzelnen Regalen hinterlegt. (lift ist lösgelost)
    Wenn der Lift am einlagern ist und an Sollposition ist, fährt er aus, lagert das Teil ein und fährt wieder ein.
    Wenn der Lift am auslagern ist und an Sollposition ist, fährt er aus, lagert das Teil aus und fährt wieder ein.
    Wir haben das ganze auch noch mit einem Lager + Förderband verbunden und können nun vom einen in das andere Lager einlagern.
    Als nächstes muss ich das ganze noch optimieren (noch viel Müll und Verbesserungswürdiges dabei) und einen automatischen Ablauf einfügen.
    Um automatisch ein/auszulagern werde ich mich wohl mit AWL beschäftigen müssen. Die Lager durchzuprüfen (ob voll oder nicht), müsste in AWL (nach Arduino Erfahrung) eine einfache for Schleife werden.

    Also nochmal ein grosses DANKE, ihr seid eine riesen Hilfe!

Ähnliche Themen

  1. TIA Siemens S7 TIA V13 Basic <> TIA V13 Professional
    Von piksieben im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.11.2014, 19:23
  2. Antworten: 0
    Letzter Beitrag: 20.10.2014, 20:25
  3. Step 5 Ausgänge setzen/rücksetzen
    Von hoffi im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.01.2014, 12:22
  4. einzelne digitale Ausgänge setzen
    Von Tiger30 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.02.2009, 16:13
  5. Ausgänge über Hilsmerker setzen
    Von Mores im Forum Programmierstrategien
    Antworten: 40
    Letzter Beitrag: 26.01.2009, 16:29

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •