Modbus FC17 (Report Server ID)
Function code 17, historically called report slave ID and now report server ID, asks a serial device to identify itself and report whether it is running. It is a quick way to confirm what is answering at a given address, though its reply is largely device-defined. This reference explains what FC17 returns, how it differs from the newer FC43 device identification, and where it still earns its place.
Modbus Function Code 17 Report Server ID in one line: Modbus function code 17 reports server ID: the request carries only the address and code, and the device replies with a byte count, a device-specific server ID, a run-status byte indicating whether it is on or off, and optional device-defined data. It is a serial-line identification command, useful for confirming what answers at an address, distinct from the structured FC43 device identification.
What FC17 Reports
Function code 17 sends no data in the request beyond the slave address and the code. The device replies with a byte count, a server ID whose format is defined by the device, a run-indicator byte that is on or off depending on whether the device is running, and then any additional device-specific data the vendor chooses to include. Because the ID and the extra data are device-defined, the reply is only fully meaningful with the device's documentation in hand.
The one field with a fixed meaning is the run indicator, which tells you whether the device considers itself running. That single bit of universal information, plus a quick confirmation that something answers at the address, is the practical value of FC17. It is a serial-line command in the same family as the framing described in the Modbus TCP vs RTU comparison, and it does not touch the register or coil tables.
FC17 Versus FC43 Device Identification
Modbus later added function code 43 with a device-identification subfunction that returns structured, standardized fields such as vendor name, product code, and revision. That structured form is portable across vendors, whereas FC17's server ID is device-defined and inconsistent. Where a device supports FC43, it is the better choice for reliable identification, as covered in the Modbus FC43 device identification reference.
FC17 remains common on legacy serial equipment and stays useful as a lightweight liveness and run-status check even where FC43 exists. If a device rejects FC17 with an illegal function exception, it simply does not implement the code, which is entirely allowed since many function codes are optional. The general meaning of that rejection is in the Modbus exception code reference.
The Exchange on the Wire
The request is minimal: the server address, the byte 0x11, and the CRC. The reply is where the structure lives, such as it is:
| Field | Content |
|---|---|
| Server address | Echoed address |
| Function code | 0x11 |
| Byte count | Length of the data that follows |
| Server ID | Device-defined identifier bytes |
| Run indicator | 0xFF for on, 0x00 for off |
| Additional data | Optional, device-defined |
Decoding a capture is straightforward until the device-defined parts: after the byte count, you cannot know where the server ID ends and the additional data begins without the vendor's documentation, because the specification fixes only that a run indicator of 0xFF means on and 0x00 means off. A practical trick when documentation is missing: capture the reply in both run states, and whichever byte flips between 0xFF and 0x00 is the run indicator - the ID is what precedes it.
FC17 as a Commissioning Liveness Probe
Because the request carries no register addresses or counts, FC17 cannot fail for configuration reasons the way a data read can, which makes it a clean liveness probe during commissioning: if the device replies at all, the address, baud rate, parity, and wiring are proven in one exchange, before you know anything about its register map. During a station bring-up it is a reasonable first poll for walking the address range and inventorying what answers. Two caveats apply. An illegal-function exception still proves liveness - the device heard you and answered, it just lacks the code - so treat that as a success for probing purposes. And a silent address proves little on its own, since a missing function code and a wiring fault produce the same silence when combined with other problems. Once the devices are proven alive, the polling design that follows is the subject of the Modbus-to-cloud connection guide.
Serial Only: Gateways and Native TCP Devices
FC17 is defined as a serial-line function, and that has practical consequences in mixed networks. A native Modbus TCP device typically does not implement it, so a poll that works on the RS-485 side of a gateway may draw an illegal-function exception when aimed at a TCP-only target. Gateways themselves vary: some pass any function code through to the serial side transparently, in which case FC17 reaches the end device and works, while others whitelist only the data-access codes and reject everything else at the gateway itself. An FC17 failure through a gateway therefore indicts the gateway's forwarding rules as much as the end device. For identifying devices across a routed, mixed network, the structured identification function is the portable path; FC17 is best treated as a tool for the serial segment you are physically working on.
Run Status Semantics: Trust but Verify
The run indicator's meaning is fixed only at the level of on versus off; what running means is the vendor's choice. A PLC may report its program mode, a simpler device may report merely that it is powered and answering, and a drive might report whether its output is active. Treat the run indicator as a hint to verify against the device manual, never as a universal machine state, and do not build control or alarm logic on it - status used for decisions belongs in documented registers polled with the ordinary data functions. Where a fleet mixes vendors, a useful convention is to log each device's FC17 reply during commissioning as documentation of what that model reports, then rely on mapped status registers for operations from that point on.
Frequently Asked Questions
What is the difference between FC17 and FC43?
FC17 report server ID returns a device-defined identifier and a run-status byte, so its content varies by vendor. FC43 device identification returns structured, standardized fields like vendor name, product code, and revision that are portable across devices. Where both are supported, FC43 gives more reliable identification, while FC17 is a lighter liveness and run-status check.
What does the run indicator in an FC17 reply mean?
It is the one field with a fixed meaning: a byte that indicates whether the device considers itself running, typically on or off. Everything else in the reply, including the server ID format and any extra data, is device-defined. So FC17 reliably tells you the device is alive and whether it reports itself running, but little else without documentation.
Why did FC17 get renamed from report slave ID?
The command's function did not change; the Modbus terminology was updated to server and client language in place of slave and master. Report slave ID and report server ID refer to the same function code 17. Older documentation and tools may still use the slave wording, but the request and reply are identical.
Should a SCADA system poll FC17 continuously?
There is little reason to. The server ID never changes, and the run indicator's meaning is too vendor-specific to act on, so continuous FC17 polling spends bus time on bytes nobody uses. The sensible pattern is FC17 once at commissioning or during diagnostics to confirm what answers at an address, then ordinary data polls - which prove liveness on every cycle anyway - for operations. Reserve FC17 re-polls for troubleshooting sessions when you suspect the wrong device is answering at an address.
Can FC17 tell two identical devices apart?
Usually not, and that is its key limitation. Two units of the same model typically return the same server ID, because the ID identifies the product rather than the individual unit. Distinguishing physical units requires a serial number, which lives either in the extended fields of the structured device-identification function or in vendor-specific registers. FC17 confirms what kind of device answers at an address and whether it reports itself running - it is not an asset-tracking mechanism.
Sources and verification
This page references the protocol specifications published by the organizations below. Editions, product capabilities, and documentation change over time - confirm current requirements and specifications directly with the source.
- Modbus Application Protocol Specification - Modbus Organization
Merobix is not affiliated with, endorsed by, or sponsored by these organizations; their names are used only to identify the standards and products discussed.
Automation services
Need help turning this into a working system?
Merobix integrates SCADA, programs Allen-Bradley and Siemens PLCs, and designs and fabricates industrial control panels.
Meeting requests are reviewed before confirmation.