SINA_PARA FB286 Multi-Instance Configuration for SINAMICS Drives

David Krause15 min read
Motion ControlSiemensTechnical Reference
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

1. Overview: SINA_PARA (FB286) in Multi-Drive Architectures

The SINA_PARA function block (FB286), distributed in the Siemens SIMATIC S7-1200 / S7-1500 Motion Control library, exchanges acyclic parameter read/write requests with SINAMICS drives (G120, G120C, G120D, G120P, S110, S120, S210, V90) over PROFINET. The block is built on the standard DPV1 / PROFIdrive parameter channel services, wrapping the acyclic record-data read/write telegrams that ride inside any PROFINET IO relationship.

One of the most common engineering questions is whether a single project can instantiate SINA_PARA multiple times - once per drive - inside a single S7-1200 / S7-1500 CPU. The answer is yes: every drive is addressed by a separate FB call with its own instance DB, a unique hardwareID (the HW identifier of the PROFINET telegram slot assigned to that drive in the device configuration), and the correct AxisNo for the drive family. The block does not have to be a singleton, but it does require disciplined per-drive configuration of all inputs.

For the official Siemens reference PDF on reading/writing multiple parameters with FB286, see How to read or write multiple parameters using FB286. For multi-instance programming in TIA Portal, see Example of using parameter instances in an array of multi-instances in the official TIA Portal V20 documentation.

2. Hardware and Software Prerequisites

Component Requirement Notes
CPU S7-1200 (firmware ≥ V4.2) or S7-1500 Tested on S7-1214, S7-1215, S7-1217
Library "SINAMICS S120/S150" or "SINAMICS G120/V90" blocks, ≥ V1.0 (TIA V13 SP1+) Distributed with Startdrive or HSP
Drives SINAMICS G120 with CU240E-2 PN, CU250S-2 PN, V90 PN, S120 CU320-2 PROFINET variants only
TIA Portal V13 SP1 / V14 / V15 / V15.1 / V16 / V17 / V18 / V19 / V20 Match HSP to FW
PROFINET topology Controller ↔ drive on a PROFINET IO network; cyclic & acyclic slots active Topology editor must contain every drive
Drive firmware G120: ≥ V4.7 (CU240E-2 PN); V90: ≥ V1.0 See compatibility list in Startdrive
Important: FB286 is part of the legacy SINAMICS S120 library (or its SINAMICS G120/V90 sibling). Confirm the FB version you load. Inputs/outputs may differ between the S120 and the G120/V90 libraries; the field set is largely identical for parameter services but the AxisNo defaults change with drive family.

3. FB286 Interface and Required Inputs

The block exposes a small but unforgiving input set. The four inputs that determine whether a call works at all are listed below.

Input Data type Meaning Typical value
Start BOOL Rising edge / level trigger to start the request. Must stay TRUE until Done or Error is set. Hold TRUE in your request logic
AxisNo INT Drive-internal access point (DO index in the SINAMICS object list). 1 for G120; 2 for V90; depends for S120
hardwareID HW_IO HW identifier of the PROFINET telegram the drive uses. Found in PLC > System constants after the drive is networked. e.g. 269 (varies per project)
sxParameter VARIANT (STRUCT) Pointer to an SINA_PARAMETER / SINAPARA UDT containing request and response fields. Instance DB of the request UDT

Outputs Done (BOOL), Busy (BOOL), Error (BOOL) and Status (WORD) report the request result. Status contains the DPV1 error code from the drive (see Section 10).

4. AxisNo - Drive-Family-Dependent Selection

AxisNo is not a free number; it is the access point (drive object index) of the SINAMICS object you want to address. A wrong value produces a DPV1 error and no parameter is returned.

Drive family AxisNo 1 AxisNo 2 AxisNo 3+ Comment
G120 / G120C / G120D / G120P (CU240E-2 PN, CU250S-2 PN) Drive (DO1) - always Control Unit parameters (e.g. p977, save / restore) Not used (single-axis) Use AxisNo = 1 for normal drive parameters
V90 PN CU (managing object, e.g. p977) Drive (motor, ramps, limits) Not used Use AxisNo = 2 for motor-side parameters
S110 / S120 (CU310-2 / CU320-2) Drive 1 Drive 2 (or TM/encoder object) Drive 3+ / additional axes Set in STARTER / Startdrive configuration
S210 Drive 1 Not used Not used Similar to G120
Field tip: For a G120, the documentation note "AxisNo = 1" is a hard rule, not a default. If you change AxisNo to 2 you will read CU-level parameters (such as p977) instead of drive parameters (such as p1120 ramp-up time). Pick the AxisNo first; pick the parameter second.

5. hardwareID - Locating the Correct Telegram

hardwareID must be the HW identifier of the PROFINET telegram of the targeted drive - usually the standard telegram (Telegram 1, Telegram 2, Telegram 3, Telegram 5, Telegram 102, Telegram 105, Telegram 106, Telegram 111, SIEMENS Telegram 350, or free configuration). This identifier is generated by TIA Portal at compile time and is visible in two places:

  1. PLC → System constants in the project tree, filtered to HW identifier → Telegram for the drive device.
  2. Inside the instance DB of any Siemens-supplied telegrams inserted in the program, under the HW identifier of the telegram input.

The same drive family can have different telegrams configured per axis; the telegram HW ID - not the drive device HW ID - is the value that FB286 must see. Multiple drives therefore need multiple hardwareID values, one per telegram, gathered from the per-drive System constants entry.

6. Multi-Instance Architecture: One FB286 Call per Drive

Each drive in a multi-drive system must be driven by its own SINA_PARA call. The canonical architectures are:

6.1 Architecture A - Single FB with multiple instance DBs (recommended)

Place FB286 once in OB1 (or a higher-level FB). Declare multiple instance DBs (e.g. iDB_SINA_PARA_Drive1 ... iDB_SINA_PARA_Drive4). On the network, you will see one call box per drive, each with its own instance DB, its own AxisNo, its own hardwareID, and its own sxParameter request structure.

6.2 Architecture B - Multi-instance inside a wrapper FB

Wrap FB286 inside a project-specific Drive_Parameter_Handler FB. Declare SINA_PARA as a multi-instance inside the static area; pass a per-drive request UDT array element to the call. The TIA Portal documentation referenced in Section 1 covers this pattern in detail.

6.3 Architecture C - UDT array of requests

For systems with 8, 16 or more identical drives, declare an ARRAY[1..n] OF SINAPARA (or SINA_PARAMETER) at the wrapper FB. Index the array with the drive number. This pattern is what the TIA Portal V20 documentation example for parameter instances in an array of multi-instances describes, and it scales cleanly because the S7-1200 stores the entire parameter state in the multi-instance DB of the wrapper FB.

7. Step-by-Step Commissioning Procedure

  1. Add the SINAMICS drive to the TIA Portal device configuration. In Devices & networks, drag the G120 / V90 / S120 onto the PROFINET subnet of the S7-1200. Assign a unique IP and a PROFINET device name to the drive (use the Assign PROFINET device name function on the online menu).
  2. Configure the telegram. In the drive's Device view, open Properties → PROFINET interface → Telegram configuration. Add the desired standard telegram (1, 2, 3, 5, 102, 105, 106, 111, or SIEMENS 350) or a free configuration.
  3. Compile the project. The compilation generates a unique HW identifier for the telegram. Note the value from PLC → System constants; for a typical S7-1217 with one G120, the identifier is in the low 200s but the exact value depends on slot assignment.
  4. Install the SINA_PARA library. In Libraries → Global libraries, open the supplied SINAMICS blocks library and drop FB286 into the project. Confirm the FB version printed in the block header.
  5. Create per-drive instance DBs. For each drive, place an FB286 call and accept the prompt to create a new instance DB. Rename the DB to reflect the drive (e.g. iDB_SINA_G120_001).
  6. Wire the inputs. Per drive set Start := , AxisNo := 1 (G120) or 2 (V90), hardwareID := , and sxParameter := .
  7. Maintain the Start signal. In your request logic, hold Start at 1 until either Done rises (single-shot transfer finished) or Error rises. A pulse on Start shorter than the acyclic round-trip will time out the request.
  8. Download and go online. Download the project to the S7-1200. Place the CPU in RUN. The drive's PROFINET link LED must be solid green; the PLC's PROFINET interface must show the drive in the Online & diagnostics → PROFINET devices view with no alarms.
  9. Run a read test. Pre-load the request UDT with parameter r0021 (actual speed) and trigger a read. Confirm the value in the response UDT matches the drive's actual speed display.
  10. Run a write test. Pre-load a write request for p1120 (ramp-up time) on a G120. Verify the new value in the drive's parameter list (STARTER / Startdrive / BOP-2).

