Resolving PLC Daylight Saving Time Issues in S7 and ControlLogix

David Krause21 min read
HMI ProgrammingSiemensTechnical 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

Background: The 2005 Energy Policy Act and DST Dates

The United States Energy Policy Act of 2005 (Public Law 109-58) extended Daylight Saving Time (DST) by approximately four weeks per year. Prior to 2007, DST in the U.S. began on the first Sunday in April and ended on the last Sunday in October. Under the revised schedule, effective March 2007, DST now begins on the second Sunday in March and ends on the first Sunday in November. The time changes occur at 02:00 local time. The change is codified in 15 U.S.C. §260a and was implemented by the Department of Transportation, which retains authority over DST time zones under the Uniform Time Act of 1966.

U.S. Daylight Saving Time Schedule Comparison
Schedule Begins Ends Effective Years
Pre-2007 (original Uniform Time Act) First Sunday of April, 02:00 Last Sunday of October, 02:00 1987 to 2006
2005 Energy Policy Act (current) Second Sunday of March, 02:00 First Sunday of November, 02:00 2007 to present

Reference: Daylight saving time in the United States.

Although the legislation was signed in August 2005, the operational impact did not begin until March 11, 2007, the first transition under the new schedule. Industrial facilities running PLCs, drives, HMIs, and SCADA servers that hard-coded the old first-Sunday-of-April / last-Sunday-of-October logic required a coordinated update across the plant floor before that date. Sites that did not update experienced a one-week mismatch on the spring-forward date and a one-week mismatch on the fall-back date during the transitional year, with full misalignment beginning March 2007.

Industrial Systems Affected by the DST Shift

Five categories of equipment typically carry DST-aware logic in a process plant or factory:

  1. PLC and PAC real-time clocks with weekday/date math for shift rollovers, batch records, and reporting.
  2. Operator interface (HMI) time displays, alarm timestamps, and event logs that operators reference during incident review.
  3. SCADA servers that aggregate historian data and align events from multiple controllers into a single timeline.
  4. Drives and motion controllers that use absolute time for fault logs and maintenance counters.
  5. Stand-alone time clocks, badge readers, lighting controllers, and HVAC schedulers wired to the plant's energy management system.

Equipment that is connected to a Network Time Protocol (NTP) or Precision Time Protocol (PTP) source automatically receives a corrected wall-clock time, and DST becomes a presentation-layer concern. Equipment that is not connected to a time server and runs a self-contained RTC with internal DST logic is the at-risk class. Before 2007, vendors released firmware patches and library updates for most major PLC families, but many machines shipped before that date continued to run with pre-2007 logic for years afterward. A controller commissioned in 2002 with a DST routine that calculated the first Sunday in April using a fixed offset would silently fail at the 2007 spring-forward and remain in the wrong state until corrected.

Note on Arizona and Indiana: Arizona (excluding the Navajo Nation) does not observe DST. Indiana observed DST statewide for the first time in April 2006; before that, most Indiana counties did not observe DST. PLC programs that hard-coded the local time zone rules or were commissioned before the Indiana change required manual update, and machines that moved from one of those states to a DST-observing jurisdiction presented a separate class of error.

Siemens S7-300/400 DST Handling with STEP 7 V5.x

The S7-300 and S7-400 CPU families store the local time, including DST state, in their internal real-time clock. STEP 7 V5.5 and earlier expose this clock through system functions and the CPU's hardware clock configuration dialog.

Time and date reading on S7-300/400:


CALL SFC 1   // READ_CLK
   RET_VAL := MW10   // Return code (0 = no error, 80A1 = invalid time)
   CDT      := MD12   // 8-byte date-and-time in BCD format

Time and date setting (used by NTP-style time masters or a master PLC):


CALL SFC 0   // SET_CLK
   PDT      := MD12   // 8-byte date-and-time in BCD
   RET_VAL := MW10   // 0 = OK, 8020 = invalid date, 8081 = DST change in progress

Daylight saving time on S7-300/400 is controlled by the CPU's clock parameters. In HW Config, open the CPU properties, select "Time of Day" or "Diagnostics/Clock," and verify the "Daylight saving time" checkbox is enabled with the correct rule. As of STEP 7 V5.5 SP4, the S7-300/400 firmware supports both the pre-2007 rule and the post-2007 rule. CPUs with firmware versions older than the patch released for the Energy Policy Act change still calculate DST transitions on the first Sunday in April and the last Sunday in October. Required firmware versions for the updated rule include:

