1. Problem Summary
When commissioning a SINAMICS G120C drive in freely configurable telegram mode (P0922 = 999, P2079 = 999), the standard tools such as Startdrive and the SINAMICS IOP allow operators to edit parameter r2050 / P2051 / P2060 and its sub-indices directly through the parameter list. When the same write operation is performed from a SIMATIC controller using the SinaPara function block, the drive rejects the request and the block returns error code 16#14 in swErrorNo.
According to the SINAMICS G120C List Manual, error 0x14 (decimal 20) corresponds to the DPRAM/parameter status "value impermissible / not allowed to write". The operator normally interprets this as an access-rights problem, particularly when:
- The drive is at standstill with no active command.
- STO (Safe Torque Off) is active and r2 = [45] Switching on inhibited.
- Both
P0922andP2079have been verified at 999 in Startdrive. - The same value is freely accepted by Startdrive but rejected by SinaPara.
Under all of these conditions the actual cause is not a write-protection state. The real cause is the data type and encoding of the parameter being targeted: P2051, P2050, P2060 and similar free-telegram interconnect parameters are CI/CO connectors (BICO inputs/outputs). They do not accept a numeric setpoint — they require a BICO source descriptor encoded as a 32-bit double word.
2. Root Cause: BICO Connector Encoding Requirements
The SINAMICS G120C stores every BICO interconnection as a 32-bit value with the structure defined in the SINAMICS Function Manual for Drive Functions:
| Word | Bits | Content |
|---|---|---|
| High word (bits 31-16) | Parameter number (decimal 0-65535) of the source | |
| Low word (bits 15-0) | Sub-index / bit-mask of the source; for indexed parameters the pattern 0xFCii (where ii is the sub-index) is used |
When a Siemens commissioning tool such as Startdrive is used, the user simply picks the parameter from a drop-down list and the tool writes the encoded double word transparently. When the operator uses SinaPara, the sdValue input is a DWORD (REAL/WRONG, must be DWORD) and the engineer is responsible for performing the encoding manually. If a plain numeric value (for example 2129 or 16#00000851) is supplied without the BICO framing, the parameter manager responds with 0x14 because the value violates the CI/CO data type range.
P2051[0..15], P2050[0..15], P2060[0..15], and P2059[0..15] are all CI/CO connectors. Only the high/low sub-set of the SINAMICS parameter list is writable in this form. Numeric (N4, N8) and floating-point parameters follow a different encoding (the unit, index, and text-bit tables are not part of the connector descriptor).3. Prerequisites for Writing P2051 via SinaPara
Before SinaPara writes can succeed, the following prerequisites must be met. The diagnostic flow is intentionally strict because the 0x14 error masks several different root causes.
- Firmware / Library level: G120C firmware ≥ V4.7 (recommended V4.7 SP10 or V5.x for current safety/Safety Integrated variants) and the SINAMICS blocks library installed in the SIMATIC project (TIA Portal ≥ V16 or STEP 7 V5.5 + SPx with the matching SINAMICS S7 block set). The SinaPara FB can be found in the library "SINAMICS_SinaPara" under Communication > SINAMICS.
-
PROFIdrive channel: The PLC must have an established acyclic channel. SinaPara uses the DPV1 / PROFIdrive acyclic services (read/write record, indices
0xB02E/0xB02F). Verify the drive is on the same PROFINET/IO or PROFIBUS-DP network and that the telegram configured in the device matches the one selected on the PLC side (the standard free-telegram "999" in TIA). For PN, check the drive's parameter P0922 reflects "Free telegram configuration with BICO" and P2079 is also 999. - Drive state: The drive must be in a state that allows parameter writes. Either OFF, Stop, or Operation with ramp enable is fine. Switching on inhibited (r2 = 45) is permissible for parameter writes. The drive does not need to be in run for the BICO interconnections to be accepted.
- Access level: Confirm P0003 is ≥ 3 (Expert) if any expert-level parameter is targeted. The P2051 / P2060 connectors are accessible at level 3. With Startdrive logged in as Expert, the same project transfers the elevated rights to SinaPara automatically; if SinaPara is the only tool used, the right must be set either by writing P0003 first or by configuring the user class in the drive.
-
Data type of sdValue: Use a
DWORDtyped variable or a literal of typeWORD/DWORD. Float (REAL) inputs are silently coerced and then rejected with 0x14.
4. The SinaPara Value Encoding Format Explained
The SinaPara FB signature (in the SINAMICS blocks library, FB number and instance depend on the library version; in TIA Portal the block is typically labelled SinaPara [FB30500] or the S7-300/400 compatible variant SinaPara [FB2889]) has the following relevant inputs:
| Input | Data type | Meaning |
|---|---|---|
siParaNo |
INT | Parameter number to read or write (decimal, e.g. 2051) |
siIndex |
INT | Sub-index of the target parameter (decimal, 0-15 typical for connectors) |
sdValue |
DWORD | Encoded value (32-bit BICO descriptor when writing a CI/CO parameter) |
sReq / sAct
|
BOOL | Edge / status hand-shake |
sWriteRead |
BOOL | TRUE = write, FALSE = read |
The 32-bit sdValue must be built as follows for a write to a connector parameter:
sdValue := 16#[Source parameter number in HEX]_[Source sub-index encoding]
Two sub-cases for the low word are used in practice:
-
Source parameter has no sub-index (most parameters): low word is
16#0000.
Example: P2129 (Faults/alarms trigger signal) →16#0851_0000(2129dec = 0x0851hex). -
Source parameter has sub-indices: low word uses the pattern
16#FCiiwhereiiis the destination sub-index of the connector itself, e.g.16#FC02for sub-index 2 of P2051 / P2060.
- 2050 = 0x0802
- 2051 = 0x0803
- 2060 = 0x080C
- 2129 = 0x0851
- 1006 = 0x03EE
- 1138 = 0x0472
5. Step-by-Step: Writing P2051 Sub-Indices via SinaPara
Assume the application must extend the standard PROFIdrive telegram so that:
- PZD7 (send): Source = P2129 (Faults/alarms trigger signal)
- PZD8 (send): Source = P1006 (Fixed speed setpoint 6)
-
Set the drive into free-telegram mode. Using SinaPara or Startdrive, write
999toP0922and999toP2079. -
Define the length of the send and receive words. The default
P2051[0..15]array is 16 connectors. The number of valid connectors is controlled byP2079(length PZD send) andP2078(length PZD receive). Adjust these before populating sub-indices. -
Compute the encoded sdValue for PZD7.
// P2051[6] = source P2129 siParaNo := 2051; siIndex := 6; sdValue := 16#0851_0000; // 0x0851 = 2129 dec, P2129 has no sub-index sWriteRead := TRUE; -
Compute the encoded sdValue for PZD8.
// P2051[7] = source P1006 siParaNo := 2051; siIndex := 7; sdValue := 16#03EE_0000; // 0x03EE = 1006 dec, P1006 has no sub-index sWriteRead := TRUE; -
Trigger the SinaPara call. With the request-edge input
sReqpulsed (rising edge), the block issues the DPV1 write record. Wait forsDoneorsError. -
Read back the parameter to verify. Reset
sWriteRead := FALSE, keepsiParaNo := 2051and the samesiIndex, and re-triggersReq. The returnedsdValueshould equal the value just written.
6. Complete Worked Examples
The following four examples cover the most common variants encountered in the field. All examples use the SinaPara FB; a single instance must be used for every call (one request at a time per drive). Multiplex the inputs.
6.1 Write a fault word to PZD7 (send)
// Target: P2051[6] (PZD7 transmit, word) = source P2129
siParaNo := 2051;
siIndex := 6;
sdValue := 16#0851_0000; // 2129 dec = 0x0851 hex; P2129 has no sub-index
sWriteRead := TRUE;
6.2 Write a fixed setpoint to PZD8 (send)
// Target: P2051[7] (PZD8 transmit, word) = source P1006
siParaNo := 2051;
siIndex := 7;
sdValue := 16#03EE_0000; // 1006 dec = 0x03EE hex; P1006 has no sub-index
sWriteRead := TRUE;
6.3 Connect ramp-up scaling to PZD3+4 (receive DWord)
// P1138 (CI: ramp-fn generator ramp-up time scaling) must be
// fed by P2060[2] which is the PROFIdrive PZD3+4 receive DWord.
// In this case we WRITE TO P1138 (the CI) and the value is the
// BICO descriptor pointing at P2060 sub-index 2.
siParaNo := 1138;
siIndex := 0; // P1138 itself has no sub-index
sdValue := 16#080C_FC02; // 0x080C = 2060 dec; FC02 selects sub-index 2 of P2060
sWriteRead := TRUE;
6.4 Receive a 16-bit word to a control word (PZD3 receive word)
// If the source is a 16-bit connector (e.g. P2050, the PZD receive word
// index 2), write directly to the parameter that consumes the connector.
// P2050[2] is the connector for PZD3 receive (word); a parameter that needs
// a 16-bit source uses the descriptor 0x0802_FC02.
siParaNo := 2050; // Example: writing to connector input 2050
siIndex := 2;
sdValue := 16#0802_FC02; // 0x0802 = 2050 dec; FC02 selects sub-index 2
sWriteRead := TRUE;
7. SinaPara FB Interface Reference
The SinaPara block exists in two main variants in the Siemens libraries:
| Library | FB number | Used with |
|---|---|---|
| SINAMICS S7-300/400 (legacy, STEP 7 V5.5) | FB2889 | S7-300, S7-400, S7-1500 (legacy port) |
| SINAMICS blocks for TIA Portal | FB30500 / SinaPara V3 | S7-1500 with PROFINET/PROFIBUS |
Inputs and outputs common to both variants:
| I/O | Type | Description |
|---|---|---|
hwId / hardwareId
|
HW_IO | PROFINET/IO device hardware identifier (TIA) or logical address (STEP 7 V5.5) |
siParaNo |
INT | Parameter number (decimal) |
siIndex |
INT | Parameter sub-index (decimal) |
sWriteRead |
BOOL | 1 = write, 0 = read |
sReq |
BOOL | Rising-edge triggered request |
sdValue |
DWORD | 32-bit BICO descriptor (write) or returned value (read) |
sBusy |
BOOL | TRUE while request is being processed |
sDone |
BOOL | TRUE when the request has finished successfully |
sError |
BOOL | TRUE on error |
swErrorNo |
WORD | Error code (see Section 8) |
Important behavioural notes:
- Only one active request per FB instance. Multiplex the inputs in a sequencer or instantiate one FB per logical parameter stream.
- The FB does not retry on transient acyclic errors. Implement your own retry loop with back-off if a "PROFIdrive drive busy" (0x0E) error appears.
- The FB silently clamps the parameter number to the valid SINAMICS range (0-65535) and the index to 0-255. Out-of-range values are rejected with 0x14 (value impermissible).
8. Error Code Reference
The SinaPara swErrorNo follows the DPV1 parameter request error codes. The most common values are listed below; for the complete list refer to the SINAMICS S120 / G120 Parameter Manual.
| Code (hex) | Code (dec) | Meaning | Typical cause / remedy |
|---|---|---|---|
| 0x00 | 0 | No error | Operation completed |
| 0x01 | 1 | Impermissible parameter number | Parameter does not exist on the drive; check r9450 for the valid list |
| 0x02 | 2 | Sub-index not present | Index out of range for the selected parameter |
| 0x03 | 3 | Read job with write-only parameter | Reverse the request direction |
| 0x04 | 4 | Read/write job with read-only parameter | Inspect parameter read/write attribute |
| 0x05 | 5 | Type error | sdValue data type mismatch (REAL vs DWORD) |
| 0x0B | 11 | Operation cannot be executed | Drive in wrong operating state; wait for OFF/STOP or handle r2 = 45
|
| 0x0E | 14 | Drive busy, cannot accept new request | Retry after 100-200 ms; another acyclic request is in flight |
| 0x14 | 20 | Value impermissible / not allowed to write | BICO encoding missing or wrong (this article's topic) |
| 0x15 | 21 | Service cannot currently be executed | Drive in commissioning mode; do a RAM → ROM save or power-cycle |
| 0x16 | 22 | Password not set / incorrect access level | Write P0003 ≥ 3 first |
| 0x17 | 23 | Parameter is currently being edited | Another tool is holding the parameter; close Startdrive/IOP |
| 0x1F | 31 | Parameter is not indexed | Index must be 0 |
| 0x20 | 32 | Drive reports transfer error | Check cable/PROFINET connection; verify r2067[0] and r2067[1] for diagnostic counters |
swErrorNo = 0x14 persists even when Startdrive writes the same value, the only way to get past it is to fix the BICO encoding. The error code does not indicate access rights; it is a content/type mismatch reported by the parameter manager.9. Verification Procedure
After each batch of BICO writes, verify the interconnections with the following checklist:
-
Read-back check. Use SinaPara to read the same
siParaNo/siIndexwithsWriteRead := FALSE. The returnedsdValuemust equal what was written. If it returns0, the BICO was not accepted (sometimes the drive silently zeros the connector on error; the read-back reveals it). - Inspect r2050 / r2051 / r2060 contents in Startdrive. The parameter list shows the resolved source connectors in symbolic form (e.g. "P2129"). They should match the intended sources.
- Check the I&M / device trace. If the application uses SINAMICS Trace, capture the I/O words (r2050[0..15] for received PZDs, r2051[0..15] for transmitted PZDs) and confirm the values flow as expected.
-
Cycle the drive. A RAM → ROM save (P0971 = 1) makes the connections non-volatile. Power-cycle the drive; verify the connections persist (re-read
r2051/r2050after power-up). - Run a reference speed test. Bring the drive to operating state, apply a small fixed setpoint, and verify the transmitted PZD7/PZD8 words cycle through their expected values.
10. Troubleshooting Matrix
| Symptom | Likely cause | Corrective action |
|---|---|---|
| SinaPara returns 0x14, Startdrive accepts the same value | sdValue is plain numeric, not BICO-encoded | Build sdValue as 16#SourceParam_HEX_0000 (or _FCii for indexed sources) |
| SinaPara returns 0x14 only for some sub-indices | Length parameters (P2078 / P2079) are shorter than the targeted sub-index | Write P2078 / P2079 = 999 (free) or extend the length before populating sub-indices |
| Read returns 0, write returned no error | Drive silently rejected the connector; the destination is a read-only parameter | Confirm the destination is a CI/CO parameter, not a display parameter |
| 0x16 returned | Access level too low | Write P0003 = 3 (or higher) before the BICO writes |
| 0x0B returned during commissioning | Drive in switching-on-inhibited (r2 = 45) but BICO write is blocked by an interlock | Check P0727 / P0748 / P0800 bit masks; some connectors require P0003 = 4 (Service) for edit |
| SinaPara returns 0x17 | Another tool (Startdrive, IOP, S7COMM) is holding the parameter | Close the other tool and retry |
| Interconnection drops after power cycle | Changes are in RAM only | Write P0971 = 1 to copy RAM to ROM |
| PZD does not appear in the trace | Telegram is still the standard one, not free | Verify P0922 = 999 in the drive and re-import the GSDML in TIA Portal |
11. Field-Proven Caveats
- The
16#FCprefix in the low word is not a magic value you can omit for indexed sources. The parameter manager uses the bits in the low word to determine if the source is a connector, a parameter without sub-index, or a text reference. Stripping theFCmakes the value look like a parameter with no sub-index, which the parameter manager rejects when the destination is itself indexed. - Do not confuse
P2050(PZD receive word) andP2060(PZD receive double word). Sub-index 2 ofP2050is PZD3 (16-bit). Sub-index 2 ofP2060is PZD3+4 (32-bit, packed). Using the wrong connector type insdValueleads to 0x14 on subsequent writes when the encoder telegram is rebuilt. - Always re-read after writing; do not assume the write succeeded. The acyclic channel silently drops malformed requests on some firmware versions and the FB reports
sDone = TRUEwith an emptysdValue. - The G120C variants 6SL3210-1PE (PROFINET) and 6SL3210-1NE (PROFIBUS) both use the same BICO encoding. The same
sdValueworks on either interface. - For safety-related drive variants (G120C with CU250S-2 safety firmware), safety parameters (r/r9799, r/r9720) are read-only from the acyclic channel; attempting a write returns 0x04. SinaPara should not be used to configure the safety channel.
12. FAQ
Why does Startdrive accept my P2051 value but SinaPara returns HEX 14?
Startdrive translates your selection into the BICO double-word format (high word = source parameter in hex, low word = source sub-index encoding). SinaPara requires the same encoded 32-bit value in sdValue; a plain numeric value violates the CI/CO data type and the drive returns error 0x14 (value impermissible). Use the format 16#SourceParamHex_0000 for non-indexed sources or 16#SourceParamHex_FCii for indexed sources.
What is the exact value to write to P2051[6] to bring P2129 onto PZD7 (send)?
Use siParaNo = 2051, siIndex = 6, sdValue = 16#0851_0000. The high word 0x0851 is 2129 in hexadecimal, and the low word 0x0000 indicates that P2129 has no sub-index.
How do I encode an indexed source parameter?
Use the low-word pattern 16#FCii, where ii is the sub-index of the connector (e.g. P2051[6] → FC06, P2060[2] → FC02). For example, P2050[2] = PZD3 receive word would be encoded as 16#0802_FC02.
Does the drive state (OFF, run, switching-on-inhibited) affect BICO writes?
No. BICO interconnections can be written in any drive state, including when r2 = [45] Switching on inhibited. If you get 0x0B ("operation cannot be executed") you are likely in commissioning mode (drive not yet in standby) or in a state where the specific parameter is locked; write P0003 = 3 first.
My interconnections disappear after a power cycle. How do I make them permanent?
SinaPara writes land in the drive's volatile RAM. To make them non-volatile, write parameter P0971 = 1 (save all parameters) via SinaPara, or trigger the same operation from Startdrive's "Copy RAM to ROM" button. The drive then takes a few seconds to complete the save; do not power-cycle during that window.
Can SinaPara be used to write safety parameters on a G120C with Safety Integrated?
No. The acyclic channel used by SinaPara only has access to standard (non-safety) parameters. Safety parameters (r/r9799, r/r9720, r/r9798, etc.) are read-only from PROFIdrive and can only be modified through the safety commissioning tools (Startdrive Safety or the web server under the safety login). A SinaPara write attempt will return 0x04 (read-only).