Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Dynamic Siemens Language SupportNew to Visual Studio Code? Get it now.
Dynamic Siemens Language Support

Dynamic Siemens Language Support

Dynamic Engineering

|
1,612 installs
| (3) | Free
Syntax highlighting and Language Server for the Siemens PLC compatible Structured Text, S7RES and S7DCL languages
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Siemens Language Support

This VS Code extension provides syntax highlighting and language tooling (diagnostics, hover, completion, and go-to-definition) for Siemens SCL / Structured Text projects, plus related TIA export formats.

Documentation: danielv123.github.io/vscode_siemens/docs

Bugs/incorrect/missing diagnostics can be reported to danielv@danielv.no - reproducible examples are appreciated.

Features

  • Syntax highlighting via TextMate grammar for Siemens source files
  • Diagnostics and type checking via the Go language server backend
  • Hover type information, completion, go-to-definition (including quoted identifiers), references and call hierarchy
  • Graphical editor for .s7dcl blocks: LAD and FBD editing, SCL networks with full language support, an editable interface table, and find and replace
  • Graphical diffs of .s7dcl blocks against Git HEAD or the version in TIA Portal
  • Live monitoring of Siemens CPUs over S7CommPlus in the graphical editor and SCL (read-only)
  • Table based editor for tag table XML tags and project constants
  • TIA Portal sync: compare, import, export, compile and download from VS Code
  • .s7dcl inlay hints for .s7res titles + navigation from .s7dcl references to .s7res entries
  • Workspace type scoping via .plc.json roots
  • Dedicated PLC testing framework with .scltest support, coverage and debugging
  • Comment toggling and bracket pairing via language configuration

Graphical block editor with monitoring Editing a LAD network Graphical diff Tag table editor

File associations

Files ending in .scl, .st, .s7res, .s7dcl, .udt, .db, .awl and .scltest will be highlighted.

PLC tag-table .xml files are scanned to resolve tags and project constants as global symbols, and receive dedicated XML diagnostics (for example undefined types, duplicate names, and name conflicts). SimaticML .xml exports of blocks and PLC data types are scanned for their interface, so calls, instance DBs and member access that use them are checked. Their networks are not.

Settings

  • siemensLanguageServer.goBinaryPath: absolute path to a custom siemens-lsp backend binary (leave empty to use the bundled binary).
  • siemensLanguageServer.telemetryEndpoint: telemetry ingestion API URL; leave empty to disable extension telemetry uploads.
  • siemensLanguageServer.logAttachmentMaxBytes: maximum raw attachment size for uploaded error logs.
  • siemens.monitoring.pollIntervalMs: delay between PLC monitoring polls, in milliseconds.
  • siemensTia.online.authType, siemensTia.online.user, siemensTia.online.passwordEnv: credentials for TIA Portal device actions (download, online, offline, snapshot) when the PLC requires them. The password is read from the named environment variable.

PLC scopes with .plc.json

  • Place a .plc.json file in each PLC project folder to give it an isolated type scope. This keeps types from one PLC from spilling into another when you have multiple PLCs inside one VS Code workspace.
  • The language server treats the folder containing .plc.json (plus any extra libraries you list) as one scope. Every subdirectory under that PLC root automatically shares the same type index.
  • Example configuration:
{
	"name": "PackingLine PLC",
	"description": "Main line controller",
	"libraries": [
		"../shared_types",
		"../lib/opc_blocks"
	]
}
  • libraries paths are resolved relative to the .plc.json file and must exist to be used.
  • Type lookups never fall back to other PLC roots; each .plc.json keeps its scope isolated.
  • Editing or adding .plc.json files causes the language server to rescan automatically.

Project-Library Support

The language server provides specialized support for Siemens project-library exports. This mechanism is separate from the standard .plc.json libraries list.

To use libraries exported from TIA Portal, the Types directory must be a direct sibling of the folder containing .plc.json, so it is available as ../Types. The server finds .liblink placeholders under the PLC root, for example under Program blocks/Library/ or PLC data types/Library/, and matches them to .libinfo and .libint sidecars in ../Types by their TypeGuid. The Types tree is read-only and is used in addition to any libraries listed in .plc.json. Go to definition, hover and completion work across project libraries, and diagnostics refresh when library sources or metadata change.

TIA Portal Export and Compare

VS Code uses the fast direct exporter for linked TIA projects. Compare checks a fresh PLC export against local sources and their last synchronization baseline, including .s7res texts; it does not require TIA checksums or a compile. Imports still use Openness and recheck the current TIA content before overwriting. See direct export and comparison for CLI options and conflict handling.

The TIA sidebar refreshes automatically when the linked project's saved data changes. Background comparisons leave local files and unsaved TIA edits untouched; the Compare button remains available for a manual refresh.

PLC Testing

The extension includes a dedicated testing framework for Structured Text using .scltest files. It supports both whole-program and isolated unit tests for FCs and FBs.

  • Authoring: Write tests in the DSL to SET values, WAIT_CYCLES, and ASSERT boolean conditions.
  • Discovery: Use the VS Code Test Explorer to manage and run your suites.
  • Reporting: Failures are mapped back to the source .scltest lines with detailed diffs.

See the PLC testing guide for a full guide and example snippets.

WinCC Unified HMI development

plccheck hmi and the stdio server plccheck mcp let agents inspect and edit an open Unified HMI project, import/export global JavaScript modules, compile, deploy to a local simulation, read diagnostics, and assert runtime tag values and quality. Browser automation can test the rendered HMI; the engineering and deployment loop requires no desktop automation.

The tested deployment configuration is TIA V21 with a V20 Unified panel build and one registered local simulation. Full S7CommPlus communication with the generated PLC simulator remains under development. See the HMI command guide for setup, permissions, examples and tested limits.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft