Siemens LOGO! 8 MOVE Function: VM and Analog MUX Workaround

David Krause14 min read
HMI ProgrammingSiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

Engineers migrating from OMRON, Mitsubishi, or Allen-Bradley PLCs typically expect a generic MOVE instruction that writes a constant or copies a tag into a data register (for example, OMRON's MOV #100 D100). Siemens LOGO! 8 does not expose a MOVE block in the function library because the LOGO! 8 is a logic module rather than a register-based PLC: it has no flag words, no data block (DB) area, and no floating-point engine. All values that exist in a program are bound to the input or output parameter of a function block, and the wiring itself constitutes the data transfer.

Despite the absence of a MOVE primitive, you can emulate a register write using three field-proven techniques: the Analog MUX block (4-value selector), the Analog Amplifier and threshold-switch chain (single-value latch), and the variable memory (VM) area that the LOGO! 8 web server and integrated HMI expose for parameter binding. This reference documents the architecture behind those workarounds, the parameter mapping, the FBD sample logic for a daily-production shift roll-over, and the threshold at which you should migrate the application to a SIMATIC S7-1200.

Why LOGO! 8 Has No Native MOVE Block

LOGO! 8 is positioned in the Siemens catalog as a logic module rather than a programmable logic controller in the strict sense. The internal data model reflects that positioning:

  • No data registers in the OMRON D-, W-, or H- sense.
  • No flag words (MW) or memory bytes (MB) as in S7-300/S7-400.
  • No instance data blocks (DB) for global tags.
  • No floating-point arithmetic; only 16-bit signed integer math (range −32 768 to +32 767).
  • Only two editor languages: Ladder Diagram (LAD) and Function Block Diagram (FBD).

Inside LOGO! Soft Comfort every value lives as an input pin or an output pin of a block. The compiler does not allocate a named variable that you can target with a "MOVE into tag X" instruction. To transfer a number from one block to another, you wire the source pin to the destination pin, or you use a dedicated routing block (Analog Amplifier, Analog MUX, Analog Flag).

Architectural note: If your control narrative explicitly references data registers, flag words, or data blocks, treat that as a strong signal to step up to a SIMATIC S7-1200 CPU (or S7-1500 for larger programs). The LOGO! 8 is engineered for combinational and sequential logic, not for register-oriented programming. See the Siemens LOGO! product page for positioning details.

LOGO! 8 Memory Architecture: Variable Memory (VM)

The only addressable storage that LOGO! 8 exposes to the user is the variable memory (VM) area, a table of 16-bit words. The VM is what the integrated Web server and LOGO! TD text display reference when you bind a monitoring tag to the screen. The size of the addressable VM depends on the LOGO! 8 base unit and firmware generation; always confirm the actual count in the device properties of LOGO! Soft Comfort before assuming a specific depth.

VM region Typical use Retention
VM words (e.g., VW 0 ... VW n) Analog and digital values that must persist across power cycles Retentive on supported LOGO! 8 hardware variants with battery / SD card
Bit-level access (V0.0 ... V0.7) Boolean flags exposed to the HMI / web server Retentive
Tag binding in the integrated Web server Read-only and read/write values shown on the LOGO! web UI Same as backing VM word

To write a constant to a VM word from FBD, you wire a constant block or an arithmetic block output to the connector that represents that VM word. The wiring itself is the MOVE. A separate MOVE block is unnecessary.

Workaround 1: Analog MUX Block as a 4-Value Register

The Analog Multiplexer (Analog MUX) block accepts four integer inputs (V1, V2, V3, V4) and routes one of them to its output AQ, depending on the binary state of two selector inputs (S1, S2):

S1 S2 AQ source
0 0 V1
0 1 V2
1 0 V3
1 1 V4

When the LOGO! executes the block, AQ takes the value of the selected input. If you wire AQ into the input of a downstream block (for example, a counter setpoint, a threshold switch, or a VM-bound output), you have effectively executed a register write without a MOVE instruction.

V1 = 100V2 = 250V3 = 500Analog MUXS1 S2 → AQS1S2Setpoint / VM4-input MUX as integer register write

FBD wiring pattern

  1. Place four Constant blocks containing the integer values you want to expose (for example, 100, 250, 500, 1000).
  2. Feed them into V1..V4 of a single Analog MUX block.
  3. Drive S1 and S2 from two digital inputs or two internal flag bits.
  4. Wire the AQ pin to the downstream block (e.g., the Setpoint input of an On-Delay timer, or the SP of a counter).

This pattern is the cleanest substitute for an OMRON MOV when the destination is a parameter pin that LOGO! 8 already supports.

Workaround 2: Counter Latch with Threshold Comparator

For the classic "move today's production count into the previous-day register at end of shift" use case, a latch composed of an Up/Down counter, a threshold switch, and a second counter (or a VM word) is more efficient than a 4-value MUX:

  1. Counter Cnt1 accumulates units on the current shift; its CV is bound to a tag the HMI reads as "Today."
  2. At end-of-shift, a one-shot pulse (Positive Edge of the shift-change flag) triggers Counter Cnt2 to load Cnt1.CV via the Set Value input. Cnt2 is bound to a tag the HMI reads as "Yesterday."
  3. A Threshold Switch on Cnt1.CV resets Cnt1 to 0 at the same moment, starting the new shift count.

This method achieves a MOVE of the live count to a retained register without an explicit MOVE block. Both Cnt1 and Cnt2 must be configured as retentive if you need the values to survive a power cycle; the user-flag-bit and the SD card on supported LOGO! 8 variants provide retention.

Workaround 3: Analog Input → Amplifier → MUX → Analog Output Chain

A widely cited method for routing live process values through the program is the "Analog Amplifier + Analog MUX + Analog Output" chain:

Analog InputAnalog AmplifierAnalog MUXAnalog Output (VM)Live value routed into VM for HMI / web-server binding

The Analog Amplifier scales the raw analog input (for example, 0–10 V from a sensor) into the integer range supported by the LOGO! (the default gain = 1.0 path). The MUX selects between that live value and an alternative, and the Analog Output block exposes the result to a VM word that the web server or a downstream block reads.

Block confusion trap: The Analog Output block of LOGO! 8 is a logic block; its AQ parameter is what you expose to the HMI / web server. Physical analog output channels on LOGO! 8 AM2 / AM2 AQ modules are configured separately via the base-unit properties, not via this block. Do not wire the logic Analog Output to a physical analog channel expecting hardware action.

Sample Application: Daily Production Counter Shift Roll-Over

The following FBD pattern implements an end-of-shift "MOVE" of the live count to a previous-shift register using only standard LOGO! 8 blocks. This is the canonical example asked about in the user community and is the closest functional equivalent of a register copy in a non-register architecture.

Block list

Block Symbol Role Key parameter
Up/Down Counter Counter_1 Live shift count On = pulse input; CV bound to VM word "Today"; Retentive = On
Up/Down Counter Counter_2 Previous shift snapshot Set Value enabled; CV bound to VM word "Yesterday"; Retentive = On
Threshold Switch Th_1 Trigger on shift-change flag On threshold = 1; output drives Counter_2 Set + Counter_1 Reset
Wipe Relay / Pulse W_1 One-shot for Counter_1 reset Wipe on rising edge of Th_1.OUT

Sequential state machine

COUNTINGToday = Nshift_pulseSNAPSHOTYday = NautoRESETToday = 0next_scanShift roll-over: end-of-shift pulse snapshots N to Yesterday and resets Today to 0

At the rising edge of the shift-change digital input (for example, a pushbutton wired to I1, or an internal flag driven by the time-of-day scheduler), the Threshold Switch fires for one cycle. During that cycle, Counter_2 latches Counter_1.CV into its CV (the previous-shift value), and the Wipe Relay resets Counter_1 to 0 to start the new shift. Both Counter_1 and Counter_2 are retentive, so the snapshot survives a power-down event.

Web server / TD binding

Bind the HMI element "Today" to the VM word that tracks Counter_1.CV, and "Yesterday" to the VM word that tracks Counter_2.CV. The user can read both values from the LOGO! built-in web server or from a connected LOGO! TD display. If a writable element is bound (for example, an operator-set setpoint), set a strong password on the LOGO! web interface; without authentication, any operator on the network can write to the bound tag.

Programming Method: FBD vs LAD for Data Operations

Engineers with a strong Ladder background often default to LAD in LOGO! Soft Comfort. For data-transfer workarounds, FBD is materially more productive because every block pin is visible as a wire, and you can lay the source block, the routing block (MUX, Amplifier), and the destination block out linearly.

Aspect LAD FBD
Visibility of value flow Indirect, via contact/coil Direct, via explicit wire
MOVE substitution via MUX Verbose; requires intermediate flag bits Compact; four constants → MUX → destination pin
Analog value scaling Requires dedicated function block instructions Native Analog Amplifier / Math blocks
Algebraic loop detection May compile silently Compile-time flag in FBD editor
Recommended for data workarounds FBD

If you have a portfolio of OMRON Ladder code that uses MOV heavily, the conversion effort to FBD is typically lower than the equivalent LAD rewrite, because you can place the four candidate constants on the canvas, wire them into the MUX, and route the output directly to the destination parameter.

Data Type Limitations: Integer-Only Processing

LOGO! 8 evaluates all math in 16-bit signed integer (INT16). Practical consequences for the MOVE substitution:

  • Constants above 32 767 (for example, 100 000 from a flow totalizer) must be scaled down before being stored. The LOGO! 8 will clip the value at the integer limit and may produce a runtime warning in LOGO! Soft Comfort's online test.
  • Floating-point division (for example, 7 / 3 = 2.333) is not supported; the result is the integer 2 with truncation. If you need fractional precision, use a SIMATIC S7-1200 with REAL (32-bit float) arithmetic.
  • Negative numbers are supported, so the Analog MUX can hold negative setpoints (for example, V1 = −50) — useful for setpoint offsets in temperature control.
  • The Analog Amplifier gain and offset parameters are themselves integers; precision below 1 unit is not achievable in the standard library.
Overflow discipline: When you write a constant into a VM word, confirm the value is within INT16 range. Values outside the range either wrap or are clamped depending on the block, and the LOGO! Soft Comfort compiler does not always flag the overflow in offline simulation. Always check the maximum value of every upstream counter in the program and scale before storing.

LOGO! 8 vs S7-1200: When MOVE Becomes Critical

Use the table below as a migration-decision matrix. If two or more rows describe your application, plan a step-up to S7-1200. The IOT2000 sits between the two as a Linux / Arduino-class industrial platform: it is a valid option if you need data logging and a Linux file system, but it is not a drop-in replacement for an OMRON PLC program.

Criterion LOGO! 8 fits S7-1200 required
Number of MOVE-equivalent data transfers per program ≤ 5 > 5
Floating-point math Not required Required (REAL / LREAL)
Persistent data block of > 16 words No Yes
Recipe / parameter set storage Single setpoint acceptable Multiple recipes in DB
Stepper / servo motion control Not recommended (PWM only, no closed loop) S7-1200 with PTO or PROFINET drive
Remote I/O over PROFINET Limited (LOGO! 8 supports PROFINET as IO Device, not Controller) S7-1200 acts as IO Controller
Program exceeds 200 function blocks No Yes

Commissioning and Verification Procedure

Use the following procedure to validate a MOVE-substitution program on the bench before deploying to the field.

  1. Open the program in LOGO! Soft Comfort and select Simulation → Online Test. The simulator executes on your PC and exposes the VM area and the web-server binding in real time.
  2. Force the S1 and S2 selector inputs of the Analog MUX to each of the four combinations (00, 01, 10, 11) and verify that the AQ pin and the downstream block read the expected constant from the MUX input table.
  3. For the shift roll-over sample, drive the shift-change digital input with a one-shot pulse and confirm that Counter_2.CV = Counter_1.CV (pre-pulse) and Counter_1.CV = 0 (post-pulse). Record both values in the LOGO! Soft Comfort watch table.
  4. Power-cycle the LOGO! 8 base unit and confirm that both Counter_1.CV and Counter_2.CV are retained. If retention fails, the counter is not configured as Retentive, or the battery / SD card retention option is not enabled in the base-unit properties.
  5. Open the LOGO! web server in a browser and navigate to the bound tags (Today / Yesterday). Verify the live values match the LOGO! Soft Comfort watch table.
  6. If a TD text display is fitted, navigate to the screen bound to the same VM words and confirm the values render correctly on the LCD.
  7. Document the four MUX input constants and the selector truth table in the program comment so that the next maintainer can re-derive the relationship without a ladder walk-through.
Algebraic loop trap: A common commissioning mistake is wiring the MUX output AQ back to a block that the MUX also reads from (an algebraic loop). LOGO! Soft Comfort will flag the loop at compile time when the program is opened in the FBD editor; the LAD editor may compile the loop silently and produce undefined behavior at runtime. Always edit the data-routing portions of the program in FBD.

Edge Cases and Field-Proven Caveats

  • Power-failure safe MOVE: The MUX technique is not retentive; the MUX output reflects whatever the selector pins select on the next scan. To persist a value across power-down, the destination must be a retentive counter, a retentive on-delay timer, or a VM word on a supported base unit.
  • PWM and motion control: Do not substitute a MOVE-equivalent for a stepper setpoint — LOGO! 8 has no closed-loop motion controller. Use a SIMATIC S7-1200 with PTO outputs or a SINAMICS drive on PROFINET.
  • SD card vs internal retention: Confirm retention in the base-unit properties before relying on it for production data; some LOGO! 8 base units require an SD card for full retentive storage.
  • Integer overflow on constant write: Constants above 32 767 written to a MUX input will overflow the INT16 range. Scale the value upstream and never trust the offline simulator to catch the wrap.
  • Web server authentication: When the VM words are bound to a writable web-server element, set a strong password on the LOGO! web interface; without authentication, any operator on the network can write to the bound tag.
  • Selector pin bounce: If S1 / S2 are driven by mechanical contacts, debounce the input with an On-Delay or use the digital input filter of the LOGO! base unit; otherwise a single shift-change flag may fire the threshold switch multiple times per transition.

Frequently Asked Questions

Does Siemens LOGO! 8 have a MOVE function similar to OMRON's MOV?

No. LOGO! 8 does not expose a MOVE block in the function library. The architecture has no data register or data block area in the OMRON sense, so a generic register write does not exist. Use the Analog MUX block, the Analog Amplifier, or VM-bound wires to emulate the data transfer.

What is the recommended programming language for data-routing workarounds?

Function Block Diagram (FBD) is recommended over Ladder Diagram (LAD) for any data-routing workarounds, because the wiring is visible directly and the four MUX inputs can be placed on the canvas next to the destination block. FBD also flags algebraic loops at compile time, while LAD may compile them silently.

Can LOGO! 8 store floating-point numbers in a register?

No. LOGO! 8 processes only 16-bit signed integers in the range −32 768 to +32 767. If your application requires floating-point arithmetic, step up to a SIMATIC S7-1200 with REAL or LREAL data types, which provides native MOVE instructions and a true DB area.

How do I move today's production count into a previous-day register on LOGO! 8?

Use two retentive Up/Down counters. The first counter accumulates the current shift; a one-shot pulse at end of shift copies its CV into the second counter's Set Value input and resets the first counter to 0. Bind both CVs to VM words and expose them on the LOGO! web server or TD display.

When should I migrate from LOGO! 8 to a SIMATIC S7-1200?

Migrate when your program requires more than five MOVE-equivalent transfers per scan, floating-point math, persistent data blocks larger than 16 words, multiple recipes, PROFINET IO Controller functionality, or closed-loop motion control. The S7-1200 also provides native MOVE instructions and a true data block (DB) area.

Back to blog