8. Typical Request Structure (SINAPARA UDT)

The sxParameter input points at a UDT that contains both the request and the response data. The simplified layout (matching the S120 library version) is:

TYPE "SINAPARA"
VERSION : 0.1
  STRUCT
    // --- request ---
    ParaNo    : INT;    // parameter number, e.g. 1120
    Index     : INT;    // parameter index, 0 for non-indexed parameters
    WriteRead : INT;    // 0 = read, 1 = write
    PNU       : INT;    // optional, set by FB
    Value     : REAL;   // value to write OR read-back value
    // --- response / status ---
    ErrorNo   : WORD;   // DPV1 error code from the drive
    Error     : BOOL;   // error flag
    Done      : BOOL;   // one-shot complete
    Busy      : BOOL;   // busy flag
  END_STRUCT;
END_TYPE
Important: The exact UDT name (SINAPARA vs. SINA_PARAMETER) and field set depends on the library version you install. Open the UDT in TIA Portal before coding and copy the field names from the block's interface declaration. The PNU field is a pre-computed helper; some library versions leave it empty and have the FB compute the PNU from ParaNo.

9. Start / Done / Error Handshake Pattern

A common bug is to set Start with a single pulse. The block needs a level signal until it acknowledges. The canonical pattern is:

// ladder / FBD style
// on rising edge of "Trigger_Drive1"
// S    "ReqActive_Drive1"
// ---
// AN    "ReqActive_Drive1"
// O     "iDB_SINA_G120_001".Done
// O     "iDB_SINA_G120_001".Error
// R     "ReqActive_Drive1"
// ---
// U     "ReqActive_Drive1"
// =     "iDB_SINA_G120_001".Start

Equivalent structured text:

IF Trigger_Drive1 THEN
    ReqActive_Drive1 := TRUE;
END_IF;

IF NOT ReqActive_Drive1
   OR iDB_SINA_G120_001.Done
   OR iDB_SINA_G120_001.Error THEN
    ReqActive_Drive1 := FALSE;
END_IF;

iDB_SINA_G120_001.Start := ReqActive_Drive1;

10. DPV1 Error Code Reference (Status / ErrorNo)

When Error is TRUE, the Status output contains a DPV1 error code. The most common codes you will encounter when configuring multi-instance FB286 calls:

Code (hex) Meaning Likely cause
0x0000 No error Success
0x0001 Illegal parameter number ParaNo not defined for the drive
0x0002 Parameter value out of range Write with a value outside the parameter's min/max
0x0003 Parameter is read-only Attempted write to a read-only parameter
0x0004 Parameter is write-only Attempted read on a write-only parameter
0x0011 Request cannot be executed; no operating priority Drive is not in the right state (e.g. commissioning mode)
0x0012 Request cannot be executed due to missing enable Off1 / Off2 / Off3 missing
0x0014 Reserved
0x0015 Access denied - parameter is password-protected Drive has p9761 password set
0x0016 Illegal parameter index Wrong Index for indexed parameters
0x0017 Illegal parameter type / format Wrote a REAL into a WORD-coded parameter
0x001F Illegal drive object number Wrong AxisNo
0x8001 DPV1 access timeout PROFINET link down or hardwareID does not match a live telegram
0x80B1 Length error sxParameter points at a UDT with the wrong length
0x80C0 Read error / negative response from IO device Check the drive's diagnostic buffer

