Overview
Brownfield migration projects commonly retain installed SIMATIC S7-300 CPUs while adding S7-1500 controllers for new process cells, machine modules, or replacement of obsolete hardware. Because the two controller families were designed for different engineering tools (STEP 7 V5.x for S7-300/400, TIA Portal for S7-1500), exchanging data between them requires a deliberate connection strategy that works across project boundaries, firmware generations, and instruction-set revisions.
Three mechanisms are used in practice for S7-1500 ↔ S7-300 communication:
-
Configured S7 connection (unspecified S7 connection) using
PUT/GETorBSEND/BRCV -
Open User Communication (OUC) with
TCON,TDISCON,TSEND,TRCVover ISO-on-TCP, TCP, or UDP -
Ad-hoc S7 connection for
PUT/GETfrom a partner that is not configured in the local project
This reference covers engineering steps, block configuration, parameter layout, and diagnostic procedures for each approach, with explicit attention to the block differences that cause first-time failures between S7-300 legacy function blocks (FB12, FB13, FB14, FB15, FB65, FB63, FB64) and the S7-1500 instructions of the same name. Working snippets, parameter tables, and a fault-code matrix are included for field commissioning.
Path Selection: S7 vs Open User Communication
The choice between a configured S7 connection and Open User Communication is driven by data volume, determinism, and engineering footprint. S7-300 to S7-1500 projects often use a hybrid: small cyclic data over configured S7 (PUT/GET), large bursts over BSEND/BRCV or over OUC.
| Criterion | S7 Connection (PUT/GET, BSEND/BRCV) | Open User Communication (TCON/TSEND/TRCV) |
|---|---|---|
| Project coupling required | Yes (unspecified S7 connection, partner IP/TSAP entered manually) | No, fully programmed |
| Transport protocol | ISO-on-TCP (port 102) implicit | ISO-on-TCP, TCP, UDP selectable |
| Max payload (typical) | PUT/GET: 160 bytes user data per call (4 bytes pointer + data); BSEND: up to 64 KB | TSEND: 32 KB typical, 64 KB on S7-1500; TRCV: 64 KB on S7-1500 |
| Handshake | Acknowledged by partner CPU | Transport-layer only; user must acknowledge semantics |
| Configuration overhead | Connection table in NetPro or TIA Portal | Parameter description in program only |
| Best fit | Periodic, structured PLC-PLC data | Event-driven, large bursts, cross-vendor |
| Block on S7-300 | FB12 BSEND, FB13 BRCV, FB14 PUT, FB15 GET | FB65 TCON, FB63 TSEND, FB64 TRCV, FB66 TDISCON |
| Block on S7-1500 | Instructions BSEND, BRCV, PUT, GET | Instructions TCON, TSEND, TRCV, TDISCON |
For tens of kilobytes of data, both BSEND/BRCV and the OUC TSEND/TRCV path are viable. BSEND/BRCV provides an application-level acknowledge; OUC gives the developer a free choice of segmentation and is mandatory when the partner is not a Siemens S7 CPU.
Prerequisites and Component Selection
Verify the following before configuring any cross-generation communication.
| Item | Requirement | Notes |
|---|---|---|
| S7-1500 CPU | Firmware V2.0 or higher for full BSEND/BRCV compatibility (V1.8 works for PUT/GET and OUC) | CPU 1511-1 PN, CPU 1513-1 PN, CPU 1515-2 PN, CPU 1516-3 PN/DP, CPU 1517-3 PN/DP, CPU 1518-4 PN/DP all supported |
| S7-300 CPU | PN-CPU with integrated PROFINET interface (CPU 314C-2 PN/DP, 315-2 PN/DP, 317-2 PN/DP, 319-3 PN/DP) | Non-PN CPUs must add a CP 343-1 (Lean/Standard/Advanced) |
| TIA Portal | V15.1 or higher recommended; V16, V17, V18, V19, V20 supported | V20 introduces the latest S7-1500 instruction set, see TIA Portal V20: Instructions for communication tasks |
| STEP 7 V5.x | V5.5 SP4 or later for S7-300 configuration in NetPro | Use the latest Hotfix for ISO-on-TCP stability |
| Network reachability | Both CPUs on the same subnet or routed through an IE switch | Verify with PING or S7 routing function in TIA Portal |
| Access rights | S7-300: "Permit access with PUT/GET communication" checkbox enabled in CPU Properties → Protection | Required for S7-1500 to read/write S7-300 data without a configured connection |
PUT/GET calls from the S7-1500 fail with status W#16#80A1 or W#16#8301 even when the S7 connection itself is up.Configuring an Unspecified S7 Connection
An unspecified S7 connection is the standard mechanism when the partner CPU is configured in a separate project. Both sides must create a connection entry that names the other CPU by IP address and TSAP, but neither needs the partner's project file.
Step-by-step on the S7-1500 side (TIA Portal)
- Open the device configuration of the S7-1500 CPU and select the PROFINET interface.
- Set the IP address and subnet; confirm the PN interface is online-capable.
- In Project Tree → "Devices & Networks", switch to the "Connections" tab.
- Click "New connection" and select connection type S7 connection.
- Choose partner "Unspecified"; enter partner IP address and partner TSAP.
- In connection properties → "Address details", set local TSAP (e.g., 10.00) and remote TSAP (e.g., 03.02). The remote TSAP must match the slot and connection of the S7-300 partner.
- Confirm "Active connection establishment" per direction. Typically the S7-1500 establishes actively if it is the data consumer (e.g., central collection of S7-300 data).
- Download the connection configuration; the connection appears in the connection table with a local ID, e.g., ID=W#16#0001.
Step-by-step on the S7-300 side (STEP 7 V5.x / NetPro)
- In NetPro, right-click the S7-300 CPU → "Insert New Connection".
- Select connection type S7 Connection and partner "Unspecified".
- Enter the S7-1500 IP address. The local TSAP defaults to 03.02 (slot 3) and the remote TSAP must be set to the value chosen on the S7-1500 side.
- Tick "Establish an active connection" only on the side that initiates the first connection setup; otherwise both will be passive and the connection will not come up.
- Save and download the connection to the S7-300 CPU. The active partner will then set up the connection on next
TCON/PUT/BSENDinvocation.
PUT/GET: Periodic, Small Data Exchange
PUT and GET are the simplest mechanism for cyclic data exchange of up to 160 user bytes per call (header + data on S7-300, header-stripped data on S7-1500). PUT writes data to a partner DB; GET reads from a partner DB.
Block differences between generations
| Parameter | S7-300 (FB14 PUT, FB15 GET) | S7-1500 (PUT, GET instructions) |
|---|---|---|
| REQ input type | BOOL (any edge) | BOOL (rising edge) |
| ID | WORD connection ID from NetPro | WORD connection ID from TIA Portal connection table |
| ADDR_1 | ANY pointer to partner area (e.g., P#DB100.DBX0.0 BYTE 100) | Variant pointing to partner tag (e.g., "DB100" or a structured tag) |
| SD_1 / RD_1 | ANY pointer to local area | Variant pointing to local tag |
| LEN | WORD, must match the byte count encoded in the ANY | UINT auto-calculated from Variant |
| DONE, BUSY, ERROR, STATUS | Outputs only | DONE, BUSY, ERROR, STATUS outputs; instruction also has a "STATUS" of type DWORD |
Working example: S7-1500 PUT/GET against S7-300
The S7-1500 program can use either direction. Below is the S7-1500 as a centralized collector, reading a 100-byte block from each of several S7-300 PLCs and writing a 32-byte command block back.
S7-1500 side (SCL, TIA Portal V20):
// S7-1500 reads 100 bytes from S7-300 DB100 starting at byte 0
#iGetBusy := FALSE;
#iGetDone := FALSE;
#iGetError := FALSE;
#iGetStatus := 16#0000;
GET_DB200 (REQ := #tGetTrigger,
ID := W#16#0001, // connection ID of the unspecified S7 connection
ADDR_1:= "DB100" := P#DB100.DBX0.0 BYTE 100, // partner area
RD_1 := "DB200" := P#DB200.DBX0.0 BYTE 100, // local area
DONE => #iGetDone,
BUSY => #iGetBusy,
ERROR => #iGetError,
STATUS=> #iGetStatus);
// S7-1500 writes 32 bytes of commands into S7-300 DB101
PUT_DB201 (REQ := #tPutTrigger,
ID := W#16#0002,
ADDR_1:= "DB101" := P#DB101.DBX0.0 BYTE 32,
SD_1 := "DB201" := P#DB201.DBX0.0 BYTE 32,
DONE => #iPutDone,
BUSY => #iPutBusy,
ERROR => #iPutError,
STATUS=> #iPutStatus);
S7-300 side (STEP 7 V5.x, STL):
// FB15 GET, triggered by cyclic OB35 (100 ms typical)
CALL FB 15, DB120
REQ :=M100.0
ID :=W#16#1 // connection ID 1 (NetPro)
ADDR_1:=P#M 200.0 BYTE 32 // source: S7-1500 area
RD_1 :=P#DB101.DBX 0.0 BYTE 32 // local destination
DONE :=M100.1
BUSY :=M100.2
ERROR :=M100.3
STATUS:=MW102
// FB14 PUT, triggered by bit toggle when a command is queued
CALL FB 14, DB121
REQ :=M110.0
ID :=W#16#1
ADDR_1:=P#M 250.0 BYTE 64 // destination: S7-1500 area
SD_1 :=P#DB100.DBX 0.0 BYTE 64 // local source
DONE :=M110.1
BUSY :=M110.2
ERROR :=M110.3
STATUS:=MW112
BSEND/BRCV: Tens of Kilobytes per Transfer
For payload between 1 KB and 64 KB per call, BSEND/BRCV is the natural choice. The blocks break the data into a sequence of frames and reassemble them at the partner, providing an application-level handshake that is not present in TSEND/TRCV.
Block differences between generations
| Parameter | S7-300 (FB12 BSEND, FB13 BRCV) | S7-1500 (BSEND, BRCV instructions) |
|---|---|---|
| R_ID | DWORD (any non-zero value; partner uses the same R_ID) | DWORD, must match partner |
| ID | WORD connection ID from NetPro | WORD connection ID from TIA Portal |
| SD_1 / RD_1 | ANY pointer (P#DBxx.DBX0.0 BYTE n) | Variant pointing to local tag |
| LEN | WORD byte count | UDINT byte count |
| DONE/BUSY/ERROR/STATUS | BOOL/BOOL/BOOL/WORD | BOOL/BOOL/BOOL/DWORD (STATUS widened to 32 bits) |
| Max LEN | 32767 bytes (≤ 32 KB) | 65534 bytes (≤ 64 KB) |
Working example: S7-1500 BSEND 32 KB to S7-300 BRCV
S7-1500 side (SCL, TIA Portal V20):
// BSEND 32 768 bytes from DB300 to S7-300 DB300
BSEND_DB300 (REQ := #tSendTrigger,
ID := W#16#0010,
R_ID := DW#16#C0FFEE01,
SD_1 := "DB300" := P#DB300.DBX0.0 BYTE 32768,
LEN := 32768,
DONE => #iBsDone,
BUSY => #iBsBusy,
ERROR => #iBsError,
STATUS => #iBsStatus);
S7-300 side (STEP 7 V5.x, STL):
// BRCV with the same R_ID
CALL FB 13, DB150
EN :=TRUE
ID :=W#16#1
R_ID :=DW#16#C0FFEE01
ADDR_1 :=P#DB300.DBX 0.0 BYTE 32768
NDR :=M200.0
ERROR :=M200.1
STATUS :=MW202
LEN :=MW204
The R_ID value DW#16#C0FFEE01 ties the BSEND and BRCV pair on both CPUs. Each S7 connection can carry multiple R_ID streams in parallel, allowing segmented data (e.g., one R_ID per cell).
BRCV instance, or chain multiple calls with different R_IDs.Open User Communication: TCON / TSEND / TRCV
OUC is the most flexible path because it does not require a configured connection in NetPro or TIA Portal. Both CPUs create a connection description (TCON_PARAM / TCON_IP_RFC) and establish the connection entirely from program code. This is the only path available when the partner IP is not known at engineering time, or when the project files cannot be merged.
Connection description layout
Both S7-300 (FB65 TCON) and S7-1500 (TCON instruction) use a data block of type TCON_IP_RFC (or TCON_IP_V4 on newer TIA Portal V17+ versions) of length 64 bytes. Fields must match on both sides:
| Bytes | Field | Value (S7-1500 client → S7-300 server, ISO-on-TCP) |
|---|---|---|
| 0..1 | Interface ID | W#16#0001 (PN-IE interface of the S7-1500) |
| 2..3 | Connection type | B#16#0C = ISO-on-TCP (RFC 1006) / B#16#0B = TCP / B#16#0D = UDP |
| 4..5 | Active establishment | W#16#0001 = active, W#16#0000 = passive |
| 6..9 | Remote IP | e.g., 192.168.0.20 in big-endian byte order (C0.A8.00.14) |
| 10..11 | Remote port | W#16#0000 for ISO-on-TCP (port is implicit 102) / W#16#2000 (8192) for raw TCP |
| 12..13 | Remote TSAP length / TSAP | 02 03 02 for S7-300 CPU 317-2 PN/DP at rack 0 slot 2 |
| 14..19 | Remote TSAP (cont.) | filled per remote side |
| 20..23 | Local TSAP (or empty for TCP/UDP) | e.g., 10.00 for S7-1500 |
Note that the S7-300 side uses the same 64-byte layout in DBxx; the field names and offsets are identical. Mismatched active/passive flags or mismatched TSAP are the dominant cause of failed TCON calls.
Working example: S7-1500 TCON/TSEND/TRCV ↔ S7-300 FB65/FB63/FB64
S7-1500 side (SCL, TIA Portal V20):
// Data block "TCON_Config_DB" of type TCON_IP_V4 (64 bytes)
// Pre-load via startup or HMI; fields shown at runtime in HEX view
TCON_S7300 (REQ := #tConnectTrigger,
ID := W#16#0020,
CONNECT:= "TCON_Config_DB",
DONE => #iConDone,
BUSY => #iConBusy,
ERROR => #iConError,
STATUS => #iConStatus);
// TSEND after TCON is established
TSEND_500 (REQ := #tSendTrigger,
CONT := 1,
ID := W#16#0020,
LEN := 16384,
DATA := "DB500.Diakoppler_Block_0",
DONE => #iSendDone,
BUSY => #iSendBusy,
ERROR => #iSendError,
STATUS => #iSendStatus);
// TRCV 8 KB into DB600
TRCV_600 (EN_R := TRUE,
CONT := 1,
ID := W#16#0020,
LEN := 8192,
DATA := "DB600.EmpfangsPuffer",
NDR => #iRcvNewData,
BUSY => #iRcvBusy,
ERROR => #iRcvError,
STATUS => #iRcvStatus,
RCVD_LEN=> #iRcvLen);
S7-300 side (STEP 7 V5.x, STL):
// FB65 TCON, passive. Connection description in DB200 (64 bytes)
CALL FB 65, DB210
REQ :=M300.0
ID :=W#16#2
CONNECT :=P#DB200.DBX 0.0 BYTE 64
DONE :=M300.1
BUSY :=M300.2
ERROR :=M300.3
STATUS :=MW302
// FB63 TSEND, triggered by trigger bit
CALL FB 63, DB211
REQ :=M310.0
ID :=W#16#2
LEN :=16384
DATA :=P#DB500.DBX 0.0 BYTE 16384
DONE :=M310.1
BUSY :=M310.2
ERROR :=M310.3
STATUS :=MW312
// FB64 TRCV, always enabled after connection is up
CALL FB 64, DB212
EN_R :=M320.0
ID :=W#16#2
LEN :=8192
DATA :=P#DB600.DBX 0.0 BYTE 8192
NDR :=M320.1
ERROR :=M320.2
STATUS :=MW322
LEN :=MW324
The S7-1500 is configured as active (it initiates the TCP handshake); the S7-300 is passive. Both use connection ID 0x0020 (S7-1500) and 0x2 (S7-300), which are local identifiers. The same connection description block layout is used on both sides — the legacy TCON_IP_RFC and the newer TCON_IP_V4 are byte-compatible for the standard fields.
PLCSIM Cross-Version Testing
Cross-version simulation is limited: the legacy S7-PLCSIM (V5.4 SP8 and earlier) cannot communicate with S7-PLCSIM in TIA Portal (V14+), and TIA Portal S7-PLCSIM instances only communicate with other TIA Portal S7-PLCSIM instances of compatible firmware ranges. Cross-generation testing of S7-300 ↔ S7-1500 therefore requires one of the following:
- Two physical CPUs, or a CPU 31x PN/DP and an ET 200S CPU paired with an S7-1500 (any S7-1500 CPU/PN with a physical PN port)
- An HMI device simulation in TIA Portal plus a PLCSIM instance for the S7-1500 and the S7-300, with PN-IO routing through the local interface of the engineering PC
- Loopback on a single engineering PC using the SIMATIC NET IE Softnet, two virtual MAC addresses, and the Softbus driver
Error Codes and Diagnostics
Two families of error codes apply: TCON/TCON family (any OUC) and PUT/GET/BSEND/BRCV family. The S7-1500 reports STATUS as DWORD; the S7-300 reports STATUS as WORD. The lower 16 bits of the S7-1500 status match the S7-300 status.
TCON family
| STATUS (hex) | Meaning | Field action |
|---|---|---|
| 0000 | Connection established / OK | Continue |
| 7000 | No job active | Trigger REQ |
| 7001 | First call pending | Wait for DONE |
| 7002 | Follow-up call pending | Wait for DONE |
| 8080 | Same ID for different connection types | Re-check ID uniqueness; S7 connection and OUC must not share IDs |
| 8081 | Timeout, partner not reachable | Verify partner CPU is RUN, network reachable, IP correct |
| 8082 | Local resource shortage | Reduce number of open connections; check CPU connection resource count |
| 80A1 | Connection refused / partner ended | Re-establish; check S7-300 protection / access flag |
| 80A2 | Partner IP not reachable | PING test; check VLAN, subnet mask, gateway |
| 80A3 | ARP failure | Check ARP cache; verify partner is online (LED on PN port) |
| 80A4 | TCP RST received | Partner rejected connection; verify port / TSAP / protection settings |
| 80B1 | Connection resource shortage on local CPU | CPU at max connections; free one or upgrade CPU |
| 80C1 | Connection request aborted | Local CPU rejected own request; re-initialize connection DB |
| 80C2 | Connection ID already exists | Use unique ID per connection |
| 80C3 | Local connection already active | TDISCON before re-TCON |
PUT/GET family
| STATUS (hex) | Meaning |
|---|---|
| 0000 | OK |
| 7000 | No job |
| 7001 | First call active |
| 7002 | Follow-up call active |
| 8090 | Local area does not exist (e.g., DB number out of range) |
| 8091 | Partner area does not exist (e.g., partner DB not loaded) |
| 80A0 | Negative acknowledgment from partner |
| 80A1 | Connection aborted by partner |
BSEND/BRCV family
| STATUS (hex) | Meaning |
|---|---|
| 0000 | OK |
| 7000 | No job |
| 7001 | First call active |
| 7002 | Follow-up call active |
| 8090 | Receive area too small (BRCV) |
| 8091 | Overflow in receive DB |
| 8092 | Parameter error (R_ID mismatch, ID not configured) |
| 80A0 | Negative acknowledgment |
| 80A1 | Connection aborted |
When the S7-1500 receives a STATUS of W#16#8301 on a PUT/GET, this is a "connection aborted by partner, partner at maximum number of connections" — typically resolved by enabling "Permit access with PUT/GET communication" on the S7-300 CPU properties page.
Troubleshooting Matrix
| Symptom | Likely root cause | First action |
|---|---|---|
| Connection never comes up, TCON STATUS = 80A2 | IP not reachable | Run PING from the S7-1500 online diagnostics; verify subnet mask and gateway |
| TCON STATUS = 80A1 right after first call | Partner CPU at maximum connections or PUT/GET access disabled | Enable PUT/GET access on S7-300; check number of configured connections |
| TCON STATUS = 8081 (timeout) | Partner CPU in STOP, or wrong TSAP | Place partner in RUN, verify TSAP (e.g., 03.02 for S7-300, 10.00 for S7-1500) |
| BSEND BUSY indefinitely, no DONE | Partner BRCV not in OB1 or in wrong OB | Place BRCV in OB1 with EN_R = TRUE on the S7-300 |
| PUT/GET STATUS = 8091 (partner area missing) | Partner DB not created or wrong number | Verify partner DB exists, is not optimized (symbolic-only), and is not Unlinked |
| PUT works, GET returns 80A0 | Partner PUT/GET access disabled | Enable "Permit access with PUT/GET communication" on S7-300 CPU |
| Data scrambled / wrong byte order | Big-endian vs little-endian mismatch | Use SWAP or a manual byte swap on both sides for 16/32-bit values |
| TCON STATUS = 80C2 | Connection ID conflict | Audit the connection table; each ID must be unique per CPU |
| Intermittent connection drops | Watchdog on intermediate switch or PN port flap | Check switch port statistics, set port to 100 Mbit/Full Duplex, disable EEE (green Ethernet) |
| BSEND/BRCV works in OB1, fails in OB35 | OB35 too fast for data volume; cycle time exceeded | Move BSEND to OB1, or increase OB35 cycle to 200 ms |
Verification and Commissioning
- Network reachability: PING the S7-300 from the S7-1500 online diagnostics; PING the S7-1500 from STEP 7 V5.x on the same PC.
- Connection state: Open "Online & Diagnostics" on the S7-1500 → "Connections" tab. Verify the connection reports "Established".
- Functional test, PUT/GET: Force a value in DB101 on the S7-300; observe the mirror in DB201 on the S7-1500; verify DONE pulses and STATUS = 0000.
- Functional test, BSEND/BRCV: Send a 32 KB block; check NDR on the S7-300 BRCV and LEN = 32768.
- Functional test, OUC: Send a 16 KB block over TCON/TSEND; verify RCVD_LEN on the S7-1500 TRCV.
- Stress test: Trigger 1000 cycles; check STATUS for any non-zero values; check CPU connection diagnostics for retransmits or aborted frames.
- Restart behavior: Power-cycle the S7-300; verify the S7-1500 reports STATUS 80A1 transiently, then re-establishes automatically (active partner).
- CPU mode change: Switch the S7-300 to STOP; verify the S7-1500 reports STATUS 80A1, then recovers on S7-300 RUN return.
For full engineering reference, the official Siemens application example S7 Communication between SIMATIC S7-1500 and SIMATIC S7-300 provides step-by-step TIA Portal V15.1 and STEP 7 V5.5 SP4 sample projects. The TIA Portal V20 instruction catalog reference Instructions for communication tasks (S7-300, S7-400, S7-1500) documents the S7-1500 instruction set and the differences from the legacy S7-300 function blocks.
FAQ
What is the maximum user-data payload per PUT/GET call between S7-1500 and S7-300?
PUT/GET transfers up to 160 bytes of user data per call (header + data on the S7-300 side, header-stripped on the S7-1500). For larger payloads, use BSEND/BRCV (up to 32 KB on the S7-300, 64 KB on the S7-1500) or TCON/TSEND with up to 64 KB on the S7-1500.
Can I configure the S7 connection in a single project even if the partner CPU is in a separate project?
Yes. Use an "unspecified S7 connection" on both sides. The S7-1500 is configured in TIA Portal under Devices & Networks → Connections, with the partner IP and TSAP entered manually. The S7-300 is configured in NetPro with the same TSAP pair. Connection IDs are project-local.
Why does BSEND on the S7-1500 stay BUSY indefinitely against an S7-300 BRCV?
The S7-300 BRCV must be called cyclically with EN_R = TRUE. If BRCV is only called in OB35 with a 100 ms cycle and the data volume is large, the cycle time can be exceeded; move BRCV to OB1 or increase the OB35 cycle. A missing BRCV call is the most common cause of BSEND stuck at BUSY.
Is S7-PLCSIM in TIA Portal able to communicate with the legacy S7-PLCSIM V5.4?
No. S7-PLCSIM V5.4 cannot communicate with S7-PLCSIM V14 or higher. For S7-300 ↔ S7-1500 cross-generation validation, use two physical CPUs, a CPU and an ET 200S CPU plus an S7-1500, or SIMATIC NET Softnet loopback with virtual MAC addresses on the engineering PC.
Why does my S7-1500 PUT/GET fail with W#16#8301 against the S7-300?
W#16#8301 is reported when the S7-300 rejects the access because the "Permit access with PUT/GET communication from remote partner" option is not enabled. Open the S7-300 CPU properties in STEP 7 V5.x, switch to the Protection tab, and tick the access flag. Download the new configuration to the S7-300.
Do I need different TSAPs on the S7-1500 and S7-300?
Yes. The local TSAP on the S7-1500 is typically 10.00 (override of the default 01.01) and the local TSAP on the S7-300 PN-CPU is 03.02 (rack 0, slot 2). On each side, the remote TSAP must equal the local TSAP of the other CPU. Mismatched TSAPs return STATUS 80A2 or 80A1.
Can I use TCP instead of ISO-on-TCP for S7-1500 ↔ S7-300 communication?
Yes, with TCON/TSEND/TRCV you can select B#16#0B (TCP) or B#16#0D (UDP) in the connection description. ISO-on-TCP (B#16#0C) is the default and is preferred for S7-1500 ↔ S7-300 because it provides explicit connection establishment and termination. Pure TCP is appropriate for non-S7 partners that do not speak ISO-on-TCP.