LOGO! 8 Web Editor: Displaying Analog Values and Trends

David Krause20 min read
HMI / SCADASiemensTutorial / How-to
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

The LOGO! 8 Web Editor (LWE) ships with a built-in HTTP server that lets the controller publish a customizable dashboard for operators, technicians, and remote monitoring. Two of the most requested features in field deployments are the ability to display scaled analog values with decimal precision and to render a historical trend of process variables such as pH, temperature, level, or flow. The original LOGO! 8.2 firmware only published integer values, which forces the engineer to scale the variable so that a single integer step corresponds to the required display resolution. LOGO! 8.3, presented by Siemens in October 2020, added a native trend widget and improved numeric formatting in the LWE page, but the underlying LOGO! program still executes in 32-bit signed integer arithmetic.

This reference walks through a complete, working implementation for both the legacy 8.2 path and the current 8.3 path. It covers raw-input scaling, integer trickery for sub-unit resolution, message-text configuration, LWE page layout, native trend setup, a custom HTML5 sparkline workaround, verification steps, and a fault matrix. The example uses an aquarium control application (4–20 mA temperature transmitter, pH probe, level sensor) but the techniques apply to any LOGO! 8 deployment.

Prerequisites

  • LOGO! 8 base module, family 6ED1052-1xxx08-0BAx, with firmware 8.2 or 8.3 installed
  • LOGO! Soft Comfort (LSC) V8.2 or V8.3 for program development and download
  • LOGO! Web Editor (LWE) V1.0.x for firmware 8.2, or V1.1.x or later for firmware 8.3 trend support
  • Analog input module: AM2 (6ED1055-1MA00-0BA0) for 0–10 V / 4–20 mA, AM2 RTD (6ED1055-1MD00-0BA0) for PT100/PT1000, or a base module with onboard AI
  • Transducer wired to the AI, e.g. 4–20 mA temperature transmitter scaled 0–100 °C
  • Ethernet connectivity between the LOGO! and the host PC (default IP 192.168.0.10, configurable via the WBM)
  • Browser: current Chrome, Edge, or Firefox (the LWE page is HTML5-compliant and was tested with Chromium-based releases)
  • MicroSD card, FAT32, 2 GB to 32 GB, for storing the web project on the LOGO!

LOGO! 8 Hardware and Firmware Background

LOGO! 8 (product family 6ED1052) is a logic module with an integrated Web server accessible at http://<ip>/. The firmware revision determines which web features are exposed:

Firmware Release Web Editor Version Decimal Display Trend Widget Notes
8.0 2014 — Integer only No Original Web Editor without custom pages
8.1 2015 LWE 1.0 Integer only No Custom user pages introduced
8.2 2016 LWE 1.0.x Integer only on LWE; decimals possible through LOGO! TDE message text No Extended Web Editor; works with the LOGO! display for decimal formatting
8.3 2020 LWE 1.1.x and later Decimals supported directly on the LWE page Yes (trend widget) Native trend; no high-speed trace
Floating-point caveat: The LOGO! 8 PLC does not implement IEEE-754 floating point at runtime. All math in the FBD/LAD program is performed on 32-bit signed integers (range –2 147 483 648 to 2 147 483 647). To display a value with one decimal place the integer must represent the engineering value multiplied by 10. For two decimals multiply by 100. For three decimals multiply by 1000.

Confirm the firmware under LOGO! > Diagnostics > Module Information in LSC, or from the web front-end under System Information > LOGO! Information. The firmware article collection for LOGO! 8 is available on the Siemens Industry Online Support portal.

Analog Scaling Fundamentals

LOGO! analog inputs return a raw integer count. The AM2 module reports a raw integer on a 0–1000 scale for both 0–10 V and 4–20 mA modes:

