MQTT 5 Reason Codes, Reason Strings, and Negative Acknowledgements

If you have ever debugged an MQTT 3.1.1 deployment where a client mysteriously refuses to connect, or where a publish silently fails to reach its subscribers, you have run into MQTT 3.1.1’s biggest weakness: it tells you almost nothing about what went wrong. The handful of CONNACK return codes are vague, most other packets carry no failure indicator… Read More »

Zakaria El Intissar

CIP Connection Manager Object Explained (Class 0x06)

Behind every Forward_Open is one object. Behind every Forward_Close, every Unconnected_Send, every “connection timeout,” every “out of connections” error — one object. The Connection Manager Object (Class 0x06) is the CIP object that allocates and manages all the connection resources in a device. If Forward_Open is the service, the Connection Manager Object is what answers the door. This… Read More »

Zakaria El Intissar

CIP Ethernet Link Object Explained (Class 0xF6)

When your I/O block reports “Link Down,” when error counters spike in Studio 5000, when a DLR ring takes longer than expected to converge — the data you need lives in the Ethernet Link Object, Class 0xF6. It’s the CIP object that holds every Ethernet-layer diagnostic on every EtherNet/IP device: link status, link speed, duplex mode, MAC address,… Read More »

Zakaria El Intissar

Modbus TCP on the Siemens S7-1500 (TIA Portal): MB_CLIENT and MB_SERVER

The S7-1500 talks Modbus TCP straight out of its PROFINET port. No CP module, no license, no third-party library. You drop in two instructions — MB_CLIENT and MB_SERVER — point them at a connection structure, and you have a working Modbus link. That said, the part that trips people up isn’t dropping the block in. It’s the connection… Read More »

Zakaria El Intissar

CIP TCP/IP Interface Object Explained (Class 0xF5)

Every EtherNet/IP device has an IP address. Every device has a subnet mask and a gateway. Every device decides whether to get its address from DHCP, BOOTP, or static configuration. Every device that participates in multicast I/O has a multicast address range. All of this lives in one CIP object — the TCP/IP Interface Object, Class 0xF5. When… Read More »

Zakaria El Intissar

NERC CIP Compliance: Complete Guide to All CIP Standards

The North American power grid is the largest interconnected machine on the planet. A cyberattack that disrupts it does not just affect one company — it affects millions of people who depend on electricity for hospitals, water treatment, communications, and daily life. NERC CIP exists to prevent that. It is a set of mandatory cybersecurity standards that every… Read More »

Zakaria El Intissar

CIP Connection Types Explained: Transport Class 0, 1, 2, and 3

Every CIP I/O connection has a transport class — a single nibble in the Forward_Open Transport Class Trigger byte that decides how the connection behaves. Class 0, Class 1, Class 2, Class 3 — engineers see these terms in Studio 5000, in Wireshark captures, in product documentation — but rarely with a clear explanation of what each one… Read More »

Zakaria El Intissar

CIP Identity Object Explained: How Every EtherNet/IP Device Identifies Itself

Every CIP device has one. Every browse of an EtherNet/IP network reads from it. Every Forward_Open validates against it. Every “what is this device” query touches it. The Identity Object (Class 0x01) is the most-accessed object on every CIP device — yet most articles barely cover it. This article fixes that. If you have ever wondered where Studio… Read More »

Zakaria El Intissar

EDS Files Explained: How EtherNet/IP Devices Describe Themselves

Open Studio 5000, browse the network, find a third-party EtherNet/IP device, and click “Add Module.” If the device’s EDS file is registered, the configuration tool already knows the device’s Vendor ID, Product Code, supported connections, assembly sizes, and parameter ranges. If the EDS isn’t registered, you get a generic device entry with very little to work with. EDS… Read More »

Zakaria El Intissar