SNET / 工业连接生态

连接工业现场,
让数据流动。

用统一的 .NET 接口连接 PLC、采集数据、转发消息,构建你的工业应用。

dotnet add package Snet.Modbus --version 26.301.1

这里是 Snet 生态导航。框架官网 ↗开发文档 ↗

选择你的开始方式

快速开始

一种接口,
建立第一条连接。

连接、读取、检查结果。先看真实调用,再为你的设备选择对应驱动。

  1. 准备环境示例需要 .NET 10 SDK;框架库支持 .NET 8 / 10。
  2. 安装与配置使用已验证的统一包版本,按设备修改连接与地址。
  3. 读取并验证先在本机回环环境运行,再连接自己的设备。
完整快速入门 浏览 Examples 示例

先选择设备协议,再核对地址规则与数据类型。

选择一个示例,复制后开始。

dotnet add package Snet.Modbus --version 26.301.1

Modbus TCP

dotnet add package Snet.Modbus --version 26.301.1
Program.cs
using Snet.Modbus;
using Snet.Model.data;
using Snet.Model.@enum;
using System.Text.Json;

await using var device = await ModbusOperate.InstanceAsync(new ModbusData.Basics
{
    IpAddress = "127.0.0.1", Port = 1502, Station = 1,
    ProtocolType = ModbusData.ProtocolType.ModbusTcpNet,
    AddressStartWithZero = false
});
var connected = await device.OnAsync();
if (!connected.Status) { Console.WriteLine(connected.Message); return; }
var value = await device.ReadAsync(new Address(new AddressDetails
{
    AddressName = "1", AddressDataType = DataType.Short
}));
Console.WriteLine(value.Status ? JsonSerializer.Serialize(value.ResultData) : value.Message);
await device.OffAsync(true);

Siemens S7

dotnet add package Snet.Siemens --version 26.301.1
Program.cs
using Snet.Siemens;
using Snet.Model.data;
using Snet.Model.@enum;
using System.Text.Json;

await using var device = await SiemensOperate.InstanceAsync(new SiemensData.Basics
{
    IpAddress = "127.0.0.1", Port = 102,
    ProtocolType = SiemensData.ProtocolType.SiemensS7Net_S1200,
    Rack = 0, Slot = 1, PDULength = -1
});
var connected = await device.OnAsync();
if (!connected.Status) { Console.WriteLine(connected.Message); return; }
var value = await device.ReadAsync(new Address(new AddressDetails
{
    AddressName = "DB1.DBD0", AddressDataType = DataType.Float
}));
Console.WriteLine(value.Status ? JsonSerializer.Serialize(value.ResultData) : value.Message);
await device.OffAsync(true);

MQTT 转发

dotnet add package Snet.Modbus --version 26.301.1
dotnet add package Snet.Mqtt --version 26.301.1
Program.cs
using Snet.Modbus;
using Snet.Mqtt.client;
using Snet.Model.data;
using Snet.Model.@enum;
using System.Text.Json;
using System.Text;

await using var device = await ModbusOperate.InstanceAsync(new ModbusData.Basics
{
    IpAddress = "127.0.0.1", Port = 1502, Station = 1,
    ProtocolType = ModbusData.ProtocolType.ModbusTcpNet,
    AddressStartWithZero = false
});
await using var mqtt = await MqttClientOperate.InstanceAsync(new MqttClientData.Basics
{
    IpAddress = "127.0.0.1", Port = 1883,
    UserName = "", Password = ""
});
var connected = await device.OnAsync();
if (!connected.Status) { Console.WriteLine(connected.Message); return; }
var broker = await mqtt.OnAsync();
if (!broker.Status) { Console.WriteLine(broker.Message); return; }
var value = await device.ReadAsync(new Address(new AddressDetails
{
    AddressName = "1", AddressDataType = DataType.Short
}));
if (!value.Status) { Console.WriteLine(value.Message); return; }
var sent = await mqtt.ProduceAsync("snet/demo", JsonSerializer.Serialize(value.ResultData), Encoding.UTF8);
Console.WriteLine(sent.Status ? "Published" : sent.Message);
await mqtt.OffAsync(true);
await device.OffAsync(true);
本机回环验证Modbus TCP · 1234查看验证范围 →

