78 lines
2.6 KiB
Markdown
78 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)
|
|
|
|
|