GUDs lesen und schreiben 840D

PG710

Level-1
Beiträge
45
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin gerade dran den Datenaustausch zwischen einer 840D, NC <---> PLC zu programmieren. Hier speziell die GUDs.
Leider is dies ziemlich schwierig und die Siemens Hotline hat das wohl
auch net im Griff. Ich hoffe hier im Board sind echte Profis die mir weiterhelfen können. Ich habe folgendes Problem:
Die Datenübertragung von der NC zur PLC, sprich die GUDs lesen funktioniert so weit mal. Nur andersrum, Guds schreiben funzt net so richtig. Ich kann zwar die einzelnen GUDs z.b. MGUD oder GUD4 einzeln beschreiben, aber sobald ich mehrere GUDs beschreiben möchte gehts nimmer. Ich stell mal den Lese FB und den schreib FB hier rein. Wäre echt Klasse wenn jemand ne Idee hat.

Mit diesem FB schreibe ich den MGUD. Wenn ich nun dieselb für den UGUD anlege funktioniert das beschreiben der GUDs nicht mehr.

HTML:
    UN    #Freigabe
      R     #DoneSchr
      R     #StartSchr
      SPB   M001
      UN    "M 0.7"
      UN    #StartSchr
      S     #StartSchr
      S     #SchreibAktiv
M001: CALL  "PUT" , DB47
       Req    :=#StartSchr
       NumVar :=8
       Addr1  :=DB52.MGUD_INT
       Unit1  :=
       Column1:=W#16#B
       Line1  :=
       Addr2  :=DB52.MGUD_INT
       Unit2  :=
       Column2:=W#16#C
       Line2  :=
       Addr3  :=DB52.MGUD_INT
       Unit3  :=
       Column3:=W#16#D
       Line3  :=
       Addr4  :=DB52.MGUD_INT
       Unit4  :=
       Column4:=W#16#E
       Line4  :=
       Addr5  :=DB52.MGUD_INT
       Unit5  :=
       Column5:=W#16#19
       Line5  :=
       Addr6  :=DB52.MGUD_INT
       Unit6  :=
       Column6:=W#16#1A
       Line6  :=
       Addr7  :=DB52.MGUD_INT
       Unit7  :=
       Column7:=W#16#1B
       Line7  :=
       Addr8  :=DB52.MGUD_INT
       Unit8  :=
       Column8:=W#16#1C
       Line8  :=
       Error  :=#Error
       Done   :=#DoneSchr
       State  :=#StateSchr
       SD1    :=P#DB200.DBX 100.0 DWORD 1
       SD2    :=P#DB200.DBX 100.0 DWORD 1
       SD3    :=P#DB200.DBX 100.0 DWORD 1
       SD4    :=P#DB200.DBX 100.0 DWORD 1
       SD5    :=P#DB200.DBX 100.0 DWORD 1
       SD6    :=P#DB200.DBX 100.0 DWORD 1
       SD7    :=P#DB200.DBX 100.0 DWORD 1
       SD8    :=P#DB200.DBX 100.0 DWORD 1
      U     #DoneSchr
      O     #Error
      R     #StartSchr
      R     #SchreibAktiv

Mit diesem FB lese ich die GUDs, dies funktioniert auch einwandfrei.

HTML:
    UN    #Freigabe
      SPB   M010
      UN    #DoneLesen1
      UN    #DoneLesen2
      UN    #Vorb1
      S     #LesenAktiv
      U     #Vorb1
      UN    #Gelesen1
      S     #StartLesen1
      U     #Vorb2
      UN    #Gelesen2
      S     #StartLesen2
      U     #Vorb3
      UN    #Gelesen3
      S     #StartLesen3
      U     #Vorb4
      UN    #Gelesen4
      S     #StartLesen4
            U     #ENDE
M010: R     #Gelesen1
      R     #Gelesen2
      R     #Gelesen3
      R     #Gelesen4
      R     #StartLesen1
      R     #StartLesen2
      R     #StartLesen3
      R     #StartLesen4
      R     #Vorb1
      R     #Vorb2
      R     #Vorb3
      R     #Vorb4
      R     #ENDE
      R     #LesenAktiv
      BEB   
      UN    #ENDE
      S     #Vorb1
      U     #Gelesen1
      S     #Vorb2
      U     #Gelesen2
      S     #Vorb3
      U     #Gelesen3
      S     #ENDE
 
      UN    #Vorb1
      O     #Gelesen1
      SPB   M002
      CALL  "GET" , DB46
       Req    :=#StartLesen1
       NumVar :=8
       Addr1  :="S-Gud".SGUD_REAL
       Unit1  :=
       Column1:=W#16#4
       Line1  :=
       Addr2  :="S-Gud".SGUD_REAL
       Unit2  :=
       Column2:=W#16#5
       Line2  :=
       Addr3  :="S-Gud".SGUD_REAL
       Unit3  :=
       Column3:=W#16#6
       Line3  :=
       Addr4  :="S-Gud".SGUD_REAL
       Unit4  :=
       Column4:=W#16#7
       Line4  :=
       Addr5  :="S-Gud".SGUD_REAL
       Unit5  :=
       Column5:=W#16#8
       Line5  :=
       Addr6  :="S-Gud".SGUD_REAL
       Unit6  :=
       Column6:=W#16#C
       Line6  :=
       Addr7  :="S-Gud".SGUD_REAL
       Unit7  :=
       Column7:=W#16#D
       Line7  :=
       Addr8  :="S-Gud".SGUD_REAL
       Unit8  :=
       Column8:=W#16#E
       Line8  :=
       Error  :=#Error1
       NDR    :=#DoneLesen1
       State  :=#StateLes
       RD1    :=P#DB200.DBX 200.0 REAL 1
       RD2    :=P#DB200.DBX 204.0 REAL 1
       RD3    :=P#DB200.DBX 208.0 REAL 1
       RD4    :=P#DB200.DBX 212.0 REAL 1
       RD5    :=P#DB200.DBX 216.0 REAL 1
       RD6    :=P#DB200.DBX 220.0 REAL 1
       RD7    :=P#DB200.DBX 224.0 REAL 1
       RD8    :=P#DB200.DBX 228.0 REAL 1
 
      U     #DoneLesen1
      O     #Error1
      R     #StartLesen1
      S     #Gelesen1
      BEA   
M002: UN    #Vorb2
      O     #Gelesen2
      SPB   M003
      CALL  "GET" , DB46
       Req    :=#StartLesen2
       NumVar :=8
       Addr1  :="S-Gud".SGUD_REAL
       Unit1  :=
       Column1:=W#16#F
       Line1  :=
       Addr2  :="S-Gud".SGUD_REAL
       Unit2  :=
       Column2:=W#16#10
       Line2  :=
       Addr3  :=DB52.MGUD_INT
       Unit3  :=
       Column3:=W#16#4
       Line3  :=
       Addr4  :=DB52.MGUD_INT
       Unit4  :=
       Column4:=W#16#5
       Line4  :=
       Addr5  :=DB52.MGUD_INT
       Unit5  :=
       Column5:=W#16#6
       Line5  :=
       Addr6  :=DB52.MGUD_INT
       Unit6  :=
       Column6:=W#16#7
       Line6  :=
       Addr7  :=DB52.MGUD_INT
       Unit7  :=
       Column7:=W#16#12
       Line7  :=
       Addr8  :=DB52.MGUD_INT
       Unit8  :=
       Column8:=W#16#13
       Line8  :=
       Error  :=#Error2
       NDR    :=#DoneLesen2
       State  :=#StateLes
       RD1    :="GUD Daten".Reset_Standzeit_null
       RD2    :=P#DB100.DBX212.0 DWORD 1
       RD3    :=P#DB100.DBX216.0 DWORD 1
       RD4    :=P#DB100.DBX220.0 DWORD 1
       RD5    :=P#DB100.DBX224.0 DWORD 1
       RD6    :=P#DB100.DBX228.0 DWORD 1
       RD7    :=P#DB100.DBX232.0 DWORD 1
       RD8    :=P#DB100.DBX236.0 DWORD 1
 
      U     #DoneLesen2
      O     #Error2
      R     #StartLesen2
      S     #Gelesen2
      BEA   
