Troubleshooting ISO-on-TCP Between S7-400 AG_SEND and S7-300

David Krause21 min read
Industrial NetworkingSiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Problem Overview

Establishing ISO-on-TCP (RFC 1006) communication between a SIMATIC S7-400 CPU 414-2 DP paired with a CP 443-1 Ethernet communications processor and a SIMATIC S7-300 CPU 317-2 PN/DP with its integrated PROFINET interface requires asymmetric block selection. The S7-400 CPU 414-2 DP cannot terminate ISO-on-TCP directly because the Ethernet interface lives on the CP 443-1, so the legacy AG_SEND (FB12) / AG_RECV (FB13) or FC5 / FC6 functions are mandatory on the 400 side. The S7-300 PN/DP, in contrast, terminates ISO-on-TCP natively through its integrated PROFINET port using the modern Open Communication block set: TCON, TSEND, TRECV, and TDISCON (FB65 / FB66 / FB67 / FB68).

When this heterogeneous pairing is configured without matching TSAPs, an incomplete TCON_Param (UDT65) data block, or an improperly assembled NetPro project, both sides report idle or failure states: STATUS = 7000 (hex) on the S7-400 AG_SEND (meaning "No job in progress") and RET_VAL = 80B7 (hex) on the S7-300 TCON (indicating "Connection termination / parameter length inconsistency" depending on firmware version). The article below documents the engineering path to resolve both codes by configuring the ISO-on-TCP link end-to-end from NetPro through the user program on both controllers.

System Architecture and Topology

The reference topology pairs a Siemens CPU 414-2 DP with order number 6ES7414-2XJ04-0AB0 (or comparable variant) in slot 2 of an S7-400 rack, an external CP 443-1 (for example 6GK7443-1EX11-0XE0 for ISO-on-TCP support) in slot 4 of the central rack, and an S7-300 CPU 317-2 PN/DP (for example 6ES7317-2EK13-0AB0) hosting the integrated PN port at X2. Both Ethernet nodes occupy the same subnet, but the CP 443-1 must be assigned its own IP address and its logical base address must be read from HW Config.

ISO-on-TCP / RFC 1006 Link Topology S7-400 Station CPU 414-2 DP Slot 2 CP 443-1 Slot 4 OB1 / OB35 AG_SEND FB12 AG_RECV FB13 DB100 (LADDR) STATUS=7000h Ethernet RFC 1006 TSAP Local: 10.01 / 02.00 TSAP Remote: 10.02 / 03.00 192.168.0.10 192.168.0.20 Port 102 S7-300 Station CPU 317-2 PN/DP Integrated PN (X2) OB1 / OB35 TCON FB65 TSEND FB63 / TRECV FB64 DB120 (TCON_Param UDT65) RET_VAL=80B7h Connection ID S7-400: ID = W#16#0001 (decimal 1) - assigned in NetPro and propagated to AG_SEND.ID S7-300: ID = W#16#0001 (decimal 1) - assigned in NetPro and propagated to TCON.ID and TCON_Param.id Connection type = B#16#12 (ISO-on-TCP) in TCON_Param.connection_type Both stations must agree on Connection ID, IP, TSAPs and connection type.

Block Selection Matrix for ISO-on-TCP

The following matrix is binding for any project that mixes S7-400 + CP 443-1 with an S7-300 PN/DP CPU. Selecting the wrong block on either side is the single most common cause of STATUS 7000 / 80B7 at first compile.

Controller Interface Mandatory Block Set Optional Block Set Library Path (STEP 7 V5.x)
S7-400 CPU 41x with CP 443-1 CP 443-1 (external) FB12 AG_SEND, FB13 AG_RECV FC5 AG_SEND, FC6 AG_RECV (shorter parameter list) SIMATIC_NET_CP > CP 400 > Blocks
S7-300 CPU 31x-2 PN/DP Integrated PN port (X2) FB65 TCON, FB63 TSEND, FB64 TRECV, FB68 TDISCON FB67 USEND (only for UDP) Standard Library > Communication Blocks > Open Communication
S7-300 CPU 31x with CP 343-1 CP 343-1 (external) FB12 AG_SEND, FB13 AG_RECV FC5 / FC6 SIMATIC_NET_CP > CP 300 > Blocks
S7-400 CPU 41x-3 PN/DP Integrated PN port (X2) FB65 TCON, FB63 TSEND, FB64 TRECV, FB68 TDISCON - Standard Library > Communication Blocks > Open Communication
Critical rule: When the Ethernet interface lives on a CP, the CPU cannot drive ISO-on-TCP directly. Calling TCON on an S7-400 CPU 414 without first routing through the CP 443-1 always returns 80B7 ("parameter assignment error" or "connection setup rejected") on the partner and a corresponding 80B3 status on the local FB. The CP's logical base address (LADDR) is mandatory for the AG_SEND call.