Input Mode Electrical Range Raw Integer Range Counts per Unit Resolution
0–10 V 0.000 V to 10.000 V 0 to 1000 100 counts / V 10 mV / count
4–20 mA 4.000 mA to 20.000 mA 0 to 1000 62.5 counts / mA 16 µA / count
PT100 (RTD module) –50 °C to +200 °C –500 to 2000 10 counts / °C 0.1 °C / count
PT1000 (RTD module) –50 °C to +200 °C –500 to 2000 10 counts / °C 0.1 °C / count

The general scaling equation to convert a raw input to engineering units is:

Eng = ((Raw - Raw_min) * Span_Eng) / (Raw_max - Raw_min) + Eng_min

For a 4–20 mA temperature transmitter with 0–100 °C output, the equation simplifies to:

Eng_°C = (Raw * 100) / 1000 = Raw / 10

For a raw input of 418 the result is 41.8 °C. The original engineering note in the field used an algebraic shortcut of the form (Raw * 1.25) - 250 and then divided by 10, but this introduces an unnecessary multiplication and a subtraction where a single division suffices. The corrected scaling keeps the FBD leaner and avoids integer overflow on transducers that span a wider raw range.

Sub-unit Resolution

Because the LOGO! cannot store fractional digits, the integer placed in the variable memory (VM) address must be pre-multiplied by the display resolution. To display temperature in 0.1 °C steps, store the value in tenths of a degree:

VM_tenths_°C = (Raw * 100) / 1000 = Raw / 10 // already in 0.1 °C units

To display 41.8 °C the variable holds 418. The web page or message text then positions the decimal point one digit from the right (e.g. "41.8"). For pH with 0.1 resolution, store the pH multiplied by 10 (e.g. pH 7.2 → 72). For two-decimal displays (rare on LOGO!), multiply by 100.

Overflow Considerations

The 32-bit signed integer ceiling is 2 147 483 647. A 0.1-unit scaled value reaches this ceiling at 214 748 364.7 engineering units, which is rarely an issue for aquarium-grade signals. A 0.01-unit scaled value reaches it at 21 474 836.47, still high. The risk appears when the engineer accidentally multiplies by 1000 (three-decimal resolution) and the underlying raw value is high. Always sanity-check the worst-case integer against the 32-bit ceiling before finalising the program.

Step 1: Scale the Raw Analog Value in the LOGO! Program

Open the program in LOGO! Soft Comfort. Use the Analog Amplifier block (B024) or the Analog Arithmetic Trigger to convert the AI raw value into the scaled integer stored in a VM address.

  1. From the toolbar insert Special > Analog > Analog Amplifier (B024) onto the FBD sheet.
  2. Connect the analog input (e.g. AI1 = IW0) to the input of the amplifier.
  3. Open the block properties:
    • Sensor type: 0–10 V or 4–20 mA (must match the wiring)
    • Lower raw: 0
    • Upper raw: 1000
    • Lower engineering: 0
    • Upper engineering: 1000
  4. Wire the amplifier output to a marker or to a VM word (e.g. VW100). The value is the engineering reading in 0.1 °C units if the physical range is 0–100.0 °C.
  5. Add a scaling correction if a custom offset is needed (e.g. pH probe zero at 7.0). For an offset, subtract after the amplifier:
    • Insert Special > Analog > Analog Arithmetic Trigger or a basic Subtraction block.
    • Subtract the offset in the same 0.1-unit scale (7.0 → 70).
  6. For pH, the sensor is typically 0–14 pH across 4–20 mA. Set Amplifier range to 0–140 in the engineering fields; the integer in VM is then pH × 10 (e.g. 72 for pH 7.2).

Verify the program in LSC with the simulation tool. Connect a virtual potentiometer to AI1, drag the slider through 0–1000, and confirm the value in VW100 follows linearly. Save the program and download to the LOGO! before proceeding.

Step 2: Configure a Message Text for Decimal Display (LOGO! 8.2 Path)

