IEC104 Kommunikation S7-1500

Aus wiki.vistera.de
Zur Navigation springen Zur Suche springen

Allgemein

Die Kommunikation über IEC104 wird in der S7-1500 mit Siemens SIPLUS RIC projektiert. Dabei handelt es sich um eine Baustein-Bibliothek von Siemens mit allen benötigten Funktionen.

Zum Betrieben von SIPLUS RIC wird eine entsprechende Lizenz benötigt.

Lizenzierung

Zum Betrieben von SIPLUS RIC muss ein entsprechendes Lizenzpaket vorhanden sein.

Im Programm wird der Registration Code der Lizenz benötigt. Diesen muss man zunächst bei folgender Adresse beantragen:

siplus-ric.automation@siemens.com

Folgende Informationen müssen hierbei übermittelt werden:

  • Bestellnummer der Lizenz
  • Lizenznummer
  • Seriennummer der verbauten Speicherkarte

Hardware

Für IEC104 bzw. SIPLUS RIC wird mindestens eine CPU 1515-2 PN benötigt. Hierbei kann die Fernwirkkommunikation über die Schnittstelle X2 erfolgen.

Adressierung

Im SCADA System auf der Gegenseite wird bei jedem Datenpunkt High, Middle und Low angegeben. Daraus ergibt sich eine IEC Objektadresse.

Diese wird wie folgt berechnet:

  • Dezimal High *10.000
  • Dezimales Ergebnis im Rechner in Hex eingeben
  • Dezimalwert merken
  • Dezimal Middle *100
  • Dezimales Ergebnis in Rechner in Hex eingeben
  • Dezimalwert merken
  • Ergebnis High + Ergebnis Middle + Low = Objektadresse

Beispiel

  • High = 3
  • Middle = 2
  • Low = 30

3*10.000 = 30.000 (30.000 HEX = 196608 in Dezimal)

2*100 = 200 (200 HEX = 512 in Dezimal)

196608 (High) + 512 (Middle) + 30 (Low) = 197150 (IEC Objektadresse)

Excel

In Excel kann dies wie folge eingegeben werden:

=HEXINDEZ(DEZINHEX(I320)*10000)+HEXINDEZ(DEZINHEX(J320)*100)+HEXINDEZ(DEZINHEX(K320))

Hierbei müssen nur die Zellen ersetzt werden.

Grundprogramm

Hier wird beschrieben, welche Bausteine mindestens zur Grundeinrichtung der Verbindung verwendet werden müssen.

Das gesamte Programm sollte in einem FB erstellt werden.

Der FB sollte folgende InOut Parameter haben:

  • P_Appl (DWord)
  • P_SLi (DWord)
  • ASDU_adr (DInt)

Zusätzlich sollten folgende Temp Parameter angelegt werden:

  • Time_Diff (Time)
  • DST (Bool)
  • TIV (Bool)
  • Dummy Bool (Bool)

Netzwerk 1

In diesem Netzwerk wird die ASDU Adresse angegeben, sowie die Uhrzeit ermittelt.

Die ASDU Adresse muss vom Kunden bzw. der Gegenseite vorgegeben werden.

ASDU Adresse eingeben, Uhrzeit ermitteln

Netzwerk 2

Im zweiten Netzwerk wird die Hauptverbindung zur Gegenseite aufgebaut und parametriert.

FB104 - S7_IEC_104_MS_CPU_PN

Die Parameter müssen wie im Bild eingestellt werden. Folgende Parameter sind je nach Projekt unterschiedlich:

  • Registration_Code = Code von Siemens per Mail (siehe Lizenzierung)
  • L1_InterfaceID_C1 = Hardwarekennung der Profinet Schnittstelle der CPU
  • L1_IP_Address_HH_C1 bis L1_IP_Address_LL_C1 = IP-Adresse der Gegenseite
  • L1_InterfaceID_C2 = Hardwarekennung der Profinet Schnittstelle der CPU für alternative Verbindung zur Gegenseite
  • L1_IP_Address_HH_C2 bis L1_IP_Address_LL_C2 = Alternative IP-Adresse der Gegenseite
FB104 - S7_IEC104_MS_CPU_PN

Netzwerk 3

In diesem Netzwerk wird die ASDU Adresse im Programm zugewiesen.

Die Parameter müssen wie im folgenden Bild eingestellt werden.

FB121 - SL_Org_ASDU_1

Bausteine

Im folgenden wird beschrieben, welche Bausteine es gibt, wofür sie verwendet werden und wie diese eingestellt werden müssen.

FB135 - SLo_SC_DC_RC_sx (Befehle empfangen)

