TIA TCP Verbindung zwischen PC und 315 2 PN/DP

Aksels

Level-2
Beiträge
257
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich habe gerade ein Problem mit einer 315-2 PN/DP. Ein PC mit einer proprietären Software soll Daten aus dieser SPS holen.
Beim vorherigen Projekt hatte ich einen CP343 Lean. In diesem musste ich nur Eine TCP-Verbindung Projektieren port 2000 Fetch Passiv S7 Adressierung, und schong konnte der PC alles lesen.

In der 315-2 PN/DP muss man den Baustein FW_TCP zweimal in den OB1 stellen und zwei Datenbausteine mit den passenden Daten basteln.
Da ich nicht weiss wie habe ich diesen vom Open Communication Wizard erstellen lassen.
Der DB für den ersten Aufruf:
Code:
DATA_BLOCK "DB300"
TITLE = Connection Parameters for TCON
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : SIMATIC
FAMILY : COMM
NAME : TCON_PAR
VERSION : 0.1
   STRUCT 
      OUCW_1 : Struct
         block_length : Word;   // #!Warte_PLC!#
         id : Word;
         connection_type : Byte;
         active_est : Bool;
         local_device_id : Byte;
         local_tsap_id_len : Byte;
         rem_subnet_id_len : Byte;
         rem_staddr_len : Byte;
         rem_tsap_id_len : Byte;
         next_staddr_len : Byte;
         local_tsap_id : Array[1..16] of Byte;
         rem_subnet_id : Array[1..6] of Byte;
         rem_staddr : Array[1..6] of Byte;
         rem_tsap_id : Array[1..16] of Byte;
         next_staddr : Array[1..6] of Byte;
         spare : Word;   // #!Warte_PLC!#
      END_STRUCT;
   END_STRUCT;


BEGIN
   OUCW_1.block_length := W#16#0040;
   OUCW_1.id := W#16#0001;
   OUCW_1.connection_type := B#16#01;
   OUCW_1.local_device_id := B#16#02;
   OUCW_1.local_tsap_id_len := B#16#02;
   OUCW_1.local_tsap_id[1] := B#16#D0;
   OUCW_1.local_tsap_id[2] := B#16#07;
   OUCW_1.local_tsap_id[3] := B#16#00;
   OUCW_1.local_tsap_id[4] := B#16#00;
   OUCW_1.local_tsap_id[5] := B#16#00;
   OUCW_1.local_tsap_id[6] := B#16#00;
   OUCW_1.local_tsap_id[7] := B#16#00;
   OUCW_1.local_tsap_id[8] := B#16#00;
   OUCW_1.local_tsap_id[9] := B#16#00;
   OUCW_1.local_tsap_id[10] := B#16#00;
   OUCW_1.local_tsap_id[11] := B#16#00;
   OUCW_1.local_tsap_id[12] := B#16#00;
   OUCW_1.local_tsap_id[13] := B#16#00;
   OUCW_1.local_tsap_id[14] := B#16#00;
   OUCW_1.local_tsap_id[15] := B#16#00;
   OUCW_1.local_tsap_id[16] := B#16#00;
   OUCW_1.rem_subnet_id[1] := B#16#00;
   OUCW_1.rem_subnet_id[2] := B#16#00;
   OUCW_1.rem_subnet_id[3] := B#16#00;
   OUCW_1.rem_subnet_id[4] := B#16#00;
   OUCW_1.rem_subnet_id[5] := B#16#00;
   OUCW_1.rem_subnet_id[6] := B#16#00;
   OUCW_1.rem_staddr[1] := B#16#00;
   OUCW_1.rem_staddr[2] := B#16#00;
   OUCW_1.rem_staddr[3] := B#16#00;
   OUCW_1.rem_staddr[4] := B#16#00;
   OUCW_1.rem_staddr[5] := B#16#00;
   OUCW_1.rem_staddr[6] := B#16#00;
   OUCW_1.rem_tsap_id[1] := B#16#00;
   OUCW_1.rem_tsap_id[2] := B#16#00;
   OUCW_1.rem_tsap_id[3] := B#16#00;
   OUCW_1.rem_tsap_id[4] := B#16#00;
   OUCW_1.rem_tsap_id[5] := B#16#00;
   OUCW_1.rem_tsap_id[6] := B#16#00;
   OUCW_1.rem_tsap_id[7] := B#16#00;
   OUCW_1.rem_tsap_id[8] := B#16#00;
   OUCW_1.rem_tsap_id[9] := B#16#00;
   OUCW_1.rem_tsap_id[10] := B#16#00;
   OUCW_1.rem_tsap_id[11] := B#16#00;
   OUCW_1.rem_tsap_id[12] := B#16#00;
   OUCW_1.rem_tsap_id[13] := B#16#00;
   OUCW_1.rem_tsap_id[14] := B#16#00;
   OUCW_1.rem_tsap_id[15] := B#16#00;
   OUCW_1.rem_tsap_id[16] := B#16#00;
   OUCW_1.next_staddr[1] := B#16#00;
   OUCW_1.next_staddr[2] := B#16#00;
   OUCW_1.next_staddr[3] := B#16#00;
   OUCW_1.next_staddr[4] := B#16#00;
   OUCW_1.next_staddr[5] := B#16#00;
   OUCW_1.next_staddr[6] := B#16#00;