For firmware 8.2, the Web Editor itself cannot render decimal places on its custom pages. The recommended workaround is to add a Message Text (B025) on the LOGO! TDE display with a forced decimal position. The same VM address is later exposed to the LWE page.

  1. Insert Special > Message Texts > Message Text (B025) onto the FBD sheet.
  2. Open the block and configure the text body, e.g.:
    Temperature: 12.3 °C
    pH:         7.0
    Level:     85 %
  3. Select each numeric placeholder, right-click Properties > Number of decimal places, and choose 1, 2, or 3.
  4. Assign the VM address to each placeholder, e.g. VW100 for temperature, VW102 for pH.
  5. Mark the message text as Acknowledge required = No if the LWE page is the primary view; this avoids user intervention on the LOGO! display.

Because the LOGO! TDE display supports decimal places when configured this way, the controller has the formatted text string. In the LWE page on 8.2, use a Static text widget for the label and an Numeric widget bound to VW100 to show the integer value, then add a static decimal suffix (".1 °C" where the engineer manually interprets the position). For one-decimal display this is usually sufficient.

Note on 8.2 trend display: The 8.2 Web Editor does not expose a trend widget. See the Advanced: Custom HTML5 Sparkline Approach section for a workaround, or upgrade to 8.3 firmware and LWE 1.1+ for native trend support. The Siemens LOGO! product page lists the current firmware and software versions.

Step 3: Build the Web Page in LOGO! Web Editor (LWE)

Open LWE and create a new project. Each project is a single HTML page that is downloaded to the LOGO! through the SD card or the Web-Based Management (WBM) upload interface.

  1. Start LWE and select File > New Project. Give the project a name (e.g. aquarium). The project is exported later as a folder containing index.html and the user files.
  2. Set the LOGO! IP in the project settings. The default port is 80.
  3. Add elements to the page. The LWE toolbox contains:
    • Text – static label
    • Numeric display – reads a VW address and shows an integer or formatted value
    • Numeric input – writes to a VW address from the browser
    • Digital display – reads a discrete bit (M, I, Q, B)
    • Button – writes a discrete bit
    • Image – static or state-driven
    • Trend – LWE 1.1+ only, plots a VW address over time
    • Custom HTML – embeds user-supplied HTML/JS for advanced widgets
  4. Drop a Text widget and write "Temperature".
  5. Drop a Numeric display widget to the right of the label. Bind it to VW100. Enable Show decimal and select 1 decimal place if the LWE 1.1+ editor is being used.
  6. Repeat for pH (VW102) and level (VW104).
  7. Style the widgets: 14–18 pt font, dark text on a light background for legibility in greenhouse or outdoor enclosures. The LWE theme editor lets you pick background colour, font, and widget border.
  8. Save the project. LWE produces a folder with a project file, an HTML file, and (for 8.3+) a JavaScript bundle.

