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 |
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.
- From the toolbar insert Special > Analog > Analog Amplifier (B024) onto the FBD sheet.
- Connect the analog input (e.g. AI1 = IW0) to the input of the amplifier.
- 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
- 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.
- 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).
- 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.
- Insert Special > Message Texts > Message Text (B025) onto the FBD sheet.
- Open the block and configure the text body, e.g.:
Temperature: 12.3 °C pH: 7.0 Level: 85 %
- Select each numeric placeholder, right-click Properties > Number of decimal places, and choose 1, 2, or 3.
- Assign the VM address to each placeholder, e.g.
VW100for temperature,VW102for pH. - 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.
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.
- Start LWE and select File > New Project. Give the project a name (e.g.
aquarium). The project is exported later as a folder containingindex.htmland the user files. - Set the LOGO! IP in the project settings. The default port is 80.
- 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
- Drop a Text widget and write "Temperature".
- 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. - Repeat for pH (VW102) and level (VW104).
- 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.
- 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!:
- Insert an SD card (FAT32) in the LOGO!.
- From the WBM (
http://<ip>), navigate to Web Editor > Project Upload and upload the exported.zip. - Wait for the LOGO! to reboot the web server. The new page becomes the default at
http://<ip>/logoorhttp://<ip>/webdepending on the firmware revision. - 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.
- Drop a Trend widget from the LWE toolbox onto the page.
- Bind the trend to a single VW address (e.g.
VW102for pH). The widget draws a line chart of the last N samples. - 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 |
- 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.
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.
- 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>
- Add a small JavaScript block that:
- Polls the LOGO! JSON endpoint (e.g.
/logo/inputs.jsonon firmware 8.2) every 5 s - Parses the
VW102value - Appends it to an in-memory array, capped at 120 samples
- Redraws the SVG polyline
- Polls the LOGO! JSON endpoint (e.g.
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.
Verification, Commissioning, and Best Practices
After the project is uploaded, perform the following checks before handing the panel over to operations:
- 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.
- 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).
- 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.
- 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).
- 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.
- Power cycle test: Power off and back on the LOGO!. The web project should reload from the SD card automatically.
- Network test: Disconnect and reconnect Ethernet. The page should recover without a manual browser refresh.
- 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.