scada - edge computing - efficient iiot …...opc, 510 http, 831 modbus maintain, 119 mqtt, 139...

50
Efficient IIoT Communications An OPC-UA, HTTP, Modbus and MQTT benchmarking discussion Johnathan Hottell April 30 2019

Upload: others

Post on 30-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Efficient IIoT CommunicationsAn OPC-UA, HTTP, Modbus and MQTT benchmarking discussion

Johnathan Hottell

April 30 2019

Page 2: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

What’s Better, Modbus or MQTT?

• That’s a loaded question

• It depends…

• There’s no way to make an objective comparison without framing better questions first

Page 3: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Agenda

• Discuss the issues that arise when thinking about how to benchmark protocols

• Sending a single value – what is the actual cost

• Sending Nine values and data concentration

• Real world - Sending 389 values for an Oil and Gas wellsite on change

• Final thoughts

Page 4: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Start by framing the application more clearly

• Best for the Plant floor?

• Best for Interoperable interfaces on a wired network?

• Best for IoT Wired Networks?

• Best for IIoT – Constrained networks?

• Best for battery powered devices?

• Best for distributed real-time SCADA?

Each of these questions has a different answer... and the answers may not be straight forward…

Page 5: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Protocol Use Overlap

• Many protocols can be used in similar scenarios –that doesn't mean they're a perfect fit for them all

• What are your applications most important requirements?

HTTP

Manufacturing

IoT

Internet

Industrial

SCADAPlant Floor

MQTT

OPC-UA

Modbus

IT

Low Bandwidth

Intermittent Connection

Fragile Networks

Broadband Network

Real-Time

Poll-Response

Protocol

Serial

TCP/IPStandard

Machine to Machine

Cloud

Aps

Small Code Footprint

Free

RESTful

JSON

Open

On Exception

Page 6: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Ideal Conditions vs The Real World

• Expectations vs reality – the results are usually more complicated than you think

• Ideal condition experiment – testing on the bench can be misleading – for instance testing using a 100/1000 network vs on a slow SCADA network

• Be careful to not test to win

Page 7: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Hardware and Software Used for Testing

• Hardware• Windows 10 Laptop x 2• Raspberry Pi• EZ Logix PLC• Thermo Scientific AutoPilotPro• Moxa Ethernet Switch

• OS• Windows• Linux Mint• Raspbian Stretch

• Software• Node-Red• Ignition• ACM• Kepware• Wireshark• MQTT.fx• MQTTSpy

Page 8: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Use case: Retrieve 1 Value

Retrieve 1 value via OPC, HTTP, Modbus RTU Encapsulated, and MQTT

Tag001 499.000000

Page 9: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Communication Events That Consume Bandwith• Making the connection

• Transferring data

• Keeping the connection alive

• Tearing down the connection

Page 10: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Slow Connection Considerations

• If you are on a high speed network you may just consider data bytes and not think about the number of packets sent

• Packets sent is a critical metric on a slow network –total round trip latency can be a killer if a lot of small packets need to be sent vs fewer larger packets

Page 11: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 75

HTTP, 8

Modbus, 10

MQTT, 8

Sparkplug15

0

10

20

30

40

50

60

70

80

PACKETS

Packets to connect

OPC HTTP Modbus MQTT Sparkplug

OPC, 12,393

HTTP, 700

Modbus, 450

MQTT, 520

Sparkplug 2,610

0

2000

4000

6000

8000

10000

12000

14000

BYTES

Bytes to connect

OPC HTTP Modbus MQTT Sparkplug

Making the Connection

Page 12: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 12,393

HTTP, 700

Modbus, 450

MQTT, 520

Sparkplug 2,610

0

2000

4000

6000

8000

10000

12000

14000

BYTES

Bytes to connect

OPC HTTP Modbus MQTT Sparkplug

Cost to Connect

• Protocols must connect before transferring data

• OPC send’s a lot of data on connection.

• OPC’s best use cases may not be over slow, constrained, or fragile networks…

Page 13: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Cost to Connect

