Zeus
From Olympus, orchestrating every device.
A .NET framework for industrial host applications.
Communications, protocols, acquisition, and lifecycle management are handled by the framework, while WinForms, WPF, or console apps can provide the UI.
Leave the complexity to Zeus, and keep the user experience simple.
English | 简体中文
✨ Features
- 🔌 Channels — Serial, TCP, UDP client/server, and virtual channels through one consistent API
- 📡 Protocols — Custom frames, Modbus RTU/TCP/ASCII, Mitsubishi MC 1E/3E/4E Binary/ASCII, Siemens S7 TCP, Omron FINS UDP/TCP, Omron Host Link ASCII, Panasonic MEWTOCOL-COM, Allen-Bradley EtherNet/IP CIP, DL/T 645-2007, IEC 60870-5-104, MQTT 3.1.1, OPC UA, and SNMP v2c, with virtual slave/PLC/meter/Broker/Server/Agent support
- 📊 Acquisition — Define a point table once, poll on intervals, keep current snapshots, calculate alarm limits, and write writable points back by name
- 🧭 Tracing — Channel-level TX/RX packet events, rolling in-memory records,
builder.Logging, andAddCommunicationLoggingstructured logs - 🖥️ Desktop UI — WinForms binds controls directly; WPF uses MVVM binding sources with Dispatcher marshaling
- 🧾 JSON configuration — Change ports and unit ids in the field without recompiling; protocol settings live under
options - 🧪 Hardware optional at first — Virtual channels use the same programming model as real devices
🚀 Quick Start
await using var app = ZeusHost.Create(builder =>
{
builder.AddVirtualChannel("meter");
// With hardware: builder.AddSerialPort("meter", "COM3", 115200);
});
await app.StartAsync();
var meter = app.Channels.Get("meter");
meter.DataReceived += (_, e) => { /* hand data to the UI */ };
await meter.WriteAsync("PING"u8.ToArray());Desktop apps keep the same channel declaration, but the UI layer follows each framework's native pattern:
// WinForms: bind controls directly.
var winFormsAttachment = this.AttachZeus(builder => builder.AddVirtualChannel("meter"));
var meter = winFormsAttachment.Host.Channels.Get("meter");
meter.BindText(echoLabel);
winFormsAttachment.Host.Points.BindText("temperature", temperatureLabel);
// WPF: bind XAML to a ViewModel.
var wpfAttachment = this.AttachZeus(builder => builder.AddVirtualChannel("meter"));
DataContext = new MainViewModel(wpfAttachment.Host, WpfUiDispatcher.Current());📦 Assemblies
| Package | Purpose |
|---|---|
| Zeus.Abstractions | Contracts for channels, devices, points, and hosting |
| Zeus.Runtime | Runtime core |
| Zeus.Hosting | Host and acquisition loop |
| Zeus.Communications | Serial / TCP / UDP / virtual channels |
| Zeus.Protocols.Framing | Custom frames |
| Zeus.Protocols.Modbus | Modbus RTU / TCP / ASCII |
| Zeus.Protocols.Mc | Mitsubishi MC |
| Zeus.Protocols.S7 | Siemens S7 |
| Zeus.Protocols.Fins | Omron FINS |
| Zeus.Protocols.HostLink | Omron Host Link |
| Zeus.Protocols.Mewtocol | Panasonic MEWTOCOL |
| Zeus.Protocols.EtherNetIp | Allen-Bradley EtherNet/IP |
| Zeus.Protocols.Dlt645 | DL/T 645-2007 |
| Zeus.Protocols.Iec104 | IEC 60870-5-104 |
| Zeus.Protocols.Mqtt | MQTT 3.1.1 |
| Zeus.Protocols.OpcUa | OPC UA |
| Zeus.Protocols.Snmp | SNMP v2c |
| Zeus.Configuration | JSON project configuration |
| Zeus.Presentation.Abstractions | UI-independent binding |
| Zeus.Presentation.WinForms | WinForms control binding |
| Zeus.Presentation.Wpf | WPF MVVM binding sources and Dispatcher marshaling |
Join QQ group 771421105 to talk with other users. The QR code is available on the documentation Community page.
Support Zeus
If Zeus helps your project, you can sponsor it through the documentation Support Zeus page or Afdian. Enterprise support is also available by direct discussion. Regular sponsorship supports open-source maintenance; protocol adapters, on-site commissioning, and project integration should be discussed separately.