Siemens CPU Firmware Versions Supporting Post-2007 DST Rule
CPU Family Order Number (MLFB) Minimum Firmware STEP 7 Version
CPU 315-2 DP 6ES7315-2AG10-0AB0 V2.6.7 or later STEP 7 V5.4 SP5
CPU 317-2 DP 6ES7317-2AJ10-0AB0 V2.6.7 or later STEP 7 V5.4 SP5
CPU 319-3 PN/DP 6ES7318-3EL00-0AB0 V2.7.7 or later STEP 7 V5.4 SP5
CPU 412-2 6ES7412-2EK06-0AB0 V5.3.5 or later STEP 7 V5.4 SP5
CPU 414-3 6ES7414-3EM06-0AB0 V5.3.5 or later STEP 7 V5.4 SP5
CPU 416-3 6ES7416-3ES06-0AB0 V5.3.5 or later STEP 7 V5.4 SP5
CPU 417-4 6ES7417-4XT05-0AB0 V4.2.6 or later STEP 7 V5.4 SP5

CPU firmware can be updated using the SIMATIC Automation Tool, the online firmware update dialog in HW Config, or a memory card with the firmware file. After the update and before the next DST transition, verify by reading the system clock and confirming the active time zone rule in the CPU properties. Note that the firmware update is non-volatile: once written to the flash, the CPU retains the new DST rule indefinitely.

Siemens S7-1200/1500 DST Handling with TIA Portal

The S7-1200 and S7-1500 families handle DST through the CPU's system clock and the TIA Portal project settings. As of TIA Portal V13 (released 2014) and all later versions, the project supports the post-2007 U.S. rule without manual date entry. Sites that migrated to TIA Portal before the spring 2007 transition did not require a DST logic change because the firmware-level clock handles the transition automatically.

Reading the local time on S7-1500 (Structured Text):


// S7-1500, TIA Portal V15.1 or later
// Read system time as DTL (date and time long)
#myTimestamp := RD_SYS_T();  // Returns DTL data type

// Components of DTL
#year    := #myTimestamp.YEAR;         // UINT, 1970 to 2554
#month   := #myTimestamp.MONTH;        // USINT, 1 to 12
#day     := #myTimestamp.DAY;          // USINT, 1 to 31
#weekday := #myTimestamp.WEEKDAY;      // USINT, 1 (Sunday) to 7 (Saturday)
#hour    := #myTimestamp.HOUR;         // USINT, 0 to 23
#minute  := #myTimestamp.MINUTE;       // USINT, 0 to 59
#second  := #myTimestamp.SECOND;       // USINT, 0 to 59
#nano    := #myTimestamp.NANOSECOND;   // UDINT, 0 to 999,999,999

Writing the system time (used when the S7-1500 acts as a time master or after a power-cycle on a non-battery-backed CPU):


