TIA RYDSYSST von S7-300 auf S7-1500 CPU umsetzen

voyagerhd

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle TIA und S7-1500 Experten :-)

Ich bräuchte dringend Hilfe bei der umsetzung folgender SCL Anweisung aus einem bestehenden FB in der S7-300 Welt auf die S7-1500er.
Mit den zur Verfügung stehenden Hinweisen in der TIA-Hilfe und im Industry Online Support bin ich nicht wirklich weiter gekommen :confused:.

Hier die S7-300 Anweisung:

// SZL auslesen
// TCP/IP
#ErrorCodeTCP := RDSYSST(REQ := #Request, SZL_ID := W#16#37, INDEX := W#16#0, BUSY => #ReadingOperationTCP, SZL_HEADER => #SZL_TCPIP_Header, DR => #SZL_TCPIP_Data);
// MMC
#ErrorCodeMMC := RDSYSST(REQ := #Request, SZL_ID := W#16#011C, INDEX := W#16#0008, BUSY => #ReadingOperationMMC, SZL_HEADER => #SZL_MMC_Header, DR => #SZL_MMC_Data);

Für Lösungsansätze ware ich euch sehr dankbar.

VG
voyagerhd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, die Seite kenne ich auch schon. Allerdings finde ich in der SZL-ID Liste nicht die Werte wieder (SZL_ID := W#16#37 und SZL_ID := W#16#011C), die aktuell im S7-FB verwendet werden.
Muss noch dazu sagen, dass ich auch kein SCL Experte bin.
 
Das wird in den 1500ern mit den Modulen
Get_Diag, Device_states etc. ausgelesen
Wie man jeztt genau die Speicherkartennummer ausliest oder die Ethernetkonfiguration, weiss ich nicht auswendig. Aber es wird einer der Bausteine aus der Diagnose und Adressierungsgruppe liefern unter Erweiterte Anweisungen.
 
Nein, die Seite kenne ich auch schon. Allerdings finde ich in der SZL-ID Liste nicht die Werte wieder (SZL_ID := W#16#37 und SZL_ID := W#16#011C), die aktuell im S7-FB verwendet werden.

Die SZL-ID ist abhängig von der 300er die du verwendet hast.
Aber die ID 37 wäre bei PN CPUS die Konfiguration der Netzwerkports gewesen.
Und die 11C Adresse 8 wäre die MMC Seriennummer, wenn ich mich recht erinnere.

mfG René
 
So, dass mit der MMC bzw. jetzt bei 1500er SMC habe ich hinbekommen (in KOP erstmal):
GetImData.jpgDB_SMC.jpg

Habe dafür die "SampleLibraryForInstructions" heruntergeladen und ein Programmbeispiel angepaßt. Das Auslesen erfolgt mit der Systemfunction "GET_IM_DATA".

Für das Auslesen der IP- und MAC-Adresse wollte ich die Anweisung "GetStationInfo" nutzen. Funktioniert aber leider nicht.
Hier der Aufruf:

GetStationInfo.jpg

Wenn ich das Parameter "Mode" mit "0" beschalte bekomme ich den Fehler "8080 -Wert am Parameter MODE wird nicht unterstützt", obwohl dies in der TIA-Hilfe so vorgegeben wird.
Beschalte ich Parameter "Mode" mit "1" beschalte bekomme ich den Fehler "8092 - Der Parameter LADDR adressiert kein PROFINET IO-Device". Ich möchte allerdings auch die IP und MAC der CPU auslesen. Vielleicht ist da der Haken.
Wie versteht ihr diesen Eintrag in der Hilfe:

Info.jpg

Diese Variante scheint aber sehr kompliziert zu sein.

Hat da jemand Erfahrungen mit oder eine Idee?

VG
Heinz
 
Das da hab ich mal vor Jahren bei Siemens geklaut. Das sollte aber immernoch funktionieren.

Code:
FUNCTION_BLOCK "Read_IP"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      ReqIN : Bool;
      Hardware_ID : Word := 16#64;
   END_VAR


   VAR_OUTPUT 
      IPParam : Struct
         IPAddress : Array[0..3] of USInt;
         SubnetMask : Array[0..3] of USInt;
         StandardGateway : Array[0..3] of USInt;
         MACAddress : Array[0..5] of USInt;
         PNName : String;
      END_STRUCT;
      Busy : Bool;
      Valid : Bool;
      Error : Bool;
      Status : DWord;
      LEN : UInt;
   END_VAR


   VAR 
      ReqFlag : Bool;
      RDREC_Status : DWord;
      RDREC_LEN : UInt;
      RDREC_Valid : Bool;
      RDREC_Busy : Bool;
      RDREC_Error : Bool;
      StatusSave : DWord;
      PDInterfaceDataReal : Struct
         BlockType : UInt;
         BlockLength : UInt;
         BlockVersionHigh : USInt;
         BlockVersionLow : USInt;
         Data : Array[0..301] of Byte;
         OwnChassisID : String;
      END_STRUCT;
   END_VAR


   VAR_TEMP 
      IPParValStartAddress : USInt;
      LengthOwnChassisID : USInt;
   END_VAR




BEGIN
	  
	  "R_TRIG_DB"(CLK:=#ReqIN,
	              Q=>#ReqFlag);
	  
	  
	
	
	"RDREC_DB"(REQ:=#ReqFlag,
	           ID:=#Hardware_ID,
	           INDEX:=w#16#8080,
	           MLEN:=300,
	           VALID=>#RDREC_Valid,
	           BUSY=>#RDREC_Busy,
	           ERROR=>#RDREC_Error,
	           STATUS=>#RDREC_Status,
	           LEN=>#RDREC_LEN,
	           RECORD:= #PDInterfaceDataReal);
	
	
	
	IF #RDREC_Valid THEN
	  
	   // Get PN-interface Name. String starts at an odd address within the array
	   Chars_TO_Strg(Chars := #PDInterfaceDataReal.Data, pChars := 1, Cnt := #PDInterfaceDataReal.Data[0], Strg => #IPParam.PNName );
	   
	   // Calculate start address of IP-address data. Blockdata is padded to make it Unsigned32 aligned!      
	    #IPParValStartAddress := #PDInterfaceDataReal.Data[0]  + (4 - ((#PDInterfaceDataReal.Data[0] + 2) MOD 4));
	    
	  
	  
	 // Copy MAC-Address data
	    #IPParam.MACAddress[0] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 0];
	    #IPParam.MACAddress[1] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 1];
	    #IPParam.MACAddress[2] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 2];
	    #IPParam.MACAddress[3] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 3];
	    #IPParam.MACAddress[4] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 4];
	    #IPParam.MACAddress[5] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 5];
	    
	     // Copy IP-Address data
	    #IPParam.IPAddress[0] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 8 + 0];
	    #IPParam.IPAddress[1] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 8 + 1];
	    #IPParam.IPAddress[2] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 8 + 2];
	    #IPParam.IPAddress[3] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 8 + 3];
	    
	    // Copy Subnetmask data
	    #IPParam.SubnetMask[0] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 12 + 0];
	    #IPParam.SubnetMask[1] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 12 + 1];
	    #IPParam.SubnetMask[2] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 12 + 2];
	    #IPParam.SubnetMask[3] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 12 + 3];
	  
	  // Copy Standard Gateway data
	    #IPParam.StandardGateway[0] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 16 + 0];
	    #IPParam.StandardGateway[1] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 16 + 1];
	    #IPParam.StandardGateway[2] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 16 + 2];
	    #IPParam.StandardGateway[3] := #PDInterfaceDataReal.Data[#IPParValStartAddress + 16 + 3];
	  
	END_IF;
	
	IF #RDREC_Error THEN
	  // Statement section IF
	  #StatusSave:=#RDREC_Status;
	  #LEN:=0;
	ELSE
	  #StatusSave:=0;
	  #LEN:=#RDREC_LEN;
	END_IF;
	
	
	IF  #RDREC_Error OR #RDREC_Valid THEN
	  // Statement section IF
	  #ReqFlag:=FALSE;
	END_IF;
	
	#Status:=#StatusSave;
	#Valid:=#RDREC_Valid;
	#Busy:=#RDREC_Busy;
	#Error:=#RDREC_Error;
	
	
	
END_FUNCTION_BLOCK
 
Zurück
Oben