Migrating S7-300 CPU 314C-2DP to S7-1500 ET200SP with HSC

David Krause17 min read
S7-300SiemensTutorial / How-to
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

Migration Overview and Architecture Options

Siemens S7-300 systems in long-term service typically reach an end-of-life decision when spare parts become hard to source and the latest TIA Portal releases drop legacy CPU support. The CPU 314C-2DP (MLFB 6ES7314-6CF00-0AB0) and its PN/DP successor (6ES7314-6EH04-0AB0) are compact CPUs that integrate 24 DI, 16 DO, 4 AI, 2 AO, 4 high-speed counters, and either MPI/DP or PROFINET interfaces. The official Siemens product support entry for the 314C-2DP is published at support.industry.siemens.com – 6ES7314-6CF00-0AB0. Migrating to a S7-1500 with an ET200SP distributed I/O station is the most common modernization path because ET200SP base units, signal modules, and the IM 155-6 interface module are actively supported in TIA Portal V16 and later.

Three architectural choices exist when modernizing an S7-300 station that already has ET200SP I/O or that needs to preserve the existing cabinet layout:

  1. Direct replacement with a S7-1500 stand-alone CPU (for example 6ES7511-1AK02-0AB0 / 1511-1 PN, 6ES7513-1AL02-0AB0 / 1513-1 PN, 6ES7515-2AM02-0AB0 / 1515-2 PN, or 6ES7516-3AN02-0AB0 / 1516-3 PN/DP). All local I/O is centralized on the S7-1500 rack and the ET200SP becomes a remote I/O station behind it.
  2. ET200SP CPU replacement – the S7-300 CPU is removed and replaced by an ET200SP CPU such as 6ES7510-1DJ01-0AB0 (1510SP-1 PN), 6ES7512-1DK01-0AB0 (1512SP-1 PN), or 6ES7515-2AM02-0AB0 (1515SP-2 PN). The new ET200SP CPU is a full S7-1500-class controller with PROFINET and acts as the IO controller; the previous ET200SP station is either retained as remote I/O or merged into the new ET200SP CPU's local I/O.
  3. Hybrid – keep the existing S7-300 CPU for legacy functions and add an S7-1500 / ET200SP CPU that handles the migrated code via PROFINET. This is rarely used because it doubles the spare-parts burden.

For projects that already use ET200SP remote I/O, the cleanest migration is option 2: the new ET200SP CPU assumes the role of the old S7-300 CPU and the I/O topology is preserved. This is the path the rest of this article covers.

Decision Path: If the existing cabinet is wired for S7-300 front connectors and removing the rack would force a complete rewire, choose option 1 (S7-1500 stand-alone CPU). If the cabinet is panel-mounted and the I/O is already on PROFINET, choose option 2 (ET200SP CPU) – the same I/O topology is kept and only the controller is swapped. The third option (hybrid) is reserved for plants that cannot afford a single production stop.

Prerequisites: Hardware, Software, and Licensing

Before starting the migration, verify the following prerequisites. Missing any of these typically produces "unknown CPU type," "missing GSD," or "missing license" errors in TIA Portal V16.

Item Required Specification Notes
TIA Portal V16 Update 4 or later (V17/V18/V19 recommended for new projects) V16 supports the S7-300 -> S7-1500 migration wizard for all standard S7-300 CPUs
STEP 7 V5.5 SP2 source project Original S7-300 program with the CPU 314C-2DP / 314C-2PN/DP Export the project as *.s7p, *.zip, or open it directly with "Project > Migrate project"
SIMATIC Memory Card Minimum 4 MB for S7-1500; 12 MB recommended for ET200SP CPU An S7-300 Micro Memory Card is not compatible with an S7-1500 – use a Siemens 6ES7954-8LF02-0AA0 (4 MB) or larger
ET200SP CPU 6ES7510-1DJ01-0AB0 (1510SP-1 PN), 6ES7512-1DK01-0AB0 (1512SP-1 PN), 6ES7515-2AM02-0AB0 (1515SP-2 PN) Use the SP variants only if you have the ET200SP form factor; they require a BU15-PN base unit
ET200SP BaseUnit 6ES7193-6BP00-0BA0 (BU15-PN+A0+2B) or 6ES7193-6BP00-0BD0 (BU15-PN+A0+2D) Type A0 opens a new potential group; type A1 continues the group
DI 8x 24V DC High Speed 6ES7131-6BF00-0BA0 Direct functional replacement for the integrated high-speed inputs of the CPU 314C-2
TM Count 1x24V (optional) 6ES7138-6AA00-0BA0 Use if you need isolated high-speed counting up to 200 kHz or 24V encoder with differential inputs
PROFINET cable Cat 5e or higher, shielded, max 100 m per segment Required for CPU-to-ET200SP connection during commissioning
License STEP 7 Professional V16 (TIA Portal) with the S7-1500 package; runtime license for technology objects if you exceed the free HSC quota Two HSC technology objects are free of charge on a 1510SP-1 PN; additional ones require a "High-Speed Counter" runtime license
Engineering Station Windows 10 64-bit, 16 GB RAM minimum, 30 GB free disk TIA Portal V16 will not install on 32-bit Windows

