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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Datenübergabe

  1. #11
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn "Konsistenz über gesamte Länge" vorliegt, dann kann kein Zustand eintreten, in dem Position und Nummer, die beim Robby ankommen, nicht zusammen gehören (und wenn´s nur ein Zyklus ist).
    Ein vernünftiger Handshake wär halt schön ...

    Grüße von HaDi

  2. #12
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Nur so als Vorschlag, ist nicht getestet und andere hier im Forum können sowas erheblich eleganter:
    Code:
           AUF   DB     3 // hier stehen die Positionen
           U     M     10.0 //Startbit für Übertragung
           SPB   los //los geht´s
           L     1 //Nummer auf 1 setzen
           T     MB    99 // und merken
           L     10 //ab DBW10 fangen die Positionen an
           SLD   3 //ins Pointerformat wandeln
           T     MD   100 //und merken
           BEA //Ende, weil kein Startbit
    los:  L     DBW [MD 100] //Lade DBW10/12/14...
           T     AW    60
           L     MB    99 //Lade Nummer
           T     AB    66
           U(    
           L     EW    60 //Rückmeldung der Pos. 
           L     DBW [MD 100]
           ==I   
           )     
           U(    
           L     EB    66 //Rückmeldung der Nummer
           L     MB    99
           ==I   
           )     
           SPB   c_up //hochzählen
           BEA   // abwarten
    c_up: L     MB    99
           L     1
           +I    
           T     MB    99 //Nummer eins hochzählen
           L     MD   100
           L     16
           +D    
           T     MD   100 //DBW um 2 (=16Bit) hochzählen
           L     MB    99
           L     45
           ==I   // alle Positionen übertragen
          R     M     10.0 //Ende
    Grüße von HaDi

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

    PG710 (27.04.2009)

  4. #13
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von HaDi Beitrag anzeigen
    Hallo Ralle,
    vielleicht lege ich den Begriff "Schrittkette" zu großzügig aus, aber auch deine Variante enthält m.E. die grundlegenden Merkmale einer Schrittkette.

    Grüße von HaDi

    [edit]
    Jetzt hab ich damit ja behauptet, dass eine Schleife eine Art Schrittkette ist. Darf ich das ? Was meinst du ?
    Sollte ich weniger von dem Zeugs trinken ?
    [/edit]
    Hast du ja Recht, Schrittkette hört sich halt etwas hochgegriffen an für so eine simple Sache.

    @PG710

    Am einfachsten läßt sich so etwas mit SCL programmieren.
    Hast du das nicht, benötigst du indirekte Adressierung. Hierzu lese bitte zuerst die guten Beiträge in der FAQ zu diesem Thema.

    Ich skizziere hier nur mal das Prinzip, aber der ganze Spaß ist wirklich recht simpel zu machen:

    1. Du hast ein MW oder DW, welches deinen Zähler enthält.
    2. Du hast einen Offset, in dem steht, wo dein Datenbereich beginnt (10)

    FC oder FB:

    1. Netzwerk
    Vergleich, ob Zähl-DW < 1
    wenn ja, dann 1 Zähl-DW setzen (nur zur Sicherheit, damit nie ein falscher Wert genutzt wird!)
    Vergleich, ob Zähl-DW > max Anzahl der zu übertragenden Daten (hier 45 DW (DW10-DW100)
    wenn ja, dann Zähl-DW auf 1 setzen

    2. Netzwerk
    Indirekte Adresse für das zu sendende Datenwort aus Zähl-DW und Offset berechnen und den Zeiger erstellen.
    Zähl-DW und Daten-DW auf den Output (am Besten INOUT) des FC legen

    3. Netzwerk
    Input vom Robbi mit den ausgegebenen Daten (Netzwerk 2) vergleichen
    bei Ungleichheit --> internens Timeoutbit auf True
    bei Gleichheit --> internes Timeoutbit auf False, Zähl-DW um 1 erhöhen

    4. Netzwerk
    Wenn Timeoutbit = True, Timer laufen lassen, der nach Ablauf der Zeit ein Störungsbit setzt


    Das Ganze setzt tatsächlich voraus, daß das AB und das AW konsistent übertragen werden. Sonst kann es dazu kommen, daß du die Daten zwar abschickst, diese aber beim Robbi zu unterschiedlichen Zeiten eintreffen und umgekehrt. Wenn man das gar nicht garantieren kann, muß man z.Bsp. mit Triggern (Flanken) arbeiten. Man überwacht in diesem Fall z.Bsp. die Nummer (AB66) auf Änderung, bildet daraus eine Flanke und wartet dann noch eine Zeit X, bis man die Daten übernimmt. Ist diese Zeit groß genug gewählt, wird das ziemlich sicher gehen. Evt. besser wäre in diesem Fall ein Triggerbit. Man legt die Daten wie oben beschrieben auf die Ausgänge, wartet nun eine Zeit X und setzt danach ein Übernahmebit. Mit diesem Bit übernimmt der Robbi die Daten. Ich hab auch schon Varianten gesehen, wo die gleiche Nummer 2 Mal gesendet wird. AB60 Nummer_1 AW62 Daten, AB64 Nummer_2. Nur wenn beide Nummern gleich sind, werden die Daten vom Robbi übernommen. Ausgehend von der Annahme, daß die Daten in Reihenfolge nacheinander auf den Bus kommen, könnte man annehmen, daß dann die Daten in der Mitte auch komplett und gültig sind.

    Wichtig ist auch mal zu abzuklären, was passiert, wenn der Robbi fehlerhafte Daten bekommt. Kann es dann zum Crash kommen?
    Geändert von Ralle (26.04.2009 um 23:04 Uhr) Grund: Menno, die Rechtschreibung :-(
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #14
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von Ralle
    max Anzahl der zu übertragenden Daten (hier 45 DW (DW10-DW100)
    Ich denke mal, nur ein Tippfehler von Dir ..

    Zitat Zitat von Ralle
    Ausgehend von der Annahme, daß die Daten in Reihenfolge nacheinander auf den Bus kommen, könnte man annehmen, daß dann die Daten in der Mitte auch komplett und gültig sind.
    Oder einfach als Alternative eine Prüfsumme über XOR mit den Daten bilden. Ist zwar auch nicht hundertprozentig fehlersicher (siehe Stichwort Hamming-Distanz), aber im allgemeinen Betrieb ausreichend.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Daten sicher empfangen  

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

    Ralle (27.04.2009)

  7. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Question_mark Beitrag anzeigen
    Hallo,



    Ich denke mal, nur ein Tippfehler von Dir ..
    Na gut, 46! Alter Krümelkacker , hast ja Recht. Ich hab schon beim Schreiben gestutzt, das stimmt nicht, war aber viel zu faul darüber nachzudenken. Ich bin halt von Natur aus faul, ehrlich Aber immerhin, es gibt noch Leute, die lesen die Beiträge.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #16
    Registriert seit
    05.10.2006
    Beiträge
    169
    Danke
    21
    Erhielt 19 Danke für 11 Beiträge

    Standard

    Ich hab mal was versucht, hoffe es hilft dir weiter, bin aber sicher irgendwer findet eine einfacheres Lösung. Ich hab mal angenommen das die Rückmeldungen auf dem EW60, bzw. EB66 kommen. Poition hab ich auch aus dem DB bezogen (würd ich mittels UDT gleich anhängen) kann aber auch ander gelöst werden.

    Code:
    // Start
          AUF   DB   100
          U     DBX    0.0                  //Init. durchgeführt
          SPB   END
    // Pointer init
          U     DBX    0.1
          SPB   SEND
          L     P#10.0                      //Position des ersten Wertes im DB
          LAR1  
          S     DBX    0.1                  //Init. am laufen
    // Senden
    SEND: L     DBW [AR1,P#0.0]             //Position senden
          T     AW    60
          L     DBB [AR1,P#2.0]             //Nummer senden
          T     AB    66
    // Kontrolle
          L     EB    66                    //Nummer Kontrollieren
          ==I   
          SPBN  ERR
          L     AW    60                    //Position Kontrollieren
          L     EW    60
          ==I   
          SPBN  ERR
          L     P#3.0                       //Pointer um 3 erhöhen (1 DBW + 1 DBB)
          +AR1  
    // Stopp
          TAR1  
          L     P#303.0                     //letzte Positon + 1 gesendet (Annahme für 100 Positionen)
          >=D   
          S     DBX    0.0                  //Init. durchgeführt
          R     DBX    0.1                  //Init. am laufen
          SPA   END
    // Fehlerbehandlung
    ERR:  L     S5T#10S
          SE    T      1
          U     T      1
          =     #Fehler                     //Fehler nach 10s ohne korrekte Antwort auslösen
    END:  NOP   0
    Gruss Züttu

  9. Folgender Benutzer sagt Danke zu Züttu für den nützlichen Beitrag:

    PG710 (27.04.2009)

  10. #17
    Registriert seit
    15.09.2006
    Ort
    Hessen
    Beiträge
    361
    Danke
    38
    Erhielt 36 Danke für 30 Beiträge

    Standard

    Um dieses "Weiterspringen, wenn 2mal die gleiche Position gemeldet" kann es hilfreich sein, die jeweilige Flanke abzufragen, also:

    - X- Position übertragen
    - Robi setzt "OK" auf 1
    - Daten vergleichen
    - SPS quittiert "Übertragung erfolgreich"
    - Roboter nimmt "OK" zurück
    - und mit der fallenden Flanke die nächste Übertragung (Y-Position) starten.

    Dauert länger, dann kommt man aber nicht in Schwulitäten, dass die Quittierung noch ansteht und dadurch die Übertragung gleich wegquittiert wird.

    Gruß, Tobias
    Isn't simulating stimulating?

  11. #18
    PG710 ist offline Benutzer
    Themenstarter
    Registriert seit
    25.05.2008
    Beiträge
    45
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Am einfachsten läßt sich so etwas mit SCL programmieren.
    Hast du das nicht, benötigst du indirekte Adressierung. Hierzu lese bitte zuerst die guten Beiträge in der FAQ zu diesem Thema.

    Ich skizziere hier nur mal das Prinzip, aber der ganze Spaß ist wirklich recht simpel zu machen:

    1. Du hast ein MW oder DW, welches deinen Zähler enthält.
    2. Du hast einen Offset, in dem steht, wo dein Datenbereich beginnt (10)

    FC oder FB:

    1. Netzwerk
    Vergleich, ob Zähl-DW < 1
    wenn ja, dann 1 Zähl-DW setzen (nur zur Sicherheit, damit nie ein falscher Wert genutzt wird!)
    Vergleich, ob Zähl-DW > max Anzahl der zu übertragenden Daten (hier 45 DW (DW10-DW100)
    wenn ja, dann Zähl-DW auf 1 setzen

    2. Netzwerk
    Indirekte Adresse für das zu sendende Datenwort aus Zähl-DW und Offset berechnen und den Zeiger erstellen.
    Zähl-DW und Daten-DW auf den Output (am Besten INOUT) des FC legen

    3. Netzwerk
    Input vom Robbi mit den ausgegebenen Daten (Netzwerk 2) vergleichen
    bei Ungleichheit --> internens Timeoutbit auf True
    bei Gleichheit --> internes Timeoutbit auf False, Zähl-DW um 1 erhöhen

    4. Netzwerk
    Wenn Timeoutbit = True, Timer laufen lassen, der nach Ablauf der Zeit ein Störungsbit setzt


    Das Ganze setzt tatsächlich voraus, daß das AB und das AW konsistent übertragen werden. Sonst kann es dazu kommen, daß du die Daten zwar abschickst, diese aber beim Robbi zu unterschiedlichen Zeiten eintreffen und umgekehrt. Wenn man das gar nicht garantieren kann, muß man z.Bsp. mit Triggern (Flanken) arbeiten. Man überwacht in diesem Fall z.Bsp. die Nummer (AB66) auf Änderung, bildet daraus eine Flanke und wartet dann noch eine Zeit X, bis man die Daten übernimmt. Ist diese Zeit groß genug gewählt, wird das ziemlich sicher gehen. Evt. besser wäre in diesem Fall ein Triggerbit. Man legt die Daten wie oben beschrieben auf die Ausgänge, wartet nun eine Zeit X und setzt danach ein Übernahmebit. Mit diesem Bit übernimmt der Robbi die Daten. Ich hab auch schon Varianten gesehen, wo die gleiche Nummer 2 Mal gesendet wird. AB60 Nummer_1 AW62 Daten, AB64 Nummer_2. Nur wenn beide Nummern gleich sind, werden die Daten vom Robbi übernommen. Ausgehend von der Annahme, daß die Daten in Reihenfolge nacheinander auf den Bus kommen, könnte man annehmen, daß dann die Daten in der Mitte auch komplett und gültig sind.

    Wichtig ist auch mal zu abzuklären, was passiert, wenn der Robbi fehlerhafte Daten bekommt. Kann es dann zum Crash kommen?
    __________________
    Gruß
    Ralle
    @all
    erst mal vielen Dank für eure Antworten. Klasse

    @ralle
    SCL programmierung kann ich nun gar nicht.
    Ich dachte mir schon dass du das recht simple findest. Deine Antworten hier im board sind echt klasse und du bist ja echt der Profi unter den Profis. Leider finde ichs nicht so easy und die beiden Vorschläge von HaDi und Zütti konnte ich noch net testen.
    Kannst du dir bitte die Mühe machen und deinen Vorschlag auch noch posten. Vielen Dank für deine Bemühungen.

    Wenn der Robby falsche Daten bekommt, kann dies schon zum crash führen. Man könnte auch das Eingabefeld im OP begrenzen so dass man nicht zu grosse Werte eintragen kann. Es sind schliesslich nur Korrekturwerte im mm Bereich.

    Gruss an alle

  12. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PG710 Beitrag anzeigen
    @ralle
    SCL programmierung kann ich nun gar nicht.
    Ich dachte mir schon dass du das recht simple findest. Deine Antworten hier im board sind echt klasse und du bist ja echt der Profi unter den Profis. Leider finde ichs nicht so easy und die beiden Vorschläge von HaDi und Zütti konnte ich noch net testen.
    Kannst du dir bitte die Mühe machen und deinen Vorschlag auch noch posten. Vielen Dank für deine Bemühungen.

    Wenn der Robby falsche Daten bekommt, kann dies schon zum crash führen. Man könnte auch das Eingabefeld im OP begrenzen so dass man nicht zu grosse Werte eintragen kann. Es sind schliesslich nur Korrekturwerte im mm Bereich.

    Gruss an alle
    Dazu fehlt mir im Moment die Zeit, bin bei ner IBN, ich hab ja den Ablauf rel. genau beschrieben. Versuchs doch mal und stell den Code hier ein, wenn es Probleme gibt.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Datenübergabe von USB an M277 an SPS
    Von Andree Kuhlmann im Forum HMI
    Antworten: 1
    Letzter Beitrag: 03.09.2011, 10:56
  2. Datenübergabe Safety FB --> Standart FB
    Von iPDI im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.08.2011, 15:54
  3. Datenübergabe an eine Leitwarte (S7-PC)
    Von progmann im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.09.2010, 15:14
  4. Datenübergabe an Bosch-Rexroth Indradrive
    Von Nordischerjung im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.05.2009, 12:03

Lesezeichen

Berechtigungen

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