M003: UN    #Vorb3
      O     #Gelesen3
      SPB   M005
      CALL  "GET" , DB46
       Req    :=#StartLesen3
       NumVar :=7
       Addr1  :=DB52.MGUD_INT
       Unit1  :=
       Column1:=W#16#14
       Line1  :=
       Addr2  :=DB52.MGUD_INT
       Unit2  :=
       Column2:=W#16#15
       Line2  :=
       Addr3  :=DB53.UGUD_INT
       Unit3  :=
       Column3:=W#16#4
       Line3  :=
       Addr4  :=DB53.UGUD_INT
       Unit4  :=
       Column4:=W#16#5
       Line4  :=
       Addr5  :=DB53.UGUD_INT
       Unit5  :=
       Column5:=W#16#6
       Line5  :=
       Addr6  :=DB53.UGUD_INT
       Unit6  :=
       Column6:=W#16#7
       Line6  :=
       Addr7  :=DB53.UGUD_INT
       Unit7  :=
       Column7:=W#16#8
       Line7  :=
       Addr8  :=
       Unit8  :=
       Column8:=
       Line8  :=
       Error  :=#Error3
       NDR    :=#DoneLesen3
       State  :=#StateLes
       RD1    :=P#DB100.DBX240.0 DWORD 1
       RD2    :=P#DB100.DBX244.0 DWORD 1
       RD3    :=P#DB100.DBX248.0 DWORD 1
       RD4    :=P#DB100.DBX252.0 DWORD 1
       RD5    :=P#DB100.DBX256.0 DWORD 1
       RD6    :=P#DB100.DBX260.0 DWORD 1
       RD7    :=P#DB100.DBX264.0 DWORD 1
       RD8    :=
      U     #DoneLesen3
      O     #Error3
      R     #StartLesen3
      S     #Gelesen3
      BEA   
M005: UN    #Vorb4
      O     #Gelesen4
      SPB   M006
      CALL  "GET" , DB46
       Req    :=#StartLesen4
       NumVar :=6
       Addr1  :=DB54.GUD4_INT
       Unit1  :=
       Column1:=W#16#4
       Line1  :=
       Addr2  :=DB54.GUD4_INT
       Unit2  :=
       Column2:=W#16#5
       Line2  :=
       Addr3  :=DB54.GUD4_INT
       Unit3  :=
       Column3:=W#16#6
       Line3  :=
       Addr4  :=DB54.GUD4_INT
       Unit4  :=
       Column4:=W#16#7
       Line4  :=
       Addr5  :=DB54.GUD4_INT
       Unit5  :=
       Column5:=W#16#8
       Line5  :=
       Addr6  :=DB54.GUD4_INT
       Unit6  :=
       Column6:=W#16#12
       Line6  :=
       Addr7  :=
       Unit7  :=
       Column7:=
       Line7  :=
       Addr8  :=
       Unit8  :=
       Column8:=
       Line8  :=
       Error  :=#Error4
       NDR    :=#DoneLesen4
       State  :=#StateLes
       RD1    :=P#DB100.DBX268.0 DWORD 1
       RD2    :=P#DB100.DBX272.0 DWORD 1
       RD3    :=P#DB100.DBX276.0 DWORD 1
       RD4    :=P#DB100.DBX280.0 DWORD 1
       RD5    :=P#DB100.DBX284.0 DWORD 1
       RD6    :=P#DB100.DBX288.0 DWORD 1
       RD7    :=
       RD8    :=
      U     #DoneLesen4
      O     #Error4
      R     #StartLesen4
      S     #Gelesen4
      BEA   
M009: NOP   0

Besten Dank schon mal an euch für die Mühen.

Gruss
 
Falls es der zweite, von dir gezeigte Codeteil ist hätte ich eine Vermutung anzubieten.

Mit 840D kenne ich mich zwar nicht aus, aber mir kommt dein Programmablauf zum Lesen irgendwie nicht ganz korrekt vor. Das würde ja den reinen S7-Teil betreffen. Du rufst ja immer den gleichen Baustein auf, inkl. IDB. Das geht prinzipiell, da du ja alle anderen Aufrufe umspringst. Allerdings sieht das so aus, als ob nach dem fertigen Lesen, der Baustein sofort abgesperrt ist und dann im nächsten Zyklus beim folgenden Baustein mit neuen Werten das Lesen gestartet wird. Ich denke, mindestens einmal sollte der "alte" Getbaustein nach dem "Lesen fertig" noch aufgerufen werden, damit sich Flanken und andere internen statischen Variablen noch zurückstellen können. Das ist generell ein Problem, wenn man FB mit IDB einfach umspringt, für mich eigentlich auch eher eine gefährliche Lösung.
 
Zurück
Oben