Phase 1 – Migrating the S7-300 Project to S7-1500 in TIA Portal V16

The TIA Portal migration wizard is the only supported path from a STEP 7 V5.x S7-300 project to a TIA Portal S7-1500 project. Manual conversion of the source code is not supported and always leads to a different OB / DB numbering and missing technology object instances.

  1. Open TIA Portal V16. Do not open the original STEP 7 V5.5 project in TIA Portal – the wizard must be the entry point.
  2. From the project view choose Project > Migrate project > STEP 7 V5.x project. Browse to the *.s7p file of the S7-300 project.
  3. In the migration target dialog, select the S7-1500 family (e.g., CPU 1511-1 PN, 6ES7511-1AK02-0AB0). TIA Portal automatically suggests the closest functional equivalent of the 314C-2DP based on program size and integrated I/O count.
  4. Click Start migration. The wizard generates a new TIA Portal project named <original_name>_PORTED and copies the original S7-300 program blocks (OBs, FBs, FCs, DBs), the hardware configuration, the symbol table, and the comments. The wizard also produces a MigrationLog.xml in the project folder; open it after migration to see warnings.
  5. Compile the new project (right-click CPU > Compile > Software (rebuild all)). Expect a long list of "type conflict," "instance DB missing," and "address conflict" warnings – these are normal and must be fixed by hand.
What the wizard does not do: it does not migrate SFB 47 (counting) instances, it does not re-create technology objects, and it does not adjust HW addresses that overlap with the integrated I/O of the new CPU. These three items account for ~80% of the post-migration errors.

Phase 2 – Replacing the S7-1500 Stand-Alone CPU with an ET200SP CPU

After Phase 1 the project contains an S7-1500 stand-alone CPU. To follow the ET200SP CPU path requested in the source project, do the following:

  1. In the project tree, right-click Device & Networks and choose Add new device > SIMATIC ET200SP CPU. Pick 6ES7512-1DK01-0AB0 (CPU 1512SP-1 PN) if the work-memory requirement is < 300 KB code, or 6ES7515-2AM02-0AB0 if larger.
  2. The new ET200SP CPU is added as a separate device. It must be wired to the PROFINET network: open Devices & Networks > Network view, drag a PROFINET connection from the new CPU's PN port to the existing PN subnet.
  3. Assign a unique IP address and PROFINET device name to the ET200SP CPU. Siemens requires a PROFINET device name; the default is et200sp-cpu-1. Commissioning is much easier if the engineering station and the ET200SP CPU are in the same /24 subnet (e.g., 192.168.0.1 for the PG, 192.168.0.10 for the CPU).
  4. Drag the program blocks (OB1, OB35, OB82, all FBs, FCs, DBs) from the migrated S7-1500 CPU into the ET200SP CPU using drag-and-drop in the project tree. Keep the same block numbers so the call hierarchy is preserved.
  5. Drag the symbol table and any user-defined data types (UDTs) into the ET200SP CPU. TIA Portal automatically re-targets references that point to Default tag table; references to project-global tags must be re-qualified.
  6. Configure the ET200SP base units. The first slot is always the IM 155-6 (or, in this case, the ET200SP CPU itself occupies the CPU slot). After the CPU, insert a BU type A0 (6ES7193-6BP00-0BA0) to open a new potential group, then the DI/DO/AI/AO modules in the same order they were wired on the original S7-300 front connector.
Slot Module MLFB Address Range (default)
0 ET200SP CPU 1512SP-1 PN 6ES7512-1DK01-0AB0 —
1 DI 8x 24V DC High Speed 6ES7131-6BF00-0BA0 IB 0 … IB 1
2 DI 8x 24V DC Standard 6ES7131-6BF01-0BA0 IB 2 … IB 3
3 DO 8x 24V DC / 0.5A 6ES7132-6BF01-0BA0 QB 0 … QB 1
4 AI 4x U/I/RTD/TC 6ES7134-6HD01-0BA1 IW 0 … IW 7
5 AO 2x U/I 6ES7135-6HB00-0CA1 QW 0 … QW 3