WR_SYS_T(#newTimestamp);              // DTL input
#status := WR_SYS_T(#newTimestamp);   // Returns WORD, 0 = success

For applications that compute the next DST transition in code (for example, to flag a shift rollover an hour early), TIA Portal provides the DST function in the "Date and time" extended instructions library, which returns the active DST flag for a given DTL timestamp. On the S7-1500, the CPU itself maintains the time zone and DST setting in its properties under "Time of day." The CPU clock is automatically synchronized if the controller participates in an NTP client/server configuration via the PROFINET interface.

For S7-1200 with firmware V4.0 or later, time zones are configurable in the device configuration under "Time of day" with a base UTC offset and DST rules. The S7-1200 supports up to two custom DST rules, allowing the project to encode the U.S. post-2007 rule and, if desired, a fallback rule for equipment that may move between jurisdictions.

Allen-Bradley ControlLogix Time Synchronization

ControlLogix and CompactLogix controllers do not have a separate DST state bit. The controller stores wall-clock time as the number of nanoseconds since January 1, 1970, in the WallClockTime attribute of the CIP (Common Industrial Protocol) time object. DST handling is a presentation concern: the controller's Controller Properties > Date/Time dialog includes a time zone offset and an "Observe daylight saving time" checkbox. The GSV (Get System Value) and SSV (Set System Value) instructions access the time object.

Reading the wall-clock time on ControlLogix (ladder logic):


GSV
   Class Name     : CIP
   Instance Name  : Time
   Attribute Name : LocalTimeAdjustment
   Dest           : TimeAdj_DINT[0]      // seconds offset from UTC

GSV
   Class Name     : CIP
   Instance Name  : Time
   Attribute Name : WallClockTime
   Dest           : WallClock_DINT[0]    // nanoseconds since 1970-01-01

Setting the wall-clock time (typically executed once at startup by an NTP-style master or a programming terminal):


SSV
   Class Name     : CIP
   Instance Name  : Time
   Attribute Name : WallClockTime
   Source         : WallClock_DINT[0]

The LocalTimeAdjustment attribute encodes the time zone offset and the active DST flag. Studio 5000 Logix Designer v21 or later automatically applies the post-2007 U.S. rule when the "Observe daylight saving time" checkbox is enabled. Projects created with RSLogix 5000 v17 or earlier that were migrated without a firmware update on the 1756 module continued to use the pre-2007 rule. The 1756-EN2T, 1756-EN3TR, and 1756-EN4TR modules with firmware v5.008 or later include the updated rule.

Allen-Bradley Module Firmware for Post-2007 DST
Module Catalog Number Minimum Firmware Notes
ControlLogix Ethernet Bridge 1756-ENBT v6.001 or later No NTP support; relies on controller
ControlLogix EtherNet/IP Bridge 1756-EN2T v5.008 or later NTP client support added
ControlLogix EtherNet/IP Bridge 1756-EN2TR v5.008 or later DLR ring support
ControlLogix EtherNet/IP Bridge 1756-EN3TR v5.008 or later DLR ring support
ControlLogix EtherNet/IP Module 1756-EN4TR v3.001 or later 2-port DLR + 2-port non-DLR
CompactLogix 5380 5069-L320ERM, 5069-L340ERM v33.011 or later NTP and PTP support
CompactLogix 5480 5480-L515 v32.012 or later NTP client support

CompactLogix 5380 and 5480 controllers include native NTP client support on the embedded Ethernet port. Configure NTP via the controller's Ethernet port properties in Studio 5000 under "Time Sync." Up to four NTP servers can be specified with poll intervals in seconds. The controller uses the configured time zone offset for display but stores time in UTC internally, which means a NTP source in UTC keeps the system correct even if the local time zone is changed.

Legacy Platforms: S7-200, SLC 500, and PLC-5

The S7-200 (STEP 7 Micro/WIN), SLC 500 (RSLogix 500), and PLC-5 (RSLogix 5) families do not implement automatic DST. Engineers writing shift rollover or alarm timestamping routines typically encoded the DST transition dates as constants or used a hard-coded table of rule dates.

For S7-200, the system clock is read and written through the READ_RTC and SET_RTC subroutines (subroutine numbers vary by CPU generation):


// S7-200 CPU 224, 226, 226XM
// READ_RTC reads year, month, day, hour, minute, second into VB area
CALL   SBR 6
       VB100  // year (0-99)
       VB101  // month (1-12)
       VB102  // day (1-31)
       VB103  // hour (0-23)
       VB104  // minute (0-59)
       VB105  // second (0-59)
       VB106  // 0 = Sunday, 6 = Saturday

The S7-200 does not perform DST math. The controller's CPU clock simply tracks UTC or local time as configured. Sites that implemented DST as program logic (checking the date against April 1 or October 31 in a subroutine) needed a code change to update the rule. The change could be implemented as a project constant: the engineer replaced the constant value for the spring-forward day and the fall-back day, recompiled, and downloaded the new program.

For SLC 500, the status file holds the date and time at locations S:37 through S:42 (year, month, day, hour, minute, second). DST handling is also purely program logic. A typical routine that calculates the first Sunday in April for the spring-forward date uses a modulo 7 operation against a known reference date. Updating for the post-2007 rule requires changing the reference date from "March 31 + weekday offset" to "March 7 + weekday offset" and recalculating the offset to the next Sunday.

For PLC-5, the time and date reside in the status file at S:30 (year), S:31 (month), S:32 (day), S:33 (hour), S:34 (minute), and S:35 (second). The PLC-5 processor date is set via the programming software or a peer message from a master controller. PLC-5 systems rarely handled DST directly in ladder logic; instead, the supervisory controller (PLC-5/250 or PLC-5/40 with a DH+ link to a MicroLogix) broadcast a corrected time to peer processors at scheduled intervals.

Field tip: Before 2007, many plants used a Modbus time master (a Windows PC running a Modbus/TCP slave that broadcast the system time) to push time to legacy controllers. The Energy Policy Act change required a similar patch on the PC side because the time master itself had to be aware of the new DST dates. Sites that ran an unmodified Windows XP SP1 system with auto-updates disabled typically required a manual registry edit to update the DST rules in tzdata.dll and a reboot, since KB928388 was the official Microsoft patch that updated the dynamic DST table.

NTP Time Server Architecture for Plant Networks

For multi-vendor plants with mixed Siemens, Allen-Bradley, and Modicon controllers, the recommended long-term architecture places an NTP time server on the plant network that synchronizes controllers to a single wall-clock time. NTP provides UTC (Coordinated Universal Time); the controller or the HMI is responsible for converting UTC to local time and applying DST.

Plant NTP Time Sync Architecture Public NTP Source time.nist.gov (Stratum 1) Plant NTP Server Windows / Linux Stratum 2 (UTC mode) S7-1500 (NTP) PLC clock, UTC + offset ControlLogix (NTP) WallClockTime, UTC ns Modicon M340 (NTP) DRS / DTL register SCADA Server (NTP) WinCC / FactoryTalk View NTP (UDP 123) - UTC

An effective NTP topology uses a dedicated plant server (a Windows Server 2019/2022 machine, a Linux server running chrony or ntpd) that synchronizes upstream to a public Stratum 1 or 2 source such as time.nist.gov. The plant server then acts as a Stratum 2 or 3 source for controllers and HMIs. The plant server's local time zone and DST configuration is irrelevant to the NTP distribution; only the upstream synchronization matters. chronyc tracking on Linux reports the reference ID, stratum, system time offset in milliseconds, and last update age, which is the first place to look if a downstream controller reports a one-hour error.

For S7-1500 controllers, configure NTP in the device properties under "Time of day" and enable "Synchronize with NTP server." Specify the plant server's IP address and the update interval (default 10 seconds, range 1 to 600 seconds). The CPU uses the configured time zone offset for display but stores time in UTC internally.

For ControlLogix, the 1756-EN2T module with firmware v5.008 or later includes an NTP client. Configure the NTP server address in the module's properties under "Time Sync." The 1756-EN2T supports up to two NTP servers with a poll interval of 1 to 65535 seconds.

For Modicon M340 and M580 controllers with Unity Pro / EcoStruxure Control Expert, NTP is configured on the Ethernet port under "IP Parameters > Time" with up to three NTP server addresses and a poll interval of 1 to 120 seconds.

Dual-Routine Migration Strategy

For sites that need to support both the pre-2007 and post-2007 rules during the transition, or that need to handle equipment that may have been misconfigured, a dual-routine approach keeps both calculations in the program and selects between them with a configuration bit. The bit itself can be hard-coded, held in a retain tag, or written from an HMI login for sites that may revert.

Structured Text example for an S7-1500 (TIA Portal V16) that selects the DST rule based on a project configuration:


FUNCTION_BLOCK "DST_Rule_US"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

VAR
    b_Post2007Rule : BOOL;     // TRUE = use post-2007 rule
    b_DSTActive    : BOOL;     // Output: DST currently active
    dt_CurrentTime : DTL;      // Input: current local time
END_VAR

VAR_TEMP
    i_Year         : INT;
    i_Month        : INT;
    i_Day          : INT;
    i_Weekday      : INT;
    i_Sunday       : INT;     // day of month for the relevant Sunday
    d_Hour         : INT;
END_VAR

BEGIN
    // Read system time
    #dt_CurrentTime := RD_SYS_T();
    #i_Year    := #dt_CurrentTime.YEAR;
    #i_Month   := #dt_CurrentTime.MONTH;
    #i_Day     := #dt_CurrentTime.DAY;
    #i_Weekday := #dt_CurrentTime.WEEKDAY;
    #d_Hour    := #dt_CurrentTime.HOUR;

    // Default: not in DST
    #b_DSTActive := FALSE;

    IF #b_Post2007Rule THEN
        // Post-2007 rule: 2nd Sunday of March to 1st Sunday of November
        IF #i_Month > 3 AND #i_Month < 11 THEN
            // Apr..Oct - always DST
            #b_DSTActive := TRUE;
        ELSIF #i_Month = 3 THEN
            // 2nd Sunday of March = day 8..14
            #i_Sunday := 8 + ((1 - #i_Weekday + 7) MOD 7);
            IF #i_Day > #i_Sunday THEN
                #b_DSTActive := TRUE;
            ELSIF #i_Day = #i_Sunday AND #d_Hour >= 2 THEN
                #b_DSTActive := TRUE;
            END_IF;
        ELSIF #i_Month = 11 THEN
            // 1st Sunday of November = day 1..7
            #i_Sunday := ((#i_Weekday + 6) MOD 7) + 1;
            IF #i_Day < #i_Sunday THEN
                #b_DSTActive := TRUE;   // before first Sunday in Nov
            ELSIF #i_Day = #i_Sunday AND #d_Hour < 2 THEN
                #b_DSTActive := TRUE;
            END_IF;
        END_IF;
    ELSE
        // Pre-2007 rule: 1st Sunday of April to last Sunday of October
        IF #i_Month > 4 AND #i_Month < 10 THEN
            #b_DSTActive := TRUE;
        ELSIF #i_Month = 4 THEN
            // 1st Sunday of April = day 1..7
            #i_Sunday := ((#i_Weekday + 6) MOD 7) + 1;
            IF #i_Day > #i_Sunday THEN
                #b_DSTActive := TRUE;
            ELSIF #i_Day = #i_Sunday AND #d_Hour >= 2 THEN
                #b_DSTActive := TRUE;
            END_IF;
        ELSIF #i_Month = 10 THEN
            // Last Sunday of October = day 25..31
            #i_Sunday := 25 + ((#i_Weekday + 6) MOD 7);
            IF #i_Day < #i_Sunday THEN
                #b_DSTActive := TRUE;
            ELSIF #i_Day = #i_Sunday AND #d_Hour < 2 THEN
                #b_DSTActive := TRUE;
            END_IF;
        END_IF;
    END_IF;
END_FUNCTION_BLOCK

The function block returns a boolean b_DSTActive that the calling routine can use to set the time zone offset on a connected HMI, write to a status word, or trigger a shift rollover event. The b_Post2007Rule input is a project parameter that the engineer can toggle to revert to the pre-2007 rule if equipment is moved to a legacy site that requires it. Add a second instance of the function block for the EU DST rule when shipping machines to a European customer, since the EU transition is the last Sunday of March and last Sunday of October, not the U.S. dates.

Warning: The sample above uses simplified arithmetic for the nth-occurrence-of-weekday calculation. Always verify against a known calendar. The North Carolina State University "Calendar date to Julian day" formula or the Tomohiko Sakamoto algorithm provide correct weekday calculations for any year in the 1900-2099 range. Edge cases include leap years (the 2nd Sunday of March never falls on March 8 in a leap year, but the formula still holds), century boundaries (the algorithm does not handle them), and the 2007 transition year itself, when the rule was new and a number of sites ran with a hybrid configuration through the year.

Verification and Commissioning

After the migration, perform the following verification sequence to confirm the controller's DST logic is correct:

  1. Read the controller clock and timezone. On S7-1500, use the online > "Online & diagnostics" > "Time of day" panel. Confirm the UTC offset matches the site (e.g., -5 for EST, -6 for CST, -7 for MST, -8 for PST). Confirm the "Daylight saving time" rule is "US (post 2007)" or equivalent.
  2. Force the controller to a date just before the next DST transition. Use the simulator or a temporary time write to set the controller to March 11, 2007 at 01:59:00 (spring-forward). Step the clock forward minute by minute and confirm the time advances from 01:59 to 03:00 (skipping 02:00) at the 02:00 transition. For fall-back, set the clock to November 4, 2007 at 00:59:00 and confirm 01:59:59 is followed by 01:00:00.
  3. Verify HMI and SCADA display. Force a known DST state and confirm the HMI shows the expected local time and DST indicator. WinCC, FactoryTalk View, and Wonderware InTouch each have a tag that reflects DST status; confirm it matches the controller's output. A discrepancy here typically indicates the HMI tag is wired to a UTC register rather than a local time register.
  4. Confirm historian timestamps. Pull a one-hour report around the transition and verify event order and that timestamps are continuous (no duplicate 01:00 to 02:00 hour in fall, or no gap in spring). The historian should also have a flag or column indicating DST; if not, the local time displays are correct but the underlying UTC timestamps were never properly converted.
  5. Document the new rule and configuration bit in the project header. Engineering teams rotating in and out of the site need to know which rule is active and why. Note the firmware version, the catalog number, and the date the firmware was applied.
Troubleshooting Matrix: DST Symptoms and Resolutions
Symptom Likely Cause Resolution
Plant clock correct on PC, off by one hour on PLC at 02:00 local PLC firmware predates post-2007 patch Update CPU firmware to version listed in CPU table
PLC clock correct, HMI shows UTC instead of local HMI time tag wired to UTC register, not local time Rewire HMI tag to controller's local time register
All controllers on plant network off by NTP offset NTP server is syncing to public source that has DST enabled Confirm NTP server is running in UTC; check chronyc tracking on Linux
SCADA reports shifted by 1 hour after a DST transition SCADA server time zone not set; PC's auto-DST turned off Set SCADA server OS to "Automatically adjust clock for DST"; confirm tzdata updated
PLC date read as 2000-01-01 after power cycle Battery dead; supercapacitor exhausted Replace battery (e.g., 6ES7971-1AA00-0AA0 for S7-400); re-set time
Shift rollover happens at wrong time twice a year Program logic hard-coded pre-2007 rule dates Replace with DST_Rule_US function block; set b_Post2007Rule := TRUE
HMI DST indicator stuck on/off Status bit wired to wrong tag; not updated on transition Add b_DSTActive from DST routine to HMI tag list with refresh
Some machines one hour ahead, some one hour behind Machines shipped from different jurisdictions; pre-2007 vs post-2007 mix Audit all controllers; standardize on firmware that supports post-2007 rule

For sites with multiple time zones on a single plant network (such as a pipeline operator connecting facilities in Mountain and Pacific time), use separate NTP servers in each location, or use a single NTP server in UTC and let each controller apply its own time zone offset. Mixing local-time NTP across a multi-time-zone network guarantees a one-hour discrepancy twice a year and creates ambiguity in shift handover reports that span the time zone boundary.

For sites that have not yet applied the post-2007 firmware and need a temporary fix, consider deploying a dedicated Windows or Linux NTP server on the plant network in UTC mode and configuring the legacy controllers to point at it. The legacy controller's local time logic is bypassed because the controller receives UTC, applies the configured time zone offset, and DST becomes a presentation layer. This is a holding pattern: the underlying firmware should be updated to the post-2007 rule, but the NTP server avoids a one-hour production error during the gap.

FAQ

When did the U.S. Daylight Saving Time rule change, and what are the new dates?

The Energy Policy Act of 2005 changed DST to start on the second Sunday in March and end on the first Sunday in November, with the time change at 02:00 local. The change took effect in March 2007. Prior to that, DST began on the first Sunday in April and ended on the last Sunday in October.

Does my S7-300/400 PLC need a firmware update to handle the new DST rule?

Most S7-300 CPUs with firmware V2.6.7 or later and S7-400 CPUs with firmware V5.3.5 (or V4.2.6 for CPU 417) or later include the updated rule. STEP 7 V5.4 SP5 is required to load the updated hardware catalog. Update firmware using the SIMATIC Automation Tool or the online firmware update dialog in HW Config.

How do I make my ControlLogix controller handle the new DST rule?

Enable "Observe daylight saving time" in the controller properties in Studio 5000 Logix Designer v21 or later. For controllers with older RSLogix 5000 projects, update the 1756-EN2T or 1756-EN3TR module firmware to v5.008 or later. CompactLogix 5380 and 5480 controllers handle DST automatically when the controller's time zone is set and the project was built with Logix Designer v33 or later.

What happens if a controller's RTC battery is dead during a DST transition?

The controller will typically default to a base date (often 2000-01-01 or 1990-01-01) and stop applying DST logic until the time is set. Replace the battery (e.g., 6ES7971-1AA00-0AA0 for S7-400) and reload the time from the NTP server. After the battery is replaced, the controller reverts to UTC and applies the time zone and DST rule from its project configuration.

Can a single plant network with controllers in multiple U.S. time zones share an NTP server?

Yes, provided the NTP server distributes UTC and each controller applies its own time zone offset. Configuring the NTP server to distribute local time forces all controllers into the same time zone and breaks the one-hour separation between sites. Use a Linux or Windows server in UTC mode and let each controller's project configuration handle the local time zone and DST.

How do I verify the DST logic on a deployed PLC without waiting for the next transition?

Use the programming software's simulator to set the controller clock to a known date near the transition (e.g., March 11, 2007 at 01:59:00 for spring-forward). Step the clock forward and confirm the controller jumps from 01:59:59 to 03:00:00 (not 02:00:00). For fall-back, set the clock to November 4, 2007 at 00:59:00 and confirm 01:59:59 is followed by 01:00:00. Revert the clock to network time after the test.

Back to blog