S7-400 Multiproject Communication: Profibus and Ethernet Setup
Overview
Connecting two SIMATIC S7-400 multiprojects that live in separate STEP 7 projects is a recurring engineering problem. The classic situation is one multiproject containing two or more CPUs that already exchange data internally over a DP/DP coupler on Profibus, while a second multiproject contains three CPUs, each fitted with both a CP 443-1 (Industrial Ethernet) and a CP 443-5 (Profibus). The engineering question is straightforward: which physical medium and which S7-400 communication blocks (PUT/GET, BSEND/BRECEIVE, USEND/URCV, SFB/FB) move user data from one multiproject to the other, and how is the link configured in NetPro when the two systems are not part of the same STEP 7 project database?
This reference walks through the supported options, explains why the existing DP/DP coupler cannot be reused as a cross-project gateway, and provides the STEP 7 V5.5 / STEP 7 Professional configuration steps and SCL/ST sample code required to make the two multiprojects exchange process data reliably. For S7-400 communication primitives, the official Siemens documentation "Communication instructions (S7-300, S7-400) – STEP 7" at docs.tia.siemens.cloud is the canonical reference for block selection and parameterization.
Prerequisites
- STEP 7 V5.5 + SPx (or STEP 7 Professional in the TIA Portal) installed with the HW Config catalog for S7-400 and CP 443-1/CP 443-5. The two multiprojects must each open cleanly in their own STEP 7 project.
- Hardware per CPU on the second multiproject: a CP 443-1 (6GK7 443-1EX/EX30/GX or current equivalent such as 6GK7443-1RX10-0XE0) for Industrial Ethernet and a CP 443-5 (6GK7 443-5DX/EX02 or current equivalent) for Profibus-DP master/slave operation. The first multiproject CPU(s) that need to talk to the second multiproject must have at least one CP 443-1 or CP 443-5 added if Ethernet or Profibus is chosen as the cross-project medium.
- Cabling and IP plan: a managed Industrial Ethernet switch (e.g. SCALANCE XC/XB/XR) and a Profibus segment with proper termination, shield grounding, and bus addresses. Each CP 443-1 must have a unique IPv4 address in the same subnet as its peer; each CP 443-5 must have a unique Profibus address in the 1…125 range.
- Configured S7 connections in NetPro for both projects. The connection partner on the other side is defined as an "unspecified" S7 connection until both projects are linked, then tightened to a real partner after the second project is opened and the local ID matches.
- User program slots for communication blocks. PUT/GET live in the standard library under Communication > S7 Communication as FB 15 PUT and FB 14 GET. For larger payloads or event-driven transfer, SFB 12 BSEND / SFB 13 BRECEIVE and SFB 8 USEND / SFB 9 URCV are used. These blocks are part of the S7-400 system blocks and are described in the Siemens "Communication instructions (S7-300, S7-400)" reference at docs.tia.siemens.cloud.
Supported S7-400 Communication Paths
An S7-400 CPU and its CPs support a fixed set of connection types that NetPro lets you declare. The table below maps the physical option to the connection type and the communication blocks that actually move the bytes.
| Physical medium | Hardware on CPU side | NetPro connection type | Recommended S7 blocks | Typical use |
|---|---|---|---|---|
| Industrial Ethernet / TCP/IP | CP 443-1 | S7 connection (ISO-on-TCP / TCP / UDP via CP) | FB 15 PUT, FB 14 GET, SFB 12 BSEND / SFB 13 BRECEIVE, SFB 8 USEND / SFB 9 URCV | Bulk data exchange between two multiprojects; best long-distance option |
| Profibus-DP | CP 443-5 (master and/or slave) | S7 connection over Profibus, FDL, or DP | FB 15 PUT, FB 14 GET, SFB 12 BSEND / SFB 13 BRECEIVE | High-speed cyclic exchange inside one plant, slave/master handshake with second system |
| MPI | CPU integrated MPI port (X1) | S7 connection via MPI | FB 15 PUT, FB 14 GET (limited data per call) | Service / engineering / low-volume data transfer, short cable runs (< 50 m without repeater) |
| Point-to-point (serial) | CP 441 | PtP link, no S7 connection | Custom protocols (RK512, 3964R, ASCII) | Legacy third-party devices, not for cross-project CPU-to-CPU |
Why the DP/DP Coupler Is Not the Answer
The DP/DP coupler (Siemens 6ES7 158-0AD01-0XA0 or the current 6ES7 158-3AD10-0XA0) is a Profibus-DP slave gateway. On each side it is configured with GSD file SIEM8110.GSD (or the newer variant) and is added to HW Config as a DP slave. It transfers I/O data through its slot configuration, not through any S7 mechanism. There is no connection in the S7 sense, no connection ID, and no NetPro entry.
For inter-project communication you need a path that is:
- Visible to NetPro on both sides (so the S7 connection is declared, downloaded, and commissioned in both projects).
- Addressable by an S7 connection endpoint (CPU integrated port, CP 443-1, or CP 443-5).
- Capable of triggering an S7 block (PUT/GET etc.) at the user-program level.
The DP/DP coupler fails on all three counts. It is a valid component inside one multiproject, not a bridge between multiprojects.
Option A — Industrial Ethernet via CP 443-1
Ethernet is the most common choice for cross-project S7-400 communication because:
- CP 443-1 supports ISO-on-TCP (RFC 1006), TCP, and UDP, with S7 connections established through the CP.
- Throughput is high, payload per PUT/GET is large (up to 462 bytes in STEP 7 V5.x PUT/GET on a single call; larger transfers are segmented automatically).
- Distances and topologies are unconstrained by Profibus electrical limits; fiber or SCALANCE switches allow plant-wide coverage.
STEP 7 NetPro configuration
- In the first multiproject (project A), open the CPU that will own the connection and right-click its CP 443-1 in NetPro → Insert New Connection.
- Choose S7 connection, set the partner to Unspecified, and on the Address Details tab enter the IP address of the partner CP 443-1 in project B and the rack/slot of the partner CPU.
- Set a local connection ID (e.g. 1) and let STEP 7 assign a remote ID; both will be reconciled when project B is opened.
- Repeat on the second multiproject (project B): create an S7 connection from its CP 443-1 to project A's CP 443-1, with the partner set to Unspecified and the same IP/rack/slot pair entered manually.
- Compile and download the NetPro connection data to both CPUs. After download, the S7 connection becomes established; the CP 443-1 diagnostic buffer records the connection state.
User program — PUT/GET with FB 15 / FB 14
For small to medium payloads, FB 15 PUT writes up to 462 bytes from the local DB into a partner DB, and FB 14 GET reads up to 462 bytes from a partner DB into the local DB. Sample call in STL on the project A side:
// Periodic PUT of 100 bytes from DB100 to remote DB200 in project B
CALL FB 15 , DB 15
REQ := TRUE // trigger on rising edge
ID := W#16#1 // connection ID 1 (from NetPro)
NDR := // not used for PUT
DONE := M 100.0 // one-shot done flag
ERROR := M 100.1
STATUS := MW 102 // 16-bit status word
ADDR_1 := P#DB200.DBX0.0 BYTE 100 // remote target area
ADDR_2 := // not used
ADDR_3 := // not used
ADDR_4 := // not used
SD := P#DB100.DBX0.0 BYTE 100 // local source
RD := // not used
LEN := 100 // payload length
Mirror the call in project B with a GET to read 100 bytes from project A's DB100 into a local DB200. The Siemens reference for block parameters is the Communication instructions (S7-300, S7-400) page.
Larger or event-driven payloads — BSEND / BRECEIVE
When payload exceeds 462 bytes, switch to SFB 12 BSEND on the sender and SFB 13 BRECEIVE on the receiver. The pair is handshake-driven: BSEND writes a chunk, BRECEIVE acknowledges, the next chunk flows. Maximum payload per segment is 32 KB on S7-400 (subject to CP 443-1 firmware — see the Weintek interoperability note for S7-400 Ethernet at dl.weintek.com for typical partner limits).
// Project A — BSEND 8 KB burst to project B
CALL SFB 12 , DB 12
REQ := M 110.0 // start-of-burst trigger
R := FALSE
ID := W#16#2 // connection ID 2
R_ID := DW#16#1 // must match receiver R_ID
DONE := M 110.1
ERROR := M 110.2
STATUS := MW 112
SD := P#DB300.DBX0.0 BYTE 8192 // local source area
LEN := MW 114 // actual length, <= 8192
Option B — Profibus-DP via CP 443-5
CP 443-5 can be operated as a DP master class 1, as a DP slave, or in FDL (free layer-2) mode. The S7 connection type "S7 connection (FDL)" is what you declare in NetPro for CPU-to-CPU data exchange on Profibus, distinct from "S7 connection (Profibus-DP)" used for distributed I/O.
Master / slave decision for two multiprojects
The cleanest cross-project Profibus pattern is to designate one multiproject as the Profibus master and the other as the Profibus slave. In your specific case the second multiproject (with three CPUs each owning a CP 443-5) already functions as three independent Profibus masters, one per CP. That is the very reason the second system cannot be the master for the link to the first multiproject: a Profibus segment can have exactly one class 1 master active at a time, and three CP 443-5 instances on three separate CPUs do not satisfy that rule unless the link is rerouted through one of the CPUs.
Two viable patterns:
- First multiproject = Profibus master. Add a CP 443-5 to one CPU in project A, configure it as a DP master, and treat the CP 443-5 in one CPU of project B as a DP slave. PUT/GET or BSEND/BRECEIVE are then used over an S7 connection (FDL or DP) between the two CPUs. The remaining two CP 443-5 in project B can stay as masters on their own segments, isolated from the cross-project link.
- Second multiproject = Profibus master. Add a CP 443-5 to one CPU in project A (it must be DP-master-capable) and connect it as a slave to a single dedicated CP 443-5 in project B that is configured as DP master for that segment only. The other two CP 443-5 in project B are not on this segment.
STEP 7 NetPro configuration for Profibus
- Open HW Config for the master CPU's CP 443-5 and add the partner CP 443-5 as a DP slave using the GSD file shipped with the partner CP (or, if both are Siemens, the integrated DP slave entry in the catalog — "S7-400 CP 443-5" under Profibus-DP > slaves > Siemens AG).
- Configure I/O slots on the DP slave so that the cross-project data areas map to defined bytes in the master's input/output process image. Note the slot configuration also sets the maximum 244-byte limit per direction.
- In NetPro insert an S7 connection (FDL) from the master CPU's CP 443-5 to the partner. Local connection ID must match the user program.
- Download HW Config and NetPro to both CPUs and the CPs.
User program — PUT/GET over Profibus
The same FB 15 PUT and FB 14 GET are used — the underlying transport is FDL or Profibus-DP rather than ISO-on-TCP, but the block interface is identical. Maximum payload per call is 462 bytes; the Siemens reference at docs.tia.siemens.cloud confirms that PUT/GET and BSEND/BRECEIVE are available on both Ethernet and Profibus CPs.
Option C — MPI as a Service-Only Fallback
MPI is a viable path for low-volume data transfer between two CPUs in different projects, but the rules are restrictive:
- Default MPI bus address range: 0…15 (extendable to 0…31 with a CP if installed).
- Maximum total cable length without repeater: 50 m (with two repeaters in series, 1100 m).
- Baud rate: 187.5 kbit/s default; 12 Mbit/s supported only on newer CPUs with the appropriate MPI/Profibus port.
- PUT/GET works over MPI but supports fewer S7 connections per CPU than CP 443-x.
Use MPI only for engineering access, startup data exchange, or telemetry under 100 bytes/cycle. For plant-wide data, prefer Ethernet or Profibus.
Configuration Walkthrough — Cross-Project S7 Connection
Because the two systems are in separate STEP 7 projects, the connection is declared twice: once in project A and once in project B, with each side declaring the other as an unspecified S7 partner. This is the only legal pattern when the two projects are not opened together in a multiproject umbrella.
- Project A — declare the connection. NetPro → right-click the CP 443-1 (or CP 443-5) of the master CPU → Insert New Connection. Connection type: S7 connection. Partner: Unspecified. Fill in the partner IP address and rack/slot. Note the local ID.
- Project B — declare the mirror connection. Open the partner CPU in NetPro, right-click its CP 443-1 (or CP 443-5) → Insert New Connection. Partner: Unspecified. Enter project A's IP and rack/slot. Use the same connection-type settings (PUT/GET allowed, single-directional, etc.) as project A.
- Reconcile IDs. After both sides have an unspecified partner, open each project and use PLC → Compile and Download Objects — Connections. STEP 7 will write the connection table to the CPs. Connection status moves to Established once both CPUs and CPs are online.
- User program. Call PUT/GET or BSEND/BRECEIVE with the local connection ID and matching R_ID (for BSEND/BRECEIVE).
- Download and verify. Both projects must be downloaded independently. There is no STEP 7 command to download a connection to a CPU in another project.
Step-by-Step — Building a 100-Byte PUT/GET Link over Ethernet
- Set CP 443-1 IP addresses. In HW Config, double-click each CP 443-1. Set IP address (e.g. 192.168.10.11 / 24 on project A side, 192.168.10.12 / 24 on project B side). Disable router if no IP routing is required. Assign rack 0 / slot 3 in the S7-400 (CP slot is typically 4…15 in rack 0).
- Create a DB on each side for the exchange. Project A: DB100 with 100 bytes (ARRAY[0..99] OF BYTE). Project B: DB200 with 100 bytes. Mark both DBs as non-optimized (i.e. classic DB) so PUT/GET can address them by absolute address.
- NetPro — project A. Insert S7 connection on CP 443-1 of project A's CPU, partner unspecified, IP 192.168.10.12, rack 0, slot 3. Local ID = 1. Tick PUT/GET permitted.
- NetPro — project B. Insert S7 connection on CP 443-1 of project B's CPU, partner unspecified, IP 192.168.10.11, rack 0, slot 3. Local ID = 1. Tick PUT/GET permitted.
- Compile and download HW Config and NetPro to both CPUs and both CPs.
- Project A user program — periodic PUT. Insert FB 15 (DB 15) in OB 35 (cyclic interrupt 100 ms). Call with REQ latched, ID = 1, ADDR_1 = remote DB200 offset 0 length 100, SD = local DB100 offset 0 length 100, LEN = 100.
- Project B user program — periodic GET. Insert FB 14 (DB 14) in OB 35. Call with REQ latched, ID = 1, ADDR_1 = remote DB100 offset 0 length 100, RD = local DB200 offset 0 length 100, LEN = 100.
- Verify. Force a recognizable pattern in DB100 of project A (e.g. bytes 0…3 = 16#AA, 16#BB, 16#CC, 16#DD). Watch DB200 in project B with a watch table. Both sides should show the pattern within one OB 35 cycle.
Block Selection Matrix
| Block | Direction | Max payload / call | Protocol | When to use |
|---|---|---|---|---|
| FB 15 PUT | Local → remote | 462 bytes (S7-400) | S7 (Ethernet or Profibus) | One-shot or cyclic data push, no acknowledgement on data integrity |
| FB 14 GET | Remote → local | 462 bytes (S7-400) | S7 (Ethernet or Profibus) | Read-only partner polling |
| SFB 12 BSEND / SFB 13 BRECEIVE | Bidirectional, segmented | 32 KB total per session | S7 (Ethernet or Profibus) | Large bursts, deterministic handshake, no data loss |
| SFB 8 USEND / SFB 9 URCV | Bidirectional, fast | 4 KB per call | S7 (Ethernet or Profibus) | Low-latency event signaling, no acknowledgement payload |
| SFB 14 GET (single-sided read) | Remote → local | 462 bytes | S7 (Ethernet or Profibus) | Older SFB variant, equivalent to FB 14 |
| SFB 15 PUT (single-sided write) | Local → remote | 462 bytes | S7 (Ethernet or Profibus) | Older SFB variant, equivalent to FB 15 |
Verification
- Connection state: in NetPro on either side, right-click the S7 connection and choose Connection Status (online). The state should be Established. If it is Not established, check partner IP, rack/slot, and CP firmware.
- Diagnostic buffer: in STEP 7, PLC → Diagnostics/Setting → Diagnostic Buffer on the CP 443-1 (or CP 443-5) and on the CPU. The CP will log connection establishment, partner unreachable, ID conflict, and resource exhaustion events.
- Watch tables: with the user program running, force a known pattern in the source DB on project A, then read the target DB on project B. The pattern should appear within the cycle time of OB 35 or whichever block is calling PUT/GET.
- STATUS word: read MW 100 / MW 110 (or whatever M-word you used to capture STATUS) with a watch table. STATUS = 0 means active; STATUS = 16#0001 means Done; STATUS = 16#81xx, 16#82xx, 16#70xx carry the error code. Common values: 16#0001 (Done), 16#7000 (Idle), 16#8181 (partner not reachable), 16#8183 (partner resource exhausted), 16#81A0 (negative acknowledgement from partner), 16#81B0 (segmentation error, LEN too large), 16#81F0 (internal error). Full enumeration is in the Siemens "Communication instructions (S7-300, S7-400)" reference at docs.tia.siemens.cloud.
- Throughput sanity check: cycle a counter in the source DB (e.g. add 1 every second) and verify the counter increments in the target DB. If the count stalls, the connection has dropped; check physical link and CP LEDs (LINK, RX/TX, SF/BF).
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Connection status "Not established" in NetPro | Wrong partner IP, rack/slot, or CP not downloaded with NetPro data | Verify IP, rack, slot; re-download NetPro to both CPs |
| STATUS = 16#8181 in PUT/GET | Partner CPU/CP not online, network unreachable, or wrong subnet | Ping partner IP; check SCALANCE/switch port LEDs; verify subnet mask and gateway on both CPs |
| STATUS = 16#81A0 (NACK) | Partner DB does not exist, is wrong length, or is optimized | Create the DB on the partner side with matching length, ensure it is non-optimized for absolute addressing |
| STATUS = 16#81B0 (LEN error) | LEN > 462 for PUT/GET, or ADDR_1 length mismatch | Lower LEN to ≤ 462, ensure ADDR_1 BYTE count == LEN |
| BSEND DONE never set | R_ID mismatch between sender and receiver | Set R_ID identically on both sides; verify in the called SFB instances |
| Connection established but no data flows | OB 35 / calling OB not running, REQ is a static TRUE, or ADDR_1 points to wrong DB number | Confirm OB 35 is generating interrupts; trigger REQ on a rising edge; verify DB number and offset |
| SF LED on CP 443-1 lit | Configuration mismatch, partner offline, or duplicate IP | Read CP diagnostic buffer; resolve duplicate IP with ARP scan |
| Profibus BF LED on CP 443-5 | Bus fault — termination, short circuit, or slave offline | Check termination resistors on at both ends, isolate each slave, verify addresses with a Profibus analyzer |
| Three CP 443-5 on same segment — master conflict | Multiple class 1 masters on one segment | Move cross-project link to a dedicated segment with one master only, or use Ethernet |
Sample SCL — S7-400 PUT Block Instance
Equivalent to the STL example, written in SCL for clarity and easier maintenance:
FUNCTION_BLOCK FB_PutToProjectB
VAR
fbPut : FB15; // PUT instance
bReq : BOOL := FALSE; // edge-triggered request
bDone : BOOL;
bError: BOOL;
wStatus: WORD;
END_VAR
BEGIN
// 100-byte PUT of DB100 (local) to DB200 (project B)
fbPut(REQ := bReq,
ID := W#16#1,
ADDR_1:= P#DB200.DBX0.0 BYTE 100,
SD := P#DB100.DBX0.0 BYTE 100,
LEN := 100,
DONE := bDone,
ERROR := bError,
STATUS:= wStatus);
// Set REQ as a one-shot from a periodic OB
// Example: in OB35:
// bReq := NOT bReqPrev; // edge
// bReqPrev := bReq;
// FB_PutToProjectB();
END_FUNCTION_BLOCK
Field-Proven Caveats
- Maximum S7 connections per CP 443-1 is firmware-dependent. Older 6GK7 443-1EX11 firmware accepts fewer connections than the current 6GK7443-1RX10-0XE0. Check the device manual for the exact S7-connection count and the maximum BSEND/BRECEIVE simultaneous instances. The Communication instructions (S7-300, S7-400) page lists the theoretical maxima, but firmware reduces them in practice.
- DB must be non-optimized when addressed by absolute address in PUT/GET. In TIA Portal / STEP 7, set Attributes → Optimized block access = false.
- BSEND/BRECEIVE R_ID must match exactly on both sides. This is the single most common cause of "connection established but no data" in BSEND applications.
- Connection role flags in NetPro (active/passive, one-way, PUT/GET permitted) must be consistent. The common misconfiguration is leaving both sides as passive — no connection establishes.
- CP 443-5 in DP slave mode requires a GSD file. If you are linking two Siemens S7-400 systems, you can use the integrated catalog entry for the CP 443-5 as a DP slave and skip the GSD import step.
- Project download is per-project. There is no STEP 7 mechanism to download a connection to a CPU in another project. Both projects must be downloaded independently, and the connection comes up only after both CPUs and both CPs have the new connection data.
- Firewall and routing: if the two CP 443-1 are in different IP subnets, the routers must permit ISO-on-TCP (port 102) and any S7 diagnostic traffic. Most enterprise firewalls block port 102 by default; plant networks usually do not.
Summary Recommendation
For the user's two-multiproject S7-400 problem, the recommended path is Industrial Ethernet via CP 443-1, because both multiprojects already have CP 443-1 installed and Ethernet avoids the class 1 master conflict that Profibus would introduce across the second multiproject's three CP 443-5 instances. If Profibus is mandated (e.g. plant-wide Profibus-only backbone), use a dedicated segment with one master and one slave, separating the cross-project link from the existing CP 443-5 master segments in project B. Avoid relying on the DP/DP coupler — it is an I/O gateway, not an S7 connection endpoint. The Siemens S7-400 Ethernet integration note confirms that S7-400 with CP 443-1 is the standard path for partner integrations.
FAQ
Can a DP/DP coupler be used to connect two S7-400 multiprojects?
No. A DP/DP coupler (e.g. 6ES7 158-0AD01-0XA0) is a Profibus slave-to-slave gateway that transfers up to 244 bytes of I/O data per direction. It does not terminate an S7 connection and cannot be addressed by PUT/GET or BSEND/BRECEIVE. It is a valid tool inside one multiproject, not a cross-project bridge.
Which S7-400 communication blocks should I use to move 100 bytes between two multiprojects?
Use FB 15 PUT on one side and FB 14 GET on the other over an S7 connection on CP 443-1 (ISO-on-TCP). One PUT/GET call carries up to 462 bytes. Both blocks are documented in the Siemens reference at docs.tia.siemens.cloud.
How do I create an S7 connection when the two CPUs are in different STEP 7 projects?
Declare the connection in both projects, each with the partner set to "Unspecified." In project A, create an S7 connection on the local CP 443-1, set partner IP / rack / slot to project B's CPU, and pick a local connection ID. Repeat the mirror in project B. Compile and download NetPro to both CPUs and CPs; the connection establishes only after both sides are downloaded.
Why is my PUT call returning STATUS 16#81A0?
STATUS 16#81A0 is a negative acknowledgement from the partner. The most common causes are (a) the partner DB does not exist, (b) the partner DB is shorter than LEN, or (c) the partner DB is optimized and PUT/GET cannot address it by absolute byte offset. Create a non-optimized DB of matching length on the partner side.
Can three CP 443-5 on one Profibus segment act as a single master for cross-project communication?
No. A Profibus segment allows one class 1 master. If project B has three CP 443-5 each acting as a class 1 master, only one of them can be master for the cross-project link. Put the cross-project link on a dedicated segment with one master and one slave, or move the cross-project link to Ethernet and leave the three Profibus segments in project B untouched.