Transfer the project to the LOGO!:

  1. Insert an SD card (FAT32) in the LOGO!.
  2. From the WBM (http://<ip>), navigate to Web Editor > Project Upload and upload the exported .zip.
  3. Wait for the LOGO! to reboot the web server. The new page becomes the default at http://<ip>/logo or http://<ip>/web depending on the firmware revision.
  4. Confirm the page loads from a browser on the same subnet.

Step 4: Add a Trend View to the Web Page

The trend widget is available in LWE 1.1+ and is supported on LOGO! 8.3 (the supported baseline per the LWE release notes). It cannot be used on firmware 8.2 unless the firmware is upgraded.

  1. Drop a Trend widget from the LWE toolbox onto the page.
  2. Bind the trend to a single VW address (e.g. VW102 for pH). The widget draws a line chart of the last N samples.
  3. Configure the trend parameters:
Parameter Typical Value Notes
Sample interval 1 s – 60 s LOGO! stores the buffer in VM and serves it on poll; shorter intervals consume more buffer
Buffer length 60 – 600 samples Longer buffer = more VM consumption; LWE enforces a max per firmware
Y-axis min / max 0 / 14 (pH) or 0 / 100 (°C) Set the engineering range that matches the VM scaling
Decimal places 1 or 2 Match the numeric display widget for consistency
Refresh rate 5 s Browser poll rate; lower = higher CPU load on the LOGO!
Line colour Blue (#0066CC) or green Choose a colour that contrasts with the background
  1. Save and upload the project.

Internally, the trend relies on the LOGO! web server keeping a ring buffer of the configured VM address. The buffer depth in the LOGO! firmware is fixed; configure LWE to use the supported range to avoid truncation. If the buffer depth is exceeded the oldest sample is overwritten.

Trend vs. trace: The LWE trend widget is a read-back of the live VM data with a server-side ring buffer. It is not a high-speed trace and cannot sample faster than the LOGO! cycle time allows. For millisecond-level diagnostics use the LOGO! Soft Comfort online observation tool or a third-party SCADA via the LOGO! Modbus TCP server.

Multiple Variables on a Single Page

The LWE trend widget plots one VM address per widget. To display two related values (e.g. pH and temperature) on the same page, drop two Trend widgets stacked vertically, each bound to its own VW address, with consistent Y-axis units and refresh intervals. The LWE editor does not allow multi-trace overlays inside a single widget.

Advanced: Custom HTML5 Sparkline Approach (Firmware 8.2 Workaround)

If a native trend is required on firmware 8.2 (for example, when the controller cannot be upgraded for validation reasons), the LWE editor supports custom HTML elements. The trick is to host a small JavaScript library in the project folder, have the page poll the LOGO! JSON API, and render an in-page SVG sparkline. This is more involved than the 8.3 native trend but is fully supported by the LWE container and degrades gracefully on older browsers.

  1. In the LWE project, add a Custom HTML element. Inside the element, insert a <svg> tag with a fixed viewBox:
    <svg id="phTrend" viewBox="0 0 300 60" preserveAspectRatio="none"></svg>
  2. Add a small JavaScript block that:
    • Polls the LOGO! JSON endpoint (e.g. /logo/inputs.json on firmware 8.2) every 5 s
    • Parses the VW102 value
    • Appends it to an in-memory array, capped at 120 samples
    • Redraws the SVG polyline

The following minimal example renders a 60-sample rolling line for VM word 102 (pH × 10):

<script>
const svg = document.getElementById('phTrend');
const NS = 'http://www.w3.org/2000/svg';
const buf = [];
const MAX = 60;
async function poll() {
  try {
    const r = await fetch('/logo/inputs.json', {cache:'no-store'});
    const j = await r.json();
    const v = Number(j.VW102) || 0;
    buf.push(v);
    if (buf.length > MAX) buf.shift();
    draw();
  } catch (e) { /* keep last frame */ }
}
function draw() {
  while (svg.firstChild) svg.removeChild(svg.firstChild);
  if (buf.length < 2) return;
  const min = Math.min.apply(null, buf);
  const max = Math.max.apply(null, buf);
  const range = (max - min) || 1;
  const stepX = 300 / (MAX - 1);
  const pts = buf.map((v, i) => {
    const x = (i * stepX).toFixed(2);
    const y = (60 - ((v - min) / range) * 58 - 1).toFixed(2);
    return x + ',' + y;
  }).join(' ');
  const poly = document.createElementNS(NS, 'polyline');
  poly.setAttribute('points', pts);
  poly.setAttribute('fill', 'none');
  poly.setAttribute('stroke', '#0066cc');
  poly.setAttribute('stroke-width', '1.5');
  svg.appendChild(poly);
}
setInterval(poll, 5000);
poll();
</script>

This pattern is conceptually identical to the sparkline visualisation technique used in Excel: a compact in-cell (or in-element) line that conveys the shape of recent data without axes, grids, or legends. The same approach can be replicated for any number of variables by repeating the SVG element and the buffer per VM address.

Security: Custom HTML/JS runs in the operator browser, not on the LOGO! CPU. Do not embed credentials, do not poll the LOGO! from the public Internet without a VPN or a reverse proxy with authentication, and keep the LOGO! Web server access control on (the LOGO! ships with HTTP basic auth on the WBM). Disable client-side polling on networks where the LOGO! is also serving the production control loop, to avoid contention.

Verification, Commissioning, and Best Practices

After the project is uploaded, perform the following checks before handing the panel over to operations:

  1. Read-back test: Apply a known current (4.00 mA, 12.00 mA, 20.00 mA) to the analog input. The web page should show the expected engineering value, with the correct number of decimal places and the correct sign.
  2. Range sweep: Sweep the input from 0% to 100% in 10% steps. The web page reading should follow within ±1 LSB of the scaled integer (e.g. ±0.1 °C for 0.1-unit scaling).
  3. Buffer test (8.3 trend): Set the input to a step change (e.g. switch from 4 mA to 20 mA) and confirm the trend updates within one refresh interval. Verify the trend's Y-axis range does not clip the data.
  4. Web page on multiple browsers: Open the page on Chrome, Edge, and Firefox. Verify the widgets render correctly, the trend updates, and there are no JavaScript errors in the dev console (F12).
  5. CPU load check: Open the LOGO! WBM Diagnostics > Cycle Time. The trend polling adds HTTP traffic; if the cycle time climbs above 80% of the configured watchdog, increase the refresh interval or reduce the number of widgets.
  6. Power cycle test: Power off and back on the LOGO!. The web project should reload from the SD card automatically.
  7. Network test: Disconnect and reconnect Ethernet. The page should recover without a manual browser refresh.
  8. Retention test: For processes that require the last value after power-off, mark the VM area as retentive in the LSC program properties and re-verify after a power cycle.

Field Notes

  • Always scale first, display second. Bind the web widget to the scaled VM address, not to the raw AI. The web widget only does formatting, not unit conversion.
  • Pick the smallest decimal count the application needs. One decimal place on temperature is plenty for an aquarium; two places on pH is conventional (e.g. 7.0, 7.2). Excessive decimals push the integer range and may overflow the 32-bit signed space when multiplied by a wide raw range.
  • Reserve a VM block for the HMI. Place all web-bound variables in a contiguous VM area (e.g. VW100–VW200) and document it. This makes future edits to the LWE project much easier.
  • Use retentive VM only when the process needs the last value after power-off. For a trend, retentive VM keeps the buffer through power cycles. For a live reading, non-retentive is fine.
  • Trend depth is finite. On firmware 8.3, the built-in buffer is suitable for a few minutes at 1 s sample rate, or one hour at 60 s sample rate. For longer historical data, use the LOGO! Modbus TCP server and a SCADA package, or log the VM values to the SD card in the user program.
  • Keep the LOGO! firmware current. Siemens ships maintenance releases (e.g. 8.3.1 and later) that fix browser compatibility issues. Check the Siemens Industry Online Support portal for the latest version before commissioning.
  • Test on the actual operator browser. Some corporate environments ship locked-down browsers that disable JavaScript or block inline SVG. Validate the LWE page on the exact hardware/OS/browser combination that will be used in production.
  • Document the LWE project file alongside the LSC program. The web project is a separate artifact and should be versioned in the same way as the PLC program, with a short README that lists the VM map.

SCADA and Modbus TCP Extension

For trends longer than the LWE buffer, the LOGO! 8 ships with a Modbus TCP server on port 502 (configurable in the WBM). VM areas are addressable as Modbus holding registers starting at offset 0. A SCADA package (WinCC, Ignition, or any Modbus client) can poll the same VM words and build a longer-term historian on the SCADA side, while the LWE page continues to provide the operator dashboard. The sparkline rendering pattern is the same: the SCADA hosts a buffer and a polyline, exactly as the HTML5 workaround above.

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Step Remediation
Web page shows raw integer (e.g. 418 instead of 41.8) LWE widget bound directly to AI, not to scaled VM Inspect the widget binding in LWE Bind the widget to VW100 (the scaled integer), not to IW0
Decimal point appears in the wrong place (e.g. 4.18 °C) Scaling factor mismatch with widget decimal count Confirm the integer stored in VW Set widget decimal places to 1 for 0.1-unit scaling; do not double-scale
Trend widget is greyed out in LWE LWE version < 1.1 or firmware 8.2 Check LSC and LWE versions under Help > About Upgrade LWE to 1.1+ and the LOGO! to firmware 8.3
Trend updates erratically Multiple browser tabs polling the same VM Close other tabs, check network traffic Increase poll interval to 10–30 s; consolidate to a single dashboard tab
Custom JavaScript does not execute Browser blocks inline JS from the LOGO! HTTP origin or Content Security Policy Open dev console (F12) and check errors Wrap JS in DOMContentLoaded, use module pattern, or upgrade to LWE 1.1+ native trend
Web page blank after upload SD card not seated, or project not in the /web folder Check WBM Web Editor > Status Re-insert SD card, re-export the project from LWE, upload again
Page loads but widgets show "----" Variable not present in the LOGO! program Open the LOGO! online view, confirm VW address exists Add the VM word to the program and reconnect the widget
Cycle time spike when trend is active Too many widgets, refresh interval too short WBM > Diagnostics > Cycle Time Reduce widget count or raise refresh interval
Decimal values are wrong after a power cycle VM is volatile (not retained) Use a retentive marker or a flag Mark the VM area as retentive in the LSC program properties, or store in a retain-tagged M area
Trend line is flat at the bottom Y-axis range set too wide Inspect trend widget properties Set Y-axis min/max to match the engineering range
HTTP 401 on every page load WBM access control enabled; browser not authenticating Check WBM Security > Users Either disable WBM auth for read-only, or embed the credentials in the LWE page (not recommended for production)
Sparkline polyline draws but stays empty JSON endpoint path wrong for the firmware Open /logo/inputs.json in a browser Adjust the path; on 8.3 the path is /logo/data.json

Frequently Asked Questions

How do I display a calculated analog value with decimals on a LOGO! 8 web page?

Scale the raw analog input into a VM word using the Analog Amplifier (B024) and store the result multiplied by 10 for one decimal place (e.g. 418 for 41.8 °C). On LOGO! 8.2, display the integer in LWE and add a static decimal suffix. On LOGO! 8.3, bind the LWE Numeric widget to the VM word and enable the "Show decimal" option with the correct decimal count.

Can the LOGO! 8.2 Web Editor plot a trend?

No. The 8.2 LWE has no native trend widget. Either upgrade the LOGO! to firmware 8.3 and LWE to 1.1 or later, or use the custom-HTML5 SVG sparkline workaround described above, which polls the LOGO! JSON endpoint and renders a polyline in the browser.

How long can a LOGO! 8 trend buffer be?

The 8.3 native trend buffer is sized in the LWE widget configuration. A typical configuration stores 60 to 600 samples. At a 5 s refresh this is 5 to 50 minutes of history. For longer history, export the data via Modbus TCP to a SCADA package or log the VM values to the LOGO! SD card in the user program.

Does the LOGO! web page support Modbus TCP polling from a SCADA?

Yes. The LOGO! 8 ships with a Modbus TCP server on port 502 (configurable, default 502). VM areas are addressable as Modbus holding registers at offset 0. A SCADA can poll the same VM words that the LWE page reads and build a longer-term trend on the SCADA side while the LWE page continues to serve the operator dashboard.

What is the difference between the LOGO! trend widget and a trace?

The LWE trend widget is a server-side ring buffer of the live VM data, sampled at the configured poll interval, rendered in the browser. A trace (e.g. the LOGO! Soft Comfort online trace) is a high-speed, cycle-by-cycle capture of program variables, suitable for diagnostics. The LOGO! 8.3 LWE does not include a trace widget; use the LSC online observation tool or a SCADA for high-speed capture.

Why does my LOGO! 8.3 LWE show decimal places correctly but my 8.2 LWE does not?

LOGO! 8.3 added a "Show decimal" property on the LWE Numeric widget and on the trend widget. On 8.2 the widget only renders the raw 32-bit signed integer that lives in the VM address. Workarounds are: (a) pre-format the value in a message text and read the result, or (b) use a custom HTML element with JavaScript that positions the decimal point in the browser.

Back to blog