Overview
Connecting protection relays from different manufacturers on a single RS-485 segment is a routine substation integration task. A single Siemens SIMATIC S7-300 CP341 communication processor can interrogate both GE Multilin and Siemens SIPROTEC relays over Modbus RTU on the same twisted-pair bus, provided three constraints are satisfied: identical serial port parameters, non-overlapping slave addresses, and correct register map interpretation for each vendor. This reference consolidates the physical layer, CP341 driver configuration, register addressing, and commissioning verification required to build a deterministic multi-vendor Modbus RTU network.
Modbus RTU Fundamentals and Multi-Vendor Compatibility
Modbus RTU is an open, master-slave protocol standardized as MODBUS Application Protocol V1.1b3 (Modbus Organization, 2006). Because it is an open specification, any conforming device can act as a slave regardless of the protection relay vendor. The CP341 with the Modbus Master RTU driver is itself a Modbus RTU master, and it can poll any number of conforming slaves on the same physical bus.
The protocol frame structure is identical for every vendor:
| Field | Length (bytes) | Description |
|---|---|---|
| Address | 1 | Slave ID 1–247 |
| Function Code | 1 | 01–05, 06, 15, 16 typically |
| Data | N | Register/coil address and quantity |
| CRC | 2 | CRC-16 (Modbus polynomial 0xA001) |
The fundamental compatibility rules are therefore protocol-level, not vendor-level. As long as both relays implement the standard Modbus function codes (typically 03 for holding registers, 04 for input registers, 06/16 for write), the master will not see a "vendor conflict." The only conflicts that arise are configuration conflicts: baud rate, parity, data bits, stop bits, slave address, and base register offset.
Hardware: Siemens CP341 Communication Processor
The 6ES7340-1AH02-0AE0 (CP341) is a serial point-to-point or multi-drop module for the SIMATIC S7-300 rack. Variants differ in physical interface:
| MLFB | Interface | Use Case |
|---|---|---|
| 6ES7340-1AH02-0AE0 | RS-232C | Single device, short runs |
| 6ES7340-1BH02-0AE0 | RS-485 (2-wire) | Multi-drop Modbus RTU |
| 6ES7340-1CH02-0AE0 | RS-422/RS-485 (4-wire) | Full-duplex multi-drop |
For multi-vendor Modbus RTU networks, the RS-485 variant (6ES7340-1BH02-0AE0) is the correct choice. The RS-485 transceiver provides the differential signaling required by the Modbus over Serial Line specification (1.5 V minimum differential, ±7 V common-mode tolerance on the bus).
The Modbus Master RTU loadable driver is a separately orderable software package: 6ES7870-1AA01-0YA0 (Modbus Master RTU for CP341/CP440/CP441-1). It must be installed on the S7-300's programming device and downloaded into the CP341. The corresponding slave driver is 6ES7870-1AB01-0YA0. After installation, the driver is selected in the CP341 hardware configuration under Protocol > Modbus Master.
Physical Layer: RS-485 Topology and Cabling
A correctly terminated RS-485 bus is the foundation of a stable Modbus RTU network. The Modbus over Serial Line reference (MODBUS over Serial Line – Specification and Implementation Guide V1.02) defines the bus topology as a daisy chain. Star, stub, and tee topologies cause reflections that corrupt frames.
Key physical layer rules:
- Cable type: Twisted pair, characteristic impedance 120 Ω, e.g. Belden 3106A or Lapp ETHERLINE 2-pair.
- Termination: 120 Ω resistor across D+ and D- at each end of the bus segment only. Termination on intermediate devices is forbidden.
- Biasing: Fail-safe bias resistors (typically 680 Ω to +5 V on D+ and 680 Ω to GND on D-) on at least one node. The CP341 RS-485 interface provides internal bias that can be enabled in the hardware configuration; external bias is required only if the CP341 is not at the master end.
- Max nodes: 32 unit loads per segment. The CP341 presents 1 unit load; a typical GE Multilin relay presents 1 unit load; a SIPROTEC 5 presents 1 unit load. A 32-relay substation is therefore legal without a repeater.
- Max length: 1200 m at ≤ 93.75 kbps. At 115.2 kbps (the CP341 maximum), the limit is approximately 1000 m. Beyond this, install a Siemens 6ES7972-0AA02-0XA0 RS-485 repeater.
Communication Parameter Matching
All slaves on a single Modbus RTU segment must agree on the link layer parameters. The CP341 allows each of the following to be set independently of any other slave on the bus; therefore every relay must be configured to the same values. Mismatches are the single most common source of "Modbus won't talk" calls.
| Parameter | CP341 Range | GE Multilin UR/SR Typical | Siemens SIPROTEC 4/5 Typical |
|---|---|---|---|
| Baud rate | 300 to 115200 bps | 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
| Data bits | 7 or 8 | 8 (Modbus RTU) | 8 (Modbus RTU) |
| Parity | None, Even, Odd | None, Even, Odd | None, Even, Odd |
| Stop bits | 1 or 2 | 1 (with parity), 2 (no parity) | 1 (with parity), 2 (no parity) |
| Inter-frame silence | Configurable (default 3.5 char) | ≥ 3.5 char | ≥ 3.5 char |
Slave Address Planning
Modbus RTU slave addresses occupy the range 1 to 247 (address 0 is broadcast). Two slaves on the same bus must never share an address. The conventional layout in a substation:
| Slave ID | Device | Vendor |
|---|---|---|
| 1 | CP341 master (if used as slave on other bus) | Siemens |
| 2 | SIPROTEC 7SA86 distance relay, Bay 1 | Siemens |
| 3 | SIPROTEC 7SJ85 overcurrent, Bay 2 | Siemens |
| 10 | GE Multilin B30 bus differential, T1 | GE |
| 11 | GE Multilin C70 breaker control, T1 | GE |
| 12 | GE Multilin F60 feeder, Feeder 1 | GE |
| 20 | GE Multilin 750 feeder management | GE |
Address blocks separated by tens (1–9 Siemens, 10–19 GE-UR, 20–29 GE-SR) make future expansion cleaner and allow you to write a simple polling scheduler in the S7-300 OB1 that loops over a range.
Register Map Differences: GE Multilin vs Siemens SIPROTEC
Both vendors use function codes 03 (read holding registers), 04 (read input registers), 06 (write single), and 16 (write multiple), but their register maps are vendor-specific. The address offset convention also differs.
| Parameter | GE Multilin UR | GE Multilin SR 750/760 | Siemens SIPROTEC 4 | Siemens SIPROTEC 5 |
|---|---|---|---|---|
| Address offset | 0-based (Modbus native) | 0-based (Modbus native) | 0-based (Modbus native) | 0-based (Modbus native) |
| Modbus database file | UR Setpoint/Actual Values Map (Modbus) | SR Modbus Map manual | DIGSI 4 Modbus mapping export | DIGSI 5 Modbus mapping export |
| Typical quantity | 2048 holding registers | 1024 holding registers | Up to 4096 mapped points | Up to 8192 mapped points |
| Word order in 32-bit values | Big-endian (high word at lower address) | Big-endian | Big-endian | Big-endian |
| Float (IEEE 754) | Yes (2 registers per float) | Yes (2 registers per float) | Yes (2 registers per float) | Yes (2 registers per float) |
The practical consequence: when you read "IA magnitude, phase A" from a B30 at address 0x1000, the same data point on a 7SA86 is at a completely different address defined in the SIPROTEC Modbus map. Always export the vendor's Modbus map as a CSV (DIGSI 5 > IEC 61850/MMS > Modbus mapping > Export) before starting PLC programming.
CP341 Configuration in STEP 7 (Classic)
The CP341 is configured with the supplied "PtP Param" (or, in TIA Portal, "Point-to-Point") tool. Configuration is project-wide, not per-port: one CP341 supports one protocol on one port.
- Insert the CP341 from the hardware catalog (6ES7340-1BH02-0AE0) into the S7-300 rack. Assign an I/O address space, e.g. PIW 256..271 (CP341 occupies 16 input / 16 output bytes for handshake/status).
- Open Properties > Protocol and select Modbus Master RTU. The driver is detected from the installed 6ES7870-1AA01-0YA0 package.
- Configure the port: 19200 bps, 8E1, inter-frame silence 3.5 character times (or 4 ms minimum for 19200/11/2 ≈ 0.57 ms/char).
- Define the Modbus master job table. The CP341 driver accepts up to 250 jobs, each specifying: slave address, function code, start address, quantity, and a DB number / byte offset where the returned data is stored.
- Call the loadable function blocks FB7 P_SND_RK and FB8 P_RCV_RK from the Modbus driver library in OB1. The driver uses these internally; user code triggers jobs and reads responses through the LDB (Loadable Driver Block) instance.
Example OB1 segment to trigger a Modbus read of holding register 0x1000 (5 registers) from slave 10 (GE B30) into DB100:
// Trigger job 0 from CP341 instance DB12 (LDB)
CALL "S_MODB" , DB12
REQ :=TRUE // rising edge starts the job
MODE :=B#16#01 // 1 = single job, 0 = cyclic
JOB :=0 // job index 0 = slave 10, FC 03, addr 0x1000, qty 5, dest DB100.DBB0
DONE :=M 100.0
ERROR :=M 100.1
STATUS :=MW 102
The job definition is created in the protocol tool, not in user code. Job 0 above would be preconfigured as: SLAVE=10, FC=03, ADDR=4096, QTY=5, DB=100, OFFSET=0 in the PtP Param editor.
CP341 Configuration in TIA Portal
For S7-300 projects migrated to TIA Portal V16 or later, the CP341 with Modbus Master RTU is supported through the legacy device proxy. The configuration path is:
- Device view > CP341 > Properties > Point-to-Point > Protocol > Modbus Master RTU.
- Under Modbus Master > Jobs, add a job. For each job set: Slave, Function code (03 for read, 06/16 for write), Start address (decimal or hex with 0x prefix), Length, and Target DB.
- The LDB is now generated automatically; user code calls the standard LDB instance with
S_MODBfor cyclic andS_MODBUSfor triggered reads.
Step-by-Step Commissioning
- Verify wiring. With a DMM, measure the resistance between D+ and D- on a powered-down bus. You should see ~60 Ω at the master end (two 120 Ω terminations in parallel). Reading open or short indicates broken termination.
- Confirm slave addresses. Use a Modbus master simulator (such as a laptop running Modbus Poll or QModMaster) to scan the address range 1–247 at 19200/8E1. Each present relay responds with its Modbus echo. Record the addresses.
- Capture a reference frame. With a USB RS-485 tap, capture one polling cycle. Verify that every request has a valid CRC and a corresponding response within the configured timeout. A timeout on one slave blocks all subsequent jobs in a cyclic job table.
- Configure the CP341. Build the job table in order of priority. Place status reads (FC 04) first, then metering reads (FC 03), then write commands (FC 06/16) last to minimize bus contention.
- Insert the data into the S7 program. Map each relay's holding register block to a known DB offset. Document the mapping in a global variable comment so that HMI/SCADA tag imports are straightforward.
- Loopback test. Disconnect the bus and connect a hardware loopback (D+ to D+, D- to D-, with termination). Issue a read of input registers 0x0001 from slave 99. The CP341 should report "CRC error" or "slave not responding" rather than a generic protocol fault. This confirms the driver is running.
- Run with one relay. Connect only the Siemens SIPROTEC first. Validate timing and DB contents. Then add the GE B30, then the C70, then the SR750. Adding one device at a time isolates conflicts.
Troubleshooting Matrix
| Symptom | Likely Cause | Diagnostic | Corrective Action |
|---|---|---|---|
| No response from any slave | Wiring swapped (D+/D- inverted) or bus unterminated | DMM on powered bus: idle line voltage 200–250 mV diff, ~2.5 V common-mode at node | Swap A/B at CP341 or add 120 Ω at both ends |
| One slave silent, others respond | Address collision with another relay or parity mismatch on that relay | Modbus Poll address scan; review relay's serial config | Re-address the relay or fix its serial settings to match the bus |
| Intermittent CRC errors | Stub length > 0.3 m, missing terminator, EMI from VFD | Capture 1000 frames with USB tap, count CRC errors | Shorten stubs, add termination, route cable away from VFD output |
| CP341 reports "Slave not responding" 0x80D1 | Inter-frame silence too short, slave slow to respond | Increase response timeout in PtP Param to 1000 ms | Set timeout ≥ 500 ms for SIPROTEC and ≥ 200 ms for UR |
| Garbled values from GE B30 only | Word order mismatch; GE returns little-endian floats while CP341 expects big-endian | Compare raw register values in DB100 against relay's HMI | Reverse byte/word order in user code: TAW / CAD / TAW ladder sequence |
| Slave address 0 used by accident | Address 0 is Modbus broadcast; no slave should occupy it | Scan with Modbus Poll | Reassign relay to address ≥ 1 |
| Polling slows dramatically above 19.2 kbps | Cable capacitance too high for length | Check cable spec: 16 pF/ft max for ≥ 38.4 kbps | Replace cable or drop to 19.2 kbps |
| Write command (FC 06) echoes back same value but relay ignores | Register is read-only (input register mapped via 04 only) | Check relay Modbus map: R/W column | Use correct R/W register or use FC 04 read-only |
Verification and Long-Term Diagnostics
After commissioning, configure the S7-300 to count Modbus error events per slave. The CP341 driver returns a status word in the LDB instance for each job completion. Build a simple diagnostic FB that increments a counter in a global DB whenever STATUS > 0 and resets it on every successful DONE. Expose the counter to the SCADA HMI as a single tag per slave:
// Diagnostic counter for slave 10 (GE B30), job 0
A M 100.0 // DONE rising edge
FP M 110.0 // one-shot
SPBNB nxt1
L DB200.DBD 0 // load counter for slave 10
L 0
==I
SPBNB clr1
L 0 // reset on transition to success after errors
T DB200.DBD 0
clr1: SET
SAVE
nxt1: A M 100.1 // ERROR rising edge
FP M 110.1
SPBNB nxt2
L DB200.DBD 0
L 1
+I
T DB200.DBD 0 // increment error counter
nxt2: NOP 0
For a Modbus TCP integration (e.g., forwarding the S7-collected data to a SCADA at the control center), the Siemens Modbus TCP Connector on the Industrial Edge platform acts as a Modbus TCP client that polls the S7-300 via S7-comm and exposes the registers to higher-level systems. This is a different code path from the CP341's serial master and should be planned separately.
Safety and Substation Considerations
Protection relays are the last line of defense for the power system. Communication failures on a metering-only bus do not affect protection; protection is always handled by the relay's hard-wired logic, not by the Modbus link. However, several engineering hygiene rules apply:
- Never place the Modbus cable in the same conduit as the CT/PT secondary wiring. Cross-coupled noise on the secondary side can saturate the relay's input and cause misoperation. Use separate, dedicated cable trays.
- Use shielded, twisted pair with shield grounded at one end only to prevent ground loops.
- Optical isolation: The CP341 RS-485 interface is not optically isolated. For substation-grade isolation, use a third-party RS-485 isolator (e.g., Phoenix Contact PSM-ME-RS485) or a fiber converter (Siemens 6GK1500-0FC10) between the CP341 and the bus.
- Time synchronization: Do not rely on Modbus timestamps for protection event records. Use IRIG-B or PTP (IEEE 1588) for the relays' internal clocks; pull event records via Modbus only for display in HMI.
- Cybersecurity: Modbus RTU has no authentication. If the bus runs outside the substation, terminate it with a VPN or, preferably, use Modbus TCP on a private VLAN with a firewall.
FAQ
Can a single Siemens CP341 poll both GE Multilin and Siemens SIPROTEC relays on the same RS-485 bus?
Yes. The CP341 with Modbus Master RTU driver 6ES7870-1AA01-0YA0 supports up to 250 Modbus jobs and can poll any vendor's relay that conforms to the Modbus RTU specification, as long as all slaves share the same baud rate, parity, data bits, and stop bits, and have unique slave addresses in the 1–247 range.
What serial parameters should I use for a multi-vendor protection-relay bus?
The de-facto substation default is 19200 bps, 8 data bits, even parity, 1 stop bit (8E1). Both GE Multilin UR/SR and Siemens SIPROTEC 4/5 support this combination natively. Do not mix 8E1 and 8N2 on the same bus; the byte length differs and slaves will mis-frame.
Do the register maps of GE Multilin and Siemens SIPROTEC overlap or align?
No. Each vendor uses its own private Modbus register layout. The vendor's Modbus map must be exported (DIGSI 5 for SIPROTEC, EnerVista UR-Setup for Multilin UR) and the starting addresses loaded into the CP341's job table individually. There is no universal "register 0 = IA" convention across vendors.
How do I add a Modbus TCP feed to a higher-level system without disturbing the RTU bus?
Install a Modbus TCP client at the control center or use the Siemens Modbus TCP Connector on an Industrial Edge device. The S7-300 continues to serve the RTU bus; an S7-MPI/PROFINET gateway or a separate S7 CPU interface presents the data over TCP. Do not connect a second master to the same RTU bus unless you use a multiplexer.
What is the maximum number of protection relays I can put on one CP341 bus?
32 unit loads per RS-485 segment per the TIA/EIA-485-A standard, which is satisfied by a typical GE Multilin (1 UL) and SIPROTEC (1 UL) both. If the design exceeds 32 devices, install a Siemens 6ES7972-0AA02-0XA0 repeater to bridge to a second segment. The CP341 itself presents 1 unit load.