Synchronizing HMI Language Change Across Multiple Siemens Panels

David Krause16 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

Running two or more Siemens HMI panels in parallel against a single S7-1200 PLC is a common plant-floor scenario, but synchronizing the active runtime language between panels that belong to different WinCC product families is rarely obvious. The TP1200 Comfort panel uses WinCC Comfort/Advanced and offers full VBScript, system tags, and a large library of system functions, while the TP177B is a WinCC Basic panel with a restricted script runtime and no VBScript support. The two panels cannot exchange data directly, so the S7-1200 PLC must be used as the shared data hub.

This reference documents the engineering pattern for distributing the active language index from a master panel to a slave panel through a single integer tag, plus an alternative four-bit pattern for projects that require a high number of languages and prefer one-hot boolean mapping. The procedure was originally validated on TIA Portal V13 Update 4 with project software "SIMATIC WinCC Comfort V13 SP1 Update 4". The same concept applies to V15, V16, V17 and V18 projects when the panel firmware is upgraded accordingly; only the dialog navigation paths change slightly.

System Architecture

The data flow is unidirectional from the operator who triggers the language change on the master panel, into the PLC, and out to the slave panel. The PLC never originates a language change; it is purely a transport buffer.

TP1200 Comfort (Master, WinCC Comfort) Operator selects EN / HU / ZH / TH Writes: HMI_Tag_LanguageID S7-1200 CPU 1214C DB / MER bit Tag: HMI_LangID (INT) TP177B (Slave, WinCC Basic) Value change event calls ChangeLanguage Reads: HMI_LangID EtherNet/PROFINET — single subnet

Prerequisites

  • TIA Portal V13 SP1 Update 4 (or V15.1 / V16 / V17 with migrated project). Lower than V13 SP1 lacks the language switching VBS helpers on the Comfort side.
  • One S7-1200 CPU (any firmware 4.x or higher) that owns the project HMI tags.
  • One TP1200 Comfort panel (6AV2 124-1MC01-0AX0 family) loaded with WinCC Comfort V13 SP1 runtime.
  • One TP177B panel (6AV6 642-0BA01-1AX1 or DN variant) loaded with a WinCC Basic V13 SP1 image. The Basic panel must have the matching language list configured in the project.
  • The four project languages configured identically on both panels — English, Hungarian, Chinese, Thai in the original case. Mismatched language indices break the synchronization silently.
  • EtherNet/PROFINET connectivity between the CPU, the Comfort panel, and the Basic panel. A single subnet is sufficient; routing through multiple networks requires you to also set up a connection in Devices & Networks.
  • For commissioning without a physical PLC, PLCSIM V13 SP1 (or higher) can simulate the S7-1200 while both WinCC RT instances run on the engineering station.

Solution Selection: Integer vs Boolean Tags

Two patterns are used in the field. Pick the one that matches your project size and the number of languages.

Criterion Integer Tag (Solution A) Boolean Per-Language (Solution B)
Number of languages supported Up to 32 767 (INT) or 2 147 483 647 (DINT) One bit per language; practical limit 8 to 16
PLC data footprint 1 word 1 word or 1 double word
Readability in PLC code Compact, indexed Self-documenting, e.g. bLangEnglish
Event handling on slave Single value-change event dispatches to N language changes One rising-edge event per language, four total
Behavior on identical value No event fires (must clear tag first) Same — no event fires
Risk of multi-bit race None — atomic write Possible if two operators race the master; must reset others first
Best use case 2 to 4 languages, compact projects 3 to 5 languages where each language has a dedicated UI region

Solution A: Integer Tag Implementation

The integer pattern uses a single 16-bit tag in the S7-1200. The master panel writes the language index on every change; the slave panel monitors the tag and triggers a language switch whenever the value differs from the previous one.

Step 1 — Declare the shared tag in the PLC

  1. Open the S7-1200 station in TIA Portal and create a new global data block (e.g. DB_HMI_Interface).
  2. Add a static tag named HMI_LangID of data type INT. Initial value 0 (default language index).
  3. Optional: add a HMI_LangID_Prev tag of type INT, used by the slave to debounce identical values.
  4. Compile the PLC program. The tag becomes visible to both HMI devices through the standard HMI connection.

Step 2 — Map the language index

