2025-12-09 15:50:16 +04:00

80 lines
2.6 KiB
Markdown

# Splitter Detection Logic in IO.lsp
## Overview
The script decides whether to create a **single cable** or **two cables + splitter** based on the DESCA values in each pair.
## Decision Flow
### Step 1: Check if both DESCA values are filled
```
If val1 = "" OR val2 = ""
→ Go to Case 2 (single value handling)
Else (both val1 and val2 have values)
→ Go to Case 1 (pair handling)
```
### Step 2: Case 1 - Both values filled (Pair handling)
#### For FIO/FIOH blocks (special handling at lines 318-427):
**SPLITTER CREATED** if:
- Both values contain "TPE" AND they're different names (e.g., TPE2 vs TPE3)
- One contains "RCV" and other contains "SND" (or vice versa)
**SINGLE CABLE** if:
- None of the splitter conditions above match → default to single cable
#### For all other blocks (VFD, SIO, etc. at lines 432-445):
**SINGLE CABLE** if values match any of these patterns:
- Both contain "SEL"
- Both contain "DPM"
- Both contain "VFD" AND both contain "STO"
- One contains "_PB" and other contains "_PB_LT" (pushbutton + light)
- Both contain "BCN" (beacon stack)
- Both contain "EPC"
- Both contain "SSP"
**TWO CABLES + SPLITTER** if:
- None of the single-cable conditions match → default to splitter
## Summary Table
| DESCA1 Pattern | DESCA2 Pattern | Result |
|----------------|----------------|--------|
| `*_SEL*` | `*_SEL*` | ✅ Single cable |
| `*_DPM*` | `*_DPM*` | ✅ Single cable |
| `*VFD*STO*` | `*VFD*STO*` | ✅ Single cable |
| `*_PB*` | `*_PB_LT*` | ✅ Single cable |
| `*_PB_LT*` | `*_PB*` | ✅ Single cable |
| `*BCN*` | `*BCN*` | ✅ Single cable |
| `*EPC*` | `*EPC*` | ✅ Single cable |
| `*SSP*` | `*SSP*` | ✅ Single cable |
| `*TPE*` (different) | `*TPE*` (different) | ⚠️ **SPLITTER** (FIO only) |
| `*RCV*` | `*SND*` | ⚠️ **SPLITTER** (FIO only) |
| `*SND*` | `*RCV*` | ⚠️ **SPLITTER** (FIO only) |
| Anything else | Anything else | ⚠️ **SPLITTER** |
## Key Code Locations
- **Lines 318-332**: FIO/FIOH splitter conditions (TPE pairs, RCV/SND pairs)
- **Lines 432-445**: All other blocks - single cable conditions
- **Lines 505-519**: Default ELSE branch - creates splitter for unmatched pairs
## Example Scenarios
1. **Beacon stack** (`BYDC_6_BCN1_A` + `BYDC_6_BCN1_H`):
- Both contain "BCN" → ✅ Single cable (line 443)
2. **Pushbutton + light** (`*_PB` + `*_PB_LT`):
- Pattern match → ✅ Single cable (lines 440-441)
3. **TPE pairs** (`*TPE1` + `*TPE2`):
- For FIO blocks → ⚠️ Splitter (lines 322-324)
- For other blocks → ⚠️ Splitter (default)
4. **Two different devices** (e.g., `*DEVICE1` + `*DEVICE2`):
- No pattern match → ⚠️ Splitter (default)