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

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 61

Thema: Viele Fragen zum Rundtisch...

  1. #31
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Gute Einstellung : Resignieren statt lesen, was geschrieben wurde und ein bißchen mitdenken ...

    wie geht es nun weiter ?

    Gruß
    Larry
    Na Augen zu und durch Larry!

    Also ganz ehrlich - ich war gestern total geschafft von den vielen Möglichkeiten und Variablen - ist echt totales Neuland für mich. Und doch bin ich euch sehr dankbar für die zahlreichen Anregungen. Habe mich abends dann nochmals in Ruhe hingesetzt und bin mit Blatt und Stift nochmals alles durchgegangen. Was macht frau abends sonst auch schon?

    Und bis jetzt habe ich (dank eurer Hilfe) jedes Projekt verwirklichen können; ich lasse aber sicherheitshalber jede fertige "Maschine" von einem Elektriker abnehmen...


    Wollte jetzt einfach nochmals bei einem Beispiel bleiben - wenn ich das ganz verstanden habe, dann verstehe ich evtl. auch die anderen...

    Habe jetzt mal aus dem Beispiel von netsroht so ein Array of UDT konstruiert; könntet ihr bitte mal schauen, ob der Ausschnitt daraus so ok ist?

    Darin sind jetzt allerdings nicht die Trays zwischen den Stationen aufgeführt; würde ich im realen Projekt dann aber noch nachholen:

    DB11.jpg


    Nun noch ein Problemchen; ich muss ja bei jedem Takten einen Blockmove von n auf n+1 machen. Die Fkt. kann ich ja durch einen Merker aufrufen, der beim Takten gesetzt wird. Aber was genau muss ich hinter Quelle/Ziel schreiben, um z.B. den DB-Inhalt von ZWEI nach DREI zu kopieren?

    Blockmove.jpg

    Achja, netsroht hatte noch geschrieben, dass zunächst die Pos10 gelöscht und die ID an die nächste Station weitergegeben werden muss. Ist der Grund dafür der, dass man ansonsten die ID überschreibt?

    Lieben Dank euch!
    LG
    spirit

  2. #32
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Das zweite Problemchen ist relativ einfach. In AWL rufst du den Blockmove sooft auf wie du Plätze auf dem RT hast - 1. Beim ersten Aufruf kopierst du den vorletzen Platz auf den letzten. Beim zweiten Aufruf kopierst du den vorvorletzen auf den vorletzen usw.

    In SCL läst sich das auch bequem im einer Schleife erschlagen.
    mfG Aventinus

  3. #33
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Habe jetzt mal aus dem Beispiel von netsroht so ein Array of UDT konstruiert; könntet ihr bitte mal schauen, ob der Ausschnitt daraus so ok ist?
    Hat so ja schonmal viel schönes. Das gute, wenn du es mit UDTs machst. Du kannst jederzeit was nachrüsten und es wird überall nachgeführt.
    Es ist also nicht nötig alles aufzublasen weil man es vielleicht mal brauchen könnte.

    Nun noch ein Problemchen; ich muss ja bei jedem Takten einen Blockmove von n auf n+1 machen. Die Fkt. kann ich ja durch einen Merker aufrufen, der beim Takten gesetzt wird. Aber was genau muss ich hinter Quelle/Ziel schreiben, um z.B. den DB-Inhalt von ZWEI nach DREI zu kopieren?
    Das würde ich in SCL machen. Also ohne blockmove.

    Code:
    ArrayofUDT[10] := ArrayofUDT[9];
    Etwas übersichtlicher und du kannst den Platz über einen Index zuweisen und z.B. mit ner for Schleife abarbeiten.
    Also einen FIFO direkt mit der ganzen Struktur des UDT abarbeiten. Spart n haufen Tiparbeit.

    Achja, netsroht hatte noch geschrieben, dass zunächst die Pos10 gelöscht und die ID an die nächste Station weitergegeben werden muss. Ist der Grund dafür der, dass man ansonsten die ID überschreibt?
    Es wird nicht nur die ID überschrieben sondern die ganze Struktur von Index 10 das heisst man muss den Inhalt dieser Struktur zur nächsten Station retten bevor man den Fifo weiterschiebt.

    mfG René

  4. #34
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Aventinus Beitrag anzeigen
    Das zweite Problemchen ist relativ einfach. In AWL rufst du den Blockmove sooft auf wie du Plätze auf dem RT hast - 1. Beim ersten Aufruf kopierst du den vorletzen Platz auf den letzten. Beim zweiten Aufruf kopierst du den vorvorletzen auf den vorletzen usw.

    In SCL läst sich das auch bequem im einer Schleife erschlagen.
    Danke Aventinus.

    1)
    Aber vor dem mehrmaligen Anwenden von Blockmove muss ich schon zuerst die ID "retten" und die Pos10 löschen, oder?

    2)
    Und was müsste beim Kopieren in der SFC20 hinter Quelle/Ziel geschrieben werden, um z.B. den DB11-Inhalt (aus meinem Thread #31) von ZWEI nach DREI zu kopieren?
    LG
    spirit

  5. #35
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Und was müsste beim Kopieren in der SFC20 hinter Quelle/Ziel geschrieben werden, um z.B. den DB11-Inhalt (aus meinem Thread #31) von ZWEI nach DREI zu kopieren?
    Code:
          CALL  "BLKMOV"       
           SRCBLK :=DB11.index[2]
           RET_VAL:=
           DSTBLK :=DB11.index[3]
    mfG René

  6. #36
    Registriert seit
    16.10.2007
    Beiträge
    28
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Danke Aventinus.

    1)
    Aber vor dem mehrmaligen Anwenden von Blockmove muss ich schon zuerst die ID "retten" und die Pos10 löschen, oder?

    2)
    Und was müsste beim Kopieren in der SFC20 hinter Quelle/Ziel geschrieben werden, um z.B. den DB11-Inhalt (aus meinem Thread #31) von ZWEI nach DREI zu kopieren?
    Zu 1)
    Zitat Zitat von vollmi
    Es wird nicht nur die ID überschrieben sondern die ganze Struktur von Index 10 das heisst man muss den Inhalt dieser Struktur zur nächsten Station retten bevor man den Fifo weiterschiebt.
    Zu 2)
    Basierend auf einem DB mit einem Array aus UDT
    CALL "BLKMOV"
    SRCBLK :="DB_Rundtakttisch".Index[2]
    RET_VAL:=#retvalue
    DSTBLK :="DB_Rundtakttisch".Index[3]

  7. #37
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen

    Das würde ich in SCL machen. Also ohne blockmove.

    Code:
    ArrayofUDT[10] := ArrayofUDT[9];
    Etwas übersichtlicher und du kannst den Platz über einen Index zuweisen und z.B. mit ner for Schleife abarbeiten.
    Also einen FIFO direkt mit der ganzen Struktur des UDT abarbeiten. Spart n haufen Tiparbeit.


    Es wird nicht nur die ID überschrieben sondern die ganze Struktur von Index 10 das heisst man muss den Inhalt dieser Struktur zur nächsten Station retten bevor man den Fifo weiterschiebt.

    mfG René
    Vielen Dank René,

    jetzt also auch noch SCL!

    Ok, dann müsste ich aber diesen Code

    Code:
    ArrayofUDT[10] := ArrayofUDT[9];
    x-mal (entsprechend der Anzahl der Plätze) in SCL schreiben, richtig?


    Nochmals zum Verständnis:

    Die Struktur von Index10 ist ja identisch mit der von Index9. Insofern ist es doch ok, wenn Index9 auf Index10 kopiert wird, nachdem die ID aus Index10 "gesichert" wurde, oder habe ich da schon wieder einen Denkfehler?
    LG
    spirit

  8. #38
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    [QUOTE=spirit;490140]x-mal (entsprechend der Anzahl der Plätze) in SCL schreiben, richtig?

    entweder das (bei 10 plätzen noch okay)

    oder so

    Code:
    FOR index := 10 TO 1 BY -1 DO    ArrayofUDT[index] := ArrayofUDT[index - 1];
    END_FOR;
    das macht dann grundsätzlich das gleiche. Braucht auch genausoviel Zykluszeit, aber ist halt lesbarer als 1000 mal.
    Code:
    ArrayofUDT[10] := ArrayofUDT[9];
    Die Struktur von Index10 ist ja identisch mit der von Index9. Insofern ist es doch ok, wenn Index9 auf Index10 kopiert wird, nachdem die ID aus Index10 "gesichert" wurde, oder habe ich da schon wieder einen Denkfehler?
    Die Struktur ist identisch ja. Aber der Inhalt natürlich nicht.
    An jeder Station wird der Inhalt ja verändert und die nächste Station welche ja nur ihren Index des Arrays sieht muss doch wissen was am aktuellen Werkstück getan wurde und noch getan werden muss.
    Darum wird der komplette Inhalt weitergeschoben.

    Du hast dir für den Start nicht gleich die einfachste Aufgabe ausgesucht. Aber das wird schon

    mfG René

  9. #39
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen

    Die Struktur ist identisch ja. Aber der Inhalt natürlich nicht.
    An jeder Station wird der Inhalt ja verändert und die nächste Station welche ja nur ihren Index des Arrays sieht muss doch wissen was am aktuellen Werkstück getan wurde und noch getan werden muss.
    Darum wird der komplette Inhalt weitergeschoben.

    Du hast dir für den Start nicht gleich die einfachste Aufgabe ausgesucht. Aber das wird schon

    mfG René
    Lieben Dank René;

    ja ein wahres Wort! Darf hier ja nicht zuviel schreiben; Chef "könnte" ja mitlesen...

    Ich finde es nur etwas schade, wenn bei einer Energieanlagenelektronikerin die Kenntnisse eines Programmierers vorausgesetzt werden. Damals als unser Programmierer gegangen war, hieß es nur: "Das können Sie ja jetzt mitübernehmen - ist ja nicht so schwierig! Soviel dazu...

    Ok, ist klar - Struktur ist identisch, aber der Inhalt natürlich nicht. Ich glaube ich habe den Satz von User netsroht falsch verstanden, als er geschrieben hat: "..., wobei angefangen wird 10 löschen/ID weitergeben an nächste Station, ..."

    War das einfach nur so gemeint?

    Kopiere Index9 auf Index10, Index8 auf Index9, Index7 auf Index8, Index6 auf Index7, Index5 auf Index6, Index4 auf Index5, Index3 auf Index4, Index2 auf Index3, Index1 auf Index2, Index0 auf Index1.

    1)
    Dann entsteht ja nach einem Drehtakt die Situation, dass in Index0 und Index1 der gleiche Inhalt steht. Dann muss ja jetzt Index0 nach dem Kopiervorgang mit der Ursprungskonfiguration neu beschrieben werden, oder?

    2)
    Es ist schon so, dass z.B. Station1 immer nur auf Index[1].Position1, Station2 immer nur auf Index[2].Position2, usw. schauen, wenn es darum geht wie oft sie arbeiten müssen?


    Und noch zu SCL:

    "ArrayofUDT" muss ich schon als VAR_IN_OUT deklarieren, richtig? Aber als welchen Datentyp?

    "index" kann ja vermutlich als VAR deklariert werden.
    LG
    spirit

  10. #40
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Kopiere Index9 auf Index10, Index8 auf Index9, Index7 auf Index8, Index6 auf Index7, Index5 auf Index6, Index4 auf Index5, Index3 auf Index4, Index2 auf Index3, Index1 auf Index2, Index0 auf Index1.
    Genau so ist das gedacht. Je nach grösse des Arrays frisst das aber natürlich auch zykluszeit. GGF muss man das auf mehrere Zyklen aufteilen. Du jetzt nicht, aber halt im Hinterkopf behalten.

    Dann entsteht ja nach einem Drehtakt die Situation, dass in Index0 und Index1 der gleiche Inhalt steht. Dann muss ja jetzt Index0 nach dem Kopiervorgang mit der Ursprungskonfiguration neu beschrieben werden, oder?
    Das ist korrekt auf Index0 kommt dann entweder eine Grundkonfiguration mit ner neuen ID (optional) oder wenn der Drehtisch einen Vorgänger hat kriegt das Array.Index[0] von diesem Drehtisch den Inhalt von der Vorgängerstation Array.Index[10]

    Es ist schon so, dass z.B. Station1 immer nur auf Index[1].Position1, Station2 immer nur auf Index[2].Position2, usw. schauen, wenn es darum geht wie oft sie arbeiten müssen?
    Korrekt

    Und noch zu SCL:

    "ArrayofUDT" muss ich schon als VAR_IN_OUT deklarieren, richtig? Aber als welchen Datentyp?

    "index" kann ja vermutlich als VAR deklariert werden.
    "ArrayofUDT" muss ein als VAR_IN_Out deklariert sein,

    Code:
       ArrayofUDT : ARRAY[0..100] OF testudt ;
    testudt wäre jetzt dein UDT das du definiert hast und die Arraygrösse muss mindestens so gross sein wie das Array das du anhängen willst.

    Index kann in VAR oder Temp. da in einem Zyklus abgearbeitet.
    Wenn man dass dann z.B. mit WHILE über mehrere Zyklen verteilt muss dass beachtet werden. Wird dann aber eh aufwändiger.

    mfG René

Ähnliche Themen

  1. CP341 Modbusmaster viele Fragen
    Von Gustel im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 08.11.2011, 16:46
  2. Fragen zum DB
    Von SPS_Neuling im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 11.10.2011, 19:37
  3. Fragen zum Datenbaustein
    Von anne im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 11.05.2010, 10:00
  4. Neu und viele Fragen zur Haussteuerung
    Von Plentman im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 24.06.2008, 23:42
  5. Viele Fragen zu S7 (Anfänger)
    Von draXo im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 08.05.2004, 12:26

Lesezeichen

Berechtigungen

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