Index value Language WinCC language ID
0 English (default) 0x0409 / 1033
1 Hungarian 0x040E / 1038
2 Chinese (Simplified) 0x0804 / 2052
3 Thai 0x041E / 1054
The index you write is your own project index, not the WinCC locale ID. Both panels must list the languages in exactly the same order, otherwise the slave will jump to the wrong translation. The locale ID is what TIA Portal stores internally, but the value you write to the PLC is the project sequence number.

Step 3 — Master panel: write the index on change

On the TP1200 Comfort, attach a "language switch" button to one of these events. The Comfort panel can write the new index to the PLC either with a direct tag connection on the language button, or via a VBScript.

Method A — direct connection (no script):

  1. Open the language button event configuration in the Comfort panel project.
  2. On the Press event, configure Set value on the tag HMI_LangID with the next index in the cycle (0, 1, 2, 3, 0, 1…).
  3. Repeat for as many buttons as there are languages; each button writes a fixed index value.

Method B — VBScript on the Comfort panel (works because Comfort supports scripting):

' Comfort panel — VBS on the language button "Change"
Sub OnClick(ByVal item)
    Dim currentLang, nextLang
    currentLang = SmartTags("HMI_LangID")
    nextLang = (currentLang + 1) Mod 4   ' 4 languages in this project
    SmartTags("HMI_LangID") = nextLang
End Sub

After the tag is updated, the Comfort panel itself switches language automatically through its built-in language-switching mechanism — the script is only needed to mirror the change into the PLC.

Step 4 — Slave panel: react to value change

The TP177B does not have VBScript, so the response is configured as a scheduled task with a value-change event on the tag. Proceed as follows:

  1. In the TP177B project, open HMI Tags and add the PLC tag HMI_LangID with the same acquisition cycle as the master (250 ms is a good default).
  2. Create a Scheduled Task (or use a hidden IO field with the Change event) on the tag HMI_LangID.
  3. On the value-change event, call the system function SetLanguage with the parameter Language set to the value of HMI_LangID. The basic panel does not support the system function name SetLanguage directly in the function list; instead, configure the following equivalent:
  1. Add an Internal tag Slave_LangID of type INT.
  2. Configure an Animation / Appearance on a dummy element that has the property Language linked to Slave_LangID. The Basic panel translates the integer to the matching language from its own project language list.
  3. Alternative, the most reliable: on the same value-change event, call ActivateScreen to navigate to a screen that has the language tag bound to its visible state, forcing a redraw. In WinCC Basic, the cleanest path is to enable "Language switching via PLC tag" under Runtime settings > Language & Font, then point the setting to HMI_LangID.
WinCC Basic panels V13 SP1 and later support the Language pointer under Connections > Area Pointers. When you enable the language pointer and bind it to the same DB word that the master writes, the runtime switches the active language automatically on every cycle — no event script needed. This is the recommended path for the TP177B and is what the field report in the source thread converged on.

Solution B: Boolean Per-Language Implementation

Step 1 — PLC tag layout

Tag Type Initial Meaning
bLangEnglish BOOL TRUE Index 0
bLangHungarian BOOL FALSE Index 1
bLangChinese BOOL FALSE Index 2
bLangThai BOOL FALSE Index 3

Step 2 — Master panel: SET the active language bit, RESET the others

On the Comfort panel, attach a click handler to each language button. The handler SETs its own bit and RESETs the three other bits in the same PLC cycle. This guarantees the one-hot invariant.

' TP1200 Comfort — VBS on the "Hungarian" language button
Sub OnClick(ByVal item)
    SmartTags("bLangEnglish")  = False
    SmartTags("bLangHungarian") = True
    SmartTags("bLangChinese")  = False
    SmartTags("bLangThai")     = False
End Sub

Step 3 — Slave panel: rising-edge event per bit

  1. For each of the four booleans, create a scheduled task or hidden IO field with the Rising edge event.
  2. On the rising edge of bLangEnglish, call ActivateScreen to the English home screen, or set the language pointer to 0.
  3. Repeat for the remaining three bits.

Because the master always RESETS the other three bits before SETting the new one, the slave panel sees exactly one rising edge per language change. There is no risk of two rising edges in the same scan cycle.