• Sparkplug B sends a bit more data on connection than some of the other protocols, this is because of the “Birth” message

OPC, 12,393

HTTP, 700

Modbus, 450

MQTT, 520

Sparkplug 2,610

0

2000

4000

6000

8000

10000

12000

14000

BYTES

Bytes to connect

OPC HTTP Modbus MQTT Sparkplug

Page 14: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Payload

• Now that the connection is made, how much data is used to send one value

Page 15: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 6

HTTP, 8

Modbus Maintain,

2

MQTT, 2

Modbus Release,

9

0

1

2

3

4

5

6

7

8

9

10

PACKETS

Packets for a single value

OPC HTTP Modbus Maintain MQTT Modbus

OPC, 510

HTTP, 831

Modbus Maintain,

119

MQTT, 139

Modbus Release

571

0

100

200

300

400

500

600

700

800

900

BYTES

Bytes for a single value

OPC HTTP Modbus Maintain MQTT Modbus

Data used to send a single value

Page 16: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 510

HTTP, 831

Modbus Maintain,

119

MQTT, 139

Modbus Release

571

0

100

200

300

400

500

600

700

800

900

BYTES

Bytes for a single value

OPC HTTP Modbus Maintain MQTT Modbus

Maintaining a Connection vs Disconnecting When Done

• HTTP usually connects and releases when done, this means it is going to be more inefficient for a single value than if the connection is held open

• Similarly, Modbus usually releases the port when done though in some cases it can be set up to maintain the connection

Page 17: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 510

HTTP, 831

Modbus Maintain,

119

MQTT, 139

Modbus Release

571

0

100

200

300

400

500

600

700

800

900

BYTES

Bytes for a single value

OPC HTTP Modbus Maintain MQTT Modbus

Maintaining a Connection vs Disconnecting When Done

• MQTT is intended to connect then maintain the connection

• Modbus and MQTT are both fairly efficient when you hold the connection open

Page 18: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

MQTT Wireshark

The actual payload for a single value in a MQTT message is insignificant compared to the rest of the TCP/IP overhead.Sending more payload than a single value would be more efficient…

Page 19: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus TCP Release When Done Wireshark

The payload for a single value in a Modbus Release When Done message is even more insignificant compared the rest of the connection and TCP/IP overhead...

Page 20: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Maintaining the connection

• Maintaining a connection unfortunately is not free

• There is a keep-alive ping sent on an interval

• Some implementations let you adjust this keep-alive ping frequency

• How often you ping depends on the criticality of knowing when a device goes offline vs conserving bandwidth

Page 21: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 5

HTTP, 0

Modbus, 3

MQTT, 2

0

1

2

3

4

5

6

PACKETS

Packets to keep-alive

OPC HTTP Modbus MQTT

OPC, 438

HTTP, 0

Modbus, 184

MQTT, 176

0

50

100

150

200

250

300

350

400

450

500

BYTES

Bytes to keep-alive

OPC HTTP Modbus MQTT

Cost to Maintain a ConnectionUnfortunately you can’t always adjust the keep-alive time, you can often set it with MQTT as it was designed with bandwidth usage in mind.

Page 22: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

So keeping the things we have learned in mind; What would the “Total Cost of Ownership”(TCO) be to send one value every minute for an hour (60 records), with connection and keepalive cost included?

AKA “Minute Data”

Page 23: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 495

HTTP, 480

Modbus Maintain,

166

MQTT, 152

Modbus Release,

540

0

100

200

300

400

500

600

PACKETS

Packets

OPC HTTP Modbus MQTT Modbus Lazy

OPC, 37,095

HTTP, 49,860

ModbusMaintain,

9,798

MQTT, 10,972

Modbus Release,33,000

0

10,000

20,000

30,000

40,000

50,000

60,000

BYTES

Bytes

OPC HTTP Modbus MQTT Modbus Lazy

TCO of an hours worth of minute dataAssuming keep-alive can be set to 5 minutes on OPC, Modbus, and MQTT

Page 24: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Data On Change Example For a Valve StationOK, so now what if we needed to know within five seconds when a valve started moving?(Valve moves twice per day)(Single tag – not a perfect example)

