WAGO BACnet Write Maps Mirror Present Value and Never Relinquish

Brian Holt7 min read
Other TopicTechnical ReferenceWago
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

A WAGO controller that commands remote BACnet objects through Write Maps cannot release a priority slot on the remote device. A Write Map transfers the local marker object's Present_Value, and a Present_Value is never NULL. When no local priority is active, the marker object resolves to its Relinquish_Default, and depending on the Write Map configuration that default gets written to the remote object as a real command. The remote point then sits at a value your logic never meant to hold. It stays there until something writes NULL at that exact priority.

Skip the quick fixes that leave the remote slot occupied

These are the usual first attempts. Each one leaves a value in the remote Priority_Array.

Quick fix tried What actually happens on the remote device
Write NULL to the local marker object at your priority The local slot clears, the marker falls back to Relinquish_Default, and the Write Map pushes that value out. The remote slot stays occupied.
Set the marker's Relinquish_Default to match the remote device's default This works only by coincidence. The remote slot still holds a value at your priority and masks every lower priority, including the device's own schedule or local logic.
Write 0 or an "off" state to mean "release" 0 is a command. Operator overrides and schedules at lower priorities stay blocked.
Write the same remote object from both a Write Map and a Remote Object FB Two writers compete at the same priority. The last write wins, and the NULL from the FB is overwritten on the next Write Map transfer.
Replace every Read Map with cyclic Remote Object FB reads You lose COV, bus traffic rises with every added point, and slow MS/TP segments or small field devices start timing out.

Understand why a mapped value can never become NULL

A commandable BACnet object (AO, AV, BO/DO, BV/DV, MO, MV) has a 16-slot Priority_Array. Slot 1 is the highest priority and slot 16 is the lowest. Present_Value is derived from that array. It equals the highest-priority non-NULL slot, or Relinquish_Default when every slot is NULL. It is always a concrete value.

A Write Map is a value mirror. It reads the local marker's Present_Value and issues a WriteProperty with that value at the configured priority. It does not mirror the state of the local priority array, so it has nothing that could produce a NULL.

Releasing a remote command requires a separate WriteProperty to Present_Value that carries a NULL value at the priority you originally wrote. The Remote Object function blocks can send that request. A Write Map cannot.

Split reads and writes by service

The architecture that holds up assigns each service to the tool built for it.

Task Tool Reason
Read remote sensors and status, especially event-driven values Read Map (WAGO BACnet Configurator) Subscribes to COV, so the remote device reports changes and the controller does not poll
Command a remote point and later release it Remote Object FB Can write an explicit NULL at a chosen priority
Permanent setpoint writes that are never released Write Map is acceptable No relinquish needed; configuration stays in the Configurator
Object types outside AI, AO, AV, DI, DO, DV, MI, MO, MV and Schedule Read Map The Remote Object FBs do not cover them
Remote device without COV support Remote Object FB cyclic read, or Read Map without COV Set the poll rate from how fast the process actually changes, not from the PLC task cycle

Keep one writer per remote object and priority. If an FB owns the write, remove any Write Map that points at the same remote object.

Name marker objects so Who-Has stays deterministic

Every Read Map needs a local object, so marker objects cannot be avoided on the read side. Keep them from polluting the network namespace:

  • Object_Name must be unique within the local device. Duplicate names across devices make a Who-Has by name return several I-Have responses, and supervisory tools may bind to the wrong device.
  • Build marker names from the source address, for example a prefix that includes the remote device instance and object identifier. The name then shows at a glance which device owns the data.
  • Use the Description property to state that the object is a mirror and not the source of truth.
  • Moving writes to Remote Object FBs removes the Write Map markers entirely. This change alone cuts the duplicate count substantially.

Restore control now, then rebuild the write path

Temporary restore (production down, remote point stuck):

  1. Disable the Write Map that targets the stuck object. Otherwise it rewrites the value within one transfer cycle.
  2. Connect a BACnet browser or workstation tool and read the remote Priority_Array. Identify the slot your controller occupies.
  3. Write NULL to Present_Value at that priority only. Do not clear slots that belong to other systems.
  4. Confirm that Present_Value now follows the next-lower active priority or Relinquish_Default.

Permanent repair:

  1. Record one priority level per controller function (for example, automatic control and operator override) and document it. Do not use priorities 1 and 2. BACnet reserves them for life-safety functions.
  2. Delete the Write Map and its local marker object for every point that must be released.
  3. Instance a Remote Object FB for each commanded point, addressed by remote device instance, object type, and instance number.
  4. In the application, write the command value while control is active. Write NULL at the same priority on the transition to inactive. Trigger both writes on edges, not on every scan.
  5. Keep Read Maps with COV for feedback, so the controller sees the remote object's resolved Present_Value after each write.
  6. Download the application and export the updated Configurator project together, so the mappings and the code match.

Stop here if the remote device rejects the NULL write. Commissioning cannot fix that; the cause is in the device itself.

Confirm the remote priority array actually clears

  1. Command the point from the FB, then read the remote Priority_Array. The value must appear only in your assigned slot.
  2. Release the point, then read the array again. Your slot must read NULL.
  3. Check that the remote Present_Value returns to the device's own schedule, its lower-priority logic, or its Relinquish_Default.
  4. Power-cycle the remote device. Confirm that COV notifications resume, which shows the controller re-subscribes, and that no stale command reappears.

Watch two COV settings. A COV_Increment on an analog input that is set too wide hides real process movement. An expired subscription lifetime silently freezes the mirrored value. If a Read Map value stops changing while the field value moves, check subscription status before you check the wiring.

FAQ

How do I write NULL to a remote BACnet object from a WAGO controller?

Use a Remote Object function block and send a NULL value to Present_Value at the same priority you used for the command. A Write Map cannot do this, because it transfers the local Present_Value, which is never NULL.

How do I read remote BACnet values with COV on WAGO?

Configure a Read Map in the WAGO BACnet Configurator against the remote object. The controller subscribes to COV and updates the local marker object when notifications arrive. After a remote device restart, confirm the subscription has been renewed.

How do I avoid duplicate object names with BACnet Read Maps?

Give each marker object a unique Object_Name built from the remote device instance and object identifier. Use Remote Object FBs for writes so no Write Map markers are created. This keeps Who-Has responses unambiguous.

Why does my remote BACnet output stay at the relinquish default after my logic releases it?

The Write Map transferred your marker object's Relinquish_Default as a real command at your priority. Disable the Write Map, write NULL at that priority with a BACnet tool to restore control, and then move the point to a Remote Object FB.

When should I escalate a WAGO BACnet issue to official support?

Contact WAGO support through its official channels if a Remote Object FB's NULL write is acknowledged but the remote slot does not clear, or if Read Maps stop receiving COV after re-subscription. Contact the remote device manufacturer if the device rejects NULL writes or does not support the priority you need. Have the Configurator project, the firmware versions of both devices, and a packet capture of the failed write ready.

Back to blog