本地演示端口:Modbus 1502 / MQTT 1883;连接真实设备前请修改参数。

框架能力

把协议差异,留在接口之下。

围绕采集、消息与通信组织代码。业务层专注数据,设备层按需扩展。

36设备接入包
130+协议变体
6消息与传输通道
46框架 NuGet 包
这些数字代表什么?

框架官网的分类口径:36 个接入包包含设备协议、数据库、模拟与自定义接入;130+ 为协议变体,6 为消息与传输通道,46 为框架包范围,不代表全部作者包或经过本页实测的设备数量。

查看框架目录
查看框架连接示意
PLCPLC 控制器
OPC设备接入
DB数据库采集
Snet.统一接口 · 自由扩展
MQTT消息通道
API数据服务
APP业务应用
设备 → 统一接口 → 业务应用

统一接口

IDaq、IMq 与 ICommunication 分别组织采集、消息与通信操作。连接、读写、订阅与返回结果具有一致的使用方式。

插件化扩展

基于 AssemblyLoadContext 加载插件,为非标设备和自定义消息系统提供扩展路径;兼容宿主支持运行时加载与卸载。

采集与消息联动

设备数据通过地址模型进行解析与类型转换,可结合消息配置转发到 MQTT、Kafka 等系统,连接现场与上层应用。

地址与批量读取

统一地址描述、订阅和结果模型。支持的协议可通过自动组包合并读取请求,减少分散点位的通信往返。

应用集成

提供通信传输、事件、缓存、日志及 WebAPI 能力;结合 RPC、Redis 与 WPF 配套库,构建数据服务和桌面应用。

开发与验证

异步操作配合统一 OperateResult 返回状态、消息和数据;内置模拟与虚拟地址便于前期开发,框架支持中英文切换。

适合这些工作

设备数据采集边缘网关产线监控工业系统集成通信调试视觉检测
连接现场设备PLC / 仪表 / 数据库
采集与解析IDaq / 地址模型
转发与服务IMq / WebAPI / RPC
构建业务应用监控 / 存储 / 展示
典型使用路线

从你的任务,找到一条清晰路径。

以下是功能组合示意,配置步骤与项目入口可直接查阅。

ACQUIRE

把现场数据送到业务系统

PLC→Daq→MQTT / API

配置设备与地址,完成采集,再将数据转发到上层服务。

查看消息接入 ↗
DIAGNOSE

先验证一台设备的通信

Device→Debug→Read / Subscribe

交互式读写、订阅与 OPC UA 浏览,定位连接和地址问题。

查看调试工具 ↗
INSPECT

建立自己的视觉工作流程

Dataset→Train→Validate

从数据集、辅助标注到训练、ONNX 与联合验证。

查看视觉平台 ↗
协议与接入

找到你的设备,接入你的系统。

查看全部与搜索 ↗
36 个设备接入包

按主要用途分组;同一厂商可能覆盖多类设备。具体型号、TCP/串口等传输方式及读写能力,请阅读对应文档。“模拟”表示模拟数据源,不是协议成熟度评级。

消息与传输通道

消息中间件:MQTT、Kafka、RabbitMQ、RocketMQ。

点对点与网络传输:NetMQ、Netty。

通道文档

从物理连接到数据服务

TCP · UDP · 串口 · WebSocket · HTTP

按设备选择通信层,按系统选择消息通道;通过统一结果模型衔接数据处理。

通信层参考 协议文档
开源项目

从框架能力,到可用的应用。

先选择工作方式,再深入源码。数采、通信调试与工业视觉,是生态的三条核心路径。

开发工具与生态库 按需组合,延伸你的应用

WPF 现代界面与基础架构。包含 Snet.Windows.Core / Controls、MVVM、主题、中英文本地化、窗口基类、属性编辑器和多种常用控件。

界面库 · Windows查看源码