END_DATA_BLOCK


Der DB für den zweiten Aufruf:
Code:
DATA_BLOCK "DB301"
TITLE = Connection Parameters for TCON
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : SIMATIC
FAMILY : COMM
NAME : TCON_PAR
VERSION : 0.1
   STRUCT 
      OUCW_1 : Struct
         block_length : Word;   // #!Warte_PLC!#
         id : Word;
         connection_type : Byte;
         active_est : Bool;
         local_device_id : Byte;
         local_tsap_id_len : Byte;
         rem_subnet_id_len : Byte;
         rem_staddr_len : Byte;
         rem_tsap_id_len : Byte;
         next_staddr_len : Byte;
         local_tsap_id : Array[1..16] of Byte;
         rem_subnet_id : Array[1..6] of Byte;
         rem_staddr : Array[1..6] of Byte;
         rem_tsap_id : Array[1..16] of Byte;
         next_staddr : Array[1..6] of Byte;
         spare : Word;   // #!Warte_PLC!#
      END_STRUCT;
   END_STRUCT;


BEGIN
   OUCW_1.block_length := W#16#0040;
   OUCW_1.id := W#16#0002;
   OUCW_1.connection_type := B#16#01;
   OUCW_1.local_device_id := B#16#02;
   OUCW_1.local_tsap_id_len := B#16#02;
   OUCW_1.local_tsap_id[1] := B#16#D1;
   OUCW_1.local_tsap_id[2] := B#16#07;
   OUCW_1.local_tsap_id[3] := B#16#00;
   OUCW_1.local_tsap_id[4] := B#16#00;
   OUCW_1.local_tsap_id[5] := B#16#00;
   OUCW_1.local_tsap_id[6] := B#16#00;
   OUCW_1.local_tsap_id[7] := B#16#00;
   OUCW_1.local_tsap_id[8] := B#16#00;
   OUCW_1.local_tsap_id[9] := B#16#00;
   OUCW_1.local_tsap_id[10] := B#16#00;
   OUCW_1.local_tsap_id[11] := B#16#00;
   OUCW_1.local_tsap_id[12] := B#16#00;
   OUCW_1.local_tsap_id[13] := B#16#00;
   OUCW_1.local_tsap_id[14] := B#16#00;
   OUCW_1.local_tsap_id[15] := B#16#00;
   OUCW_1.local_tsap_id[16] := B#16#00;
   OUCW_1.rem_subnet_id[1] := B#16#00;
   OUCW_1.rem_subnet_id[2] := B#16#00;
   OUCW_1.rem_subnet_id[3] := B#16#00;
   OUCW_1.rem_subnet_id[4] := B#16#00;
   OUCW_1.rem_subnet_id[5] := B#16#00;
   OUCW_1.rem_subnet_id[6] := B#16#00;
   OUCW_1.rem_staddr[1] := B#16#00;
   OUCW_1.rem_staddr[2] := B#16#00;
   OUCW_1.rem_staddr[3] := B#16#00;
   OUCW_1.rem_staddr[4] := B#16#00;
   OUCW_1.rem_staddr[5] := B#16#00;
   OUCW_1.rem_staddr[6] := B#16#00;
   OUCW_1.rem_tsap_id[1] := B#16#00;
   OUCW_1.rem_tsap_id[2] := B#16#00;
   OUCW_1.rem_tsap_id[3] := B#16#00;
   OUCW_1.rem_tsap_id[4] := B#16#00;
   OUCW_1.rem_tsap_id[5] := B#16#00;
   OUCW_1.rem_tsap_id[6] := B#16#00;
   OUCW_1.rem_tsap_id[7] := B#16#00;
   OUCW_1.rem_tsap_id[8] := B#16#00;
   OUCW_1.rem_tsap_id[9] := B#16#00;
   OUCW_1.rem_tsap_id[10] := B#16#00;
   OUCW_1.rem_tsap_id[11] := B#16#00;
   OUCW_1.rem_tsap_id[12] := B#16#00;
   OUCW_1.rem_tsap_id[13] := B#16#00;
   OUCW_1.rem_tsap_id[14] := B#16#00;
   OUCW_1.rem_tsap_id[15] := B#16#00;
   OUCW_1.rem_tsap_id[16] := B#16#00;
   OUCW_1.next_staddr[1] := B#16#00;
   OUCW_1.next_staddr[2] := B#16#00;
   OUCW_1.next_staddr[3] := B#16#00;
   OUCW_1.next_staddr[4] := B#16#00;
   OUCW_1.next_staddr[5] := B#16#00;
   OUCW_1.next_staddr[6] := B#16#00;

