On this v7.7.4 project, almost every component whose data property is bound to a tag has Bidirectional checked. That includes labels, numeric displays, and input fields, and most of the tags are OPC tags. On display-only components the checkbox has no practical effect, because nothing on the client can change that property. On input components it is a live write path to the controller. There is no project-wide switch to turn it off. You fix it per component, and you can also block writes further down the chain at the tag, the driver, or the PLC.
Why does the binding dialog show Bidirectional on components that only display values?
A tag binding always reads: when the tag value changes, the component property updates. With Bidirectional enabled, the binding also watches the property. If the property changes from any source other than the tag itself, the binding writes the new value back to the tag. For an OPC tag, that write goes through the driver to the controller address.
A label or numeric display has no user edit path, so its bound property only changes when the tag pushes a new value. That update is not echoed back as a write. The flag stays dormant.
Editing the property in the Designer is a different case. When the Designer's communication mode is read-only, any attempt to write to the bound tag is rejected and an error pops up. That error shows the write path exists and the Designer is blocking it. It is not a fault in the binding.
Check before moving on: open the binding dialog on one display component and on one input component. Confirm that both show the same tag path and the same Bidirectional state. What separates them is whether the client can change the property.
Which components can actually push a value to the PLC?
Sort the screen by edit path, not by component family. The table below separates harmless bindings from real write paths.
| Component on screen | Can the operator change the bound property? | Effect of Bidirectional on an OPC tag | Action |
|---|---|---|---|
| Label, numeric display, LED/indicator, gauge | No | None in normal operation | Leave as is, or clear it for clarity |
| Numeric/text input field | Yes, on commit | Writes the entered value to the PLC address | Clear it unless this is a setpoint entry |
| Check box, toggle, slider, spinner, dropdown | Yes, on click, drag, or select | Writes on every change, including accidental ones | Clear it unless the write is intended |
| Any component whose property a script sets | Indirectly | Writes when the script changes the property | Audit the scripts (see below) |
Check: list every input-type component on each window, and mark which ones are meant to be operator write points. Everything else on that list is a candidate for clearing Bidirectional.
How do I turn Bidirectional off on the components that need it?
v7.7.4 has no master setting for bidirectional binding. The only global lever is putting the client into a read-only state for a user. That blocks every write, including the setpoints you want, and it shows error messages whenever the operator touches a bound input. Use per-component edits for anything finer than that.
- Open the window in the Designer and select the input component.
- Open the binding on the data property (value, text, selected state, and so on).
- Clear the
Bidirectionalcheckbox and click OK. - Repeat for each unintended write point from your list.
- Save and publish the project so clients pick up the change.
Two approaches both work: clear the flag on every component, or only on inputs. Clearing it only on inputs is faster and covers the actual risk. Clearing it everywhere makes the project self-documenting, because an engineer can then read any binding and know that a checked flag means an intended write. On a large project, do inputs first and clean up display components as you touch those windows.
Check: in a client session, type a value into a cleared input field and commit it. The tag value in the tag browser must not change, and the field should revert to the tag value on the next update.
Where else can a write be stopped: tag, driver, or controller?
A binding write only reaches the process if every layer below it accepts it. That gives you defense in depth even when a component is misconfigured.
| Layer | Where you set it | Effect when set to read-only |
|---|---|---|
| Client / user | Project security or client read-only state | All writes blocked; operator sees an error on any bound input |
| Tag | Tag editor, access/permission settings on the tag | Writes to that tag rejected from every screen |
| OPC server / driver | Driver or server item access configuration | Write returns a failure quality; value unchanged |
| PLC | Controller write protection, external-access settings, or memory protection | Controller refuses the write regardless of SCADA settings |
If the controller does not grant write permission, a bidirectional binding cannot change the PLC value, even when the client or Designer is in read/write mode. That makes the controller setting the strongest backstop for monitoring-only data. It is also the least visible from the SCADA side.
When a write fails, you can tell a binding fault from a tag or permission fault by the tag's state:
- Binding fault: the tag's quality stays good while the write fails.
- Tag or permission fault: the write attempt shows a failure or error quality on the tag.
Check: for each OPC tag that must never be written from SCADA, confirm read-only access at one or more layers below the component. Record which layer it is.
What makes a display component write unexpectedly?
The dormant-flag argument depends on the property changing only from the tag. It breaks in these cases:
- Scripts: a script that sets a bound property (on window open, a button, a timer, or a property-change handler) triggers a write through the bidirectional binding.
- Chained bindings: another binding or a custom property that feeds the same property can do the same.
- Templates and copied components: copying a setpoint entry field to make a display clone carries the checked flag into a place nobody expects writes.
- Designer read/write mode: editing a bound property while the Designer is in read/write mode writes to the live PLC.
Check: search the window and project scripts for assignments to bound properties. For each hit, either clear Bidirectional on that binding or confirm the write is intended.
How do I prove no unintended write reaches the controller?
- Put the Designer in read-only communication mode and edit a bound display property. The write must be rejected with an error, and the tag must not change.
- In a runtime client, exercise every input component you cleared. The tag value must stay unchanged in the tag browser.
- Exercise every intended setpoint input. The tag value and the PLC register must both update to the entered value.
- For protected tags, force a write from a test input or a script. Confirm the tag, driver, or PLC layer rejects it and the PLC value is unchanged in the programming software.
- Trigger each script that touches bound properties. Confirm no unexpected value changes appear at the controller.
FAQ
Does Bidirectional on a label or display component write to the PLC?
Not in normal operation. The operator cannot change the bound property on a display component, so the binding has nothing to write back. A script or another binding that changes that property will still trigger a write.
Can I turn off bidirectional binding for the whole project at once?
No. v7.7.4 has no master switch; you clear Bidirectional in each component's binding dialog. The only global alternative is a read-only client state, which blocks all writes and shows errors when operators touch bound inputs.
Does the Designer write to OPC tags when I edit a bound property?
Only in read/write communication mode. In read-only mode the write is rejected and an error pops up. Switch to read/write only when you intend to change live values.
Can a bidirectional binding write to a PLC tag that is write-protected?
No. If the controller, OPC server, or tag does not permit writes, the write fails and the PLC value stays unchanged, even with the client or Designer in read/write mode.
How do I confirm a cleared input field no longer writes?
In a runtime client, enter and commit a new value, then watch the tag in the tag browser and the address in the PLC programming software. Neither should change, and the field should revert to the tag value on the next update.