Initial commit: Home automation docs and CODESYS project

- Reorganized project: codesys/, docs/codesys|redesign|integration|reference/, scripts/
- CODESYS project and exports in codesys/
- Documentation index in docs/README.md
- Redesign and light naming configuration
- Water boiler control and safety design

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-07 21:52:46 +02:00
commit bf7bd56fe7
32 changed files with 73698 additions and 0 deletions

View File

@@ -0,0 +1,260 @@
# CODESYS PLCopen XML Analysis
## Overview
This document contains detailed information extracted from the PLCopen XML export (`Home_Automation.xml`), which provides a more structured view of the project compared to the CODESYS export format.
## Project Information
- **Format**: PLCopen XML (TC6 0200)
- **CODESYS Version**: V3.5 SP21
- **Export Date**: 2026-01-27T14:48:52
- **Project Name**: Home_Automation.project
## Task Configuration
### MainTask
- **Type**: Cyclic
- **Interval**: t#4ms (4 milliseconds)
- **Priority**: 1
- **Watchdog**: Disabled
- **Program**: PLC_PRG
### EtherCAT_Task
- **Type**: Cyclic
- **Interval**: t#4ms (4 milliseconds)
- **Priority**: 1
- **Watchdog**: Disabled
- **Purpose**: EtherCAT communication and network variable updates
## Data Structures
### struct_switches
```iec
TYPE struct_switches :
STRUCT
all_off: BOOL; // Command to turn all lights off
all_on: BOOL; // Command to turn all lights on
sw_1: BOOL; // Switch 1 state
sw_2: BOOL; // Switch 2 state
sw_3: BOOL; // Switch 3 state
sw_4: BOOL; // Switch 4 state
sw_5: BOOL; // Switch 5 state
sw_6: BOOL; // Switch 6 state
END_STRUCT
END_TYPE
```
### struct_lights
```iec
TYPE struct_lights:
STRUCT
l_1: BOOL; // Light 1 control output
l_2: BOOL; // Light 2 control output
l_3: BOOL; // Light 3 control output
l_4: BOOL; // Light 4 control output
l_5: BOOL; // Light 5 control output
l_6: BOOL; // Light 6 control output
END_STRUCT
END_TYPE
```
## Function Block: fb_toogleButton
### Interface
**Inputs**:
- `Input: BOOL` - Input signal (switch state from network)
**Outputs**:
- `Output: BOOL` - Output signal (light control)
**Internal Variables**:
- `Switch: BOOL` - Internal switch state
- `Light: BOOL` - Internal light state
- `Flag1: BOOL` - Internal flag 1
- `Flag2: BOOL` - Internal flag 2
- `RT: R_TRIG` - Rising edge trigger
- `Pulse: TP` - Pulse timer
- `CTU_0: CTU` - Counter up 0
- `CTD_0: CTD` - Counter down 0
- `CTU_1: CTU` - Counter up 1
- `CTU_2: CTU` - Counter up 2
- `TOF_0: TOF` - Timer off delay 0
### Implementation (Ladder Diagram)
**Network 1: Input Debouncing**
- Input signal → TP (Pulse Timer) with PT = t#100ms
- TP output → TOF (Timer Off Delay) with PT = t#100ms
- TOF output → Switch (internal state)
- **Purpose**: Debounces input signal with 100ms pulse and 100ms off delay
**Network 2: Flag1 Logic**
- Switch AND (NOT Light) AND (NOT Flag2) → Flag1
- **Purpose**: Sets Flag1 when switch is on, light is off, and Flag2 is off
**Network 3: Flag2 Logic**
- Switch AND Light AND (NOT Flag1) → Flag2
- **Purpose**: Sets Flag2 when switch is on, light is on, and Flag1 is off
**Network 4: Light Toggle Logic**
- Flag1 AND (NOT Flag2) → Light (toggle)
- **Purpose**: Toggles light state based on flag conditions
**Network 5: Output Assignment**
- Light → Output
- **Purpose**: Direct output assignment
### Timing Characteristics
- **Input Debounce**: 100ms pulse timer (TP)
- **Output Delay**: 100ms off delay (TOF)
- **Total Response Time**: ~200ms (debounce + delay)
## Function Block: fb_switch
### Interface
**Inputs**:
- `switches: struct_switches` - Switch states from Node-RED
**Outputs**:
- `lights: struct_lights` - Light control outputs to Node-RED
**Internal Variables**:
- `all_off: fb_toogleButton` - Toggle button for "all off"
- `all_on: fb_toogleButton` - Toggle button for "all on"
- `sw_1: fb_toogleButton` - Toggle button for switch 1
- `sw_2: fb_toogleButton` - Toggle button for switch 2
- `sw_3: fb_toogleButton` - Toggle button for switch 3
- `sw_4: fb_toogleButton` - Toggle button for switch 4
- `sw_5: fb_toogleButton` - Toggle button for switch 5
- `sw_6: fb_toogleButton` - Toggle button for switch 6
### Implementation (Continuous Function Chart - CFC)
**Logic Flow for Each Light (l_1 through l_6)**:
1. **All Off Logic**:
```
all_off.Output AND lights.l_X → AND gate → (forces light off)
```
2. **All On Logic**:
```
all_on.Output AND (NOT lights.l_X) → AND gate → (forces light on)
```
3. **Individual Switch Logic**:
```
switches.sw_X → sw_X.Input → sw_X.Output → lights.l_X
```
4. **Combined Logic (OR)**:
```
(all_on logic) OR (sw_X.Output) OR (other sources) → lights.l_X
```
**Execution Order** (example for l_1):
1. Execution Order 1: AND gate for all_on logic
2. Execution Order 2: sw_2 toggle button
3. Execution Order 3: OR gate combining sources
4. Execution Order 4: AND gate for all_off logic
5. Execution Order 5: Output assignment to lights.l_1
6. Execution Order 30: sw_1 toggle button (individual control)
**Key Logic Patterns**:
- **All Off**: Uses AND gate with `all_off.Output` and current light state
- **All On**: Uses AND gate with `all_on.Output` and inverted light state
- **Individual Control**: Each switch has its own toggle button instance
- **Priority**: All_off can override individual controls, all_on combines with individual
## Program: Lights
The "Lights" program contains instances of `fb_switch` for all 15 rooms:
1. `masterBedroom: fb_switch`
2. `masterBathroom: fb_switch`
3. `bedroom_1: fb_switch`
4. `bedroom_2: fb_switch`
5. `bathroom: fb_switch`
6. `guest_wc: fb_switch`
7. `kitchen: fb_switch`
8. `pantry: fb_switch`
9. `livingRoom: fb_switch`
10. `diningRoom: fb_switch`
11. `veranda: fb_switch`
12. `entrance: fb_switch`
13. `front: fb_switch`
14. `back: fb_switch`
15. `side: fb_switch`
16. `hallway: fb_switch`
## Network Variables
### NVL_Sender (Sent to Node-RED)
All 15 room light structures:
- `l_masterBedroom` through `l_outBack` (struct_lights)
### NVL_Receiver (Received from Node-RED)
All 15 room switch structures:
- `masterBedroom` through `outBack` (struct_switches)
## Control Logic Summary
### Individual Light Control
1. **Switch Input** → `switches.sw_X` (from Node-RED)
2. **Toggle Processing** → `fb_toogleButton` instance
- 100ms debounce (TP)
- 100ms delay (TOF)
- Toggle logic with flags
3. **Output** → `lights.l_X` (to Node-RED)
### Global Commands
**All Off**:
- `switches.all_off` → `all_off` toggle button
- Output ANDed with current light state
- Forces all lights off
**All On**:
- `switches.all_on` → `all_on` toggle button
- Output ANDed with inverted light state
- Forces all lights on
- Combined with individual switches via OR logic
### Timing Characteristics
- **Task Cycle**: 4ms (MainTask and EtherCAT_Task)
- **Input Debounce**: 100ms
- **Output Delay**: 100ms
- **Network Variable Update**: 50ms (from .export analysis)
- **Total Response**: ~200ms (debounce + delay)
## Implementation Language
- **fb_toogleButton**: Ladder Diagram (LD)
- **fb_switch**: Continuous Function Chart (CFC)
- **Lights Program**: Continuous Function Chart (CFC)
## Key Insights
1. **Debouncing**: All switch inputs are debounced with 100ms pulse timer
2. **Toggle Logic**: Uses flag-based state machine for reliable toggling
3. **Priority System**: All_off has priority over individual controls
4. **Combined Control**: All_on works in conjunction with individual switches
5. **Fast Response**: 4ms task cycle ensures responsive control
6. **Structured Design**: Each room is independent with its own fb_switch instance
---
**Analysis Date**: January 27, 2026
**Source File**: `Home_Automation.xml`
**Format**: PLCopen XML (TC6 0200)