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

132 lines
3.8 KiB
Markdown
Raw Normal View History

# 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.