Tracking Local Variable Memory in LOGO! 8 with Soft Comfort
Siemens LOGO! 8 logic modules expose a flat variable-memory (VM) address space shared by every FBD/LAD program block, by the HMI display variables, by network inputs (NI), by network outputs (NQ), and by their analog counterparts (NAI/NAQ). Engineers frequently need a consolidated listing of every local VM byte that a program actually references; however, the GUI tools in LOGO! Soft Comfort V8.x do not provide a single "References" pane equivalent to STEP 7's cross-reference. This article details every supported technique for enumerating used VM locations, exporting the data to a spreadsheet, and verifying that no two blocks collide on the same byte or bit. The official LOGO! 8 System Manual and the LOGO! Soft Comfort Online Help are referenced throughout.
1. LOGO! 8 VM Memory Model Overview
The LOGO! 8 BM (base module) and the LOGO! 8.3 BM (BT variant for cloud connectivity) keep three classes of data in non-volatile RAM: function-block local data, VM, and the SD-card project file. Of these, VM is the only class that survives a power cycle without re-initialization; function-block local data is regenerated on every cold start. The VM address space is fixed per firmware family and is identical across LOGO! 8 (6ED1052-xxx08-0BA1/BA2), LOGO! 8.1, LOGO! 8.2 (FS:04 and later), and LOGO! 8.3 (6ED1052-xxx08-0BA3).
| Symbol | Range | Type | Default Width |
|---|---|---|---|
| M (digital flag) | M0 - M127 | Bit | 1 bit |
| VM (digital flag) | VM0.0 - VM1023.7 | Bit-addressable byte | 1 bit |
| AM (analog flag) | AM0 - AM63 | Word | 16 bit |
| AVM (analog flag) | AVM0 - AVM127 | Word | 16 bit |
| NI / NQ (network) | NI1 - NI64, NQ1 - NQ64 | Bit | 1 bit |
| NAI / NAQ (network) | NAI1 - NAI32, NAQ1 - NAQ32 | Word | 16 bit |
Local variable memory in the LOGO! Soft Comfort context refers to the NI, NQ, NAI, and NAQ bytes plus any VM byte that the user has hard-coded as a constant on a function-block input/output pin. The "VM mapping" function inside the editor only shows the function-block-to-VM bindings when an address has been explicitly assigned in the parameter dialog; it does not enumerate the NI/NQ bytes consumed by the diagram for S7-style communication or by the LOGO! TDE/LOGO! Display. See the LOGO! 8 System Manual, chapter "Memory areas", for the authoritative map.
2. Why the VM Mapping Tool Falls Short
Soft Comfort V8.0 through V8.4 ships a Parameter VM Mapping viewer (Tools > Parameter VM Mapping, or the icon in the toolbar). The tool reads the LSC file's parameter table and renders the byte/bit occupied by every block instance for which an explicit address was assigned under "Parameters > Parameter assignment". Blocks that use the default auto-allocation, or that read their input from a connector (x) and not from a named VM, are simply absent from the list. The same blind spot applies to NI/NQ used only as display tags on the LOGO! TDE.
For programs in the 50- to 200-block range this is rarely a problem; the engineer can keep a notepad. For modular projects split between two or three engineers, or for plants that have been modified in the field for ten years, manual tracking quickly becomes impossible. The next sections present three procedures that, in combination, recover a complete VM usage list without writing a script.
3. Procedure A: Enumerating NI/NQ via File > Print Preview
Print Preview is the only built-in Soft Comfort view that flattens every network input and output reference in the active project, regardless of whether the underlying block has a parameter assignment or not. The procedure below works on Soft Comfort V8.0, V8.1, V8.2, and V8.3.
- Open the project in LOGO! Soft Comfort.
- From the menu bar, choose File > Print Preview (shortcut:
Ctrl+Shift+P). - In the navigation tree on the left, expand the section labelled Variable assignment or, depending on the language pack, Variablenbelegung.
- The preview pane lists every NI, NQ, NAI, and NAQ that is referenced in the program. Each line shows the symbolic tag, the VM byte/bit (e.g.,
VM0.0), the direction (Input/Output), and the function block that drives it. - Right-click the preview pane and choose Print... or Export to PDF to capture the list outside the editor.
Save the resulting PDF in the project folder under a name such as VM_list_2024-Q1.pdf. Engineers who need a machine-readable copy can run any standard PDF table extractor (Tabula, Adobe Acrobat Pro, or Power Automate) to lift the lines into CSV. Once in CSV, sort by VM address and check for duplicates with a simple =COUNTIF formula.
4. Procedure B: Bulk Block Properties
The Print Preview view does not list VM bytes that are only used as analogue flags (AM/AVM) or as parameters on blocks that the user hard-coded to a specific address. To recover those, open the editor-wide block inspector.
- From the menu, select Edit > Block Properties (all blocks).
- Sort the resulting table by the Parameter column. Any block whose parameter is bound to a VM byte will expose that binding in the Value column.
- Mark the rows that have a VM address and copy them to the clipboard (
Ctrl+C). - Paste into a spreadsheet; the data arrives as tab-separated columns by default.
Because Block Properties is a snapshot at the time of opening, repeat the procedure after every program revision and append the result to the cumulative CSV. The cumulative CSV becomes the project-wide cross-reference.
5. Procedure C: The VM Mapping Tool Itself
The VM Mapping tool still has a role: it is the only view that shows the function-block-to-VM binding for a single block in graphical form, which is useful when verifying that a UDF (User-Defined Function) macro is reading the byte you intended. Open it from Tools > Parameter VM Mapping or the toolbar icon. The dialog box lets you filter by:
- Block family (timers, counters, analog math, etc.)
- VM range (e.g.,
VM0.0 - VM15.7) - Direction (read / write)
The filter is helpful when confirming that no two analog flags are accidentally sharing a 16-bit word. If the filter returns zero entries, the corresponding VM region is unused in the project. The tool cannot, however, see NI/NQ that are wired only to the LOGO! Display; for those, fall back to Procedure A.
6. Building a Spreadsheet Cross-Reference
Once data has been collected by Procedures A, B, and C, merge it into a single table. The recommended columns are:
| Column | Source | Example |
|---|---|---|
| Tag | Symbolic name | Pump1_Run |
| VM Address | Byte.bit | VM12.4 |
| Type | D = digital, A = analog, N = network | D |
| Block | Block instance name | B007 / Counter 3 |
| Pin | Input/output pin | S (set) |
| Comment | Free text | Hold from HMI |
| Last modified | Date | 2024-03-12 |
Add a Validation sheet that compares the cumulative VM list against the cumulative Print Preview list. Any address that appears in one and not the other indicates a block whose parameter assignment was changed without updating the documentation. This is the single most common cause of "phantom" overruns at site commissioning.
7. Network Input and Output Byte Layout
LOGO! Soft Comfort versions 8.0 and 8.1 exposed only 8 NI and 8 NQ per BM/EM. Starting with LOGO! 8.2 firmware FS:04 (Soft Comfort V8.2.0 build 9 and later) the limits rose to NI1..NI64 and NQ1..NQ64 for the master and each connected expansion module. The mapping is:
NI1 -> VM0.0 NQ1 -> VM8.0 NI2 -> VM0.1 NQ2 -> VM8.1 ... NI8 -> VM0.7 NQ8 -> VM8.7 NI9 -> VM1.0 NQ9 -> VM9.0 ... NI64 -> VM7.7 NQ64 -> VM15.7 NAI1 -> AVM16 NAQ1 -> AVM24 NAI2 -> AVM18 NAQ2 -> AVM26 ... NAI32 -> AVM78 NAQ32 -> AVM86
Knowing the static layout lets you scan the Print Preview list for any NI/NQ whose VM address falls outside the expected range - usually a sign of an SD-card import that was created on a different firmware level. The LOGO! 8 System Manual, section "Network variables", provides the same mapping in the official table.
8. Working with LOGO! 8.3 and the TDE / Web Editor
LOGO! 8.3 (order numbers 6ED1052-1xx08-0BA3) introduced a built-in web server that can display the same variable list as the LOGO! TDE. When the BM is set to Web server enabled in Tools > Ethernet Connections, you can navigate to http://<BM-IP> in a browser and view the assigned user-defined variables (UDV). The web page source is plain HTML, so a single grep on the served file is enough to recover the UDV list without launching Soft Comfort at all:
curl -s http://192.168.0.10/ | grep -oE 'VM[0-9]+\.[0-7]'
Scripting the curl in a nightly job produces a continuous audit trail independent of the developer's local Excel. The same technique applies to LOGO! 8.2 BT and LOGO! 8.3 BT modules configured for the Siemens LOGO! Cloud. The official product brief is on the LOGO! product page.
9. Programmatic Documentation: LSC File Format
A LOGO! Soft Comfort project (.lsc or, for V8.2+, .lscz) is a ZIP archive. Inside, logoProject.xml contains a <Variables> section that lists every NI, NQ, NAI, NAQ, and user-defined variable along with its VM binding. A short Python script can extract the table without Soft Comfort installed - useful for headless CI pipelines:
import zipfile, xml.etree.ElementTree as ET, csv
with zipfile.ZipFile('plant.lscz') as z:
with z.open('logoProject.xml') as f:
tree = ET.parse(f)
root = tree.getroot()
with open('vm_list.csv', 'w', newline='') as out:
w = csv.writer(out)
w.writerow(['Tag', 'VM', 'Type', 'Block'])
for var in root.iter('Variable'):
w.writerow([
var.get('name'),
var.get('address'),
var.get('type'),
var.get('blockInstance')
])
Run the script in a pre-commit hook so that every commit to the source-control repository refreshes the VM list automatically. The script also detects two variables that point to the same VM address and exits non-zero, blocking the commit. For full coverage combine the CSV with the Print Preview export from Procedure A.
.lscz extension is just a renamed ZIP. You can rename it to .zip and open it with any archive manager if you need to inspect logoProject.xml by hand. Project passwords are supported; strip them via File > Properties > Password before scripting.10. Comparison: When to Use Each Method
| Method | NI/NQ covered? | AM/AVM covered? | Auto-format? | Best for |
|---|---|---|---|---|
| Print Preview (Procedure A) | Yes | No | Full NI/NQ audit, every revision | |
| Block Properties (Procedure B) | No (only assigned ones) | Yes | TSV | Audit of parameter-assigned VM only |
| VM Mapping (Procedure C) | Partial | Yes | None | Visual verification of one block |
| Web server (Section 8) | Yes | Yes (UDV only) | HTML/curl | Live plant audit, no Soft Comfort |
| XML script (Section 9) | Yes | Yes | CSV | CI/CD, change-control, large fleets |
11. Firmware-Specific Caveats
- FS:01 (V8.0): NI/NQ limited to 8 per module. Print Preview already includes them.
- FS:02 (V8.1): S7-style network project limit raised to 16. Use the same Print Preview path.
- FS:04 (V8.2.0 build 9): NI/NQ limit raised to 64. CSV export from Print Preview now includes NAI/NAQ.
- FS:05 (V8.3): Adds the web server. The HTML page exposes every UDV - use it to audit deployments that have been in the field for years.
- FS:06 (V8.4): Adds data-logger memory that is also visible in Print Preview under "Data Log VM". Add an extra column to your master sheet.
12. Verification Checklist
- Open the project, choose File > Print Preview > Variable assignment and export to PDF.
- Open Edit > Block Properties (all blocks) and copy to the master spreadsheet.
- Open Tools > Parameter VM Mapping, set the filter to All blocks and confirm that no address appears twice in the resulting list.
- Run the XML script (Section 9) and diff the resulting CSV against the master spreadsheet. Any delta is a block that was added or renamed since the last export.
- For a LOGO! 8.3 deployment, browse the web server UI and confirm that the UDV list on screen matches the CSV row count.
- Sign and date the PDF, store it in the project folder, and commit both the PDF and the CSV to the same source-control repository as the
.lscfile.
13. Troubleshooting Matrix
| Symptom | Likely cause | Action |
|---|---|---|
| Print Preview is empty under "Variable assignment" | Project was saved with a pre-V8.0 schema | Open the project in V8.3+ and re-save as .lscz
|
| Block Properties shows no VM bindings | Block parameters were left at "auto" | Re-assign explicit VM, then re-export |
| VM Mapping shows an unexpected NI | Block from a UDF macro still references the parent project's NI | Open the UDF and edit the connector pin |
| NI/NQ exceeds 64 | Project was authored on V8.0 then loaded in V8.3 | Drop down to the V8.0 limit of 8 in V8.3, save, then re-open in V8.0 and re-save |
| Web server page returns 404 | Web server disabled in Tools > Ethernet Connections | Enable it, cycle power, retry |
| XML script returns "logoProject.xml not found" | Project was compressed with a non-default password | Re-save the project without password protection |
| Two blocks show the same VM address in master sheet | Block parameter renumbering after copy/paste | Edit the block, change VM to a free address, save, re-export |
| NI mapping differs from the documented offset | Firmware was downgraded from V8.2 to V8.0 | Re-author the project on the older editor and re-import on the field |
14. Frequently Asked Questions
Does LOGO! Soft Comfort have a STEP 7-style "Reference Data" view?
No. The Print Preview Variable Assignment list is the closest equivalent, supplemented by the Block Properties dialog. For complete coverage use the XML export of the .lscz file as described in Section 9.
How many NI/NQ can a single LOGO! 8 BM have?
From firmware FS:04 (LOGO! 8.2) onwards the limit is 64 digital NI, 64 digital NQ, 32 analog NAI, and 32 analog NAQ per module. Earlier firmware versions are capped at 8 of each.
Are NI and VM the same address space?
Yes. NI1 maps to VM0.0, NI2 to VM0.1, and so on, up to NI64 at VM7.7. Editing one edits the other.
Can I export the Print Preview list to CSV directly?
Not from Soft Comfort itself. The print engine produces PDF, XPS, or paper output. Use any PDF table extractor (Tabula, Adobe Acrobat Pro, Power Automate) to obtain CSV.
Will renaming a tag in LOGO! Soft Comfort break my VM cross-reference spreadsheet?
Yes if you key the spreadsheet on the symbolic name. Key it on the VM byte/bit address instead; symbolic names are user-friendly but unstable across revisions.