Mit diesen Baustein können Befehle von der Gegenseite empfangen werden.

Folgende Parameter müssen eingestellt werden:

  • P_Application = InOut Variable #P_Appl
  • ASDU_adr = InOut Variable #ASDU_adr
  • First_InfoAdr = Adresse des ersten Befehls (IEC Objektadresse)
  • First_Destination_Pos = Pointer auf ersten Befehl in lokalem Datenbaustein
  • No_of_In = Anzahl der Befehle angeben (maximal 255)
  • Send_Termination = True
  • Lock = False
  • Time_Q0 bis Time_Q2 = T#2s

FB136 - SLo_SE_ABC_sx (Sollwerte empfangen)

Mit diesen Baustein können Sollwerte von der Gegenseite empfangen werden.

Folgende Parameter müssen eingestellt werden:

  • P_Application = InOut Variable #P_Appl
  • ASDU_adr = InOut Variable #ASDU_adr
  • First_InfoAdr = Adresse des ersten Sollwertes (IEC Objektadresse)
  • First_Destination_Pos = Pointer auf ersten Sollwert in lokalem Datenbaustein
  • No_of_In = Anzahl der Sollwerte angeben (maximal 255)
  • Dst_Struct_Type = 2 (wenn Realwerte verwendet werden)
  • Send_Termination = True
  • Lock = False

FB130 - SLi_SP_DP_s128 (Meldungen senden)

Mit diesem Baustein können Meldungen im Format Bool an die Gegenseite gesendet werden. Dabei sind pro Bausteinaufruf maximal 128 Meldungen möglich.

Folgende Parameter müssen eingestellt werden:

  • P_SLi = InOut Variable #P_SLi
  • First_Source_Pos = Pointer auf erste Meldung in lokalem Datenbaustein
  • First_IEC_Info_Adr = IEC Objektadresse der ersten Meldung
  • Src_Struct_Type = 0
  • Val_Type = 1 (Einzelmeldung)
  • No_of_Infos = Anzahl der Meldungen (maximal 128)
  • Tx_Prio = 0 (0 = höchste Priorität, 15 = niedrigste Priorität)
  • Time_3_7 = True
  • Time_Stamp_spo = False
  • Time_Stamp_cyc = False
  • Time_Stamp_req = False
  • Send_Cyclic_Interval_sec = 0 (ohne zyklische Übertragung)

FB133 - SLi_ME_ABC_s32 (Messwerte senden)

Mit diesem Baustein können Messwerte an die Gegenseite gesendet werden. Dabei sind pro Bausteinaufruf maximal 32 Messwerte möglich.

Folgende Parameter müssen eingestellt werden:

  • P_SLi = InOut Variable #P_SLi
  • First_Source_Pos = Pointer auf ersten Messwert in lokalem Datenbaustein
  • First_IEC_Info_Adr = IEC Objektadresse des ersten Messwertes
  • Src_Struct_Type = 2 (Real)
  • Val_Type = 13 (Messwerte, verkürzte Gleitkommazahl)
  • No_of_Infos = Anzahl der Messwerte (maximal 32)
  • Tx_Prio = 1 (0 = höchste Priorität, 15 = niedrigste Priorität)
  • Time_3_7 = True
  • Time_Stamp_spo = False
  • Time_Stamp_cyc = False
  • Time_Stamp_req = False
  • Use_Initiation_Method = False
  • Send_Cyclic_Interval_sec = 180 (Messwerte alle 180 Sekunden senden bzw. aktualisieren)

FB134 - SLi_IT_s8 (Zählwerte senden)

Mit diesem Baustein können Zählwerte an die Gegenseite gesendet werden. Dabei sind pro Bausteinaufruf maximal 8 Zählwerte möglich.

Folgende Parameter müssen eingestellt werden:

  • P_SLi = InOut Variable #P_SLi
  • First_Source_Pos = Pointer auf ersten Zählwert in lokalem Datenbaustein
  • First_IEC_Info_Adr = IEC Objektadresse des ersten Zählwertes
  • Src_Struct_Type = 0 (4 Byte Zählwert)
  • Val_Type = B#16#F
  • No_of_Infos = Anzahl der Zählwerte (maximal 8)
  • Tx_Prio = 1 (0 = höchste Priorität, 15 = niedrigste Priorität)
  • Time_3_7 = True
  • Send_spontaneous = True
  • Time_Stamp_spo = False
  • Time_Stamp_req = False
  • Info_QOI = B#16#0
  • Reqco_QCC = B#16#0
  • Frz_Cyclic_Interval_sec = 60 (Zählwerte alle 60 Sekunden senden bzw. aktualisieren)
  • Cyc_Freeze_with_Delete = False