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

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

Thema: Kommunikation zwischen einer 1516-3PN/DP und einer 315 2PN/DP mit CP343-1 Lean

  1. #21
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Dagobert1987 Beitrag anzeigen
    Naja ich muss doch die Get Befehle Aufrufen und ob ich die der Übersichtshalber im FC mache oder im OB1 ist doch egal
    Jap aber jeder GET und PUT braucht seine eigene Instanz. Das heisst wenn du die im OB1 oder in einem FC aufrufst musst du jedem seinen eigenen globalen Instanzdb zuweisen. deklarierst du die aber im STAT eines FBs dann landen die alle im selben instanzdb (dem des aufrufenden FB) was die zu händelnde Bausteinmenge doch arg reduziert (je nach menge der anfallenden Kommunikation). Du hast jetzt nicht womöglich irgendwo die Instanz eines PUT oder GET zweimal aufgerufen?

    Ich hab dir mal einen Baustein gemacht. Versuch den mal.
    Einfach als Externe Quelle einfügen und übersetzen.

    Code:
    FUNCTION_BLOCK "PUTGETen"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          VerbindungsID : Word;
       END_VAR
    
    
       VAR_IN_OUT 
          PUT_Addr : Remote;
          PUT_SD : Variant;
          GET_Addr : Remote;
          GET_SD : Variant;
       END_VAR
    
    
       VAR 
          PUT_Instance {OriginalPartName := 'PUT_SFB_PART'; LibVersion := '1.3'} : PUT;
          put_done : Bool;
          put_error : Bool;
          put_status : Word;
          put_err_status_sav : Word;
          put_done_status_sav : Word;
          request : Bool;
          Requestreset {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
          GET_Instance {OriginalPartName := 'GET_SFB_PART'; LibVersion := '1.3'} : GET;
          getrequest : Bool;
          get_err_status_sav : Word;
          get_done_status_sav : Word;
          get_Requestreset {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
       END_VAR
    
    
    
    
    BEGIN
    	#PUT_Instance(REQ:=#request,
    	              ID:=#VerbindungsID,
    	              ADDR_1:=#PUT_Addr,
    	              SD_1:=#PUT_SD);
    	
    	IF #PUT_Instance.ERROR THEN
    	    #put_err_status_sav := #PUT_Instance.STATUS;
    	END_IF;
    	
    	IF #PUT_Instance.DONE THEN
    	    #put_done_status_sav := #PUT_Instance.STATUS;
    	END_IF;
    	
    	#request := true;
    	IF #PUT_Instance.ERROR OR #PUT_Instance.DONE OR #Requestreset.Q THEN
    	    #request := false;
    	END_IF;
    	
    	#Requestreset(IN:=#request,
    	              PT:=t#5s);
    	
    	#GET_Instance(REQ:=#getrequest,
    	              ID:=#VerbindungsID,
    	              ADDR_1:=#GET_Addr,
    	              RD_1:=#GET_SD);
    	
    	IF #GET_Instance.ERROR THEN
    	    #get_err_status_sav := #GET_Instance.STATUS;
    	END_IF;
    	
    	IF #GET_Instance.NDR THEN
    	    #get_done_status_sav := #GET_Instance.STATUS;
    	END_IF;
    	
    	#getrequest := true;
    	IF #GET_Instance.ERROR OR #GET_Instance.NDR OR #get_Requestreset.Q THEN
    	    #getrequest := false;
    	END_IF;
    	
    	#get_Requestreset(IN := #getrequest,
    	              PT := t#5s);
    	
    	
    END_FUNCTION_BLOCK

  2. #22
    Registriert seit
    15.05.2012
    Beiträge
    31
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Einfach ist gut. Über einen Hinweis wie einfach wäre ich dankbar.

  3. #23
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Den Text in eine Textdatei kopieren (z.B. eine textdatei erstellen die da heist PUTGET.scl)

    Ansonsten die Quelle hier holen:
    https://www.dropbox.com/sh/qywy7jmii...o2JyUDWWa?dl=0

    irgendwohin kopieren, dann in deinem Projekt im ordner. Externe Quellen. Das ist der zweite Ordner unter Programmbausteine einer jeder CPU die du in deinem Projekt hast.

    Rechtsklick drauf und übersetzen wählen.

    aufgerufen wird dann so:
    Code:
    "test_DB"(VerbindungsID:=16#100,
              PUT_Addr:=p#db6.dbx0.0 byte 44,
              PUT_SD:=p#db6.dbx0.0 byte 44,
              GET_Addr:=p#db7.dbx0.0 byte 44,
              GET_SD:=p#db7.dbx0.0 byte 44);
    oder So:
    Code:
          CALL  "PUTGETen", "PUTGETen_DB_1"
             VerbindungsID :=w#100
             PUT_Addr      :=P#DB6.DBX0.0 BYTE 44
             PUT_SD        :=P#DB6.DBX0.0 BYTE 44
             GET_Addr      :=P#DB7.DBX0.0 BYTE 44
             GET_SD        :=P#DB7.DBX0.0 BYTE 44
    mfG René
    Geändert von vollmi (29.07.2015 um 12:25 Uhr)

  4. Folgende 2 Benutzer sagen Danke zu vollmi für den nützlichen Beitrag:

    Dagobert1987 (29.07.2015),eYe (29.07.2015)

  5. #24
    Registriert seit
    15.05.2012
    Beiträge
    31
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So also Daten werden jetzt transferiert Super DANKE

  6. #25
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und für Fehlersuche findest du in der Instanz die *sav Worte. dort wird sowohl der letzte Fehler wie auch der letzte done Status abgelegt. Erleichtert die Fehlersuche.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 17.11.2014, 15:47
  2. Antworten: 3
    Letzter Beitrag: 04.04.2013, 17:37
  3. Antworten: 10
    Letzter Beitrag: 14.04.2012, 17:28
  4. Antworten: 2
    Letzter Beitrag: 07.11.2011, 14:29
  5. Antworten: 5
    Letzter Beitrag: 20.04.2010, 21:09

Lesezeichen

Berechtigungen

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