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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: S7 1200 Put und Get als Multiinstanz möglich?

  1. #1
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    die Überschrift sagt das alles schon aus, geht das mit der 1200? Ich hatte da mal ein Derivat der 300, da ging eine Multiinstanz mit diesen Befehlen gar nicht.

    Gruß
    Mario
    Zitieren Zitieren S7 1200 Put und Get als Multiinstanz möglich?  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Multiinstanz funktioniert.

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

    mariob (30.05.2016)

  4. #3
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard

    Danke vollmi,
    nochwas, wie ist der Auftragsstatus von Put oder Get bei Fehler, wird der Auftrag dann beendet oder oder läuft der ewig weiter? Wenn letzterer Fall, wie kann ich den abwürgen? Ich muß den Kram hier mangels HW trocken schreiben und in den Handbüchern steht nix dazu.....

    Gruß
    Mario

  5. #4
    Registriert seit
    11.12.2009
    Beiträge
    2.113
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Hallo Mario,

    wenn es bei Dir um deine 1200er geht guckt dir I-Device an

    Hardwareconfig -> Profinet -> Betriebsart -> I-Device ... und dann ist es fast selbsterklärend.

    Grüße

    Marcel
    Stell Dir vor es geht, und keiner kriegts hin!

  6. #5
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard

    Hallo,
    und danke Matze, nee das hier ist viel schlimmer, noch schlimmer. Das wird nur mit dieser oder von mir aus den Bsend oder so beherrschbar wenn überhaupt. Ansonsten wäre das Ei Deweise ne feine Sache . Wie schon gefragt, beenden sich die Aufträge mit dem Fehlerstatus oder muß man die abwürgen, wenn ja dann wie?

    Gruß
    Mario

  7. #6
    Registriert seit
    11.12.2009
    Beiträge
    2.113
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Ich meine sie beenden sich selbst.
    Du musst "nur" im Fehlerfall das ganze nochmal anschubsen... also neu Triggern o.ä.
    Aber ich hab es lang nicht mehr gemacht, muss ich ja gestehen.

    Grüße

    Marcel
    Stell Dir vor es geht, und keiner kriegts hin!

  8. #7
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard

    Hi,
    ich dachte das auch so, da die Dinger ja nur durch eine Flanke angestoßen werden, eigentlich hatte ich noch eine Zeitüberwachung mitgeschleppt, diese ist aber sinnlos wenn sich der Auftrag eh nicht beenden läßt, der Fehlerstatus ist dann ja sowieso da und beenden kann man eben nicht. Ich programmiere das mal so und lasse das mit der Zeit sein. Danke nochmal. Man liest sich im Chat, da können wir das bei gelegenheit nochmal aufwärmen.

    Gruß
    Mario

  9. #8
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Zitat Zitat von mariob Beitrag anzeigen
    Danke vollmi,
    nochwas, wie ist der Auftragsstatus von Put oder Get bei Fehler, wird der Auftrag dann beendet oder oder läuft der ewig weiter? Wenn letzterer Fall, wie kann ich den abwürgen? Ich muß den Kram hier mangels HW trocken schreiben und in den Handbüchern steht nix dazu.....
    Dann kommt ein Error zurück mit entsprechendem Status. Der Req muss neu angestossen werden zum senden.

    Funktioniert also eigentlich wie bei der 300er 400er.
    Einzig das Ziel muss nun PUT/GET zulassen (S7-1200/1500).

    Du könntest das eigentlich als vorlage nehmen. funktioniert mit Get genauso hier musst du dir halt überlegen wann was geholt werden soll und entsprechend den Req anstossen.
    Code:
    FUNCTION_BLOCK "Befehl_PUT_INT"{ S7_Optimized_Access := 'FALSE' }
    AUTHOR : VoR
    FAMILY : Kom
    VERSION : 0.3
    //Baustein sendet einen Integer Befehl zur Partnerstation. Einmalig.
       VAR_INPUT 
          ID : Word;   // VerbindungsID zum Partner
       END_VAR
    
    
       VAR_IN_OUT 
          Befehl : Int;
          Adresse : Int;
          Datenbaustein : Int;
       END_VAR
    
    
       VAR 
          PUT_Instance {OriginalPartName := 'PUT_SFB_PART'; LibVersion := '1.3'} : PUT;
          BSEND_LEN : Word;
          Anypoint : "ANY_POINTER";
          send : Bool;
          save_status_Put : Word;
          Angsttimer {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
       END_VAR
    
    
       VAR_TEMP 
          index : Int;
          SndADDR : Remote;
          pSndADDR AT SndADDR : "ANY_POINTER";
       END_VAR
    
    
       VAR CONSTANT 
          "Null" : Word := 16#0000;
          Anzahl : Int := 2;
       END_VAR
    
    
    
    
    BEGIN
    	IF (#Befehl <> 0) AND (#Datenbaustein <> 0) THEN
    	  #send := true;
    	END_IF;
    	
    	
    	#pSndADDR := #Anypoint; // in Temp kopieren für überlagerung um Startwerte zu setzen
    	#pSndADDR.Anzahl_Werte := 1;
    	#pSndADDR.Startadresse := 16#8400_0000 OR SHL(IN := INT_TO_DWORD(#Adresse), N := 3);
    	#pSndADDR.DB_Nr := #Datenbaustein;
    	
    	#PUT_Instance(REQ := #send,
    	              ID := #ID,
    	              ADDR_1 := #SndADDR,
    	              SD_1 := #Befehl);
    	
    	IF #PUT_Instance.ERROR THEN
    	  #save_status_Put := #PUT_Instance.STATUS;
    	END_IF;
    	
    	IF #PUT_Instance.DONE OR #PUT_Instance.ERROR OR #Angsttimer.Q THEN
    	  #send := false;
    	  #Befehl := 0;
    	END_IF;
    	
    	#Angsttimer(IN := #send,
    	            PT := t#1s);
    	
    	
    END_FUNCTION_BLOCK
    mfG René

  10. #9
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard

    Hi,
    danke für den Code Vollmi, das ist hier ein wenig komplexer, das sind mehrere Verbindungen die der Reihe nach abgeklappert werden, ich erschlage das zur Zeit in einer Schrittkette, ein ständiges Herumklopfen dann auf einer nicht funktionierenden Verbindung wäre dann kontraproduktiv, die muß dann warten bis sie wieder dran ist. Ich will daher sicherstellen das da nicht mehrere gleichzeitig laufen, das endet dann eventuell böse.

    Gruß
    Mario

  11. #10
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von mariob Beitrag anzeigen
    Hi,
    danke für den Code Vollmi, das ist hier ein wenig komplexer, das sind mehrere Verbindungen die der Reihe nach abgeklappert werden, ich erschlage das zur Zeit in einer Schrittkette, ein ständiges Herumklopfen dann auf einer nicht funktionierenden Verbindung wäre dann kontraproduktiv, die muß dann warten bis sie wieder dran ist. Ich will daher sicherstellen das da nicht mehrere gleichzeitig laufen, das endet dann eventuell böse.
    Geht ja nur darum wie man ihn wieder anstossen könnte. Im beispiel sieht man einfach besser, dass der Req kurz weggenommen werden muss um den Auftrag neu anzustossen.
    übrigens ich habe auch bei zyklischem Anstossen einer nicht funktionierenden Verbindungen bisher keinerlei Verzögerungen der übrigen Verbindungen bemerkt. Ob da wirklich durch anstossen gestörter Verbindungen nachteile bei den laufenden Verbindungen entstehen können dir sicher die Experten hier verraten. Würde mich auch interessieren.

    mfG René

Ähnliche Themen

  1. Antworten: 21
    Letzter Beitrag: 25.01.2013, 09:10
  2. SFB14/15 Aufruf in Multiinstanz-FB möglich??
    Von danube im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.10.2012, 14:38
  3. Antworten: 1
    Letzter Beitrag: 02.03.2012, 10:33
  4. Antworten: 9
    Letzter Beitrag: 15.12.2010, 12:27
  5. ANY am PUT einer FC möglich?
    Von C_H im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.02.2008, 16:35

Lesezeichen

Berechtigungen

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