Page 25: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 105,195

HTTP, 138,240

Modbus Maintain,

35,434MQTT,

588

Modbus Release,172,800

0

20,000

40,000

60,000

80,000

100,000

120,000

140,000

160,000

180,000

200,000

PACKETS

Packets

OPC HTTP Modbus MQTT Modbus Lazy

OPC, 8,230

HTTP, 14,359

ModbusMaintain,

2,000

MQTT, 51

ModbusRelease,10,000

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

16,000

BYTES

kB

OPC HTTP Modbus MQTT Modbus Lazy

TCO of a days worth of 5 second dataAssuming keep-alive can be set to 5 minutes, data changes twice per day

Page 26: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 8,230

HTTP, 14,359

ModbusMaintain,

2,000

MQTT, 51

ModbusRelease,10,000

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

16,000

BYTES

kB

OPC HTTP Modbus MQTT Modbus Lazy

TCO of a days worth of 5 second dataAssuming keep-alive can be set to 5 minutes, data changes twice per day

MQTT data consumption is significantly lower than the others in this case because the data is only sent when the value changes.

Page 27: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Release When Done

99.5%

MQTT0.5%

Modbus MQTT

We are starting to detect that MQTT can be quite efficient when set up to send data when it changes v.s. traditional polling

More on this later…

kB MQTT on change vs Modbus Release When Done for a single value.5 second resolution and data changes once per day

Page 28: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value
Page 29: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Use case: Retrieve 9 Values

Retrieve 9 values every minute via Modbus RTU Encapsulated vs MQTT vs MQTT Sparkplug B

Differential Pressure 0.000000

Static Pressure 499.000000

Temperature 73.361351

MCFD 0.000000

MCF CD 0.000000

MCF PD 0.000000

Sales Valve 0.000000

Tubing Pressure 565.820007

Casing Pressure 576.809998

Page 30: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Considerations

• These values are not in a contiguous Modbus block so Modbus has to poll three different ranges of registers

• Not all drivers for the same protocol will give the same results

• Sparkplug can be more efficient if it is implemented as intended vs sending unnecessary data

Page 31: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Actual MQTT Payload Sent In This Test

