Copy RAM to ROM on Sinamics S120 via PROFINET BICO: P971 Access

David Krause13 min read
S7-1200SiemensTroubleshooting
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 Summary

On a Sinamics S120 CU310-2 PN controlled by a SIMATIC S7-1500 over PROFINET with a free telegram (BICO 4/4), the PLC cannot reach parameter p0971 (Copy RAM to ROM) through the cyclic process-data image. Engineers expect to drag p0971 onto the telegram like a control word or status word and find that the parameter does not appear in the parameter list, that the slot is reported as "reserved", or that SINA_PARA_S returns an error because the request is being routed to the wrong drive object.

This is not a GSDML import error. It is the expected behavior of a free telegram: only the PZD slots you have wired in BICO are exchanged cyclically. Every parameter access that is not part of that wired PZD must travel over the PROFINET acyclic record-data channel (RPC + read/write record, sometimes called the PKW or parameter channel), and the request has to be addressed to the correct drive object — typically the Control Unit (DO 1) — not the Drive object that hosts the telegram.

Why p0971 Is Not Visible in the Free Telegram

The free telegram configuration strips the SINAMICS parameter channel from the cyclic frame. The mapping that BICO produces (4/4 means 4 words of PZD in each direction, all assigned by the user) is reduced to:

Slot Direction Content Source/Sink
PZD 1 PLC → Drive STW1 / control word 1 BICO interconnect, e.g. r2090.0
PZD 2 PLC → Drive User-defined r2090.x → any parameter input
PZD 3 PLC → Drive User-defined r2090.x → any parameter input
PZD 4 PLC → Drive User-defined r2090.x → any parameter input
PZD 1 Drive → PLC ZSW1 / status word 1 Parameter output, e.g. r2089.0
PZD 2–4 Drive → PLC User-defined Any r-parameter

Parameters such as p0971, p0977, p0010, or p0009 are not on the BICO picker by default, and even when they are they cannot be placed in the cyclic PZD without corrupting the BICO routing. The intended way to drive them from the PLC is the acyclic parameter channel that runs in parallel with the cyclic PZD on the same PROFINET connection.

Design rule: Cyclic BICO is for time-critical setpoints and actual values. Save/recipe commands such as Copy RAM to ROM, parameter reset, or commissioning mode must always use the acyclic parameter channel.

PROFINET Acyclic Parameter Access Fundamentals

The SINAMICS drive supports PROFINET acyclic services through the standard record-data read/write RPC calls (RPC handle 0xFFFE, record index 0xB02E for read, 0xB02F for write per the PROFIdrive profile, or the legacy indices 0xB02A/0xB02B). Each request encodes:

  1. Drive Object number (DO) — 1 = Control Unit, 2 = first Drive, etc.
  2. Parameter number — including the "p" or "r" qualifier
  3. Index — array element or instance (0 for scalar parameters)
  4. Subindex / attribute — value, min, max, name, text
  5. Number of elements — 1 for a single value

The PLC block that wraps these primitives for SIMATIC is SINA_PARA_S. The block that wraps them and provides high-level services (Copy RAM to ROM, factory reset, firmware update trigger) is shipped in the Siemens LAcycCom library as FB 30515.

Solution Path 1: SINA_PARA_S Function Block

SINA_PARA_S (FB 287 / instance DB, supplied with the SINAMICS S120/S150 block library for S7-1500/1200) performs a single read or write of one parameter on a given drive object. The block is supplied with the SINAMICS S120/S150 DriveLib — install it from the Siemens Support portal entry 109475826 (DriveLib for S7-1500/S7-1200) and drag the FB into the project.

Block interface

Input Type Meaning
REQ BOOL Rising edge triggers a single read/write job
ID HW_IO (HW_DEVICE) PROFINET device handle of the drive (from the device configuration)
PARAM DINT Parameter number (e.g. 971 for p0971)
INDEX INT Array index (0 for scalar)
DOID BYTE Drive Object number (1 = CU, 2 = Drive_1, etc.)
VALUE DINT/REAL Write value (for write jobs)
RD_WR BOOL FALSE = read, TRUE = write
BUSY BOOL Job in progress
DONE BOOL Job completed without drive-side error
ERROR BOOL PROFINET/record error
STATUS WORD Status/return value (see table below)

