-> 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:
Der DB für den zweiten Aufruf:
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
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