Configuring the Master HMI (TP1200 Comfort)

  1. Open the Comfort panel device in the project tree and double-click Languages & Resources.
  2. Add the four project languages under Project Languages. The order is critical: index 0 must be the language that the slave will display when the master shows English.
  3. Compile the HMI project (right-click the panel > Compile > Software (rebuild all)) so that the runtime image picks up the language list.
  4. Create a screen named Language_Select and place four buttons on it. Configure each button's Press event to set the corresponding language (Comfort can do this through the system dialog Set Language under System Functions) and to write the index to the PLC tag in the same event.
  5. On the same screen, bind an IO field to HMI_LangID in Output mode for visual confirmation during commissioning.
  6. Configure a tag connection on the language list to the same DB. Use Synchronous acquisition only if the language buttons are pressed at high frequency; for operator-driven changes, the default Cyclic continuous at 250 ms is sufficient.

Configuring the Slave HMI (TP177B)

  1. Open the TP177B device. The TP177B must be loaded with the matching project, including the same four project languages in the same order.
  2. Open Connections and confirm that the HMI connection to the S7-1200 is online and that the tag HMI_LangID (Solution A) or the four booleans (Solution B) are listed under HMI Tags.
  3. For Solution A (recommended on Basic): open Runtime Settings > Language & Font, enable Language pointer, and bind it to DB_HMI_Interface.HMI_LangID. The runtime will switch the active language on each cycle that the value changes.
  4. For Solution B: under Schedules, add four tasks, each with a 100 ms cycle, monitoring one of the four booleans. Configure the On rising edge event of each task to call ActivateScreen with the home screen of the corresponding language as the screen name.
  5. Open the project properties > Runtime and confirm that the cycle time for the HMI tag is set to a value equal to or faster than the master's update cycle. A slower cycle on the slave delays the visible change but does not break the synchronization.
  6. Compile and download to the panel. TIA Portal V13 SP1 supports incremental compile for Basic panels; the full image is rebuilt only when the language list changes.
The TP177B has 4 MB of project memory in the mono variant and 4 MB in the color variant. Four languages plus a moderate screen set fit comfortably, but if your project includes Asian fonts, enable Asian project language under Project > Languages & Resources and make sure the runtime image on the panel includes the East Asian font. Without this flag, Chinese text shows as squares.

Verification & Commissioning

  1. Start PLCSIM with the S7-1200 program loaded. Start both WinCC Runtime instances from TIA Portal (Comfort RT and Basic RT).
  2. On the Comfort panel, press each language button in turn. Observe the IO field bound to HMI_LangID update to 0, 1, 2, 3.
  3. Watch the Basic panel. The active language should switch within 500 ms to 1 000 ms, depending on the configured cycle time.
  4. Toggle between English and Hungarian ten times in quick succession. The Basic panel must end in Hungarian with no intermediate flicker. If the panel flickers, increase the slave cycle to debounce.
  5. Power-cycle the Comfort panel while the Basic panel remains running. The master restarts in its default language (index 0). The slave does not know that the master has changed, so the languages may diverge after a restart. Add the following PLC logic to handle the restart case:
// S7-1200 — OB1 startup logic
// On first scan, force the default language ID into the buffer
IF "FirstScan" THEN
    "DB_HMI_Interface".HMI_LangID := 0;
END_IF;

If both panels restart together, both will load their default language (index 0 = English), and the next operator action on the master re-synchronizes the slave.

Troubleshooting Matrix

Symptom Likely root cause Corrective action
Master switches, slave stays in previous language Language pointer not enabled on Basic panel Enable Language pointer under Runtime Settings > Language & Font; bind to the DB word
Slave switches to wrong language (e.g. master English, slave shows Chinese) Project language list order mismatch between panels Reorder languages on the slave to match the master exactly, recompile, and download
Slave flickers between two languages on every cycle Master is writing the same value repeatedly, debounce missing In PLC, write the new value only on a real change; or use the Edge evaluation property on the slave tag
Chinese text appears as squares on TP177B Asian font not enabled in the project Open Project > Languages & Resources, enable Asian project language, recompile, and download the runtime image with the East Asian font set
Comfort panel script error "Object doesn't support this property or method" Script using SmartTags on a tag that is not a real PLC point Verify the tag is declared as an HMI tag with PLC connection, not as a local variable
Both panels in English after PLC restart No startup default for HMI_LangID Initialize the tag in OB1 startup or set the DB to retain the previous value with Set retain enabled
Tag shows correct value on master IO field, but Basic panel does not react Different HMI connection name or wrong DB number Compare the connection configuration in both devices, ensure the same DB and absolute address are used
Value updates but no language switch on Basic Cycle time on slave tag is too long (e.g. 5 s) Reduce the acquisition cycle to 250 ms; or change the tag property to Cyclic continuous instead of On demand
Operator presses button, nothing happens on either panel Plcsim not running or HMI connection in error state Check Online > Accessible devices; verify the connection status LED on the Comfort panel and the diagnostic buffer of the S7-1200

