OPC UA Timestamps: Source, Server, Gateway, and the One to Store

A single time axis in milliseconds with four numbered points on it and four labelled boxes above: source at 0 milliseconds in the controller image, the OPC UA SourceTimestamp at 180 from a 250 millisecond poll, the gateway publish at 225, and the database arrival at 885 from a one second write batch, with a red double arrow spanning the whole 885 millisecond spread

Belt1_Current crossed 30 A at 11:42:13.412 UTC. The OPC UA server stamped that value 11:42:13.592, the gateway published it at 11:42:13.637, and the row reached the table at 11:42:14.297. One event, four times, 885 ms apart on a day when nothing at all was wrong. Store the second one. The OPC UA SourceTimestamp is the … Read more

A Historian for PLC Data: What to Log, How Often, and What Compression Costs

A six-row table of 1200 tags grouped by class, with the tag count, data type, collector rate, raw events per day and the logging policy each class earns, from 180 analogue process tags through counters and state words to 660 bools and 60 batch-record tags at a fixed one second

1200 tags collected once a second is 160,704,000 values a day, and at the 12 bytes a historian typically spends on a timestamp, a value and a status that is 1.93 GB a day and 704 GB a year. The same 1200 tags, with a deadband at the collector and a compression test at the … Read more

Plant Data on the Business Network: the DMZ, the One-Way Path and What IT Will Ask

Three stacked network zones drawn as bands: the enterprise zone on 10.20.0.0/16, an industrial demilitarised zone holding a broker, a jump host and an NTP server, and the industrial zone on 192.168.10.0 and 192.168.1.0 with two firewalls hatched across the boundaries and a refused direct path crossed out

One firewall rule is usually all a plant data project asks for: TCP 1433 outbound, from a gateway at 192.168.1.40 on the cell network to a SQL Server at 10.20.4.16 on the business network. That rule gets refused, and the refusal is right. What gets approved instead is a broker sitting in a demilitarised zone … Read more

An Edge Gateway That Buffers: Six Hours Offline, and Then What

A table of three publishing strategies for the same machines over a six hour outage, showing the number of metric changes, the number of messages, the mean message size, the megabytes buffered and the resulting steady rate, with the no-deadband row highlighted at 31.66 megabytes

An Edge Gateway That Buffers: Six Hours Offline, and Then What Six hours of the carton transfer at its real change rates is 2.12 MB. Four machines on the same gateway is 8.49 MB. The same four machines with every tag published every second and no deadband on anything is 31.66 MB, and that is … Read more

Sparkplug B Properly: Birth and Death Certificates, Metrics and Rebirth

A five-stage chain showing CONNECT with clean start true and the NDEATH will at QoS 1, SUBSCRIBE to NCMD at QoS 1, NBIRTH at QoS 0 with sequence zero and every metric, DBIRTH at sequence one, and DDATA by alias, with three numbered break points marked underneath for a missing will, a missing subscription and a missing metric

Sparkplug B Properly: Birth and Death Certificates, Metrics and Rebirth The first message the carton transfer gateway sends is 592 bytes on the topic spBv1.0/Plant2_CartonLine/NBIRTH/GW-TR14, it carries all 19 metrics the node will ever publish, and it goes out at QoS 0 with the retain flag clear. Everything about that sentence looks wrong to somebody … Read more

An MQTT Broker for Plant Data: Topics, QoS, Retained Messages and Last Will

The topic string plant2 slash pack slash carton1 slash tr14 slash belt1 slash amps drawn as six boxes labelled site, area, line, machine, device and signal, above a table of five subscriptions including the hash wildcard and the plus wildcard with what each one brings back and a warning on the bare hash

An MQTT Broker for Plant Data: Topics, QoS, Retained Messages and Last Will The topic string plant2/pack/carton1/tr14/belt1/amps is 42 bytes. The float it carries is four. Every publish of the motor current on one belt of the carton transfer therefore spends ten times as much on saying where the number came from as on the … Read more

Arrays, UDTs and Structures Over OPC UA: What the Client Actually Sees

The TR14_Belt user-defined type listed twice side by side with byte offsets, as built at 28 bytes and again at 32 bytes after a DINT called Jam Count is inserted after the State member, with the six members that changed offset marked in red and the hidden host SINT and pad bytes shown in grey

Arrays, UDTs and Structures Over OPC UA: What the Client Actually Sees Insert one DINT called Jam_Count into the TR14_Belt user-defined type, put it after the State member where it belongs logically, and download to the 1756-L83E. Fault_Code moves from byte 4 to byte 8, and Starts, Run_Seconds, Speed_mps, Motor_Amps and Last_Fault_S each move four … Read more

Browsing an OPC UA Server Against a Static Tag List: Which One, and When Each Is Wrong

Six boxes showing what a client does during a browse: read the namespace array from node i=2255, browse the Objects folder at i=85, browse each folder in turn or in batches up to MaxNodesPerBrowse, call BrowseNext for every continuation point returned, read the attributes of each node worth keeping, and finish with a tag list, with two numbered break points naming the continuation point errors

Browsing an OPC UA Server Against a Static Tag List: Which One, and When Each Is Wrong Node i=2255 is the NamespaceArray, and one Read of it is the single most-skipped call in industrial OPC UA. Skip it and you type ns=3 into a client, which works for a year and then reads the wrong … Read more

OPC UA Security Policies and User Authentication: What to Enable, and What It Costs

Table of security policies against the three message security modes, showing that mode None is legal only with policy None, that Basic128Rsa15 and Basic256 are deprecated and should be left off, and that Basic256Sha256 and the two Aes policies are usable with Sign or SignAndEncrypt

OPC UA Security Policies and User Authentication: What to Enable, and What It Costs One RSA-2048 private-key operation measured 3.363 ms on the laptop this was written on, and one pass of AES-256 over a kilobyte of notification measured about 2.1 microseconds. That ratio, roughly sixteen hundred to one, is the whole of the OPC … Read more

OPC UA Certificates: Trust, Rejection, and Why the First Handshake Fails

The six stages of a first OPC UA connection drawn as boxes with numbered break points underneath: Hello and Acknowledge, the OpenSecureChannel request carrying the client certificate, the response carrying the server certificate, CreateSession, ActivateSession with the user token, and the first Browse or Read, with a different status code named at each break

OPC UA Certificates: Trust, Rejection, and Why the First Handshake Fails BadSecurityChecksFailed, status 0x80130000, is the answer an OPC UA server gives when it has decided not to talk to you and is not permitted to say why. Part 6 of the specification is explicit about it: the Reason string in an abort message “shall … Read more

OPC DA to OPC UA: What Changed, and the Tunneller You No Longer Need

The path of one OPC DA read drawn as six boxes: SCADA client calling IOPCSyncIO Read, the COM runtime marshalling with the caller identity, TCP 135 as the RPC endpoint mapper, a second connection to a dynamic port above 49152, the DA server executable and its account question, and the EtherNet or IP driver to the controller

OPC DA to OPC UA: What Changed, and the Tunneller You No Longer Need KB5004442 stopped being optional on 14 March 2023, and with it went the last registry value that could keep an OPC DA link alive between two Windows machines. RequireIntegrityActivationAuthenticationLevel is still sitting under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat on every machine somebody set it on, … Read more

Good Quality, Stale Value: Diagnosing an OPC Link That Is Lying to You

Five boxes in a row from the controller through the driver, the server cache and the subscription to the client, with four numbered red break points marked underneath

Seal_Temp has read 182.4 °C since about 04:00, the quality field next to it says Good, and the trend behind it is a flat line eleven hours long. The bagger has run four product changes in that time and the seal jaws are visibly hot. Nothing on the SCADA is in alarm, nothing in the … Read more

Advertisement