END_DATA_BLOCK

Code:
ORGANIZATION_BLOCK "OB1"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_TEMP 
      OB1_EV_CLASS : Byte;   // Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : Byte;   // 1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : Byte;   // 1 (Priority of 1 is lowest)
      OB1_OB_NUMBR : Byte;   // 1 (Organization block 1, OB1)
      OB1_RESERVED_1 : Byte;   // Reserved for system
      OB1_RESERVED_2 : Byte;   // Reserved for system
      OB1_PREV_CYCLE : Int;   // Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : Int;   // Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : Int;   // Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : Date_And_Time;   // Date and time OB1 started
      T_NDR : Bool;
      T_Err : Bool;
      T_Mode : Byte;
      T_Status : Word;
   END_VAR


BEGIN

NETWORK
TITLE = 
      A "M_True";
      = %L24.0;
      BLD 103;
      A "M_True";
      JNB Label_7;
      CALL FW_TCP, "FW_TCP_DB"
      (  ENABLE                      := %L24.0 ,
         CONNECT                     := P#DB300.DBX0.0 BYTE 64 ,
         NDR                         := #T_NDR ,
         ERROR                       := #T_Err ,
         MODE                        := #T_Mode ,
         STATUS                      := #T_Status );
Label_7:      NOP 0;
NETWORK
TITLE = 
      A "M_True";
      = %L24.0;
      BLD 103;
      A "M_True";
      JNB Label_8;
      CALL FW_TCP, "FW_TCP_DB_2"
      (  ENABLE                      := %L24.0 ,
         CONNECT                     := "DB301".OUCW_1 ,
         NDR                         := #T_NDR ,
         ERROR                       := #T_Err ,
         MODE                        := #T_Mode ,
         STATUS                      := #T_Status );
Label_8:      NOP 0;
NETWORK
TITLE = 
END_ORGANIZATION_BLOCK


Beide Aufrufe haben eigene DBs.

Beim beobachten bekomme ich T_Err true und Error 16#9
"
Im DB300 habe ich Status_Connect 16#80A9 was laut Anleitung "Der Parameter Connect zeicgt auf ein Feld, das nicht die Länge der Verbindungsbeschreibung hat. "


Ich habe Stunden davor gehockt und Parameter ausprobiert, ich komme nicht dahinter, was falsch ist.

Muss ich in Netzwerke vielleicht noch eine Connection parametrieren, deren ID noch in den DB muss?

Aksels
 
Durch weitere Recherchen bin ich nun überzeugt, dass ich eine Verbindung parametrieren muss. Aber ich komme mit dem TIA V12 nicht zurecht.
Ich bin in Geräte und Netze -> Netzsicht -> Verbindungen.
Wenn ich auf Verbindung klicke um den "Verbindungsmodus" zu aktivieren, wird nur eine der beiden SPSen hell. Egal ich klicke diese an und gehe auf Verbindung hinzufügen.
Ich bekomme einen Dialog in dem alles leer ist.
Muss ich den PC in die Hardware einfügen?
Ich habe das mit dem PC-Allgemein-PC-Station probiert mit einem IE Allgemein. Aber kann diesen für die TCP-Verbindung dann nicht auswählen.

Gruss,
Aksels


Gruss,
Aksels
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also bei der 315 PN/DP muß man mit Step7 V5.5 die Verbindung für TCP aus dem SPS-Programm heraus aufbauen. Ob das bei TIA anders ist kann ich nicht ganau sagen, aber irgendwie glaube ich das nicht, denn die Hardware ist ja identisch. Ist dazu nochts in der Doku von TIA zu finden? Sind doch höchstens 1500 Seiten! :shock:
 
Onlinehilfe und PDFs beschreiben das. Aber ich habe einen allgemeinen PC mit Proprietärer Software. Was muss ich dafür im TIA als Gerät einfügen?
Oder kann ich die TCP-Verbindung auch unspezifiziert anlegen. Wenn ja, Wie?
 
Da ich nicht weiss wie habe ich diesen vom Open Communication Wizard erstellen lassen.

Aber ich komme mit dem TIA V12 nicht zurecht.

Wie geht denn das? Hast du die DBs im Klassik erzeugt und dann migriert?

TCP Verbindungen (PN-CPU) lassen sich auch in V11/12 nicht projektieren, das ist also nicht dein Problem.

Erste Ideen:

Online schauen, ob der ConnectParam DB:
1. Wirklich 64Byte hat, 0-62
2. In block_length eine 40(hex) / 64(dez) steht.

type = 1 ist irgend ein komischer Kompatibilitätsmodus:

Die S7-300 CPUs V2.3 unterstützen den TCP (Kompatibilitätsmode).

Hast du sowas? Wenn nicht, 11 nehmen.


Code:
   OUCW_1.connection_type := B#16#01;
   OUCW_1.local_device_id := B#16#02;
   OUCW_1.local_tsap_id_len := B#16#02;
   OUCW_1.local_tsap_id[1] := B#16#D1;
   OUCW_1.local_tsap_id[2] := B#16#07;
//stattdessen:
   OUCW_1.connection_type := B#16#11;
   OUCW_1.local_device_id := B#16#02;
   OUCW_1.local_tsap_id_len := B#16#02;
   [COLOR="#FF0000"]OUCW_1.rem_tsap_id_len := B#16#02;// vermutlich egal[/COLOR]
   OUCW_1.local_tsap_id[1] := B#16#[COLOR="#FF0000"][B]07[/B][/COLOR];
   OUCW_1.local_tsap_id[2] := B#16#[COLOR="#FF0000"][B]D1[/B];  //gedreht wenn type = 11[/COLOR]
 
Zurück
Oben