11. Troubleshooting Matrix

Symptom Probable cause Fix
First drive works, second drive returns 0x80C0 Wrong hardwareID on the second FB call Cross-check the HW ID of the second drive's telegram under System constants
Both drives return 0x001F (illegal DO number) Wrong AxisNo for the drive family Use AxisNo 1 for G120, 2 for V90 (drive-side parameters)
Busy never clears Start is pulsed instead of held Hold Start at 1 until Done or Error rises
Error rises on first call but second call works Two FB calls share the same instance DB Create one instance DB per FB call (TIA Portal default already does this; double-check after copy-paste)
Read returns value of 0 every time Wrong telegram selected - read and write areas not mapped Check Properties → Telegram configuration on the drive
Status = 0x8001 after drive power-cycle Drive has lost its PROFINET name or IP Re-assign the PROFINET device name from TIA Portal online menu
Status = 0x0015 Drive has access protection enabled (p7760 / password) Disable access protection for the parameter slot, or set the correct password via parameter write
Compilation reports a missing type SINAPARA UDT not in master DB or wrapper FB Open the library block, copy the UDT from PLC data types into the project

12. Multi-Drive Sample (Two G120s on One S7-1217)

The following skeleton shows two FB286 calls in OB1, each with its own instance DB and request UDT. The wrapper is a project-specific FB; for brevity, the request UDT is inlined in the OB1 network.

// OB1 Network 1 - Drive 1
CALL "SINA_PARA_DB" , "iDB_SINA_G120_001"
  Start     := "ReqActive_Drive1"      // BOOL, level-held
  AxisNo    := 1                        // G120 = 1
  hardwareID := 269                     // system constant of drive 1 telegram
  sxParameter := "SINAPARA_Drive1"      // instance of SINAPARA UDT
  Done      := "Done_Drive1"
  Busy      := "Busy_Drive1"
  Error     := "Error_Drive1"
  Status    := "Status_Drive1";

// OB1 Network 2 - Drive 2 (independent instance DB)
CALL "SINA_PARA_DB" , "iDB_SINA_G120_002"
  Start     := "ReqActive_Drive2"
  AxisNo    := 1                        // also 1 for the second G120
  hardwareID := 271                     // system constant of drive 2 telegram
  sxParameter := "SINAPARA_Drive2"
  Done      := "Done_Drive2"
  Busy      := "Busy_Drive2"
  Error     := "Error_Drive2"
  Status    := "Status_Drive2";

Each drive has its own ReqActive_* bit, its own request UDT, and its own instance DB. The two drives can be read or written independently; the acyclic record-data service is invoked once per FB call.

13. Verifying a Working Multi-Instance Configuration

  1. Online, open the instance DB of the first drive and confirm Busy rises on a trigger and falls on Done.
  2. Confirm Error stays FALSE and Status stays 0.
  3. In the same online view, inspect the response value in the request UDT and confirm it matches the actual drive parameter (e.g. r0021 = actual speed smoothed).
  4. Repeat for the second drive with a different parameter (e.g. r0027 for absolute actual current).
  5. Disconnect the PROFINET cable from drive 2; the second FB call should report 0x80C0 within the configured acyclic timeout, and the first drive should continue to respond normally. This confirms that the failure is localized to the affected instance and that the two FB286 calls are properly decoupled.

