开发机本地自连 (自己连自己 IO) 可行性验证
验证日期: 2026-08-14 (抓包窗口 05:54:43–05:55:10, 共 25 秒) 验证方式: 只读系统查询 + 系统内置 pktmon 抓包 + 只读服务日志/注册表取证。未改任何配置、未动驱动绑定、未 reset 网卡、未重启、未启停任何服务。 临时抓包文件已删除。
1. 硬件现状 (结论: 当前只有 1 块物理有线网卡)
1.1 物理有线网卡 — 仅 1 块
| 网卡 | 类型 | 状态 | 详情 |
|---|---|---|---|
| 以太网 2 (设备侧, 驱动绑定) | USB 有线 | Up, 100 Mbps | WCH USB2.0 Ethernet Adapter #2 (USB\VID_1A86&PID_E396), MAC 70-19-88-73-6E-DF, ifIndex 10, 驱动 WCHUSBNICA64.sys 1.9.2026.4, TCP/IPv4 已禁用 (纯二层设备口, 符合设计) |
- 第二块 USB 网卡 (ASIX AX88179 千兆,
USB\VID_0B95&PID_1790): 注册表设备节点存在 (历史插过), 但Get-PnpDevice -PresentOnly查询无命中 = 当前未插入。插回即免装驱动。 - 板载/PCIe 有线网卡: 无。唯一 PCIe 网卡是 WLAN (MediaTek MT7922 Wi-Fi 6E)。
Get-NetAdapter -IncludeHidden亦无隐藏有线卡 (仅内核调试网络适配器 Not Present)。 - WLAN 2: MediaTek MT7922, Up 1.2 Gbps,
192.168.3.193/24— 无线, 无与 USB 卡的二层通路, 不能充当直连主站口。
1.2 虚拟/隧道网卡 (不能用作主站直连口)
| 网卡 | 类型 | 说明 |
|---|---|---|
| VMware VMnet1 / VMnet8 | 虚拟交换机 (host-only/NAT) | Up 100 Mbps, 仅 169.254.x 本地链路地址。无到 USB 卡的二层通路; 且"VMware Bridge 流量只下发到 NIC、不回送宿主协议栈" — 同卡桥接的虚拟机流量设备侧收不到, 同卡自连不成立; 建网桥属配置变更, 本轮禁动 |
| TAP-Windows V9 (OpenVPN) | 虚拟二层卡 | Up 1 Gbps, 10.8.170.3/24 VPN 隧道, 与 USB 卡无通路 |
| Wintun ×6 / Mihomo Meta / 蓝牙 PAN | 隧道/虚拟 | 无通路 |
1.3 工具现状
- 无 Wireshark / Npcap / WinPcap (服务列表与 Program Files 均无)。
- 无 西门子 PRONETA / TIA Portal (Program Files 无命中)。
- 无 Python scapy 模块 (Python 3.12 已装但未装 scapy; 且 Windows 下发 L2 裸帧本就需要 Npcap 驱动)。
- 有 系统内置
pktmon(本次抓包所用) + 管理员权限已具备。
判定: 当前凑不出"两块可直连的物理网卡"。唯一低成本补法 = 插回 ASIX AX88179。
2. 设备侧驱动绑定现状 (注册表双侧重核)
2.1 网卡侧 (NIC class key) — 声明存在 ✓
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0004\Linkage\UpperBind:
DarraRTEth, DarraRTPnet, Ndisuio, RasPppoe, RDMANDK, s7PnDiscoveryDriver, Snpnio, SNTIE, VMnetBridge
Get-NetAdapterBinding -Name "以太网 2" 关键项:
| ComponentID | 显示名 | Enabled |
|---|---|---|
DarraRT_Pnet | Darra PROFINET IO Device | True |
DarraRT_Eth | Darra PROFINET IO Device | True |
SI_SNPNIO | PROFINET IO RT-Protocol V2.3 (西门子) | True |
s7PnDiscoveryDriver | PROFINET IO protocol (DCP/LLDP/RSI) (西门子) | True |
ms_tcpip | Internet 协议版本 4 | False (纯二层 ✓) |
2.2 协议侧 (驱动服务键) — 半死绑定 ✗
HKLM\SYSTEM\CurrentControlSet\Services\DarraRT_Pnet 没有 Linkage 子键 (无 Bind / Export), DarraRT_Eth 同样没有。
已正常附着的 NDIS 协议必须有
Linkage\Export+Linkage\Bind(列出其下方 miniport 设备 GUID)。缺失 = NDIS 绑定引擎从未把协议真正 attach 到网卡 — 网卡侧 UpperBind 声明了协议, 协议侧却没有回绑, 即"半死绑定"残留态 (与记忆PNET 测试机部署三连环中 .197 的"驱动半死残留"同型)。
2.3 服务/进程状态 (只读)
DarraPnetService(仓库构建版) RUNNING, PID 60212, 2026-08-14 03:59:20 启动, 路径A:\c\Darra\Darra_Profinet_Slave\Darra_Pnet_Service\bin\Release\net8.0-windows\Darra.Pnet.Service.exe。- 内核驱动
DarraRT_Pnet服务 RUNNING (Start=2 自动,\SystemRoot\system32\DRIVERS\DarraRT_Pnet.sys, INF 来源oem125.inf)。 runtime-config.xml当前InterfaceName = 以太网 2✓ (另有历史配置遗留DriverAdapterName='以太网'与NetworkInterfaceName不一致的 WARN, 服务已按单一网口权威收敛, 属配置清理项)。
3. 数据面实测 — pktmon 抓包 25 秒 (软验证)
- 方法:
pktmon start --capture --comp 1 --pkt-size 0 --file-name %TEMP%\pnet-dcp.etl(仅 USB 卡组件) → 25 秒 → stop → format txt (1633 事件 / 1648 行) → 分析后临时文件已删。 - 结果统计:
| 判据 | 命中 |
|---|---|
| EtherType 0x8892 (PROFINET PPM/DCP) | 0 帧 |
| DCP 组播目的 01-0E-CF-xx-xx-xx | 0 帧 |
| 帧尾 Magic 0xDA55 | 0 |
| LLDP (0x88CC) | 15 帧 |
| Tx / Rx 事件 | 517 / 517 |
| "Unsupported EtherType" drop (TCPIP 丢 LLDP, 正常) | 6 |
- LLDP 明细 (链路层收发通路证据):
- 本机 Tx 3 帧: 源
70-19-88-73-6E-DF(USB 卡) →01-80-C2-00-00-0E, ChassisIdDESKTOP-TMKO3LS— 由西门子s7PnDiscoveryDriver发出, 证明该卡二层 TX 通路可用 (但非 Darra 栈)。 - 对端 Rx: 来自
E0-DC-A0-19-BF-DD(USB 卡当前所接交换机), 证明 RX 通路可用 + 网线/链路 Up。
- 本机 Tx 3 帧: 源
判读: 物理链路与二层收发正常, 但 Darra PROFINET 数据面 0 流量 — 从站当前并未在线发帧。
4. 服务日志根因 (只读取证)
logs\pnet_20260814.log 反复出现 (03:48 / 03:59 / 04:01 / 05:25):
[ERROR] 驱动数据面初始化失败 异常: PnetDriverException: DeviceIoControl 失败
(IOCTL=0x0022EC84, Win32 error=1168)
at PnetDriverBridge.BindAdapter() ... PnetRuntime.StartCoreFresh()
[ERROR] 从站进入网卡缺失/数据面降级状态: 网卡缺失: 配置网卡 '以太网 2' 不存在或驱动未绑定
(BIND_ADAPTER 失败, Win32=1168)
- 1168 =
ERROR_NOT_FOUND: 驱动按网卡名找不到自己的绑定 (与 §2.2 协议侧缺Linkage\Bind完全吻合)。 - 后果: 从站栈数据面降级, 不发 PPM / DCP Hello 帧 (与 §3 抓包 0 帧互证)。
关键结论: 1168 是自连的"第一前置" — 即使现在插上第二块网卡并发出 DCP Identify, 设备侧也无人应答。
5. DCP 自检 — 未执行, 如实说明
未执行原因 (三重阻塞, 缺一不可):
- 无发帧口: 没有第二块物理网卡 (§1)。
- 无发帧工具: 无 Npcap / PRONETA / scapy / Wireshark; 纯 PowerShell 无法发 L2 裸帧; 仓内
测试项目/TEST_Pnet_Sim为对测说明文档, 无现成主站模拟器可执行程序 (仓内亦无 DCP 发送工具)。 - 数据面降级 (§4): 即使有前两者, DCP Identify 也无人应答。
条件齐后 (或到 .197 测试机) 的 DCP 自检步骤:
- 主站侧装 西门子 PRONETA (免费) 或 Wireshark+Npcap; 选第二块卡。
- 主站发 DCP Identify All (目的
01-0E-CF-00-00-00, EtherType0x8892, FrameID0xFEFD, ServiceID0x0005)。 - 判据: 设备返回 Identify Response (NameOfStation / DeviceID / 选项 IP·Device·All); 线上同时出现周期 PPM 帧 (帧尾
0xDA55, 见Darra_Pnet_Kernel/.../DarraRT_Pnet_Internal.h)。 - 与仓内判据一致:
测试项目/TEST_Pnet_Sim方式 A — "周期性 0x8892 帧可捕获 = 帧路径通"。
6. 可行性结论
| 维度 | 状态 | 说明 |
|---|---|---|
| 物理链路 | ✓ | USB 卡 Up 100M, LLDP 双向通, 已接交换机 |
| 主站侧网卡 | ✗ | 缺第二块物理有线卡 (ASIX 插回即补足, 免装驱动) |
| 设备侧数据面 | ✗ | 1168 半死绑定 (协议侧无 Linkage\Bind), 从站未在线 |
| 主站工具 | ✗ | 需装 PRONETA 或 Wireshark+Npcap (仓内无) |
| 自连总判定 | 当前不可行 | 硬件差 1 块卡 + 软件差 1168 修复 + 工具差 1 个主站软件; 三项齐后可全本地自连 |
同卡软路径已排除: VMware Bridge 流量不回送宿主协议栈 (同卡自连不成立); TAP/Wintun 与 USB 卡无通路; 建网桥属配置变更, 本轮禁动。
7. 最简完成路径 (建议顺序)
- 插回 ASIX AX88179 USB 千兆网卡 (或任意第二块 USB 有线网卡) — PnP 节点已在, 免装驱动。
- 修 1168: 复位半死绑定 —
sc stop DarraRT_Pnet+sc start DarraRT_Pnet(同 .197 已验证手法), 或走工具/NetCfgInstall重绑 / GUI 重新选择网卡并应用配置。本轮禁动服务/驱动, 此步需授权后执行。 修好后从站即应自发周期 PPM + DCP Hello 帧 (pktmon 即可复测)。 - 直连网线: 两块卡均为现代 PHY, 支持 Auto-MDIX — 交叉线/直通线均可 (100M WCH 卡同样支持)。
- 主站软件: 西门子 PRONETA (免费, DCP+IO 测试) 或 Wireshark+Npcap (按
测试项目/TEST_Pnet_Sim方式 A 判据); IO 级对测可上 p-net 社区控制器工具或 TIA 仿真。 - 通过判据: ① 主站 DCP Identify → 设备 Identify Response (设备名/IP); ② 线上周期 0x8892 PPM 帧 +
0xDA55magic; ③ 建立 AR/IO CR 后服务日志Connected=1、Heartbeat递增。
8. 本轮已完成验证清单 (证据)
-
Get-NetAdapter全表: 物理有线仅"以太网 2"1 块; 虚拟卡清单 (VMnet1/8, TAP, Wintun×6, Mihomo, 蓝牙 PAN);-IncludeHidden无隐藏有线卡 -
Get-PnpDevice在场核对: ASIXVID_0B95&PID_1790未插入; 以太网 2 = WCHVID_1A86&PID_E396 -
Get-NetAdapterBinding:DarraRT_Pnet/DarraRT_Eth/s7PnDiscoveryDriverEnabled=True;ms_tcpipDisabled (纯二层) - 注册表双侧重核: NIC 侧
UpperBind含DarraRTPnet✓; 协议侧Services\DarraRT_Pnet无 Linkage 键 ✗ (半死绑定根因) - 服务状态:
DarraPnetServiceRUNNING (PID 60212, 仓库 Release 版); 驱动DarraRT_PnetRUNNING (oem125.inf) - 服务日志根因:
BindAdapterIOCTL 0x0022EC84 → Win32 1168 → 数据面降级 (05:25 仍在) - pktmon 25 s 抓包: 0×0x8892 / 0×01-0E-CF / 0×DA55; LLDP 15 帧双向通 (本机 Tx 3 = s7PnDiscoveryDriver; 对端 E0-DC-A0-19-BF-DD)
- DCP Identify 实发 — 未执行 (缺第二卡 + 无发帧工具 + 数据面降级), 步骤见 §5
约束遵守: 未重启机器、未动驱动绑定、未 reset 网卡、未启停服务、未改任何配置文件; 仅 Write 本 md; 抓包临时文件 (pnet-dcp.etl/.txt) 已删除; 未执行任何 git 操作。