s7-SCL-scripts/Times-scripts/FC_GetSetLocalTime_readme.md

132 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FC_GetSetLocalTime
**Version:** 1.1
**Language:** SCL (Structured Control Language) — Siemens TIA Portal
**Return Type:** `Int`
---
## Overview
`FC_GetSetLocalTime` is a reusable function block for Siemens PLCs that provides a unified interface to **read** the current local time or **write** (set) a new local date and time. It wraps the TIA Portal system instructions `RD_LOC_T` and `WR_LOC_T` into a single, easy-to-call function.
---
## Parameters
### Inputs
| Parameter | Type | Description |
|-----------|------|-------------|
| `xWrite` | `BOOL` | `FALSE` = Read current local time. `TRUE` = Write a new local time. |
| `dtLocal` | `DTL` | When **writing**: pass the desired new date/time here. When **reading**: this parameter receives the current date/time as output. |
> **Note:** `dtLocal` acts as both an input and output depending on the mode selected by `xWrite`.
### Outputs
| Parameter | Type | Description |
|-----------|------|-------------|
| `xDone` | `BOOL` | Set to `TRUE` when the operation completes without error. |
| `xError` | `BOOL` | Set to `TRUE` when the operation fails. |
| `wStatus` | `WORD` | Detailed status or error code returned by the system instruction (e.g., `16#0000` = no error). |
### Return Value
| Value | Meaning |
|-------|---------|
| `0` | Operation successful (OK) |
| `> 0` | Warning |
| `< 0` | Error |
---
## How It Works
The function uses a simple `IF/ELSE` branch controlled by the `xWrite` flag:
```
xWrite = FALSE → Calls RD_LOC_T → Reads current local time into dtLocal
xWrite = TRUE → Calls WR_LOC_T → Writes dtLocal value as new local time
```
In both cases:
- If the system instruction returns `ret = 0`, `xDone` is set to `TRUE`.
- If `ret ≠ 0`, `xError` is set to `TRUE` and `wStatus` holds the error code for diagnostics.
- The function itself returns `ret` as its integer return value.
---
## Usage Examples
### Read Current Local Time
```scl
RET_VAL := FC_GetSetLocalTime(
xWrite := FALSE,
dtLocal => CurrentTime // CurrentTime will be filled with the current date/time
);
```
### Write / Set a New Local Time
```scl
RET_VAL := FC_GetSetLocalTime(
xWrite := TRUE,
dtLocal := NewTime // NewTime contains the desired date/time to set
);
```
---
## Error Handling
After calling the function, always check the outputs before proceeding:
```scl
IF xDone THEN
// Operation was successful
ELSIF xError THEN
// Handle error — inspect wStatus for the specific error code
END_IF;
```
The `wStatus` word follows standard Siemens status code conventions. A value of `16#0000` indicates no error.
---
## Dependencies
This function relies on the following Siemens TIA Portal system instructions:
| Instruction | Purpose |
|-------------|---------|
| `RD_LOC_T` | Reads the current local date and time into a `DTL` variable |
| `WR_LOC_T` | Writes a new local date and time from a `DTL` variable |
Both instructions are available on S7-1200 and S7-1500 series PLCs.
---
## Data Type Reference — DTL
`DTL` (Date and Time Long) is a Siemens-specific data type that stores date and time with nanosecond precision.
| Field | Type | Description |
|-------|------|-------------|
| `YEAR` | `UINT` | Year (e.g., 2024) |
| `MONTH` | `USINT` | Month (112) |
| `DAY` | `USINT` | Day (131) |
| `WEEKDAY` | `USINT` | Day of week (1=Sunday … 7=Saturday) |
| `HOUR` | `USINT` | Hour (023) |
| `MINUTE` | `USINT` | Minute (059) |
| `SECOND` | `USINT` | Second (059) |
| `NANOSECOND` | `UDINT` | Nanoseconds (0999,999,999) |
---
## Notes
- The function resets `xDone`, `xError`, and `wStatus` at the **start of every call**, so outputs always reflect the most recent execution.
- Only one operation (read or write) is performed per function call.
- This function does **not** handle time zone conversion — it works with the local time as configured on the PLC.