Overview: Disabling I/O Scanning on the TI555-1106
The Siemens TI555-1106 CPU, part of the legacy SIMATIC TI500 family, exposes an architectural detail that APT (Advanced Programming Technology) programmers often need to exploit during commissioning: the input process image X (discrete) and WX (analog word) are not physical bus locations, they are memory-resident areas inside the CPU. The CPU refreshes these memory areas from input modules during the deterministic I/O scan. When the matching physical modules are absent, the memory retains whatever value user logic last wrote to it.
This technique is most commonly required when an external simulator — typically an Allen-Bradley ControlLogix or CompactLogix, or a Red Lion DA30D Data Station Plus acting as a protocol bridge — writes simulated process values to the TI555 memory map. The engineer wants those simulated values to appear at symbolic input tags X1, WX10, etc., without the I/O scanner overwriting them every cycle, and without having to rewire the production program.
The reference below walks through the entire procedure: validating that no physical input modules occupy the slots of interest, isolating simulation logic inside a dedicated APT UNIT, configuring MATH blocks to copy symbolic memory tags to the now-writable X/WX addresses, sidestepping the APT compiler read-only restriction with the Y/X mnemonic trick, and verifying the result end-to-end through the DA30D bridge.
Prerequisites
- CPU: Siemens TI555-1106 installed in a TI500-series base (4-, 7-, or 14-slot) with input modules removed from the slots whose memory will be written by simulation logic.
- Software: APT version matched to the CPU firmware revision, installed on a Windows host (XP, 7, or 10 with appropriate compatibility flags) with a serial or Ethernet connection to the TI555.
- Project file: An existing APT project (.pc or project equivalent) with at least one previously generated UNIT, or a fresh project skeleton ready for new UNITs.
-
Symbol table: Defined symbolic tags for the simulated discrete inputs (e.g.
DI_PUMP_RUN) and analog inputs (e.g.AI_TANK_LVL). -
External data source: A Red Lion DA30D Data Station Plus, an Allen-Bradley PLC, or any Modbus/TCP master capable of writing to TI555
V,V.,C,X,Y,WX, orWYmemory areas. Crimson 3 configuration software is required for DA30D setup. - Hardware tools: Insulated extraction tool for I/O modules, ESD wrist strap, LOTO lock set, and the original module layout drawing.
TI555-1106 Memory Map Reference
The TI555 CPU exposes the following memory areas to APT programs. Each area is a contiguous block of 16-bit words inside the CPU; understanding the size and access semantics is essential before manipulating any area.
| Mnemonic | Type | Width | Default Range | Read/Write from Logic | Updated by I/O Scan |
|---|---|---|---|---|---|
X |
Discrete inputs | 1 bit | X1 – X512 (32 words) | Read-only by convention | Yes, if cards present |
Y |
Discrete outputs | 1 bit | Y1 – Y512 (32 words) | Read/Write | Yes, if cards present |
WX |
Analog (word) inputs | 16 bits signed | WX1 – WX256 | Read-only by convention | Yes, if cards present |
WY |
Analog (word) outputs | 16 bits signed | WY1 – WY256 | Read/Write | Yes, if cards present |
C |
Control memory | 16 bits | Configurable, commonly C1 – C512 | Read/Write | No |
V |
Variable memory | 16 bits | V1 – V4096 (firmware dependent) | Read/Write | No |
V. (Vdot) |
Floating-point variable memory | 32 bits IEEE-754 | V.1 – V.2048 (typical) | Read/Write | No |
Note the asymmetry above: by convention, X and WX are read-only; by architecture, they are simply shared static RAM that the I/O scanner overwrites each scan. When the physical source of that overwrite (the input card) is removed, write access is restored to user program logic.
TI555 Memory Layout Diagram
The diagram below summarises the logical relationship between the CPU memory areas, the physical I/O modules, and the external simulator's data source. Each box represents a 16-bit word; the arrows represent the source of each value during a normal scan.
Core Principle: Physical I/O Removal Frees the Memory
The TI555-1106 performs a deterministic I/O scan at the start of every program cycle. During this scan the CPU queries each configured base, reads the input modules' data into the X/WX memory areas, and copies Y/WY memory out to the output modules. These memory areas live in the CPU's static RAM.
If the input module physically present at a configured slot is absent, the CPU has no source from which to refresh the corresponding memory area. The bits and words retain their prior values — whether those prior values came from a previous I/O scan, from user program writes during initialization, or from external writes arriving via a protocol converter such as the Red Lion DA30D.
Critically, the input process image is not write-protected by the CPU hardware. APT's compiler marks X/WX as read-only to prevent accidental bus contention and to enforce good engineering practice. Bypassing that protection requires addressing the compiler's syntactic check, which is covered later in this article.
Step 1: Remove Physical Input Modules
- Power down the TI555 base and follow the site's lockout/tagout (LOTO) procedure before any module removal.
- Document the slot position and module type of every input card (discrete and analog). Note whether the slot is configured in the CPU's I/O configuration as an input or output slot — this configuration is normally visible from APT's I/O Configuration dialog.
- For each slot, decide whether the entire slot is required for simulation. If the program logic reads input word 4 but never references slot 5, you may leave slot 5 populated; only the memory range associated with removed modules becomes freely writable.
- Remove the selected input modules using the appropriate extraction tool. Output modules may remain in place; their associated
Y/WYmemory is always user-writable. - Power the base back up and observe the CPU's I/O fault LEDs. Expected result: an I/O fault indication for each missing module, but the CPU should continue in run mode if the fault-handling configuration permits.
- From APT's online status screen, confirm that the affected
X/WXwords now display frozen values or "bad" flags rather than scanned values. After the compiler bypass is in place you should also be able to force-set these addresses from the online editor.
I/O STOP ON FAULT bit in the CPU configuration word. For simulation purposes this should be cleared so the PLC continues to scan even with faults on missing modules. Refer to the SIMATIC TI500 CPU configuration manual for the exact word and bit location, as this is firmware-revision sensitive.Safety considerations for module removal
- Confirm that no field wiring carries hazardous voltage before extraction. Some TI500 bases use backplane interconnects that remain live even when the CPU is in Stop.
- Mark each removed module with its slot number and install blank filler plates to maintain airflow and EMI shielding.
- If the base contains a redundant power supply, both supplies should be de-energised and locked out.
Step 2: Create a Dedicated TEST UNIT in APT
Rather than mixing simulation logic into a production UNIT, isolate the simulation behavior in a dedicated APT UNIT. This makes compile-time enable/disable straightforward and keeps the simulation mapping co-located.
- Open the APT project and navigate to the project tree.
- Right-click the UNITs folder and select New UNIT.
- Name the UNIT
TEST(or another project-specific name; the field report usesTESTby convention). - Set the UNIT's execute priority. By default a UNIT executes every scan; for simulation logic this is fine, but a timed or event-driven UNIT may be configured to mimic real I/O update rates.
- In the Compiler Configuration dialog, locate the new UNIT and verify it can be enabled and disabled independently of the production UNITs.
- Compile the project. The Compiler Configuration dialog will list which UNITs are included in the build; the TEST UNIT should appear and be independently toggleable.
The toggling mechanism is the key affordance this approach provides. During initial site commissioning, the engineer disables the TEST UNIT and validates the production UNIT against real field wiring. After validation, the engineer enables TEST for operator training, HMI development, and acceptance testing without ever touching the production logic.
UNIT composition guidelines
- Place all MATH blocks performing simulation passes inside the TEST UNIT. Do not declare the symbolic tags inside the UNIT; declare them at project scope so the same tags are visible to production UNITs.
- Avoid placing control logic (interlocks, permissives, shutdown logic) inside TEST — a disabled TEST UNIT would silently bypass that logic. Tests with safety implications must always be performed with TEST enabled and the production UNIT under formal change control.
- Reserve at least one comment block at the top of TEST documenting the audit trail: who created it, what release, which inputs it simulates, and the date of last verification.
Step 3: Assign Symbolic Variables to Internal Memory
Before configuring the MATH blocks, declare the symbolic tags that the external simulator (Red Lion DA30D, AB PLC) will write to. Use V for integer values and V. for floating-point values.
| Symbolic Tag | Memory Area | Width | Source | Destination | Comment |
|---|---|---|---|---|---|
SIM_DI_PUMP_RUN |
V100 | 16-bit | DA30D register 4001 | X1 (slot 1, bit 0) | Discrete, pack at bit 0 of WY1 |
SIM_DI_VALVE_OPEN |
V101 | 16-bit | DA30D register 4002 | X2 (slot 1, bit 1) | Discrete, pack at bit 1 of WY1 |
SIM_AI_TANK_LVL_RAW |
V.50 | 32-bit float | DA30D float reg 7100 | WX10 | Float scaled 0.0–100.0 % |
SIM_AI_PRESSURE |
V.51 | 32-bit float | DA30D float reg 7102 | WX11 | Float scaled 0–250 psi |
SIM_DI_REMOTE |
V102 | 16-bit | DA30D register 4003 | X3 | Pack at bit 2 of WY1 |
This layer of indirection is intentional: never let the protocol converter write directly into X/WX. Route through V/V. so that scaling, fail-last-value, and sanity checks can be performed inside the TI555 program before the value reaches the input image. This also means the simulator mapping is reusable across projects — only the final pass-through target address changes.
Float alignment rules for V. memory
Each V. address consumes 32 bits and must be aligned to an even 16-bit boundary in the underlying V space. Crimson 3 and the AB PLC mapping must respect this alignment, or float values arrive misread. Recommended practice: assign V. addresses at even indices (V.50, V.52, V.54, ...). The DA30D's Data Mapping view exposes a per-register width selection; choose 32-bit float registers and ensure the start index is an even multiple of 2.
Step 4: Configure MATH Blocks in the TEST UNIT
Within the TEST UNIT, add MATH blocks that copy from V/V. into X/WX. At this point the APT compiler will refuse to accept the assignment because X1 is marked read-only. The workaround is addressed in the next section; first, here is what a corrected MATH block looks like after the workaround has been applied.
(* MATH block 1: scaled analog pass-through *)
SRC := SIM_AI_TANK_LVL_RAW; (* V.50, written by DA30D *)
DST := WY1; (* 32-bit float copied into WY1 *)
(* APT requires same address number on both sides when X/Y *)
(* rule is invoked; therefore this becomes WX10 via a *)
(* dedicated swap block, see Step 5 *)
For discrete passes, the canonical pattern is to set or clear a single bit inside the WY1 word and then write WY1 to its physical target slot (which, being empty, behaves as a write-through to X1):
(* MATH block 2: discrete enable relays *)
IF (SIM_DI_PUMP_RUN AND 16#0001) <> 0 THEN
WY1 := WY1 OR 16#0001; (* set bit 0 of WY1 *)
ELSE
WY1 := WY1 AND 16#FFFE; (* clear bit 0 *)
END_IF;
IF (SIM_DI_VALVE_OPEN AND 16#0002) <> 0 THEN
WY1 := WY1 OR 16#0002; (* set bit 1 *)
ELSE
WY1 := WY1 AND 16#FFFD; (* clear bit 1 *)
END_IF;
IF (SIM_DI_REMOTE AND 16#0004) <> 0 THEN
WY1 := WY1 OR 16#0004; (* set bit 2 *)
ELSE
WY1 := WY1 AND 16#FFFB; (* clear bit 2 *)
END_IF;
Edge-case MATH pattern: scaling floats into integer WX words
Some field installations require that the simulated analog value reach a 16-bit integer WX word (for example, when the production logic performs integer comparisons such as IF WX10 > 8000). Use a scaling MATH block with explicit range clamping:
(* MATH block 3: float-to-integer scale *)
TEMP_INT := REAL_TO_INT(SIM_AI_TANK_LVL_RAW * 276.48); (* 0–100% into 0–27648 raw *)
IF TEMP_INT < 0 THEN TEMP_INT := 0; END_IF;
IF TEMP_INT > 27648 THEN TEMP_INT := 27648; END_IF;
WY1 := TEMP_INT; (* write to WY1 / WX10 via the address trick *)
Step 5: The Compiler Address Trick (Y vs X)
The APT compiler performs a syntactic check during build: any write to Xn or WXn generates an error such as "X1 is read only". The compiler's address validation does not distinguish between the X mnemonic and the Y mnemonic when only the address number is concerned — both X1 and Y1 resolve to memory word 1.
Because of the address-number uniqueness rule (X and Y cannot share the same number in the program at the same time), a write of the form Y1 := Y1 compiles cleanly. The runtime behavior of Y1, however, depends on whether a physical output card sits in slot 1.
-
If slot 1 holds an input card (or no card): the memory at word 1 is the input image. Writing to
Y1actually writes into the same RAM location the input scanner would use. Because no scanner exists, the value persists and is read by downstream logic as if it were a real input. -
If slot 1 holds an output card: the I/O scan overwrites
Y1every cycle, and the MATH-block write is overwritten. The technique will not work in this configuration — this is one of the diagnostic signals used in the troubleshooting matrix below.
The same logic applies to the analog word space: writing to WYn is allowed by the compiler, and if no analog output module occupies that slot, the RAM at WXn/WYn retains the user-written value.
Compiler strategy: shadow addressing
An alternative to the mnemonic-trick is to keep production logic reading from X/WX and have the simulation layer write to addresses that the production logic has been edited to consume. This requires editing the production program and is therefore more invasive than the Y/X trick, but it eliminates the unusual compiler construct entirely. Choose one approach per project and document it.
Step 6: Wire Up the Red Lion DA30D Protocol Bridge
The Red Lion DA30D Data Station Plus is typically configured with two drivers: one targeting the Allen-Bradley PLC (DF1, EtherNet/IP, or Modbus/TCP depending on platform), and one targeting the TI555 (NITP, MODBUS, or Siemens legacy protocol). The DA30D performs the simulated-process-image mapping between the two.
- In Crimson 3 (Red Lion configuration software), add the Allen-Bradley driver and define an internal tag for each simulated process variable (e.g.
SIM_PUMP_RUNmapped to AB tagSimInput.PumpRun). - Add the Siemens legacy / MODBUS driver. Configure the data map so each internal tag is written to the corresponding
VorV.address in the TI555 (e.g.SIM_DI_PUMP_RUN→V100). - For outputs, route from TI555
Y/WYaddresses back to AB tags so the operator on the simulator HMI sees the responses of the TI555 logic. - Save the Crimson configuration to the DA30D and cycle power to ensure the new project loads.
- Use Crimson 3's Diagnostic → Communications → Statistics view to verify request counts and error counts on both drivers. A non-zero error count indicates a mapping mismatch (commonly a wrong register width or byte order).
V/WX/WY; for floating-point values use the V. register ranges. Confirm in the DA30D's Data Mapping view that float registers are explicitly aligned to a 32-bit word boundary; misalignment yields silent truncation and is the most common commissioning issue on dual-platform setups.Byte-order and scaling between platforms
The TI555 stores 16-bit words in big-endian format. The AB ControlLogix and CompactLogix store INT tags in little-endian format. The DA30D performs byte swapping only when its driver configuration specifies Word Swap; if you observe that V100 in the TI555 equals AB tag value 0x1234 but logs as 0x3412 on the AB side, enable Word Swap in Crimson. Floating-point values from V. are IEEE-754 single-precision and require no byte swap beyond the natural big-endian/little-endian translation handled by Crimson.
Step 7: Verification Procedure
- Compile check: Build the APT program with the TEST UNIT enabled. The compiler should report zero errors and zero warnings about read-only addresses.
- Download: Transfer the program to the TI555-1106 and place the CPU in Run.
-
Online monitor: Open the APT online status screen. Watch
X1. From the AB simulator or DA30D, write1toV100. Confirm thatX1transitions to1within one scan. -
Analog verification: Write a floating value of
123.45toV.50. Confirm thatWX10shows the expected raw integer equivalent after the scaling pass-through. -
Round-trip test: Toggle a discrete input via the simulator and verify that the TI555 logic drives the expected
Youtput, which the DA30D echoes back to the AB PLC. A full round-trip in under two scans confirms the architecture is intact. -
Stop condition: Place the CPU in Stop. The
X/YandWX/WYmemory should hold their last values — this is a useful diagnostic to confirm the I/O scanner is not active. -
Forced value check: From APT online, force
X1= 1 andWX10= 12345, then cycle power. If the values reappear on the next cold start, both simulation memory and the address trick are confirmed persistent.
Acceptance checklist
| # | Check | Expected | Result |
|---|---|---|---|
| 1 | CPU in Run after module removal | Green Run LED, no hard fault | |
| 2 | All removed slots flagged I/O bad in status | Yes — see CPU fault word | |
| 3 | TEST UNIT compiles clean | Zero errors, zero read-only warnings | |
| 4 | DA30D communications active on both drivers | Rising request counts, zero errors | |
| 5 | Simulated DI from AB visible at X1 in APT online | Yes, within one scan | |
| 6 | Simulated AI from AB visible at WX10 in APT online | Yes, scaled correctly | |
| 7 | Y outputs returning to AB through DA30D | Yes, within two scans round-trip | |
| 8 | Values survive a CPU power cycle | Yes, assuming healthy battery | |
| 9 | Production UNIT unaffected when TEST is disabled | Compile clean, run unchanged | |
| 10 | Documentation updated with simulation mapping | Symbol table, mark-ups, and Crimson project archived |
Troubleshooting Matrix
| Symptom | Likely Root Cause | Diagnostic | Resolution |
|---|---|---|---|
| Compiler error "X1 is read only" | MATH block writes directly to X mnemonic |
Open Compiler Configuration → View Warnings | Substitute Y1 for X1 in the assignment target |
| X1 / WX10 always reads 0 | Physical input card still in corresponding slot; I/O scanner is overwriting | Remove suspect module, cycle power, re-check | Physically remove the input card and confirm slot empty |
| Discrete input toggles but analog does not | Floating-point V. address misalignment in Crimson |
Examine DA30D Data Mapping; confirm 32-bit boundary | Repack float at even V. index; rebuild Crimson project |
| Value flickers between simulator write and CPU default | Residual I/O fault handler writing to WX/WY | Online status → Force On/Off trace; check CPU fault word | Clear forced values; reconfigure fault handler to disable default writes |
| CPU enters hard fault on missing module |
I/O STOP ON FAULT configuration bit set |
CPU configuration screen | Clear the fault-stop bit, restart CPU in Run |
| Compiler complains about duplicate address numbers | Same number used for both X and Y, or WX and WY
|
Search program for the offending number | Move write target to a different unused slot number |
| DA30D cannot connect to TI555 | Incorrect driver selected in Crimson; protocol mismatch | Crimson diagnostics → Communications → Statistics | Switch to Siemens legacy or MODBUS/RTU driver; verify baud/parity |
| AB sees TI555 outputs as zero | DA30D AB driver not polling Y/WY; mapping written to wrong register range | Crimson Data Mapping table; AB tag monitor | Re-map output range to the appropriate Y/WY addresses; enable poll on this driver |
| WY1 appears to be read-only | Slot 1 holds an output card; the I/O scanner overwrites each scan | Inspect slot 1 module type; APT online I/O view | Select a different slot whose corresponding address is not on an output module |
| Values drift after several minutes | DA30D scan rate slower than TI555 scan; expected behaviour | Compare DA30D poll period with TI555 scan time in APT online | Increase DA30D poll rate; or insert last-value-hold logic in MATH block |
| Discrete value sticks high after the AB clears it | MATH block only sets the bit and never clears it | Inspect IF/ELSE structure in the MATH block | Use the IF/ELSE pattern shown in Step 4 to ensure bit is cleared each scan |
| Floating point shows as 0.0 in APT online after writing to V. | DA30D writes only the high word, not the full 32-bit float | Crimson Data Mapping register width | Set the register type to 32-bit float; verify start index is even |
Limits and Field-Proven Caveats
- No hot-swap: The TI555 base does not support live I/O removal in the way that a modern S7-1500 with PROFINET does. Plan downtime and LOTO for module removal.
-
Per-slot applicability: The technique only works for slots whose input card has been removed. If slot 4 holds a populated input card,
X/WXwrites to that slot will be overwritten every scan. -
Compiler does not track physical reality: APT's syntax check assumes I/O exists. It is the engineer's responsibility — not the compiler's — to verify which slots are physically populated before relying on a write-through
Ytrick. -
Floating-point alignment: Each
V.address consumes 32 bits and must be aligned to an even 16-bit boundary in the underlyingVspace. Crimson mapping must respect this or float values arrive scrambled. -
Surviving power cycles: If the TI555 battery is healthy,
V/V.memory and the X/Y/WX/WY image are retained across power cycles. Simulation values written from the DA30D reappear on the next cold start — usually desirable but worth documenting. -
Firmware version sensitivity: The exact ranges of
V/V.memory depend on the TI555-1106 firmware revision. Newer firmware exposes larger V memory areas. Verify the actual range in APT's Memory Map dialog before commissioning. -
Production logic must stay read-only on X: Do not have any production UNITs that write to
XorWXvia the address trick while a real input card is also installed in the corresponding slot — this creates a bus-content race that produces nondeterministic behavior. -
DA30D scan time vs TI555 scan time: DA30D poll periods are typically in the 100–500 ms range, while the TI555 program scan is typically 10–50 ms. Brief glitches in
Xbetween simulator updates are expected and are not a fault of the technique. - Crimson project version control: Always archive the Crimson project file alongside the APT project. The two are inseparable at commissioning — either both are restored or neither will function correctly.
Before/After Comparison
| Aspect | Before (Standard Configuration) | After (Simulation Configuration) |
|---|---|---|
| Slot 1 module | 16-point discrete input card | Empty / blank filler |
| X1 / X2 / X3 source | Input card, refreshed each scan | Internal MATH block write-through, sourced from V100/V101/V102 |
| WX10 source | Analog input card | Internal MATH block, sourced from V.50 |
| Compiler restriction on X/WX writes | Enforced, no workaround | Bypassed via Y/WY mnemonic trick (compiler-clean) |
| External data source | Field wiring only | DA30D write-through to V/V. memory |
| Production UNIT participation | Required for every scan | Optional through TEST UNIT enable/disable |
| Commissioning risk | Minimal — matches design | Higher — requires physical removal of cards and protocol bridge |
Power-On State Behavior
The following sequence describes what happens during a TI555 cold start with the simulation configuration in place and a healthy battery.
Edge Cases and Special Conditions
| Scenario | Approach | Notes |
|---|---|---|
| CPU has TI545 instead of TI555 | Same procedure applies; X/Y/WX/WY sizes vary | Confirm slot count and memory size in APT Memory Map dialog |
| Some slots must remain populated with real I/O | Apply the technique only to empty slots | Mixing real and simulated inputs in the same program is fully supported |
| External simulator uses OPC UA instead of Modbus | Front the simulator with a Modbus/TCP server or use a DA30D for protocol translation | The TI555 itself does not speak OPC UA natively |
| Project requires PC-based simulation only (no PLC) | Use APT's offline simulation mode; skip the address trick entirely | Configure symbolic inputs to map to V directly; APT simulator will animate them |
| Red Lion DA30D is unavailable; need alternative bridge | Use a Modbus/TCP-capable industrial gateway (e.g. Moxa, Anybus) | Ensure the gateway supports 32-bit float register mapping and V. memory addressing |
| CPU firmware exposes only a small V memory area | Use C memory as a fallback; plan simulation tags against the actual V size | C memory is integer-only and does not support floating point |
| Frequent power cycles during commissioning | Verify battery before each cold-start test; replace if low | A dead battery will reset all V memory and clear the simulation image |
| Need to simulate outputs (Y/WY) back to field devices | No special handling required — Y/WY are always user-writable | DA30D can read Y/WY for HMI display on the AB side |
Frequently Asked Questions
Does the Y/X compiler trick work on a TI545 or TI565 CPU?
Yes. The X/Y and WX/WY memory architecture is consistent across the TI545, TI555, and TI565 CPUs. As long as the target slot is physically empty or holds an output card with the input scanner otherwise disabled, writing to the corresponding Y/WY address occupies the same RAM that the input scanner would have used. Confirm the exact memory sizes in the APT Memory Map dialog because they differ by model.
Will the simulated discrete values survive a TI555 power cycle?
Yes, provided the TI555 battery is healthy. Both V memory and the X/Y/WX/WY image are backed up across power cycles; the next time the simulator writes to V memory, the value is restored to the input image on the first scan after Run is entered. A low or dead battery clears all retentive memory, including the simulation values.
Can I leave one input card in place and simulate only the remaining inputs?
Yes. The technique applies per-slot: any slot whose input card has been removed becomes a candidate for write-through, while populated slots continue to scan normally and remain read-only from program logic. This is the most common hybrid configuration during phased commissioning.
How do I confirm that the I/O scanner is overwriting my WX10, and not a stray MATH block?
Place the CPU in Stop. In Stop, the I/O scanner is disabled, but user program logic continues to execute once per scan. If WX10 retains its set value in Stop, the I/O scanner was the source; if it still resets, a residual MATH block is overwriting it. Repeat the test with the simulator disconnected to isolate the simulator as the third potential source.
Is there a way to perform the same simulation without removing any physical cards?
Yes. Configure the production UNIT to read directly from symbolic V tags instead of from X/WX, then let the simulator write to V/V. This requires small program edits and avoids LOTO entirely. The X-as-memory trick is preferred only when the production program already references X/WX and a non-invasive simulation mode is required.
What Crimson 3 driver license is required for the Siemens legacy protocol on the DA30D?
The Crimson 3 base driver supports the Siemens legacy protocol for the TI505 family without an additional license; however, the Data Station Plus must be ordered with the hardware variant that supports the protocol option. Confirm the exact model number against the Red Lion DA30D datasheet before purchase, as legacy-driver support varies by hardware revision.
Why does APT refuse my MATH block writing to X1 even after I removed the input card?
The compiler does not inspect the physical base; it only enforces the X/WX is read-only attribute. The address trick (writing to Y1 instead of X1) is required regardless of whether the input card is present, because the compiler rejects any assignment to the X mnemonic in user logic.