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.
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:
- Drive Object number (DO) — 1 = Control Unit, 2 = first Drive, etc.
- Parameter number — including the "p" or "r" qualifier
- Index — array element or instance (0 for scalar parameters)
- Subindex / attribute — value, min, max, name, text
- 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 |
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):
- Open TIA Portal → Options → Manage general station description files (GSD).
- Install the SINAMICS S120 CU310-2 PN GSDML (for example
GSDML-V2.34-Siemens-Sinamics_S120_CU310x_PN-20150112.xmlfor 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). - Drag the device into the topology and assign it to the S7-1500 PROFINET interface.
- Assign a unique device name (PROFINET naming convention, no spaces, max 240 chars) and verify the IP address matches the project.
- 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".
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
- Install the SINAMICS S120 DriveLib and the LAcycCom library into the TIA Portal global library. Restart TIA Portal after installation.
- 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). - Create an instance DB (e.g.
iDB_CopyRamToRom). - 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).
-
- 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. - 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.
- 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
- After the block reports
DONE = 1andERROR = 0, read p0971 back withSINA_PARA_Sin read mode. The expected value is 0 (the drive clears the trigger after the copy). - 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.
- Power-cycle the CU310-2 PN. After the drive returns to "Ready", verify the same parameter still has the new value.
- 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.
- 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.