Edge Cases & Limitations

  • Master restart divergence. Because the PLC is the only state holder, any restart of the master while the slave stays in runtime will leave the slave in its last language. If the application is safety-relevant (e.g. operator prompts in a regulated line), add a heartbeat tag and force the slave back to the default language after 30 s of no master activity.
  • More than 32 panels. The pattern scales linearly with the number of panels. Each additional slave requires one extra tag subscription; the PLC does not need a unique tag per slave. The broadcast-style design is broadcast by virtue of the shared DB.
  • Mixed firmware generations. A TP1200 Comfort running WinCC Comfort V13 SP1 can synchronize with a TP177B running WinCC Basic V13 SP1 Update 4 or later. Earlier Basic images (pre-V12) do not support the language pointer, so an upgrade of the slave firmware is mandatory. Siemens documents the supported image versions in the Siemens Industry Online Support portal under the entry for each panel.
  • Asian languages and the Basic panel. The TP177B is a 6" panel with limited CPU and memory. Loading Chinese, Japanese, and Korean fonts in addition to Thai can push the project image past the 4 MB limit. Trim the project to the necessary screens and reduce the number of graphical objects if you receive a compile warning about the project size.
  • OP 77B or older panels. Panels older than the TP177B (OP 77B, OP 73, OP 73micro) do not support the language pointer and have very limited event handling. For these panels, the integer tag must be polled by a scheduled task and the language switched by navigating to a per-language home screen, which is fragile and not recommended for production.
  • Two masters, one slave. If the project has two operator stations that both act as masters, write the index from both stations to the same DB word. Add PLC logic to take the latest writer or use a dual-port write that only changes the value on a real transition; otherwise the slave will switch on every scan.
  • Retain behavior. Set the DB containing HMI_LangID to Non-retain if the application should always start in the default language. Set it to Retain if the panel must remember the last-used language across power cycles.

Related Configuration Checks

  • Confirm that the HMI connection on the slave uses the same S7-1200 IP address and rack/slot as the master; mismatched connections silently fail to read the tag.
  • Confirm that the project languages are enabled in Project > Languages & Resources, not just in the device configuration. The flag at project level is what causes the runtime image to include the East Asian font.
  • Confirm that the Comfort panel runtime version matches the engineering version. A V13 SP1 panel loaded with a V14 runtime shows a version mismatch banner and refuses to load the project.
  • If the application uses WinCC V15.1 or later, the language pointer is replaced by the Language system tag in the connection area pointer. The data width and DB address are the same, but the documentation paths in TIA Portal differ.

FAQ

Can the TP177B switch language without a script?

Yes. Enable the Language pointer under Runtime Settings > Language & Font on the TP177B and bind it to the same integer tag the master writes. WinCC Basic then switches automatically on every cycle the value changes, no VBScript required.

Why does my integer tag not synchronize all four languages?

The most common cause is that the master and slave have different project language lists. Open Languages & Resources on both panels and confirm the order is identical: index 0 English, index 1 Hungarian, index 2 Chinese, index 3 Thai. Recompile both projects and download.

How many languages can I synchronize with this method?

Up to 32 767 with an INT tag and 2 147 483 647 with a DINT tag, in theory. In practice, WinCC Basic and Comfort limit the project language list to about 32 entries, and the TP177B 4 MB image fills up with three or four Asian fonts.

Does the pattern work with TIA Portal V15, V16, or V17?

Yes. The same DB tag and the same language pointer concept apply. In V15.1 and later, the language pointer is exposed as the Language system tag in the connection area pointers. The dialog paths differ but the engineering intent is identical.

What happens if the master panel loses power while the slave is running?

The slave keeps its last language because the PLC is the only state holder and the DB may be set to retain. Add a startup block in OB1 that resets the language ID to 0 on first scan, or add a heartbeat tag from the master that forces the slave back to default after a timeout.

Can I synchronize more than two panels with the same PLC tag?

Yes. The PLC tag is a broadcast by virtue of the shared DB; any number of Comfort and Basic panels can subscribe to the same word. The cycle load on the CPU scales linearly with the number of subscribers, but for a typical 2 to 5 panel plant the load is negligible on an S7-1200.

Back to blog