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 |
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 |
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:
- PLC → System constants in the project tree, filtered to HW identifier → Telegram for the drive device.
- 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
- 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).
- 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.
- 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.
- 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.
-
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). -
Wire the inputs. Per drive set
Start :=,AxisNo := 1(G120) or2(V90),hardwareID :=, andsxParameter :=. -
Maintain the Start signal. In your request logic, hold
Startat 1 until eitherDonerises (single-shot transfer finished) orErrorrises. A pulse onStartshorter than the acyclic round-trip will time out the request. - 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.
-
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. -
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
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
- Online, open the instance DB of the first drive and confirm
Busyrises on a trigger and falls onDone. - Confirm
Errorstays FALSE andStatusstays 0. - 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). - Repeat for the second drive with a different parameter (e.g.
r0027for absolute actual current). - 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 theIndexfield to be set to the index.Index := 0returns 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 = 1on 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.