Error Code Reference

Both RET_VAL/STATUS values observed on this topology are documented in the Siemens Open Communication / AG block manuals. Use the table below as the first triage guide.

Code (hex) Block Meaning Likely Cause in This Topology First Action
0000 AG_SEND / TCON Job completed without error None - normal completion Continue monitoring
7000 AG_SEND / TCON No job in progress / idle ACT never set, or connection not established yet Check NetPro, verify ACT/REQ, check DONE flag
7001 AG_SEND / TCON Job started, busy Normal transient state Wait for DONE / ERROR
7002 AG_SEND / TCON Job complete, ready for next Normal completion Read DONE / STATUS
80A1 AG_SEND User data pointer invalid SEND / LEN ANY pointer or length mismatch Validate ANY pointer and LEN
80A3 AG_SEND / TCON Already active / object busy Instance being driven by OB1 and OB35 simultaneously Centralize the call in one OB
80B1 TCON Connection already established TCON called twice with same ID Check ID uniqueness
80B2 TCON Resources exhausted (max 16 connections per PN port) More than 16 connections requested on one PN interface Distribute across CP and PN
80B3 TCON Parameter assignment error TCON_Param block_length, local_tsap_id_len, rem_tsap_id_len, etc., inconsistent Recompute every length field against the TSAP string in TCON_Param
80B4 TCON Connection terminated by remote Partner CPU in STOP or CP 443-1 not yet ONLINE Check CPU mode and CP online state
80B5 TCON Connection setup rejected / partner unreachable Wrong IP, wrong TSAP, wrong LADDR Verify IP routing and NetPro configuration
80B6 TCON Local resource shortage (memory) CPU 317-2 PN/DP memory overload Check S7-300 work memory, reduce DB count
80B7 TCON Connection termination / data length inconsistency NetPro not compiled with matching TSAPs, or TCON_Param length fields not all correct Recompile NetPro, re-derive TCON_Param
80B8 TCON Connection terminated by partner Partner reset Check partner CPU / CP
80B9 TCON Connection aborted TDISCON called or physical link down Check cable, switch, port LED
80C3 AG_SEND Resource shortage on CP Too many AG_SEND jobs in parallel on CP 443-1 Serialize calls, lower polling rate
80C4 AG_SEND Temporary resource error Transient on CP Retry after next scan
Specific note on STATUS 7000: On AG_SEND/AG_RECV, 7000 is the idle state and not an error. It only becomes a defect indicator when the application continuously shows 7000 even after a rising edge on ACT. Pair this reading with the TCON 80B7 from the partner side to confirm that the connection has not yet been established.

Root Cause Analysis

The reported pattern - STATUS 7000 on the S7-400 and 80B7 on the S7-300 - has a single dominant root cause in this topology: the ISO-on-TCP connection was not parameterized symmetrically between NetPro (STEP 7 V5.x classic) and the S7-300 TCON_Param data block.

Two failure surfaces must be reconciled:

  1. NetPro assignment. The connection object in NetPro must show "established" for both stations. The CP 443-1 side and the S7-300 PN side must agree on the connection type (ISO-on-TCP), the local TSAP, the remote TSAP, the partner IP and the connection ID. If NetPro was opened but the project was not compiled to both stations (PLC > Compile and Download Objects), the S7-300 has no valid connection record and TCON returns 80B7 immediately.
  2. TCON_Param data block structure. Even with a correct NetPro project, the S7-300 program must populate TCON_Param with the exact TSAP strings, exact TSAP lengths, the connection ID, and the connection type byte. A common defect is to copy a TCON_Param from a sample project and forget to update the length fields after editing the TSAP string. For example, setting local_tsap_id_len = 16 while the actual string in local_tsap_id is only four ASCII characters (e.g. "10.01") causes the TCON call to walk past the boundary of the local_tsap_id array and read garbage for the next field, surfacing as 80B7.