基于 DotNetty 的 .NET 远程过程调用库,提供服务注册、客户端代理和异步调用。仓库附有服务端与客户端样例,适用于进程间和内网服务通信。

服务通信 · .NET查看源码

Snet.Redis 连接与操作封装,面向缓存、会话、状态及发布订阅场景。通过统一操作入口管理 Redis 连接和常见数据结构。

缓存集成 · .NET查看源码

可参考的 Snet 用法集合,按 core、daq、relay、tep、web 分组,展示通信、采集、消息转发、非标设备接入和 WebAPI 集成。

使用示例 · .NET 10查看源码

社区插件源码目录,按作者与 daq / mq 类型组织,用于分享设备接入、自定义采集和消息插件。接口、依赖与宿主兼容性由插件说明确定。

社区扩展 · IDaq / IMq查看源码

供 AI 编程助手使用的四项 Snet 技能,覆盖数据采集、消息收发、IDaq / IMq 插件开发与 WPF 应用,提供工作流程及接口约定。

AI 开发辅助 · 文档查看源码
更多工具

以下工具独立于工业采集主线。

Windows 可编程键鼠模拟器,用脚本组织键盘、鼠标、延时、循环及剪贴板操作,适用于重复操作与桌面自动化。

自动化工具 · Windows查看源码

为 GitHub Copilot 提供 Ollama 兼容接口,将请求转发至 DeepSeek / MiMo。附 Windows WPF 管理工具,支持配置、服务启停与日志查看;模型及 IDE 接入要求见 README。

AI 工具 · 代理服务

模型由第三方服务提供;使用前请阅读相关服务条款。

查看源码

11 个应用、工具与生态项目;框架包分发与应用源码分别提供入口。

数据更新于 · 查看最新发布与仓库 ↗

文档与实践

文档讲方法,博客讲实践。

先建立框架概念,再沿着协议文档、项目源码与实践文章,走到自己的应用场景。

SNET BLOG / 技术博客

让经验回到具体的问题。

作者大顺的技术博客,分享 Snet 项目、C# / .NET、WPF、工业通信、视觉应用与开发工具,也记录个人生活。

工业通信与数据采集

Daq 项目、采集转发、数据解析与自定义插件。

界面与工程实践

WPF 界面库应用、主题语言与 .NET 编码问题。

视觉与 AI 工具

VisualIdentity 平台、YOLO 应用与模型代理工具。

阅读文章时,结合所安装版本的文档。

也可以从一句自然语言开始。

Snet AI Skills 为编程助手提供领域知识、接口契约与开发步骤。

浏览四项技能
你的需求

连接一台 Modbus 设备,读取寄存器并转发到 MQTT。

AI 助手的工作路径
  1. 读取 DAQ-Skill 与 MQ-Skill 的接口约定
  2. 组织设备、地址与消息配置
  3. 生成代码,再结合设备验证
// DAQ → MQTT
var value = await device.ReadAsync(address);
if (value.Status)
    await mqtt.ProduceAsync(topic,
        Serialize(value.ResultData), Encoding.UTF8);

流程演示;生成结果仍需检查与测试。

环境与授权

在选型前,把边界看清楚。

平台支持来自对应项目说明;包分发、源码与第三方组件分别说明授权范围。

平台支持

应用与组件的运行环境
组件WindowsLinuxmacOS
Daq / VisualIdentity Web、API支持支持未声明
WPF / Debug / KMSim支持不支持不支持
.NET 通信库依具体驱动与依赖;OPC DA 需 Windows COM。

应用主要使用 .NET 10,框架库支持 .NET 8 / 10;具体驱动与硬件加速要求见项目文档。

授权范围

Daq、Debug、VisualIdentity 的公开源码采用 MIT,可按 MIT 条款使用和商用;框架通过 NuGet 分发。插件、模型与依赖按各自许可使用。

查看许可细节与依赖入口
分发形式与许可入口
组件分发与许可
Snet.ModbusNuGet 包 · MIT ↗包许可不代表本站提供框架核心源码。
Daq / Debug / VisualIdentityGitHub 源码 · MIT以各仓库 LICENSE 为准。
插件、模型与第三方依赖分别查阅对应仓库与上游许可。

