Automation Glossary • IEC 104 COT Troubleshooting

How to Troubleshoot IEC 104 Using Cause of Transmission

Merobix Engineering • • 7 min read

Every ASDU in an IEC 60870-5-104 exchange carries a cause of transmission - a small field saying why this message exists: spontaneous change, interrogation response, command activation, or an error echo. That makes COT the single most informative field in a 104 capture: the symptom you are chasing usually has a COT signature that names the cause directly. This guide is a troubleshooting method built on reading those signatures rather than staring at payloads.

Back to Blog

IEC 104 COT Troubleshooting in one line: To troubleshoot with IEC 104 cause of transmission values, read what the COT of arriving data says about its origin: values arriving only with the interrogation cause mean spontaneous reporting is not happening; commands answered with the negative flag set mean the outstation refused; and the dedicated error causes for unknown type, cause, common address, and information object address mean the two ends disagree about the configuration - each one naming exactly which part disagrees.

First Checks

Get a capture or a protocol log where the COT of each ASDU is visible - Wireshark dissects 104 natively, and most gateways log COT in their diagnostics. Confirm the session basics first: the connection is established and data transfer was started with STARTDT, because a link where the master forgot STARTDT delivers nothing at all and looks like total silence rather than a COT problem - that startup gate is covered in STARTDT and STOPDT.

Then take an inventory of what COTs you actually see over a few minutes of operation. A healthy feed mixes spontaneous data (COT 3) with periodic or background values and the occasional interrogation sequence. The table below is the reading key for what each signature means; the field's definition itself is covered in the cause of transmission explainer.

COT signature in the captureWhat it tells you
COT 3 (spontaneous) flowing for a pointChange reporting works for that point
Data only ever arrives as COT 20 (interrogated)Spontaneous reporting is not configured or not qualifying
COT 6 sent, COT 7 returned with negative flagCommand reached the outstation and was refused
COT 6 sent, no COT 7 at allCommand lost or outstation not processing commands
COT 10 never arrives after an interrogation or commandSequence left incomplete - timeout tuning or device fault
COT 44 or 45 returnedOutstation does not implement that type or cause
COT 46 or 47 returnedAddressing mismatch - wrong common address or IOA

With that key, the sections below work through the three signatures that generate most tickets.

Data Arrives Interrogated but Never Spontaneous

If a point updates whenever you run a general interrogation but never announces its own changes, the outstation is not generating spontaneous transmissions for it. The usual causes, in order: the point's change-detection is not configured (no deadband set, or event reporting disabled for it), the change never exceeds the configured threshold, or the point was mapped for cyclic rather than spontaneous transmission and its slow cycle looks like silence. The COT tells you which world each arriving value comes from - spontaneous, cyclic, background scan, or interrogated - so a few minutes of capture classifies the point's actual behavior definitively.

The fix follows the diagnosis: enable or tune change reporting at the outstation, or accept cyclic delivery and set its period deliberately. This division of labor - interrogation for baseline, spontaneous for changes - is the same pattern as an integrity poll plus event reporting in DNP3, a parallel drawn in the integrity poll explainer, and the troubleshooting instinct transfers directly: baseline works, changes missing, therefore look at change generation, not the link.

Commands Refused: Reading the Negative Confirmation

A 104 command normally echoes back through a fixed COT ladder: the master sends activation (COT 6), the outstation answers with activation confirmation (COT 7), and eventually activation termination (COT 10) reports completion. The P/N flag on the confirmation is the verdict: positive means accepted, negative means refused. A negative confirmation with the mirrored command means your message arrived intact and was rejected on grounds - interlock, local mode, unsupported qualifier, bad select-execute state - so the investigation moves to the outstation's command configuration, not the network.

No confirmation at all is a different animal: the command vanished, which points at the session (sequence numbers stalled, link half dead) or a device too busy to respond. And a confirmation that arrives without a later termination leaves the command's field outcome unreported - some devices are lax about termination, but on equipment that normally sends it, its absence after a breaker command deserves attention before anyone assumes the switch operated.

The Error Causes: 44 to 47 Name the Mismatch

The four error causes are the outstation explicitly rejecting what it cannot interpret, and each names its objection: unknown type identification (44) - the device does not implement that ASDU type; unknown cause of transmission (45) - your COT is invalid in this direction, classically a master echoing monitor-direction causes into commands; unknown common address (46) - the station address is wrong; unknown information object address (47) - the station is right but that point does not exist there. A capture showing 46 or 47 converts hours of is-the-link-broken speculation into a five-minute address-table comparison.

These mismatches concentrate at configuration boundaries: after an RTU replacement, a gateway remap, or a SCADA migration, when one end's table changed and the other's did not. The fix is aligning the interoperability profiles - the agreed subset of types, causes, and addresses both ends implement - and re-verifying the points that changed. Getting that agreement right at commissioning time is the subject of the addressing-plan guide referenced from connecting IEC 60870 devices to cloud SCADA.

When to Escalate

Escalate with the COT evidence attached: the capture excerpt showing the signature - the negative confirmation, the error cause, the missing termination - plus both ends' configuration exports for the disputed points. Vendors resolve a ticket that says COT 47 for IOA range such-and-such after firmware update in a day; they cannot do much with commands sometimes fail. The COT vocabulary is the shared language between you, the vendor, and the capture.

Escalate operationally when command sequences misbehave on primary equipment - refused or unterminated commands on breakers and valves are an operations and protection matter first and a protocol matter second. Leave the field state verification to qualified site personnel and their procedures; the capture can wait, the uncertainty about whether a breaker actually opened cannot.

Frequently Asked Questions

What does COT 45 mean and why am I seeing it?

The outstation is telling you the cause of transmission in your message is one it does not accept in that context - typically a master using a cause that is only valid in the monitor direction, a gateway passing through causes the end device never implemented, or a plain profile mismatch. Compare the interoperability documents for both ends and align the causes each direction is allowed to use.

Why do commands time out with no response at all?

No activation confirmation means the command never reached processing: the session may be up without data transfer started, sequence-number acknowledgment may have stalled so the connection is about to reset, or the device is overloaded. Check STARTDT state and the session's acknowledgment health first - a command dying silently is nearly always a session problem, while a live session that objects to a command answers with a negative confirmation instead.

Is cause of transmission the same as DNP3's IIN field?

They are complementary rather than equivalent. COT is per-message context - why this ASDU was sent - while DNP3's IIN is per-response device state - flags the outstation raises about itself. Both serve the same troubleshooting role of making the device's perspective visible in every exchange, which is why reading them is the fastest diagnostic in each protocol.

Sources and verification

This page references the protocol specifications published by the organizations below. Editions, product capabilities, and documentation change over time - confirm current requirements and specifications directly with the source.

Merobix is not affiliated with, endorsed by, or sponsored by these organizations; their names are used only to identify the standards and products discussed.

More in General Automation Concepts
Cause of Transmission (COT)  •  IEC 60870-5 Cause of Transmission Table  •  Troubleshoot a noisy 4-20mA signal  •  Troubleshoot GC Ghost Peaks  •  Balanced vs Unbalanced Transmission  •  All General Automation Concepts →
Free SCADA operator training
Merobix University - 70 video lessons & 261 quiz questions, from first login to compliance reporting. No demo call required.
Start free →