• {"timestamp":1520722891000,"metrics":[{"name":"","alias":10,"timestamp":1520722891000,"value":1},{"name":"","alias":11,"timestamp":1520722891000,"value":1},{"name":"","alias":12,"timestamp":1520722891000,"value":1},{"name":"","alias":13,"timestamp":1520722891000,","value":1},{"name":"","alias":14,"timestamp":1520722891000,"value":1},{"name":"","alias":15,"timestamp":1520722891000,"value":1},{"name":"","alias":16,"timestamp":1520722891000,"value":1},{"name":"","alias":17,"timestamp":1520722891000,"value":1},{"name":"","alias":18,"timestamp":1520722891000"value":1}],"seq":2}

Page 32: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Modpoll,

29

Modbus ACM, 14

MQTT, 2

MQTT Sparkplug, 2

0

5

10

15

20

25

30

35

PACKETS

Packets for 9 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Modbus Modpoll,

1,825

Modbus ACM, 897

MQTT, 897

MQTT Sparkplug, 303

0

200

400

600

800

1000

1200

1400

1600

1800

2000

BYTES

Bytes for 9 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Real Device, 9 values

Page 33: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Modpoll, 1,825

Modbus ACM, 897

MQTT, 897

MQTT Sparkplug, 303

0

200

400

600

800

1000

1200

1400

1600

1800

2000

BYTES

Bytes for 9 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Different Modbus Drivers

Different modbus drivers seem to return different results, in this case Modpoll seems to send the data twice

Page 34: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Modpoll, 1,825

Modbus ACM, 897

MQTT, 897

MQTT Sparkplug, 303

0

200

400

600

800

1000

1200

1400

1600

1800

2000

BYTES

Bytes for 9 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

MQTT VS Modbus

MQTT Uses the same ammount of bandwidth as Modbus ACM, even though it is sending 3x more data (timestamp, alias, and value)

Page 35: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Modpoll, 1,825

Modbus ACM, 897

MQTT, 897

MQTT Sparkplug, 303

0

200

400

600

800

1000

1200

1400

1600

1800

2000

BYTES

Bytes for 9 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Sparkplug B Compresses Data 3x

MQTT Sparkplug B is 3x more efficient than regular MQTT sending the exact same payload because It compresses the data.

Page 36: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus75%

MQTT25%

MQTT Sparkplug B vs Modbus Poll Response

Modbus MQTT

Page 37: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Sparkplug B Data on Birth

{"alias":13,"timestamp":1520722891000,"value":1

}

{"name":"",

"alias":13,

"timestamp":1520722891000,

"dataType":"UInt16",

"value":1

}then

On birth (connection) Sparkplug B publishes important information about the tags that will not be sent in subsequent value updates

birth

Page 38: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Data Concentration

Now what if the same minute data was buffered and shipped via MQTT every 10 minutes instead of every minute?

Page 39: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus Modpoll,

290

Modbus ACM, 140

MQTT, 2

MQTT Sparkplug, 2

0

50

100

150

200

250

300

350

PACKETS

Packets for 90 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Modbus Modpoll,

18,250

Modbus ACM, 8,970

MQTT, 6,585

MQTT Sparkplug, 1,383

0

2000

4000

6000

8000

10000

12000

14000

16000

18000

20000

BYTES

Bytes for 90 values

Modbus Modpoll Modbus ACM MQTT MQTT Sparkplug

Same Device, 90 values sent every 10 minutes(Modbus isn’t buffering, it is still polling every minute)

Page 40: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus87%

MQTT Spark Plug B13%

Modbus MQTT Spark Plug B

MQTT Sparkplug B x10 buffered vs Modbus Poll Response

Page 41: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value
Page 42: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Oil and Gas RTU Data On Change

Retrieve 389 tags for a wellsite. Data on exception and limited to minute resolution - Modbus vs MQTT on change.

Page 43: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Sample data on a real Thermo AutoPilot Pro RTU with plunger tagsTotal 389 tagsEstimated how often the values would change based on usual activity and theoretical deadbands

223 discrete tags that would not change in an hour

111 tags would change hourly

19 intermittently used analog values

36 analog values would change each minute

Page 44: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Hourly, 26%

No Change, 59%

2 Minute, 5% 1 Minute,

10%

Tag Change Frequency in an hour %

Hourly No Change 2Minute Minute

59% of the data doesn’t change even once in a hour

So why poll for it each time…

Page 45: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

OPC, 27.72

HTTP, 17.52

Modbus, 8.04

MQTT All, 5.88

MQTT Sparkplug B On Change

0.720

5

10

15

20

25

30

MB

mB to poll minute resolution data on 389 tags over a 24 hour period

OPC HTTP Modbus MQTT All MQTT Sparkplug B On Change

Page 46: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Modbus91%

MQTT9%

mB MQTT Sparkplug B On Change vs Modbus Poll Response

Modbus MQTT

Page 47: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value
Page 48: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

Final Takeaways

• The most bandwidth savings comes from report by exception

• Sparkplug compresses 3x

• Trading Modbus for MQTT Sparkplug on exception can result in ~75% to ~99.5% network bandwith savings but it will depend on your application, number of points, criticality of the data, and other factors

• Network bandwidth savings is always an estimate until you actually implement and test in the real world...

Page 49: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value
Page 50: SCADA - Edge Computing - Efficient IIoT …...OPC, 510 HTTP, 831 Modbus Maintain, 119 MQTT, 139 Modbus Release 571 0 100 200 300 400 500 600 700 800 900 BYTES Bytes for a single value

About The Author

Johnathan Hottell has over 18 years of industrial SCADA Automation experience and is currently the SCADA Supervisor at EXCO Resources, Inc.

SocialLinkedIn: Johnathan HottellTwitter: electronhacksYouTube: electronhacks

The views expressed in this article do not necessarily reflect the views of EXCO Resources, Inc.