Overview
PROFIdrive defines a structured set of process data words (PZD) exchanged cyclically between a PROFINET controller and a drive. Standard telegrams 1-6 fix the order and meaning of the I/O words (control word, status word, speed setpoint, actual speed, etc.). The Free Telegram (ID 0 / PROFIdrive telegram 0) is different: it carries no pre-assigned signals and lets the user wire every input and output word manually. For Siemens Sinamics S120/G120 drives this is set up through StartDrive or Starter; the PLC side is built automatically. For non-Siemens PROFIdrive drives (Kollmorgen AK2DG, SEW Eurodrive, Bosch Rexroth, Danfoss, etc.) the configuration is normally performed inside the manufacturer's commissioning tool, and only then exposed to the S7-1500 over PROFINET.
This reference explains the PROFIdrive mechanism behind Telegram 0 (parameters p915 for the receive/telegram-to-drive mapping and p916 for the send/telegram-from-drive mapping), how to integrate such a drive in TIA Portal V17 with a S7-1500 CPU, and how to perform acyclic parameter writes through WRREC when the manufacturer tool is not available or when the values must be re-pushed at every PLC restart.
p915/p916 values into the drive automatically. The acyclic write of those PROFIdrive parameters is the integrator's responsibility unless the GSDML of the device declares slot/sub-slot values for them at startup.PROFIdrive Telegram Types Recap
| Telegram ID | Name | Setpoint (PZD out) | Actual value (PZD in) | Typical Use |
|---|---|---|---|---|
| 0 | Free telegram | 0…n words (user-defined) | 0…n words (user-defined) | Vendor-neutral, custom signal mapping |
| 1 | Standard telegram 1 | 2 (STW1 + NSOLL_A) | 2 (ZSW1 + NIST_A) | Speed control, 16-bit |
| 2 | Standard telegram 2 | 4 | 4 | Speed control with torque limit |
| 3 | Standard telegram 3 | 2 | 9 | Speed control with extended status |
| 4 | Standard telegram 4 | 6 | 6 | Speed/temperature |
| 5 | Standard telegram 5 | 9 | 9 | Dynamic servo with DSC |
| 6 | Standard telegram 6 | 10 | 10 | Dynamic servo with DSC + torque |
| 7 | Standard telegram 7 | 2 | 2 | Positioning (EPos), basic |
| 9 | Standard telegram 9 | 10 | 10 | Positioning with DSC |
The PZD lengths listed above are visible in the TIA Portal "Device view → Properties → Telegram configuration" of the drive's PROFINET interface. For the F-TM ServoDrive ST 1x24V..48V module (and the broader fail-safe module family), the same selector pattern is documented in the official TIA Portal manual collection under Communication telegrams: select Telegram → Standard telegram 3 (PZD length 9/5 words) or extend with optional words. The same selector is used for free telegram 0, where the integrator manually sets the I/O length up to the maximum allowed by the drive's GSDML.
How Free Telegram 0 is Described in the PROFIdrive Specification
PROFIdrive profile (PNO order no. 3.172) defines two configuration parameters that operate on Telegram 0:
- p915 — Connect telegram to PZD setpoint assignment: for each of the n output words, specify which drive signal source (e.g. control word 1, speed setpoint A, torque setpoint, etc.) is wired to that PZD slot. Format: array of 16-bit unsigned, one entry per output word.
- p916 — Connect telegram to PZD actual-value assignment: same as p915 but for input words (e.g. status word 1, actual speed A, actual current, etc.).
Both parameters are accessed acyclically over PROFINET. Slot number, sub-slot number, and index offsets are defined in the drive's manual; the most common addressing for a drive head module is slot 0 / sub-slot 1, index = parameter number, but non-Siemens vendors may map PROFIdrive parameters to a different slot. The drive's GSDML exposes the slot/sub-slot/index layout; TIA Portal only displays it as raw acyclic data records.
p915 and p916 are stored in the drive's non-volatile memory only if the drive explicitly commits them. Many drives require either a "save parameters" command (e.g. p0977 = 1 on Sinamics) or a power-cycle before the new mapping is loaded into the cyclic telegram. Always re-read the value with RDREC after writing to confirm acceptance.Prerequisites
- Hardware: S7-1500 CPU (any firmware ≥ V2.0 supports PROFINET IRT with isochronous mode if required by the drive), PROFINET switch (managed, DCP-capable).
- Software: TIA Portal V17 (V17.0 + latest Update), GSDML file for the non-Siemens drive installed in TIA Portal (Options → Manage general station description files (GSD)).
-
Drive documentation: vendor manual that lists PROFIdrive parameter access: slot number, sub-slot, index mapping, and the exact signal IDs accepted in
p915/p916(numeric identifiers are vendor-specific, e.g. Kollmorgen uses its own signal database). - PROFINET name/IP already assigned to the drive, either from the manufacturer tool or via TIA Portal "Online → Accessible nodes → Assign PROFINET device name".
- WRREC / RDREC blocks available in the TIA Portal project (standard instructions, library not required).
Step-by-Step: TIA Portal Configuration
Step 1 — Install the GSDML and add the drive
- Open the TIA Portal project for the S7-1500.
- Right-click the project tree → Add new device → Drives & starters → [Vendor] → [Drive family]. If the vendor is not listed, install the GSDML first (Options → Manage general station description files).
- Drag the drive from the hardware catalog into the PROFINET network. TIA Portal automatically creates a PROFINET IO system and assigns the device an IP address and device name (verify both).
Step 2 — Select Free Telegram 0
- Open the drive's Device view.
- Select the PROFINET interface module → Properties → Telegram configuration (sometimes labelled "Module parameters" depending on GSDML version).
- In the drop-down, pick "Free telegram 0". The dialog exposes two length fields: number of output words (PZD out) and number of input words (PZD in). Enter the maximum length that the drive firmware allows (typical 4-16 words each direction; check the drive manual).
- Compile the project (Compile → Hardware (rebuild all)) to generate the I/O addresses. Note the start address of the input and output process image, e.g.
IW 200..IW 218andQW 200..QW 218.
Step 3 — Build the user program for signal handling
Because Telegram 0 has no semantic meaning, the PLC program must know which bit of which word represents what. A common pattern is a dedicated data block (DB) per drive:
DATA_BLOCK "DB_Drive1_Interface"
VERSION : 0.1
STRUCT
ControlWord1 : WORD; // QW200
SpeedSetpoint : REAL; // QW202..QW205 (32-bit)
TorqueLimit : INT; // QW206
StatusWord1 : WORD; // IW200
ActualSpeed : REAL; // IW202..IW205
ActualCurrent : INT; // IW206
Pad : ARRAY[0..7] OF WORD; // IW208..IW218
END_STRUCT;
END_DATA_BLOCK
Use MOVE, SLICE, and bit-mask logic to populate the control word. Status word decoding follows the vendor's manual; PROFIdrive's standard status word 1 is widely used, but some vendors implement their own bit layout and expose it as a "PROFIdrive compatible status word" through Telegram 0 only after p916 assigns the matching signal ID to the first input word.
Step 4 — Push p915 and p916 acyclically
For a non-Siemens drive, the most reliable method is to write p915 and p916 once at startup using the standard WRREC instruction. The drive's manual must specify the slot, sub-slot, and the exact data record index. A typical Siemens-style layout is shown below; substitute the vendor's numbers where indicated.
// FB_DriveParam - Acyclic parameter write via WRREC
// Call at OB1 startup (use a one-shot flag in OB100)
#WRREC_Instance.REQ := TRUE;
#WRREC_Instance.ID := 16#0001; // HW identifier of the drive's PROFINET interface (taken from device properties)
#WRREC_Instance.INDEX := 915; // PROFIdrive parameter number; for slot 0 / sub-slot 1 = parameter number
#WRREC_Instance.MLEN := 8; // length of write buffer in bytes
#WRREC_Instance.DATA := #p915_payload; // POINTER to byte array, see structure below
#WRREC_Instance.DONE := ; #WRREC_Instance.BUSY := ; #WRREC_Instance.ERROR := ; #WRREC_Instance.STATUS := ;
// p915 payload structure (PROFIdrive parameter request header + 1 DWORD value per output word)
// Bytes 0..1 : Function (0x01 = read, 0x02 = write), Reserved
// Bytes 2..3 : Number of parameter values (1..N)
// Bytes 4..5 : Attribute, Number of elements (always 0 for p915/p916 array index)
// Bytes 6..7 : Parameter number (e.g. 0x0393 = 915)
// Bytes 8..9 : Sub-index (0 for whole array, 1..N for single element)
// Bytes 10..11: Format + number of values (e.g. 0x42 0x01 = DWORD, 1 value)
// Bytes 12..15: Value (low word first)
The first acyclic write should commit the entire array at sub-index 0; subsequent edits can target individual sub-indices (1..N). After each write, issue RDREC with the same INDEX to verify the value stored on the drive matches what you sent. Many non-Siemens drives reply with STATUS = 0xDF021B40 ("busy, write in progress") before returning DONE = TRUE; poll until that clears or use the rising edge of DONE as the trigger to read back.
Step 5 — Save parameters (optional but recommended)
On Sinamics-style drives the parameter buffer is volatile until p0977 = 1 (Save all parameters) is issued. Non-Siemens drives use vendor-specific commands. Common encodings:
| Vendor | Save command | Notes |
|---|---|---|
| Siemens Sinamics | Write p0977 = 1 (or p0971) | Save to non-volatile; up to 30 s on S120 |
| Kollmorgen AK2DG | Parameter 310 (Save in Flash) → 0xFFFF | Through WorkBench preferred; PLC can trigger |
| SEW Eurodrive | Parameter 0… (varies by firmware) | Use MOVILINK “copy RAM → EEPROM” |
| Bosch Rexroth IndraDrive | S-0-0192 (Command "Parameter save") | Use drive controller keypad or IndraWorks |
| Danfoss VLT/FC 302 | Parameter 12-11 = [1] Save to drive | Via FC-MC profile slot 0 |
Manufacturer-Specific Approaches
Siemens (when applicable)
For Sinamics G120/S120, use StartDrive inside TIA Portal V17 (StartDrive V17 update 4 or later) to assign a standard telegram; the PLC-side tags are generated automatically. If finer control over the I/O layout is required, the recommended workaround is to use Starter (legacy) to configure the drive side, then return to TIA Portal StartDrive for the project integration. This avoids manually writing p915/p916 from the PLC.
Kollmorgen AK2DG
The AK2DG ships with AKD WorkBench where Telegram 0 is selected under Setup → Fieldbus → PROFINET → Telegram. WorkBench pushes p915/p916 equivalents through its own DAP acyclic channel. When WorkBench is not available, the PLC can use WRREC on the AK2DG drive object (slot 1, sub-slot 1) to write Kollmorgen-specific signal IDs. Refer to the AKD2G PROFINET manual, section "Parameter channel over PROFINET".
SEW Eurodrive
SEW publishes ready-made S7-1500 function blocks (MoviTools® MotionStudio) that wrap the WRREC/RDREC calls. Import the SEW GSDML and the SEW library into TIA Portal V17, drop the FB into the project, and the library handles the parameter-channel write for p915/p916 analogues.
Bosch Rexroth / Danfoss / Other
Most drive vendors expose p915/p916 as described by the PROFIdrive profile, but the meaning of the signal IDs inside the array is vendor-specific. Always read the manual's "Signal assignment for free telegram" table. If a GSDML declares a startup parameter record that includes p915/p916 (e.g. <ParameterRecord> in the GSDML), TIA Portal will push the value once during device commissioning, but only if the integrator manually enters the value in the module parameters dialog.
Verification
-
Watch table test: open TIA Portal Online → Watch & force tables, force
QW200= 16#047E (control word — enable), then force the speed setpoint. The drive's commissioning tool should display the received PZD matching the forced value. - Online diagnosis: right-click the drive in the project tree → Online → Diagnostics. Telegram status must show "OK, data exchange". Cycle time and LifeSign counters should be advancing.
-
Parameter read-back: use
RDRECon p915 and p916 immediately after the write completes. Compare with the value sent. Any mismatch means the drive rejected the write — the most common cause is wrong slot/sub-slot/index, or write-protected parameters (drive in "commissioning" mode rather than "run"). -
Signal-trace comparison: in the drive tool, record the actual signal received on slot 1 (e.g. speed setpoint). The trace should match the PLC's
QW202..QW205value within one PROFINET update cycle. -
Power-cycle retention: cut PROFINET, then drive 24 V. After restoring, the cyclic mapping must still match what was previously written. If not, the
p915/p916values were not saved to non-volatile storage.
Troubleshooting Matrix
| Symptom | Diagnostic Step | Root Cause | Remediation |
|---|---|---|---|
| WRREC returns STATUS = 0xDF021B40 indefinitely | Check BUSY/DONE; poll with RDREC after 1 s | Drive busy, transfer incomplete | Increase polling; many drives need >100 ms per write |
| WRREC returns STATUS = 0xDF021B8C | Read drive manual — "parameter access denied" | Parameter write-protected or wrong access level | Switch drive to commissioning mode (e.g. Sinamics p0009 = 0 / p0010 = 0) |
| Telegram 0 selected but cyclic data stays 0 | Inspect drive tool's cyclic PZD view | p915/p916 still contain default (empty) assignment | Write valid signal IDs; cycle drive power |
| Cyclic data updates, but values look swapped (e.g. status word in setpoint slot) | Compare telegram length in TIA Portal vs drive tool | PZD length mismatch between TIA Portal slot and drive | Re-check GSDML TelegramLength; ensure both sides use identical PZD count |
| CPU goes to SF/IO Fault after download | Online → Diagnostics → IO devices → status | PROFINET name or IP conflict | Assign unique PROFINET device name; verify IP/subnet mask |
| Drive accepts p915/p916 in RAM but loses them on power-cycle | Vendor manual — "Save parameters" section | Save command not issued | Issue the vendor's save command (table above) or p0977 = 1 for Sinamics |
| Free Telegram not visible in TIA Portal drop-down | Inspect GSDML <Telegrams> section | Drive firmware does not support Telegram 0 or GSDML is outdated | Update GSDML to latest version; verify drive firmware release notes |
| RDREC returns "0xDF021B05" (slot/subslot invalid) | Check DAP slot mapping in GSDML | Wrong slot/sub-slot numbers used | Use vendor's slot map; for many drives slot 0 = drive head |
Field-Proven Caveats
- GSDML updates silently break telegram lists. When upgrading the drive firmware or the GSDML, TIA Portal may auto-select a different default telegram. Always re-verify the drop-down value after any GSDML change.
- Watch the IRT vs RT conflict. If the drive requires PROFINET IRT (servo), TIA Portal must be configured with isochronous mode and the same SendClock on the IO device. Free Telegram 0 supports IRT, but the slot configuration in the drive tool may default to RT, which will fail at sync.
- Indexing convention differs by vendor. Siemens uses <index> = parameter number, sub-slot = 1. Kollmorgen and SEW use <index> = a base value (e.g. 0xB0BE for drive parameters) with the parameter number encoded in the request header. Never assume Siemens-style addressing works on a non-Siemens drive.
- CPU firmware ≥ 2.0 is required for S7-1500 PROFINET IRT with DSC. If you intend to use dynamic servo control with Telegram 5/6/9, verify CPU firmware 2.0+ in the TIA Portal "Device → Online → Diagnostics".
- Avoid writing p915/p916 from a fast OB. The acyclic write can take up to several seconds; call it from OB100 (warm restart) or a one-shot flag in OB1 driven by a startup tag.
- Some drives ignore writes to the entire array (sub-index 0) and require a per-element write for every entry. Budget accordingly: 32 acyclic writes for 16 input + 16 output words.
Working Code: Minimal SCL FB for Telegram 0 Commissioning
FUNCTION_BLOCK "FB_DriveFreeTelegram0Init"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
i_hwId : HW_IO; // PROFINET HW identifier of drive's PDEV slot
i_doWrite : BOOL; // rising edge starts the write sequence
END_VAR
VAR_OUTPUT
o_busy : BOOL;
o_done : BOOL;
o_error : BOOL;
o_status : DWORD;
END_VAR
VAR
s_state : INT; // 0=idle, 1=write p915, 2=read back p915, 3=write p916, 4=read back p916, 5=save, 10=done, 99=error
s_wrrec : WRREC;
s_rdrec : RDREC;
s_txBuf : ARRAY[0..63] OF BYTE; // request buffer
s_rxBuf : ARRAY[0..63] OF BYTE; // response buffer
s_stepEdge : BOOL;
END_VAR
BEGIN
// State machine
CASE s_state OF
0: // Idle: wait for trigger
IF i_doWrite AND NOT s_stepEdge THEN
s_stepEdge := TRUE;
s_state := 1;
o_busy := TRUE; o_done := FALSE; o_error := FALSE;
END_IF;
1: // Write p915 (output mapping), sub-index 0, 4 DWORDs of signal IDs
// Build request header (PROFIdrive parameter request)
s_txBuf[0] := 16#02; s_txBuf[1] := 16#00; // Write request
s_txBuf[2] := 16#04; s_txBuf[3] := 16#00; // 4 parameter values follow
s_txBuf[4] := 16#00; s_txBuf[5] := 16#00; // Attribute 0, Elements 0
s_txBuf[6] := 16#93; s_txBuf[7] := 16#03; // Parameter number 0x0393 = 915
s_txBuf[8] := 16#00; s_txBuf[9] := 16#00; // Sub-index 0 (whole array)
s_txBuf[10] := 16#42; s_txBuf[11] := 16#01; // Format DWORD, 1 value
s_txBuf[12] := 16#01; s_txBuf[13] := 16#00; // Signal ID 0x0001 = Control Word 1
s_txBuf[14] := 16#00; s_txBuf[15] := 16#00;
s_txBuf[16] := 16#42; s_txBuf[17] := 16#01;
s_txBuf[18] := 16#02; s_txBuf[19] := 16#00; // Signal ID 0x0002 = Speed Setpoint A (32-bit)
s_txBuf[20] := 16#00; s_txBuf[21] := 16#00;
s_txBuf[22] := 16#42; s_txBuf[23] := 16#01;
s_txBuf[24] := 16#00; s_txBuf[25] := 16#00; // unused
s_txBuf[26] := 16#00; s_txBuf[27] := 16#00;
s_txBuf[28] := 16#42; s_txBuf[29] := 16#01;
s_txBuf[30] := 16#00; s_txBuf[31] := 16#00; // unused
s_txBuf[32] := 16#00; s_txBuf[33] := 16#00;
s_wrrec(REQ := TRUE, ID := i_hwId, INDEX := 915, MLEN := 34, DATA := s_txBuf);
IF s_wrrec.DONE THEN
s_wrrec(REQ := FALSE, ID := i_hwId, INDEX := 915);
s_state := 2;
ELSIF s_wrrec.ERROR THEN
o_status := s_wrrec.STATUS; o_error := TRUE; s_state := 99;
END_IF;
2: // Read back p915
s_rdrec(REQ := TRUE, ID := i_hwId, INDEX := 915, MLEN := 0, DATA := s_rxBuf);
IF s_rdrec.DONE THEN
s_rdrec(REQ := FALSE, ID := i_hwId, INDEX := 915);
s_state := 3; // proceed to p916
ELSIF s_rdrec.ERROR THEN
o_status := s_rdrec.STATUS; o_error := TRUE; s_state := 99;
END_IF;
3, 4, 5: // analogous: p916, save command
// ... (omitted, same pattern)
s_state := 10;
10: // Done
o_busy := FALSE; o_done := TRUE;
s_stepEdge := FALSE;
99: // Error
o_busy := FALSE; o_error := TRUE;
s_stepEdge := FALSE;
END_CASE;
END_FUNCTION_BLOCK
This FB is intentionally simple; in production wrap the state machine with retry counters, timeouts (e.g. 5 s per state), and diagnostic logging.
Related Siemens Documentation to Keep on Hand
- TIA Portal — Communication telegrams (F-TM ServoDrive ST)
- Siemens S7-1500 system manual — PROFINET interface and acyclic record read/write instructions (
RDREC/WRREC). - PROFIdrive profile (PNO order no. 3.172) — official PROFIBUS Nutzerorganisation e.V. publication; the authoritative source for
p915/p916semantics and the parameter request/response data record layout.
What is PROFIdrive Free Telegram 0 and when is it used?
Free Telegram 0 is a vendor-neutral PROFINET telegram defined by the PROFIdrive profile that carries no pre-assigned signals. It is used when the drive does not match any of the standard telegrams 1-9, or when the integrator needs full control over which signal goes to which PZD word. The mapping is configured through drive parameters p915 (setpoint/output) and p916 (actual-value/input), typically written acyclically via WRREC.
Does TIA Portal V17 write p915 and p916 to the drive automatically?
No. TIA Portal V17 only generates the cyclic I/O mapping for the selected telegram. The PROFIdrive parameters p915 and p916 must be written separately, either with the drive manufacturer's commissioning tool (preferred) or by the PLC using WRREC at startup. If the GSDML of the drive exposes those parameters as startup parameter records, TIA Portal can be configured to push them once during device commissioning.
Which TIA Portal instruction writes acyclic PROFINET parameters?
Use the standard WRREC (Write Record) instruction. Set ID to the HW identifier of the drive's PROFINET interface, INDEX to the PROFIdrive parameter number (e.g. 915 or 916), and DATA to a buffer that follows the PROFIdrive parameter-request format: function code, number of values, attribute/elements, parameter number, sub-index, format/count, then the value(s). Poll DONE and read back with RDREC to confirm acceptance.
Why do my p915/p916 values disappear after a power cycle?
Most drives keep parameter changes in volatile RAM until an explicit save command is issued. For Siemens Sinamics the command is p0977 = 1. For Kollmorgen AK2DG it is parameter 310 = 0xFFFF. For Bosch Rexroth IndraDrive the command is S-0-0192. Issue the vendor-specific save command and verify with RDREC after the next power-up.
Why is Free Telegram 0 missing from the TIA Portal drop-down?
The drive's GSDML must list Telegram 0 as a supported module. If it is not in the drop-down, install the latest GSDML from the drive vendor and re-add the device. Some legacy drives do not support Telegram 0 at all and only expose standard telegrams 1, 2, 3, 5, 6, 7, and 9.