Secondary root causes that surface identical codes include firewall blocking TCP port 102, mismatched firmware versions (CP 443-1 firmware < V2.1 has limited ISO-on-TCP stability with newer S7-300 CPUs), and a CP 443-1 LADDR that points to the wrong logical address (for example 8191 instead of 8192 when the CP is in slot 4 of a CR2).

NetPro Connection Configuration

Perform the following configuration inside STEP 7 V5.5 SPx (the same procedure applies to STEP 7 Professional V13+ in compatibility mode). For TIA Portal projects on newer firmware, the equivalent is to create a connection from the device view of the S7-300 PN/DP port.

  1. Open SIMATIC Manager > Options > NetPro.
  2. Right-click the CP 443-1 in the S7-400 station and choose Insert New Connection.
  3. In the connection partner dialog select the S7-300 station and the S7-300 PN port, then choose connection type ISO-on-TCP connection.
  4. Assign a unique Connection ID (for example W#16#0001 / decimal 1). This is the ID used by both AG_SEND.ID on the 400 side and TCON.ID / TCON_Param.id on the 300 side.
  5. On the General tab of the connection properties set:
    • Interface: CP 443-1 (S7-400) / PN/DP (S7-300)
    • Local TSAP: typically the slot-internal TSAP of the CP, e.g. 10.01 for CP in slot 4 of a CR (rack 0, slot 4 means rack 0 / slot 4 -> 10 01). With explicit strings, use ASCII characters and keep them 2 to 16 bytes.
    • Partner TSAP: typically 10.02 or any user-defined string that the S7-300 TCON_Param.rem_tsap_id echoes back.
    • Connection path: leave at default ("Use the configuration in the connection partner").
  6. Confirm with OK and verify the connection object appears under the CP 443-1 with the configured ID and TSAPs.
  7. Save and compile: PLC > Compile and Download Objects. Both stations must be online to download. If the S7-300 is offline, NetPro will compile but the connection will not be resident on the partner.
TSAP encoding: A Siemens TSAP for ISO-on-TCP is a string up to 16 ASCII bytes. For the CP 443-1 it is conventionally built as RR.SS where RR is the rack (hex) and SS is the slot (hex). For example, rack 0 slot 4 yields TSAP 00.04. For the integrated PN port of the S7-300, the convention is RR.SS derived from the configuration in HW Config. The strings must match exactly between NetPro and TCON_Param, including leading zeros and the dot separator.

TCON_Param UDT65 Configuration on the S7-300

The TCON_Param is a UDT65 structure that TCON passes to the PROFINET stack. Every length field is counted in bytes and must be consistent with the actual TSAP strings stored in the same DB.

Byte Field Type Value for ISO-on-TCP via PN Comment
0..1 block_length WORD W#16#0040 (64) Length of TCON_Param excluding the block_length word itself. 64 is mandatory for ISO-on-TCP via PN.
2..3 id WORD W#16#0001 Connection ID. Must match NetPro and the TCON.ID input.
4 connection_type BYTE B#16#12 12 = ISO-on-TCP (RFC 1006). Use B#16#01 for TCP native, B#16#13 for UDP.
5 active_establish BOOL (in BYTE) TRUE for client, FALSE for server Only one side should be active. Pick one station to issue the connect.
6 local_device_id BYTE B#16#01 1 = integrated PN port, 2 = CP (used when TCON runs on an S7-300 with CP 343-1).
7 local_tsap_id_len BYTE 2 to 16 Length in bytes of local_tsap_id string. Must match the string length, NOT 16.
8 rem_subnet_id_len BYTE 0 Subnet ID string length. For ISO-on-TCP via Ethernet always 0.
9 rem_staddr_len BYTE 4 Length of remote IP address (IPv4 = 4 bytes). Set to 0 only if remote address is unspecified (e.g. for the active partner of a passive listen).
10 rem_tsap_id_len BYTE 2 to 16 Length of remote TSAP string. Must equal the actual character count.
11 next_staddr_len BYTE 0 Length of next router address. Always 0 for ISO-on-TCP via PN.
12..13 spare WORD W#16#0000 Reserved, set to 0.
14..29 local_tsap_id ARRAY[1..16] OF BYTE ASCII "10.02" or user string Local TSAP string. Fill unused bytes with W#16#00.
30..33 rem_staddr ARRAY[1..4] OF BYTE 192,168,0,10 (decimal octets) IP address of CP 443-1 (S7-400).
34..49 rem_tsap_id ARRAY[1..16] OF BYTE ASCII "10.01" or user string Remote TSAP. Must match the local TSAP declared on the CP 443-1 side in NetPro.
50..53 next_staddr ARRAY[1..4] OF BYTE W#16#00,00,00,00 Reserved.
54..63 spare ARRAY[1..10] OF BYTE W#16#00 Reserved.

A worked example for the S7-300 in OB1, calling TCON with a DB120 TCON_Param instance, looks like the declaration below.

DATA_BLOCK DB120
  STRUCT
    block_length       : WORD  := W#16#0040;     // 64 bytes total
    id                 : WORD  := W#16#0001;     // Connection ID 1
    connection_type    : BYTE  := B#16#12;       // ISO-on-TCP
    active_establish   : BOOL  := TRUE;          // S7-300 acts as active client
    local_device_id    : BYTE  := B#16#01;       // PN port
    local_tsap_id_len  : BYTE  := B#16#05;       // "10.02" = 5 bytes
    rem_subnet_id_len  : BYTE  := B#16#00;       // no subnet string
    rem_staddr_len     : BYTE  := B#16#04;       // IPv4
    rem_tsap_id_len    : BYTE  := B#16#05;       // "10.01" = 5 bytes
    next_staddr_len    : BYTE  := B#16#00;
    spare_word         : WORD  := W#16#0000;
    local_tsap_id      : ARRAY[1..16] OF BYTE := B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00;
    rem_staddr         : ARRAY[1..4]  OF BYTE := B#16#C0,B#16#A8,B#16#00,B#16#0A;
                                            // 192.168.0.10 = CP 443-1
    rem_tsap_id        : ARRAY[1..16] OF BYTE := B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00;
    next_staddr        : ARRAY[1..4]  OF BYTE := B#16#00,B#16#00,B#16#00,B#16#00;
    spare_array        : ARRAY[1..10] OF BYTE := B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00,B#16#00,B#16#00,
                                            B#16#00,B#16#00;
  END_STRUCT;
END_DATA_BLOCK

Then in OB1 initialize the TSAP strings exactly once on cold restart (OB100) and call TCON:

// OB100 - Cold restart
CALL  FB65  , DB65   // TCON instance DB
      REQ    := FALSE
      ID     := W#16#0001
      CONNECT:= "DB120".
      DONE   := DONE_1
      BUSY   := BUSY_1
      ERROR  := ERROR_1
      STATUS := STATUS_1;

// Initialize TSAP strings in OB100
DB120.local_tsap_id[1]  := B#16#31;   // '1'
DB120.local_tsap_id[2]  := B#16#30;   // '0'
DB120.local_tsap_id[3]  := B#16#2E;   // '.'
DB120.local_tsap_id[4]  := B#16#30;   // '0'
DB120.local_tsap_id[5]  := B#16#32;   // '2'
DB120.rem_tsap_id[1]    := B#16#31;
DB120.rem_tsap_id[2]    := B#16#30;
DB120.rem_tsap_id[3]    := B#16#2E;
DB120.rem_tsap_id[4]    := B#16#30;
DB120.rem_tsap_id[5]    := B#16#31;
Length trap: If the engineer sets local_tsap_id_len := B#16#10 (16) while the actual TSAP is only 5 bytes ("10.02"), TCON reads the next 11 bytes past the string, finds the IP address array, and interprets it as part of the TSAP. The PROFINET stack rejects this malformed TSAP and returns 80B7. Always set local_tsap_id_len and rem_tsap_id_len to the exact byte count of the string and zero-fill the remaining array slots.

AG_SEND / AG_RECV Configuration on the S7-400

On the S7-400, the AG_SEND / AG_RECV blocks call the CP 443-1 over its logical base address. The CP's base address must be read from HW Config (Properties > CP 443-1 > Diagnostic). For a CP 443-1 in slot 4 of a CR2, the typical LADDR is W#16#2000 (decimal 8192) for input area and W#16#2001 for output area; the AG_SEND.LADDR points to the diagnostic base, typically one slot above the input area. Verify with the configuration dialog.

// OB1 cycle - call AG_SEND on the 414 side
CALL  FB12  , DB12
      ACT    := M10.0        // rising edge triggers a send job
      ID     := 1            // Connection ID 1 (matches NetPro)
      LADDR  := W#16#2000    // CP 443-1 diagnostic base
      SEND   := P#DB200.DBX0.0 BYTE 20   // 20 bytes from DB200
      LEN    := 20
      DONE   := M10.1
      ERROR  := M10.2
      STATUS := MW12;

// OB1 cycle - call AG_RECV on the 414 side
CALL  FB13  , DB13
      ID     := 1
      LADDR  := W#16#2000
      RECV   := P#DB201.DBX0.0 BYTE 20   // 20 bytes from DB201
      NDR    := M10.3
      ERROR  := M10.4
      STATUS := MW14;
      LEN    := MW16;

If MW12 (STATUS) = 7000 continuously, the block is in idle state: either ACT never rose, or the connection record has not been downloaded to the CP 443-1. Open NetPro, right-click the connection object, choose Connection Status (only available online) and confirm the connection shows established. If the status shows not established, the partner CPU is not in RUN, the CP is not online, or the TSAP negotiation failed.

Step-by-Step Commissioning Procedure

  1. Verify cabling and IP plan. Connect CP 443-1 (port X1) and S7-300 PN (X2) to a managed switch. Assign static IPs in the same /24 subnet (e.g. 192.168.0.10 / 255.255.255.0 on the CP, 192.168.0.20 on the PN). Disable any firewall on the engineering PG and confirm a basic ping succeeds.
  2. Configure HW Config. Open the S7-400 station, place the CPU 414-2 DP, place the CP 443-1 in slot 4, assign the IP address, set the diagnostic base LADDR (default OK in most projects). Open the S7-300 station, place the CPU 317-2 PN/DP, configure the integrated PN port (X2) with its IP, verify that the port is enabled in HW Config (Properties > Port X2 > "Port is used").
  3. Create the NetPro connection. Follow the procedure in the previous section. Verify that the connection appears under both stations in NetPro with matching ID and TSAPs.
  4. Compile and download. PLC > Compile and Download Objects. Both PLCs must be in STOP or RUN; download to both. The connection record now lives in the S7-300 connection DB (generated by NetPro) and in the CP 443-1 of the S7-400.
  5. Build the user program. Declare DB120 (TCON_Param) on the S7-300 as shown above, and add FB12 / FB13 instances on the S7-400.
  6. Trigger initial connect. In OB100 of the S7-300, set the initialize flag and call TCON with REQ = TRUE exactly once. TCON transitions REQ and reports DONE / STATUS. After a successful connect, the connection is owned by the PN port until TDISCON is called.
  7. Drive cyclic data. Call TSEND / TRECV in OB35 on the S7-300, and AG_SEND / AG_RECV in OB1 or OB35 on the S7-400. Use a falling-edge monitor on ERROR to clear latching fault latches.

Verification and Diagnostics

After commissioning, run the following checks. Each check maps to a specific element of the topology.

Check Method Expected Result If It Fails
Physical link LED on CP 443-1 port X1 and S7-300 PN port X2 Green Link LED steady Replace cable, verify switch port speed (10/100 Mbit, full duplex)
IP reachability ping 192.168.0.10 from PG Reply < 5 ms Check subnet mask, IP, firewall
CP 443-1 online NetPro > right-click CP > Status CP online, connection established Re-download connection, restart CP (PIQ reset)
CPU 317 PN connection status Online > Connections Connection ID 1 = established Inspect TCON_Param lengths
AG_SEND STATUS Monitor MW12 in VAT Transitions 7000 -> 7001 -> 7002 on success If 80xx, look up the 80-series code
TCON STATUS Monitor STATUS_1 in VAT 0000 after TCON returns DONE Map 80B3 / 80B7 to TSAP mismatch
TSEND STATUS Monitor after each TSEND call 0000 or 7002 on success Check REQ rising edge, LEN > 0
TRECV NDR Watch NDR rising edge NDR pulses per receive Verify partner's AG_SEND is firing
Connection diagnostics buffer CPU 317 > Information > Diagnostic Buffer No "connection abort" entries Cross-reference to TCON STATUS at the timestamp

For deeper diagnostics, open Online > Diagnostics > Communication in STEP 7 to view all ISO-on-TCP connections and their current state. On the CP 443-1, the diagnostic page lists the connection state as connection established, connection terminated, connection setup active, or no connection. Match the diagnostic output to the STATUS codes returned by AG_SEND/AG_RECV.

Advanced Troubleshooting

When the standard checks do not clear STATUS 7000 / 80B7, the following extended diagnostics apply.

Firmware and Compatibility

The CP 443-1 must be on a firmware version that supports ISO-on-TCP coexistence with the partner firmware. For S7-400 with S7-300 PN/DP combinations, the minimum recommended firmware is CP 443-1 V2.1.x (for the EX11 / EX20 / GX20 variants) and CPU 317-2 PN/DP V3.x. Mismatches below V2.0 on the CP produce intermittent 80B7 with a corrected TCON_Param. Apply firmware via the SIMATIC Manager > Options > Install Firmware dialog using the UPD file published in the Siemens Product Support portal.

Connection ID Collision

Connection IDs must be unique across the entire S7-300 station, not just per PN port. If the project also holds an S7 connection to a different CPU using ID 1, TCON with the same ID returns 80B1 (already established) on a duplicate attempt and 80B3 (parameter assignment error) on a re-attempt. Re-number the ISO-on-TCP connection to ID 2, 3, ... 16 (PN port limit is 16 connections).

Local TSAP ID Length Mismatch (the Original Symptom)

This is the specific defect that produced the symptoms in the source. In OB1 the original program copy-pasted a TCON_Param from a sample with local_tsap_id_len := W#16#10 (16), rem_tsap_id_len := W#16#10 (16), and rem_staddr_len := W#16#04 (4). With the actual TSAP "10.02" being 5 bytes, the PN stack reads bytes 6..16 of the local_tsap_id array - which were initialized to 0 - and constructs a TSAP of 10.02\0\0\0\0\0\0\0\0\0\0\0. The CP 443-1 rejects this because its TSAP declaration in NetPro is only 5 bytes. TCON returns 80B7. Correct both length fields to B#16#05 and the connection establishes.

Firewall and Port 102

ISO-on-TCP uses TCP port 102. Industrial firewalls (for example SCALANCE S with firewall enabled) drop port 102 unless an explicit rule allows it. If the project crosses a managed switch with ACLs, configure the ACL to permit TCP 102 from 192.168.0.0/24 to 192.168.0.0/24.

Active vs Passive

Only one side should set active_establish := TRUE. If both sides are active, TCON returns 80B4 / 80B7 depending on who wins the TCP handshake race. If neither side is active, the connection waits forever. Pick the controller that powers up first as active.

CP 443-1 in the Wrong Slot

If the CP 443-1 is moved between slots without updating HW Config, AG_SEND LADDR points to a non-existent logical address. The error is 80A1 (pointer error) or 80C3 (CP resource not available). Open HW Config and re-read the diagnostic base address.

Migrating to TIA Portal

For projects moving to TIA Portal V15.1 or later, the same topology is implemented as a PUT/GET or Open User Communication connection. TIA Portal automatically generates TCON_Param when the user adds an Open User Communication block (TSEND_C, TRCV_C, TCON, TDISCON) to the S7-300 PN/DP. For the S7-400 with CP 443-1, TIA Portal still exposes the AG_SEND / AG_RECV blocks under Instructions > Communication > Open User Communication. Importing the STEP 7 V5.x project retains the NetPro configuration, but the TCON_Param must still be reviewed for length accuracy because the import can default the TSAP lengths to 16.

From TIA Portal V16 onward the recommended pattern is to use TSEND_C / TRCV_C on both sides (these combine TCON + TSEND + TRECV into a single block) when the partner also supports the Open User Communication block set. For the S7-400 with CP 443-1, TSEND_C / TRCV_C is available in the CP 443-1 function set; verify firmware compatibility before migration.

Safety and Best-Practice Notes

  • Do not mix ISO-on-TCP and TCP native traffic on the same connection - the connection_type byte selects the framing and is fixed per connection.
  • Always initialize TCON_Param in OB100 (cold restart) so that the strings survive a STOP->RUN transition without re-initialization. Initializing in OB1 with conditional logic may produce intermittent 80B7 during a hot restart.
  • Monitor ERROR rising edges and latch a global "Communication Fault" flag. Bring the process to a safe state when the flag is set; do not allow the application to consume stale data from the partner.
  • For critical data, validate received bytes with a CRC or a sequence counter. AG_RECV / TRECV do not perform data integrity checks beyond what the underlying TCP stack provides.

Summary Checklist

  1. CP 443-1 placed in STEP 7 project, IP and LADDR configured, firmware >= V2.1.
  2. S7-300 PN/DP port X2 configured with IP and subnet, port enabled.
  3. NetPro connection created, ID 1, ISO-on-TCP type, TSAPs configured symmetrically.
  4. NetPro compiled and downloaded to both stations.
  5. DB120 (TCON_Param) on the S7-300 populated with block_length = 64, connection_type = B#16#12, TSAP strings byte-accurate, TSAP lengths matching the string lengths.
  6. FB12 / FB13 called on the S7-400 with the correct LADDR (CP 443-1 diagnostic base) and ID 1.
  7. TCON called once in OB100 to establish the connection.
  8. TSEND / TRECV on the S7-300 and AG_SEND / AG_RECV on the S7-400 drive the data exchange.
  9. Diagnostics verified: CP 443-1 status = established, AG_SEND transitions 7000 -> 7001 -> 7002, TCON RET_VAL = 0000, TRECV NDR pulses per receive.

What does STATUS 7000 on AG_SEND actually mean?

STATUS 7000 (hex) on FB12 AG_SEND or FB13 AG_RECV means "no communication job active" - it is the idle state after the previous call completed and no new ACT edge has been detected. It becomes a defect only when it persists continuously despite a rising edge on ACT, in which case the connection record in NetPro has not been downloaded or the CP 443-1 is not in RUN. Reference the Siemens AG_SEND for S7-300/400 manual.

Why does TCON return 80B7 on the S7-300 side?

RET_VAL 80B7 (hex) on FB65 TCON usually indicates a malformed TCON_Param: the local_tsap_id_len or rem_tsap_id_len does not match the actual length of the TSAP string stored in the array, or the remote station has rejected the connection. Verify every length field against the actual TSAP string and confirm the partner CP 443-1 is online with the matching TSAP in NetPro. See the Siemens ISO-on-TCP FAQ for the recommended values.

Can the S7-400 CPU 414-2 DP run TCON directly without the CP 443-1?

No. The CPU 414-2 DP does not have an integrated PROFINET interface for ISO-on-TCP, so it must use the AG_SEND / AG_RECV blocks routed through the CP 443-1's logical base address. Only S7-400 CPUs with an integrated PN port (for example CPU 414-3 PN/DP) can run TCON natively. Reference the AG_SEND for S7-400 manual.

What connection_type byte must I use for ISO-on-TCP?

Set connection_type := B#16#12 (hexadecimal 12) in TCON_Param. Do not confuse this with B#16#01 (TCP native) or B#16#13 (UDP). The value selects RFC 1006 framing on TCP port 102 and must match the connection object declared in NetPro.

How many ISO-on-TCP connections can I run on the CPU 317-2 PN/DP integrated port?

The integrated PN port supports up to 16 Open User Communication connections (sum of TCP native, ISO-on-TCP, and UDP). Additional connections require an external CP 343-1 in the S7-300 rack. Connection IDs must be unique across the station (range W#16#0001 to W#16#0010 / decimal 1 to 16).

Back to blog