Datum och tid
Temporal logik
Bemästra din PLC:s klocka. Från exakt händelsetidsstämpling till komplexa tidsberäkningar och formatkonverteringar, kontrollera varje millisekund.
Varför hantera tid i en PLC?
Tidshantering är avgörande för industriell automation. Det möjliggör exakt loggning av produktionshändelser, utlösning av schemalagda underhållsuppgifter, beräkning av maskincyklustider och synkronisering av distribuerade system via NTP-protokoll.
Moderna Siemens PLC:er erbjuder avancerade datatyper som DTL (Date and Time Long) vilket ger direkt åtkomst till enskilda komponenter (år, månad, dag, timme) utan komplex bitmanipulation, vilket förenklar programmeringen avsevärt jämfört med äldre DT-format.
Läsa tid
Åtkomst till system- och lokalklockor
T_CONV — Extraktion av systemtid
T_CONVVad den gör
Extraherar specifika komponenter från ett datum/tidsvärde eller konverterar mellan format. Det är nödvändigt för att få läsbara timmar/minuter från en rå tidsstämpel.
När den ska användas
När du behöver visa endast tiden på ett HMI från en komplett Date_And_Time-tagg.
Proffstips
Använd T_CONV för att konvertera en TOD (Time_Of_Day) till en String för enkel loggning.
Se till att indata- och utdatatyperna är kompatibla för att undvika spillfel.
I SCL hanteras denna instruktion ofta implicit genom enkla tilldelningar.
RD_SYS_T — Läs systemtid
RD_SYS_TVad den gör
Läser den aktuella systemtiden för CPU (UTC). Till skillnad från RD_LOC_T inkluderar den inte sommartid eller tidszonsförskjutningar.
När den ska användas
Idealisk för intern loggning där en kontinuerlig tidsreferens utan hopp krävs (undviker problem vid ändringar av sommartid).
Proffstips
Använd alltid UTC för databaslagring för att säkerställa global konsekvens.
RET_VAL-utgången ger statusinformation (t.ex. om klockan är synkroniserad).
Kombinera med RD_LOC_T om du behöver visa både 'teknisk' och 'mänsklig' tid.
Aritmetik
Beräkningar på varaktigheter och tidsstämplar
T_ADD — Addera tid
T_ADDVad den gör
Adderar en varaktighet (Time eller LTime) till en specifik datum/tidpunkt. Den hanterar korrekt spill av minuter, timmar och dagar.
När den ska användas
Beräkna en utgångstid eller en schemalagd återstartspunkt (t.ex. aktuell tid + 24 timmar).
Proffstips
Mycket användbart för att implementera anpassade watchdogs med dynamiska varaktigheter.
Använd LTime-typer för nanosekundprecision på S7-1500 CPU:er.
Om resultatet överskrider det maximala datumet (år 2262), sätter CPU:n en felstatus.
T_DIFF — Tidsskillnad
T_DIFFVad den gör
Beräknar skillnaden mellan två tidsstämplar och returnerar resultatet som en varaktighet (Time eller LTime).
När den ska användas
Mäta den exakta varaktigheten av ett processteg eller beräkna drifttiden för en maskin.
Proffstips
Perfekt för OEE-beräkningar (Overall Equipment Effectiveness).
Att subtrahera ett större datum från ett mindre returnerar ett negativt Time-värde.
På S7-1200/1500, använd DTL-taggar för enklare åtkomst till skillnadskomponenterna.
Konvertering
Formatändringar och String-hantering
T_CONV — DT till DTL konvertering
T_CONVVad den gör
Konverterar äldre DATE_AND_TIME (8 byte) till det moderna DTL-formatet eller vice versa.
När den ska användas
Vid gränssnitt mot äldre kod eller kommunikationsblock med ny S7-1500-optimerad logik.
Proffstips
Föredra DTL för alla nya projekt för att undvika BCD-komplexitet (Binary Coded Decimal).
Konvertering till DTL gör att du kan skriva 'MyTag.MONTH' direkt i din kod.
Var försiktig med millisekundprecision som kan trunkeras i vissa format.
DT_TO_STRING — Serialisering av tid
DT_TO_STRVad den gör
Konverterar ett datum/tidsvärde till ett läsbart String-format. STRING_TO_DT gör det omvända.
När den ska användas
Skicka tidsstämplar till en CSV-fil på ett minneskort eller kommunicera med ett webb-API.
Proffstips
Utdatasträngen följer ISO 8601-formatet (YYYY-MM-DD-HH:MM:SS.ms).
Använd STRING_TO_DT för att tolka datum som tas emot från en extern SQL-databas.
Observera att String-operationer är mer CPU-intensiva; använd dem sparsamt i snabba loopar.
DATE_AND_TIME mot DTL
Välja rätt temporal struktur
| Funktion | DATE_AND_TIME (Äldre) | DTL (Modern) |
|---|---|---|
| Storlek | 8 byte | 12 byte |
| Kodning | BCD (Komplex att läsa) | Heltal (Direkt läsbara) |
| Komponentåtkomst | Kräver bitmaskering | Strukturell (Tag.Month) |
| Omfång | 1990 till 2089 | 1970 till 2262 |
| S7-1200/1500-stöd | Endast kompatibilitet | Inbyggd & Rekommenderad |
| Precision | 10 ms | 1 nanosekund |
Vanliga frågor
Vad är skillnaden mellan systemtid och lokaltid?
Systemtid (RD_SYS_T) är alltid UTC, vilket ger en stabil referens. Lokaltid (RD_LOC_T) anpassas efter din specifika tidszon och reglerna för sommartid (DST) som konfigurerats i CPU-egenskaperna.
Hur synkroniserar man PLC-klockan med en server?
Aktivera NTP (Network Time Protocol) i CPU:ns hårdvarukonfiguration. Ange IP-adressen till din tidsserver, så justerar PLC:n automatiskt sin interna klocka.
Varför visar min DATE_AND_TIME konstiga värden i Hex?
Äldre DT använder BCD-kodning. Ett värde på 25 i decimalform lagras som 16#25 i BCD. Använd alltid konverteringsinstruktioner eller DTL för att läsa värden korrekt.
Kan jag beräkna skillnaden mellan två DTL taggar direkt?
I SCL kan du helt enkelt använda '-'-operatorn mellan två DTL-taggar. TIA Portal anropar automatiskt T_DIFF-instruktionen åt dig.