插件、模型与依赖的许可入口,见第三方声明。

第三方资源与许可声明 ↗
Snet.Modbus 26.301.1
NuGet 累计下载44,817
11 个项目合计 Star297
版本与发布记录 公开统计每日自动更新;示例版本独立验证。
验证与边界

把依据放在需要的地方。

示例的验证程度与平台、许可范围集中说明。

查看示例验证记录与说明
示例验证方式结果与范围
Modbus TCP本机回环模拟器读取值 1234;不连接真实 PLC。
Modbus → MQTT本机回环与 MQTT 接收断言Published,接收端确认同一地址值为 1234。
Siemens S7编译验证尚未连接真实 PLC 或 S7 模拟器。

Compose 提供 Modbus 模拟器和 Mosquitto,端口仅绑定本机。当前验证环境没有 Docker,容器栈尚未实际启动。

产品截图来自公开项目 README;架构、场景与 AI 代码为流程示意。性能、硬件兼容性与生成代码需在你的环境中验证。

框架包以 NuGet 分发,应用源码分别提供;第三方依赖、插件和模型以各自许可为准。

运行同一套本地示例 ↗
作者与社区

让连接,延伸到社区。

项目在代码中成长,经验在交流中积累。找到作者,关注更新,一起把想法落到现场。

Shun / 大顺Snet 作者 · 工业物联网 · .NET

Snet 作者,关注工业物联网、.NET 与开源。你可以从项目 Issues 反馈问题,阅读博客分享,或通过作者公开的社区入口参与交流。

认识作者与更多项目
更多公开交流入口

反馈问题请优先使用对应仓库的 Issues;交流可加入 QQ 群,更新动态见公众号。

常见问题

开始前,了解这些。

Snet 是框架,还是一款软件?

核心是面向 .NET 的工业通信与数据采集框架;围绕它有 Daq 数采、Debug 调试、WpfMUI 界面库、VisualIdentity 工业视觉及其他配套项目。可在现有项目中按需安装框架包,也可使用公开的应用源码。

如何选择库、数采工具与调试工具?

已有 .NET 项目需要连接设备,先选择对应 NuGet 协议包;希望配置多设备采集与转发,查看 Daq;需要交互式读写和诊断设备通信,查看 Debug。视觉检测对应 VisualIdentity,桌面界面开发对应 WpfMUI。

是否开源,能否用于自己的项目?

框架通过 NuGet 分发,Snet.Modbus 的包元数据标注 MIT;这不等于本站提供框架核心源码。Daq、Debug 与 VisualIdentity 的公开源码仓库采用 MIT。插件、模型权重及第三方依赖需分别阅读其许可。详见上方授权范围表。

在 Windows、Linux 与 macOS 上都能使用吗?

Daq 的 Blazor Web 与 VisualIdentity 的 Web/API 支持 Windows 和 Linux;WPF 桌面端、Debug、WpfMUI 与 KMSim 仅适用于 Windows。macOS 暂无这些应用的官方支持说明。框架库需按驱动检查平台依赖,例如 OPC DA 依赖 Windows COM。

官网、文档与旧博客的版本为什么可能不同?

页面与文章的更新时间、统计范围可能不同。开发时以所安装包版本的文档、API 和项目引用为准,避免混用不同版本的 Snet 包。

和其他通信库或采集软件相比,如何选择?

需要把设备通信嵌入自己的 .NET 系统,优先评估协议包、API 与平台依赖;需要配置式采集转发,评估 Daq;单设备排障先用 Debug。按设备协议、部署环境和可维护性选择,并用自己的设备验证,不用页面数字代替选型测试。

遇到问题去哪里反馈?多久能收到回复?

优先在对应项目的 GitHub Issues 提供版本、协议、复现步骤和必要日志;使用交流可加入 QQ 群。社区项目未承诺固定响应时间,避免在公开反馈中提交密码、密钥或生产连接信息。

SNET / ACCESS CATALOG

设备与协议目录

在新窗口打开