Wiring for Copy RAM to ROM

To save parameters in the active drive object, write the value 1 to p0971 with DOID = 2 (Drive_1). To save parameters held in the Control Unit (for example, the device name, IP settings, or CU-level parameters that the free telegram does not touch), write the value 1 to p0971 with DOID = 1.

STATUS word decoding

STATUS (hex) Meaning
0x0000 Job successful, value returned in VALUE
0x7000 No job active
0x7001 First read/write request running
0x7002 Follow-up request (multi-record) running
0x80A1 PROFINET device does not respond (cable, device name, AR)
0x80A4 Fault on the communication channel / DP-V1 access rejected
0x80B1 Length error in record data
0x80B2 Drive object ID not assigned / not present
0x80C3 Access type not supported (write on read-only, or format mismatch)
0x80C4 Attribute not supported (e.g. request of text on a numeric parameter)
0x80C5 Parameter index out of range
0x80C6 Parameter number unknown to this DO
0x80C7 Parameter is read-only in current operating state
0x80C8 Parameter write protection active (commissioning or password level)
0x80C9 Parameter value out of range / format error
0x80CA Parameter value too low (min violation)
0x80CB Parameter value too high (max violation)
0x80CC Parameter value invalid (not a member of the enum set)
0x80CD Parameter cannot be changed with drive running
0x80CE Parameter cannot be changed with the drive in this state (e.g. enabled)
0x80CF Parameter cannot be changed while commissioning tool is online
0x80C6 / 0x80C8 is the symptom that produced the original question. It is the classic signature of addressing p0971 with the wrong DOID. SINAMICS carries p0971 on every drive object, but the "global" Copy RAM to ROM that the engineer usually wants is on DO 1 (Control Unit). With DOID = 2 and the free telegram wired to a different DO, the request returns "parameter not available on this object" if the slot was mis-wired, or it succeeds locally but the saved dataset is missing CU-level items.

Solution Path 2: LAcycCom Library FB 30515

The LAcycCom (Local Acyclic Communication) library is a Siemens-supplied package for SIMATIC that wraps SINA_PARA_S, SINA_PARA (legacy S7-300/400) and the PROFINET/DP record calls into ready-to-use service blocks. Download it from Siemens Support entry 109479553 — LAcycCom library for SIMATIC. The relevant FB is:

FB number Name Function
FB 30510 LAcycCom_Read Single acyclic read
FB 30511 LAcycCom_Write Single acyclic write
FB 30515 LAcycCom_CopyRamToRom Triggers p0971 = 1 on the selected DO and waits for completion
FB 30516 LAcycCom_FactoryReset Triggers p0970 = 1 / p0010 = 30 sequence
FB 30517 LAcycCom_Acknowledge Global fault acknowledge via PROFIdrive control word bits 7/15

Inputs of FB 30515 (LAcycCom_CopyRamToRom)

Input Type Meaning
REQ BOOL Trigger edge
ID HW_IO Drive PROFINET device handle
DOID BYTE 1 = Control Unit, 2 = Drive, 3 = CU supplementary DO
TIMEOUT TIME Max wait, default T#10s; flash save can take 3–8 s for a fully populated CU

The block issues a write of 1 to p0971, polls the return value (DONE / BUSY / ERROR), and only resets its own done flag once the drive has cleared the busy attribute on p0971. A successful save returns 1 in the read-back value of p0971 and the next read shows p0971 = 0 again (the drive sets the request bit to 1, copies, and resets to 0).

GSDML Import and Device Configuration