14. Edge Cases and Field Tips

  • Indexed parameters (e.g. p2000[i], r2050[i]) require the Index field to be set to the index. Index := 0 returns the indexed parameter's full value list, which on most SINAMICS platforms returns the first element only. For indexed reads, always specify the index explicitly.
  • Read-after-write ordering on the same drive: the FB does not pipeline. Trigger the write, wait for Done, then trigger the read.
  • Hot restart of the drive resets the acyclic slot. The next FB286 call will time out until the drive has finished its startup state machine (typically 1-3 s).
  • Parameter shadowing on the G120: most parameters are read from the volatile RAM, not from the non-volatile flash. To save the new value permanently, follow the write with a write to p0977 = 1 on AxisNo = 2 (CU side) of the G120.
  • V90 / FB287 alternative: V90 projects can also use FB287 (the SINAMICS V90-specific block). The block has a simpler interface but is less flexible; FB286 is the right choice when parameter access has to be uniform across drive families.
  • S7-1200 firmware < V4.2: acyclic services over PROFINET are not supported. The FB will compile but runtime calls will time out. Upgrade the CPU firmware before deploying.

15. Scaling Beyond Four Drives

For installations with more than four drives, the array-of-multi-instances pattern (Architecture C) is preferable. The S7-1200's work memory allows hundreds of FB286 instance copies; the limiting factor is the acyclic-record queue depth in the PROFINET stack, which is typically 4-8 outstanding requests per controller port. To keep the queue from saturating, serialize the triggers - for example, with a 100-ms cyclic OB that fires at most one request per cycle. The pattern below, in SCL inside the wrapper FB, is the typical shape:

FOR i := 1 TO NUM_DRIVES DO
    IF DriveTrigger[i] AND NOT DriveActive[i] THEN
        DriveActive[i] := TRUE;
        SINA_PARA_Multi[i].Start := TRUE;
    END_IF;

    IF SINA_PARA_Multi[i].Done OR SINA_PARA_Multi[i].Error THEN
        DriveActive[i] := FALSE;
        SINA_PARA_Multi[i].Start := FALSE;
    END_IF;
END_FOR;

16. FAQ

Can FB286 (SINA_PARA) be instantiated multiple times in one S7-1200 project?

Yes. Create one instance DB per drive, set a unique hardwareID per drive (from the per-drive telegram HW identifier in System constants), set the correct AxisNo for the drive family (1 for G120, 2 for V90 drive-side parameters), and hold Start at 1 until Done or Error rises. The block is not a singleton.

Why does the second drive's call return error code 0x80C0?

Code 0x80C0 is a negative DPV1 response, almost always caused by an incorrect hardwareID on the second call. Open PLC → System constants and confirm that the hardwareID on the failing call matches the HW identifier of that drive's telegram, not the first drive's. Each drive has its own telegram HW identifier, generated at compile time.

What is the correct AxisNo for a G120 vs. a V90?

For a G120 (CU240E-2 PN, CU250S-2 PN, etc.) use AxisNo = 1 to read drive parameters such as p1120 or r0021. For a V90 PN, use AxisNo = 1 for the CU (e.g. p977) and AxisNo = 2 for drive-side parameters (ramps, limits, motor data). Using the wrong AxisNo returns DPV1 error 0x001F (illegal drive object number).

How do I find the hardwareID for a given drive in TIA Portal?

Open the Devices & networks editor, select the drive, and inspect Properties → PROFINET interface → Telegram configuration. Then in the project tree, expand PLC → System constants and locate the row whose name matches the telegram. The Identifier column is the value to assign to hardwareID on the FB286 call for that drive.

My FB286 call never sets Done and stays busy. What is wrong?

The most common cause is a pulsed Start signal. SINA_PARA needs a level-held Start from the moment the request is launched until the FB acknowledges with Done or Error. Implement a set/reset request flag that holds Start at 1 and resets it only when the FB raises Done or Error. The other common cause is a wrong hardwareID that points to a non-existent telegram, which will time out rather than return an error immediately.

Do I need FB287 instead of FB286 for the V90?

No. FB286 is fully supported on the V90 PN. FB287 is an alternative, V90-specific block with a simpler but less flexible interface. Use FB286 if you need uniform parameter access across G120 and V90 drives in the same project, or if you already use FB286 on the G120 side and want to keep the code base homogeneous.

Back to blog