Synchronizing SIMATIC KTP Basic HMI Time to Allen-Bradley ControlLogix
Time-stamped alarms and audit trails on a Siemens SIMATIC KTP Basic panel require a reliable time source. When that panel is talking to an Allen-Bradley ControlLogix controller (1756-L7x, 1756-L8x, 1756-L9x) over EtherNet/IP, the obvious shortcut — point the HMI at the PLC and call it done — usually fails. The PLC does not speak NTP, the HMI cannot execute scripts, and the date/time area pointer has data-type rules that the standard manuals gloss over.
This reference covers three working paths, the data layout the area pointer actually expects, the reasons the ControlLogix "Clock Master" cannot answer NTP requests, and the firmware cutoffs that determine which method is even available on a given Basic Panel. The content assumes TIA Portal V17 or later, WinCC Comfort/ES V17 or later, Studio 5000 Logix Designer V32 or later, and a 2nd-generation KTP Basic (KTP x00 Basic PN) shipped from 2014 onward.
1. Problem Definition
The reported symptoms are:
- Alarm time stamps on the KTP Basic drift relative to the ControlLogix wall clock.
- A user-defined tag array built to mirror the Siemens DTL data type does not update from the PLC.
- Pointing the HMI's NTP client at the ControlLogix IP address returns "no response from time server".
- After a power cycle, the HMI clock reverts to 00:00:00 on 01.01.2011 (or similar), wiping the audit trail.
All four symptoms share a single root cause: the HMI/PLC combination was set up as if it were a Siemens-to-Siemens integrated connection, but the Allen-Bradley side uses a different time-distribution model (CIP Sync, IEEE 1588) that does not interoperate with the HMI's NTP client or with the area pointer's data-type assumptions.
2. Prerequisites
| Item | Minimum version | Notes |
|---|---|---|
| TIA Portal | V17 (use V18/V19/V20 for current builds) | WinCC Comfort/Advanced included |
| WinCC Comfort/ES | V17 or later matching TIA version | Older versions ship without NTP for Basic Panels |
| Studio 5000 Logix Designer | V32.01 or later | For 1756-L8x; V35+ recommended for 1756-L9x |
| ControlLogix firmware | V31 for L8x, V35 for L9x | Time Sync attribute requires V31+ on 1756-L8x |
| KTP Basic firmware | KTP x00 Basic PN 2nd gen, image V16 update 6+ | 1st gen (mono) does not support NTP |
| EtherNet/IP module | 1756-EN2T, 1756-EN3TR, 1756-EN4TR | EN2T supports CIP Sync; EN4TR adds PRP/HSR |
3. Why the Standard DTL-Mapping Attempt Fails
The Siemens DTL (Date_And_Time_Long) data type is a 12-byte structure:
| Byte offset | Field | Type | Range |
|---|---|---|---|
| 0–1 | YEAR | UINT | 1970–2554 |
| 2 | MONTH | USINT | 1–12 |
| 3 | DAY | USINT | 1–31 |
| 4 | WEEKDAY | USINT | 1–7 (Sun=1) |
| 5 | HOUR | USINT | 0–23 |
| 6 | MINUTE | USINT | 0–59 |
| 7 | SECOND | USINT | 0–59 |
| 8–11 | NANOSECOND | UDINT | 0–999,999,999 |
The Date/Time PLC area pointer expects exactly 12 bytes in this layout, written from the controller into the HMI's address space. The Comfort and Basic Panels do not interpret individual DTL sub-elements; the area pointer is a raw byte block, and the HMI assembles the date/time locally from that block.
The user reported that individual UInt/USInt/UDInt tags from the PLC would not read. The most common cause is that the HMI tag table was created with mismatched data lengths or that the area pointer was pointed at a tag that has overlapping usage. On a 2nd-gen Basic, the area pointer is also restricted to DBs or global memory; it cannot be bound to an alias tag that points into a produced/consumed tag.
4. Method 1 — Date/Time PLC Area Pointer (Recommended)
This is the only path that produces a synchronous, on-event update from the PLC clock to the HMI clock. It works on both 1st-gen and 2nd-gen KTP Basics.
4.1 Build a 12-byte DTL image in the ControlLogix
- Create a User-Defined Type in Studio 5000 called
HMI_TimeBufferwith the following members (the data types do not matter to the HMI — the HMI sees raw bytes — but the byte offsets must match the table in Section 3):// Studio 5000 Add-On Instruction or UDT HMI_TimeBuffer, UDT[12 bytes] Time_YEAR : DINT // bytes 0..1 (filled via ANY-to-DINT swap) Reserved_Month : SINT // byte 2 Reserved_Day : SINT // byte 3 Reserved_WD : SINT // byte 4 // ignored by KTP Basic per KB 69864408 Reserved_Hour : SINT // byte 5 Reserved_Min : SINT // byte 6 Reserved_Sec : SINT // byte 7 Reserved_Nano : DINT // bytes 8..11 - Add a controller tag
HMI_Timeof typeHMI_TimeBuffer[1]in program scope. Do not create this tag in an Add-On Instruction; the area pointer must reference a controller-scoped tag. - Add ladder logic that runs every 1 s to copy the wall-clock time into this buffer:
// Rungs in MainTask, periodic task 1 s GSV Class Name = WALL_CLOCK_TIME Instance Name = (controller) Attribute Name = LocalDateTime Dest = WallClock_DTL ; DINT[8] // WallClock_DTL is already a 64-bit CIP DTL: bytes 0..1 = year, // byte 2 = month, byte 3 = day, byte 4 = weekday, byte 5 = hour, // byte 6 = minute, byte 7 = second, bytes 8..11 = nanoseconds. // Copy element-wise: MOV(WallClock_DTL[0], HMI_Time.Time_YEAR) MOV(WallClock_DTL[1], HMI_Time.Reserved_Month) MOV(WallClock_DTL[2], HMI_Time.Reserved_Day) MOV(WallClock_DTL[3], HMI_Time.Reserved_WD) MOV(WallClock_DTL[4], HMI_Time.Reserved_Hour) MOV(WallClock_DTL[5], HMI_Time.Reserved_Min) MOV(WallClock_DTL[6], HMI_Time.Reserved_Sec) MOV(WallClock_DTL[7], HMI_Time.Reserved_Nano)Weekday: KB 69864408 states that the KTP 600 BASIC PN ignores the weekday byte when reading the DateTimePLC area pointer. The HMI computes its own weekday from the year/month/day fields. Do not attempt to fix the weekday by writing a constant; leave byte 4 at 0 and let the HMI calculate. - Confirm the controller tag
HMI_Timeshows live values in Logix Designer by going online and watching the members update each second.
4.2 Bind the area pointer in TIA Portal
- In the HMI project tree, open Connections on the KTP Basic.
- Double-click the existing Allen-Bradley ControlLogix connection (driver = "Allen-Bradley ControlLogix" or "Allen-Bradley EtherNet/IP").
- Switch to the Area Pointers tab (under "Properties" → "Area Pointers").
- Enable Date/Time PLC. Set:
-
PLC tag:
HMI_Time[0](the controller tag from step 4.1.3) - Length: 12 (bytes — TIA Portal auto-fills this for the Date/Time PLC pointer)
- Acquisition cycle: 1 s
-
PLC tag:
- Compile and download to the HMI. The HMI clock will jump to the PLC time within the acquisition cycle. The first update is delayed by one full cycle after download because the pointer is initialized empty.
4.3 What the HMI does with the bytes
On each acquisition the HMI:
- Reads the 12 raw bytes from the address mapped to
HMI_Time[0]. - Verifies that YEAR is in 1970–2038 (anything outside is treated as invalid and the HMI keeps its previous time).
- Verifies MONTH 1–12, DAY 1–31, HOUR 0–23, MINUTE 0–59, SECOND 0–59.
- Computes WEEKDAY from the year/month/day (the weekday byte is dropped).
- Sets the panel's local clock to the resulting value.
This is why the user's "DTL in the PLC" attempt did not produce visible values: the HMI was reading the bytes correctly, but the Logix Designer DTL type uses big-endian 16-bit year that maps to UINT (not UDINT), and a one-byte shift of the year field silently corrupts the parse. Always use the 8-element DINT buffer produced by the GSV/WALL_CLOCK_TIME instruction rather than the higher-level DTL datatype.
5. Method 2 — NTP Client on 2nd-Gen KTP Basic
If the HMI is a 2nd-gen KTP Basic (KTP 400, KTP 700, KTP 900, KTP 1200, all "Basic PN"), TIA Portal exposes an NTP time-synchronization mode on the panel's properties. This mode is configured under HMI device properties → Time > Time synchronization.
5.1 Configuration steps
- In the device configuration, set Time base = "Use NTP".
- Enter up to four NTP server addresses. The panel will poll on UDP port 123.
- Set the poll interval (default 10 s, minimum 1 s, maximum 24 h).
- Compile and download.
5.2 Why the ControlLogix Clock Master is not an NTP source
The 1756-EN2T/EN3TR/EN4TR module, when configured as a CIP Sync master, distributes time using the CIP Sync protocol — a vendor-neutral implementation of IEEE 1588 precision-time-protocol semantics carried inside CIP packets, not over UDP/123. There is no NTP daemon inside the Logix controller or the ENxT module, so a standard NTP request from the HMI to the PLC's IP address will time out with "no response from server" exactly as the user reported.
This is not a bug or a configuration error. It is the deliberate design of the CIP Sync stack: time distribution happens at the CIP layer, with PTP-style grandmaster/ordinary-clock election. The HMI cannot participate in CIP Sync (it is an NTP-only client), so it cannot consume the time that CIP Sync is offering.
5.3 Bridging CIP Sync to NTP
Three production-grade workarounds are documented or used in the field:
| Method | Hardware | Accuracy | Notes |
|---|---|---|---|
| Dedicated NTP appliance on the plant network | Any stratum-1/2 NTP server (e.g. Siemens SICLOCK, Meinberg, EndRun) | ±1 ms to ±10 ms typical | Point both the HMI and a Rockwell Stratix-managed switch (if PTP-aware) at the same source for traceability |
| PC-based NTP server, GPS-disciplined | Industrial PC with a USB GPS and a Windows/Linux NTP daemon | ±1 ms to ±50 ms | Cheapest option; ensure the PC's firewall allows UDP/123 inbound |
| Use the controller's CIP Sync time as the master and run a CIP-to-NTP bridge on a Stratix switch or panel PC | Stratix 5700/5400 with IOS firmware 15.2(8)E or later, or a 3rd-party bridge | ±100 µs to ±1 ms | Required where the ControlLogix must be the time authority; requires PTP-capable switching infrastructure |
6. Persisting the HMI Time Across Power Cycles
KTP Basic panels do not include a battery-backed RTC for the operator-facing clock; on a cold start the panel reverts to 00:00:00 on 01.01.2011 (or the configured "Time of last session" if a recipe was saved). To keep the clock from resetting:
- Use NTP (Method 2). The panel will recover the correct time within the next poll cycle after boot — usually < 10 s on a 2nd-gen panel.
- For panels using the area pointer (Method 1) without NTP, the panel must complete one full acquisition cycle (1 s) and the PLC must be running; if the PLC is also booting, expect 5–30 s of bad time on the HMI.
- If neither NTP nor the area pointer is reliable, configure a project-side initial value for the HMI clock and let the operator correct it manually until the PLC comes online.
7. Verification Procedure
- In Logix Designer, force
HMI_Time.Reserved_Month = 13and confirm the HMI clock stops updating (invalid-month guard). Restore and continue. - From a Windows PC, run
w32tm /monitor /computers:<HMI_IP>. On a 2nd-gen panel with NTP enabled, the PC should see < 1 s offset. - On the HMI, open an alarm view and trigger an alarm. The time stamp should equal the PLC's wall clock to within ±1 s.
- Power-cycle the HMI. After boot, the clock should reach the correct value within one NTP poll (default 10 s) or one area-pointer cycle (1 s) — whichever is configured.
- On the ControlLogix, verify that the controller is the CIP Sync grandmaster by inspecting the ENxT module's
GrandmasterClockattribute in the AOP. If the module is in "Slave Only" mode, time is still correct but you cannot use it as the authoritative source for non-CIP-Sync devices.
8. Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| HMI clock stays at 00:00:00 01.01.2011 | Area pointer not enabled, or PLC not running | Verify "Date/Time PLC" area pointer is enabled, acquisition cycle = 1 s, and HMI_Time exists in controller scope |
| HMI clock updates but offset by 1 day | Year bytes swapped (big/little endian mismatch) | Use the GSV/WALL_CLOCK_TIME/LocalDateTime result directly; do not build a year word with a BTW/BTD |
| NTP "no response from server" against PLC IP | ControlLogix has no NTP daemon (uses CIP Sync) | Point HMI at a real NTP server; see Section 5.3 |
| Area pointer reads OK in the HMI tag table, but alarm time stamps wrong | HMI tag used in area pointer is also being used for an HMI-internal animation | Create a dedicated controller tag for the time buffer; do not multiplex it with screen logic |
| Weekday shows the wrong value | KTP Basic recomputes weekday from the date and ignores the byte | Per KB 69864408, this is expected. Set byte 4 to 0 and document the limitation |
| Individual UInt/USInt tags from the PLC are blank in the HMI | EtherNet/IP connection is symbolic, the tags are not added to the HMI tag table with the correct name, or the HMI is configured for legacy "CIP data table" addressing | Switch the HMI's Allen-Bradley connection to symbolic addressing and re-import tags via "Read from PLC" |
| Time updates for 1 second then stops | Controller tag is in an Add-On Instruction; the area pointer requires a controller-scoped tag | Move HMI_Time to controller scope, not into the AOI |
| HMI shows correct time but alarms are stamped with the previous boot time | Alarms are read at startup from a buffered log | Clear the alarm buffer on the HMI after a successful clock sync, or enable "Update alarm time on time change" in the alarm configuration |
9. Field-Proven Caveats
- On 1756-L7x controllers (pre-L8), the WALL_CLOCK_TIME class is available but the LocalDateTime attribute returns the time in CIP Sync epoch (1900-01-01 base) rather than the S7/Logix Designer epoch (1970-01-01). The HMI will interpret the resulting year as out-of-range and discard the update. The 1756-L8x and L9x ship the corrected epoch and work without conversion.
- The "Date/Time PLC" area pointer and the NTP mode are mutually exclusive on a single connection. Enabling one disables the other in TIA Portal; pick one and stick with it.
- On a panel with a recipe that is being saved at the moment the time updates, the recipe's date stamp can be off by one second. This is a documented behavior, not a fault.
- When the HMI is configured to use NTP and the network is disconnected at boot, the HMI starts with the default 01.01.2011 and waits silently. There is no HMI-side alarm for "NTP unreachable" on a 2nd-gen Basic; the only way to detect it is to monitor the system tag
HmiTimeSyncStatusfrom the PLC.
10. FAQ
Can the Allen-Bradley ControlLogix act as an NTP time server for the KTP Basic?
No. ControlLogix distributes time via CIP Sync (IEEE 1588) inside CIP packets, not NTP over UDP/123. A 2nd-gen KTP Basic configured as an NTP client will time out when pointed at the PLC's IP. Use a real NTP server, or a Stratix switch that bridges PTP to NTP, as described in Section 5.3.
What is the byte layout the "Date/Time PLC" area pointer expects?
Twelve bytes, big-endian, in the order YEAR(UINT), MONTH(USINT), DAY(USINT), WEEKDAY(USINT), HOUR(USINT), MINUTE(USINT), SECOND(USINT), NANOSECOND(UDINT). The KTP Basic ignores the weekday byte and recomputes it from the date, per Siemens KB 69864408.
Why do my individual UInt/USInt/UDInt tags from the ControlLogix show no value in the HMI?
Most often the HMI's Allen-Bradley connection is set to legacy CIP data-table addressing and the tags have not been re-imported symbolically. In TIA Portal, open the connection, switch to symbolic addressing, and use "Read from PLC" to refresh the tag table. Also confirm the tags are in controller scope, not inside an Add-On Instruction.
Does the KTP Basic keep time across a power cycle?
No, there is no battery-backed RTC. The panel reverts to 01.01.2011 00:00:00 on cold start. With NTP enabled it will resync within one poll cycle (default 10 s). With the area pointer enabled it will resync within one acquisition cycle (default 1 s) once the PLC is running.
Can I run a script on the KTP Basic to do the synchronization manually?
No. KTP Basic panels have no scripting runtime, no scheduled tasks, and no VBScript support. The only programmatic knobs are the Date/Time PLC area pointer and the NTP client — both configured at compile time in TIA Portal.