Before any acyclic block will work, the SINAMICS GSDML must be installed in TIA Portal and the drive must be present as a PROFINET device with a valid AR (Application Relationship):

  1. Open TIA Portal → Options → Manage general station description files (GSD).
  2. Install the SINAMICS S120 CU310-2 PN GSDML (for example GSDML-V2.34-Siemens-Sinamics_S120_CU310x_PN-20150112.xml for firmware 4.7/4.8, or the matching file for your firmware — check the drive's "About" page or the readme in the GSD download).
  3. Drag the device into the topology and assign it to the S7-1500 PROFINET interface.
  4. Assign a unique device name (PROFINET naming convention, no spaces, max 240 chars) and verify the IP address matches the project.
  5. Verify the AR is online: the drive's port LEDs show green link + a steady ACT and the SINAMICS webserver or STARTER shows "PROFINET is connected".
Common cause of SINA_PARA_S returning 0x80A1: the device has power and link but no AR — typically the name assignment was never pushed (use "PROFINET device name > Assign name" in TIA Portal). The cyclic PZD can be missing for the same reason.

Parameter Numbering: CU Object vs Drive Object

Each SINAMICS drive object has its own parameter namespace. p0971 exists on the Control Unit and on every Drive object, but each instance only saves the parameters of its own object. When a project is using a free telegram on a Drive object, the user typically wants to save the recipe associated with that drive. To also save CU-level parameters (IP, name, drive list, encoder configuration) you must write p0971 separately with DOID = 1.

DOID Object What p0971 saves
1 Control Unit All CU-level parameters (p0009, p0007 type, encoder setup, topology, PROFINET name)
2 Drive_1 (servo / vector) Motor, encoder, controller, BICO wiring for that drive
3+ Drive_n or supplementary DO (e.g. infeed, terminal module, TM31) That DO's parameters only

If you need a one-shot save of every object (the equivalent of the STARTER "Copy RAM to ROM (all)" menu), you must issue p0971 = 1 sequentially to each DOID, and finally to DO 1. p0977 is sometimes used as a CU-side flag that triggers the global save; consult the parameter list for the firmware in question before relying on it.

Step-by-Step: Copy RAM to ROM from TIA Portal

  1. Install the SINAMICS S120 DriveLib and the LAcycCom library into the TIA Portal global library. Restart TIA Portal after installation.
  2. Open the PLC project and drag LAcycCom_CopyRamToRom (FB 30515) into a cyclic OB (OB1 is acceptable; OB35 at 100 ms also works for asynchronous triggers).
  3. Create an instance DB (e.g. iDB_CopyRamToRom).
  4. Wire the inputs:
    • ID = HW handle of the CU310-2 (right-click the device → "PROFINET IO device → PROFINET device number" or the system constant of the device).
    • DOID = 2 for the connected Drive, 1 for CU-only save.
    • TIMEOUT = T#10s (default).
  5. Add a momentary pushbutton or HMI tag wired to a rising-edge flag that sets REQ. The block latches until DONE or ERROR; it will not retrigger on a held input.
  6. Compile, download, and go online. Trigger the HMI button. Watch the SINAMICS display — the drive should show "Busy" for 1–8 seconds, then return to "Ready". The flash LED on the CU310-2 flickers during the write.
  7. Verify by powering the CU310-2 off and on. The saved parameters are now persistent.

Error Codes and Diagnostics

Symptom on PLC / HMI Likely cause Remedy
SINA_PARA_S STATUS = 0x80A1 No PROFINET AR; device not reachable Push PROFINET name; check cable; check IP; check that topology is configured and no port is in "neighbor mismatch"
STATUS = 0x80A4 Record data rejected by the drive Reduce parallel acyclic jobs; LAcycCom serialises per drive, do not stack more than one block per DO at a time
STATUS = 0x80B1 / 0x80B2 Wrong DOID or wrong record length Confirm DO exists; some compact DOs report 0x80B2 for reserved IDs
STATUS = 0x80C6 Parameter not on this DO Switch DOID. If the project uses BICO 4/4 on Drive_1, p0971 must be written to DO 2 to save the drive; p0971 on DO 1 saves only CU
STATUS = 0x80C8 Write protection active (p0007 / p0009 / password) Check p0007 (BI: inhibit parameter write), p0009 (device commissioning), and the expert list password
STATUS = 0x80CD / 0x80CE Drive is running or enabled Issue Copy RAM to ROM only when the drive is stopped (r0002 = 0 / 1). For some firmware, the OFF1/OFF2/OFF3 ramp must be complete
STATUS = 0x80CF STARTER / Startdrive online Disconnect the commissioning tool; the drive locks write access while a tool is online
Block never finishes (BUSY held high) Save takes longer than TIMEOUT; or another block is queued Increase TIMEOUT to T#30s; check that LAcycCom instances are not in a tight cycle racing for the same drive

Verification Procedure

  1. After the block reports DONE = 1 and ERROR = 0, read p0971 back with SINA_PARA_S in read mode. The expected value is 0 (the drive clears the trigger after the copy).
  2. Read a parameter that was recently changed at runtime, e.g. p1120 (ramp-up time). Confirm it matches the HMI value sent during the last ramp-up.
  3. Power-cycle the CU310-2 PN. After the drive returns to "Ready", verify the same parameter still has the new value.
  4. On a separate project step, deliberately change a parameter, do not trigger the copy, power-cycle, and confirm the parameter reverted. This proves that you are seeing the saved set and not just RAM.
  5. For CU-level saves, change the PROFINET device name in the expert list, trigger a copy with DOID = 1, power-cycle, and confirm the name is preserved.

Edge Cases and Field Caveats

  • Free telegram + Standard telegram conflict. If the GSDML is updated and the drive is changed from a Standard telegram 1/1 to a free 4/4, the BICO interconnects on the previous telegram are lost. Re-wire the BICO after the switch; the acyclic p0971 calls are independent of the telegram and remain valid.
  • Multiple users on the same drive. Only one PKW job at a time per drive is reliable. LAcycCom serialises its own calls, but if STARTER is online at the same time it will block writes (0x80CF). Disconnect the commissioning tool before triggering copies from the PLC.
  • Save-during-operation. Some parameters cannot be saved while the drive is in state r0002 > 1. The block will return 0x80CE. Stop the drive, copy, then re-enable.
  • Replacing the CF card or SD card. Copy RAM to ROM writes to the non-volatile memory of the CU310-2, not to a removable card on the CU310-2 itself. If the system uses a SIMOTION-style external card on a different DO, the save target is the local flash of that DO.
  • Firmware mismatch. The LAcycCom FB list above applies to library version ≥ V4.0. For older library versions the block numbers may differ. Always check the "About" tab of the library and the associated readme, which is shipped in the same ZIP as entry 109479553.
  • Cyclic p0971 via BICO. It is technically possible to route a free telegram word to CI: p0971, but doing so defeats the safety of the acyclic channel: the save runs every cycle while the bit is high, and the save can take longer than the PROFINET cycle time, leading to overlapping jobs and bus errors. Always use SINA_PARA_S or LAcycCom.

Why does p0971 not appear in the free telegram BICO picker?

The free telegram exposes only the PZD slots you have mapped. p0971 is a command parameter, not a setpoint or actual value, and the standard BICO list filters it out to prevent accidental cyclic writes. Drive the parameter from the PLC with the acyclic channel: SINA_PARA_S or LAcycCom FB 30515.

Which DOID should I use for a global Copy RAM to ROM?

For a full save, issue p0971 = 1 to each Drive object in the project and finally to the Control Unit (DOID = 1). A single call with DOID = 2 saves only the parameters of Drive_1, while DOID = 1 saves the CU-level dataset (PROFINET name, IP, topology). Neither alone covers the entire project.

SINA_PARA_S returns 0x80C8. What is locking the write?

0x80C8 means p0971 is write-protected. Check p0007 (BI: inhibit parameter write) and p0009 (device commissioning) on the target DO, and confirm the expert list password is not active. Disconnecting STARTER / Startdrive is also required because the online tool holds an exclusive write lock.

How long does a Copy RAM to ROM take on a CU310-2 PN?

Typically 1–3 s for a sparsely populated project, up to 6–8 s for a fully configured CU with encoders, terminal modules, and several DOs. Set TIMEOUT on LAcycCom FB 30515 to T#15s or T#30s to avoid premature error reporting on the first save after a configuration change.

Is FB 30515 part of the standard SINAMICS DriveLib or do I need a separate package?

FB 30515 is in the LAcycCom library, which is a separate download on the Siemens Support portal (entry 109479553). The SINAMICS S120/S150 DriveLib for S7-1500 (entry 109475826) contains SINA_PARA_S but not the high-level service FBs. Install both libraries side by side to have the building blocks and the turnkey services.

Back to blog