The address ranges above are TIA Portal defaults and can be renumbered in Device view > Properties > I/O addresses to keep the same byte offsets the original S7-300 used. Preserving the original addresses eliminates the need to rewire the symbol table.

Phase 3 – Migrating the I/O Address Map and Symbol Table

The integrated I/O of the CPU 314C-2DP occupied the fixed byte ranges IB 124…IB 126, QB 124…QB 125, IW 128…IW 134, and QW 128…QW 131. The migration wizard carries these addresses forward, but the ET200SP modules use renumbered addresses. Two approaches are valid:

  • Re-map the addresses: keep the default ET200SP addresses (IB 0, IB 2, …) and use Find and replace in the symbol table to point the existing symbols at the new bytes. The SCL/ST source code is automatically updated because the symbols are resolved at compile time.
  • Re-number the ET200SP slots: open Device view > I/O addresses, uncheck System default, and enter 124, 125, 126, 128, 130, 132 manually so the addresses match the original S7-300 layout.

The second approach is preferred for green-field retrofits because no program code needs to change. The first approach is preferred for plants where the cabinet is already wired and the PLC program references absolute addresses in the symbol table (e.g., "RPM_Sensor" at IW 130). In either case, recompile after the change and review the cross-reference list (Ctrl+Shift+F) to confirm there are no unresolved references.

Configuring the DI 8x 24V DC High Speed Module (6ES7131-6BF00-0BA0)

The DI 8x 24V DC High Speed module is the closest functional equivalent of the integrated high-speed inputs of the 314C-2DP. Each channel can operate in one of four modes:

Mode Maximum Frequency Use Case Notes
Digital input — Standard 24V PLC input Filter time 0.05 ms … 20 ms configurable per channel
Counting (HSC) 10 kHz (per channel) Pulse counting, encoder feedback Up to 4 HSC channels per module
Frequency measurement 10 kHz (per channel) RPM, flow, line speed Returns frequency in Hz with 1 Hz resolution
Gate control — Enable / reset of the counter Combined with counting and frequency modes

To configure the module, open the ET200SP CPU in TIA Portal, double-click the DI 8x 24V DC High Speed module, and select the Channel template tab. The following parameters are mandatory for the RPM-sensor application from the original S7-300 project:

  1. Channel 0 – set operating mode to Frequency measurement.
  2. Set the measurement window to 1000 ms (one second). The result is therefore updated once per second, which matches the integration time of the original S7-300 frequency block.
  3. Set the lower measuring limit to 1 Hz and the upper limit to 8000 Hz. This covers a typical 0…6000 RPM range with a 100-pulse-per-revolution sensor: f_max = (6000/60) × 100 = 10 kHz, but mechanical vibration typically limits the realistic range to 8 kHz.
  4. Enable the diagnostic interrupt for "upper limit exceeded" and "wire break." This gives you a hardware-level alarm that the S7-300 SFB47 did not have.

The module firmware must be at least V2.0 for frequency measurement to be selectable per channel; older firmware only supports the legacy "counting" mode. The current firmware is shipped with the module as of 2018; older stock from 2014–2017 may need a firmware update via the SIMATIC Automation Tool.

Replacing the S7-300 Frequency Block with an S7-1500 Technology Object

The original S7-300 program in the source project calls the integrated frequency function of the CPU 314C-2 (typically the periodic interrupt OB 35 with direct I/O access to PIW 128). After migration, this code will not compile because the S7-1500 does not have a 1:1 equivalent of the 314C-2 frequency block. The correct replacement on an S7-1500 / ET200SP CPU is a Counting and Measuring technology object.

  1. In the project tree, expand Technology objects > Add new technology object > Counting and Measuring > Counter. Name it TO_RPM_Sensor.
  2. Open the configuration of TO_RPM_Sensor and set the following in the Basic parameters tab:
Parameter Value Reason
Signal type Pulse (A) Single-channel pulse input, no encoder phase-B needed
Counting direction None (count up) RPM sensor only measures speed, not direction
Hardware input DI 8x 24V DC High Speed, channel 0 DI 8x 24V DC High Speed is wired to the PROFINET slot 1
Filter 1 µs Allows 10 kHz maximum frequency
Measurement type Frequency Direct replacement for the S7-300 frequency block
Measurement window 1000 ms Same integration time as the original S7-300 block
Update time 100 ms Process image update of the ET200SP is 1 ms; 100 ms gives smooth control loops
Lower / upper limit 1 Hz / 8000 Hz Corresponds to 0.6 RPM … 4800 RPM with a 100-pulse encoder
  1. Insert the CTRL_HSC instruction into OB 35 (or any periodic OB). The block is in Instructions > Counting and Measuring > High Speed Counter. The instance DB is automatically generated.
  2. Replace the old S7-300 PIW 128 reads with the technology object's tag "TO_RPM_Sensor".MeasuredFrequency. This is a REAL in Hz.

The migration tool generates a Technology Object migration support error if a former S7-300 SFB47 instance is still present in the project. Delete the old DB and SFB47 calls, recompile, and the error disappears.

Sample ST Program: Reading and Scaling the RPM Value

The following Structured Text code in OB 35 reads the measured frequency from the technology object and converts it to RPM, taking into account the pulses-per-revolution of the sensor. The conversion is:

RPM = (MeasuredFrequency [Hz] × 60) / PulsesPerRevolution

For a 100-pulse-per-revolution sensor the constant is therefore 60/100 = 0.6. With 10 kHz input the maximum computed RPM is 6000, matching the S7-300 range.

// OB35 - 100 ms cycle, technology object measurement update
// Inputs
//   "TO_RPM_Sensor".MeasuredFrequency  : REAL  - Hz, updated by the technology object
//   "PulsesPerRevolution"                : INT   - 100 (typical), 60, 360, 1000 etc.
// Outputs
//   "RPM_Actual"                        : REAL  - calculated RPM
//   "RPM_Alarm"                         : BOOL  - upper limit alarm

#RPM_Actual := ("TO_RPM_Sensor".MeasuredFrequency * 60.0)
              / INT_TO_REAL("PulsesPerRevolution");

IF #RPM_Actual > 5500.0 THEN
    "RPM_Alarm" := TRUE;
ELSE
    "RPM_Alarm" := FALSE;
END_IF;

The 5500 RPM threshold provides 500 RPM of headroom below the 6000 RPM mechanical limit, which is a typical safety margin for rotating equipment. Replace the constant 5500 with the value from the machine datasheet.

Compiling, Downloading, and Verification

Once the program blocks, technology objects, and I/O addresses are configured, run the following verification steps before powering the field side:

  1. Compile all: right-click the ET200SP CPU in the project tree and choose Compile > Software (rebuild all). Resolve every warning – TIA Portal will not stop the build for warnings, but each warning is a potential commissioning issue.
  2. Hardware check: in Online > Accessible devices, browse the PROFINET subnet and confirm that the ET200SP CPU appears with the assigned device name. If the device name is missing, assign it with Online > Assign PROFINET device name.
  3. Download to device: select the ET200SP CPU, click Download to device, and follow the wizard. The S7-1500 will prompt you to install the memory card contents; choose Yes. The CPU goes to STOP during download, then RUN if the OB 1 / OB 35 startup is successful.
  4. Go online and monitor: open the technology object TO_RPM_Sensor in the project tree and click Monitor all. With a 1 kHz signal generator on channel 0 you should see a stable MeasuredFrequency of 1000 Hz and a calculated RPM of 600.
  5. Diagnostic buffer check: open Online > Online & diagnostics > Diagnostic buffer. The buffer should be empty or contain only informational entries. Any entry containing the text "OB not loaded," "area length error," or "technology object fault" indicates a remaining migration issue.
Field-Proven Tip: If the ET200SP CPU is in RUN but the technology object shows StatusWord = 16#0001 (counter not started), the HSC enable input has not been wired in the program. Add "TO_RPM_Sensor".SWGate := TRUE; in OB 100 (startup OB) or in the first scan of OB 1.

Troubleshooting Matrix for Common Migration Errors

Symptom in TIA Portal / CPU Diagnostic Buffer Likely Root Cause Resolution
"Type conflict in instance DB for SFB47" S7-300 SFB47 frequency block was migrated but S7-1500 has no equivalent Delete the SFB47 instance, create a new "Counting and Measuring" technology object, rewire the code to use CTRL_HSC
"Address IB 124 is occupied by the integrated I/O of the CPU" The migrated S7-1500 stand-alone CPU reserves IB 124…IB 126 for its onboard I/O Re-number the ET200SP module to start at IB 128, or move the I/O into a different slot and update the symbol table
"Module 6ES7131-6BF00-0BA0 not found in hardware catalog" TIA Portal V16 is missing the HSP for ET200SP modules released after 2018 Install the latest HSP (Hardware Support Package) via the TIA Portal Support Site, restart TIA Portal
CPU goes to STOP with "OB 121 / OB 122 not loaded" Program still contains a CALL to a block that was renamed during migration Open the cross-reference (Ctrl+Shift+F) for the block number, replace any unresolved CALL with the new S7-1500 block
Frequency value reads 0.0 even with input toggling HSC is not enabled, or the channel is configured as standard digital input Open the DI 8x 24V DC High Speed module, set channel 0 to "Frequency measurement," and add SWGate := TRUE
Frequency value is exactly 10× too high Migration wizard kept the S7-300 time base (100 ms) instead of the 1000 ms the OB 35 originally used Set the technology object's measurement window to 1000 ms and recheck the conversion constant in the user program
CPU remains in STOP after download, SF LED red PROFINET device name is wrong, or the IM 155-6 has the wrong GSD version Re-assign the device name, install the correct GSDML for the IM 155-6 (GSDML-Vx.y-Siemens-ET200SP-…)
Online > Accessible devices does not list the CPU Engineering station and CPU are on different subnets, or firewall is blocking UDP port 34964 (PN DCP) Set the PG/PC interface to the correct PROFINET adapter, disable Windows firewall for the engineering network

Spare-Parts and Lifecycle Considerations

The 6ES7314-6CF00-0AB0 was announced for product cancellation in 2023 by Siemens. The successor variant 6ES7314-6EH04-0AB0 (CPU 314C-2 PN/DP) is in active sales but is in the "phase-out" lifecycle stage, meaning new orders will be accepted only while stocks last and the spare-parts guarantee is limited. By contrast, the ET200SP family (1510SP / 1512SP / 1515SP-2 PN, IM 155-6, BU15-PN, DI 8x 24V DC High Speed 6ES7131-6BF00-0BA0) is in active marketing and is expected to remain available at least until 2030.

Always cross-check the lifecycle status of the specific MLFB you intend to use against the official Siemens product support page before placing an order. The Siemens Industry Online Support portal publishes the current lifecycle phase (active, phase-out, discontinued) for every MLFB.

FAQ

Can I migrate the S7-300 project directly to an ET200SP CPU, or must I go through a stand-alone S7-1500 first?

The TIA Portal V16 migration wizard only targets S7-1500 stand-alone CPUs. The recommended path is therefore: (1) migrate the S7-300 project to a stand-alone S7-1500 such as 6ES7511-1AK02-0AB0, (2) compile and fix all warnings, (3) add a new ET200SP CPU such as 6ES7512-1DK01-0AB0, (4) drag-and-drop the program blocks, symbol table, and UDTs from the stand-alone CPU to the ET200SP CPU, (5) delete the stand-alone CPU. A direct migration to an ET200SP CPU is not supported in V16.

Which module replaces the integrated high-speed counters of the CPU 314C-2DP?

The 6ES7131-6BF00-0BA0 (DI 8x 24V DC High Speed) is the direct functional replacement. It supports counting, frequency measurement, and gate control on each of its 8 channels up to 10 kHz. For higher frequencies (above 10 kHz) or for 24V differential encoder inputs, use the TM Count 1x24V (6ES7138-6AA00-0BA0) instead.

How do I replace the S7-300 frequency block on the 314C-2 with an S7-1500 program?

Delete the S7-300 SFB47 instance, add a new "Counting and Measuring" technology object, set the measurement type to "Frequency," and read the tag MeasuredFrequency in your OB 35. Use the conversion RPM = MeasuredFrequency × 60 / PulsesPerRevolution. Call the CTRL_HSC instruction once in OB 100 to start the counter.

Do I need a runtime license for the high-speed counter on the ET200SP CPU?

Two high-speed counter technology objects are included in the base firmware of every S7-1500 / ET200SP CPU at no charge. Each additional HSC, or each use of the TM Count 1x24V, requires the runtime license "High-Speed Counter" (article number 6ES7823-1EE00-…). The count is cumulative across the entire project, not per CPU.

Why does the migrated project compile with errors on the original S7-300 SFB47 instances?

The S7-1500 does not implement SFB47 (COUNT) of the S7-300. The migration wizard copies the call but cannot resolve the instance. The fix is to delete the SFB47 instance DB, create a technology object, and replace CALL SFB47, DB47 with the CTRL_HSC instruction. The technology object then becomes the single source of truth for the counter state.

Back to blog