From d1b72117058f1131046b6aa3add8e3ccfae033d8 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 10:36:07 +0800
Subject: [PATCH] docs: CAN 模拟器独立 TCP 服务进程设计规格(统一 CanDeviceDriver + 双工推送协议)
---
docs/superpowers/specs/2026-11-09-can-simulator-tcp-server-design.md | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 222 insertions(+), 0 deletions(-)
diff --git a/docs/superpowers/specs/2026-11-09-can-simulator-tcp-server-design.md b/docs/superpowers/specs/2026-11-09-can-simulator-tcp-server-design.md
new file mode 100644
index 0000000..aa015a1
--- /dev/null
+++ b/docs/superpowers/specs/2026-11-09-can-simulator-tcp-server-design.md
@@ -0,0 +1,222 @@
+# CAN 妯℃嫙鍣ㄧ嫭绔� TCP 鏈嶅姟杩涚▼ 鈥� 璁捐瑙勬牸
+
+鏃ユ湡锛�2026-11-09
+鐘舵�侊細宸蹭笌鐢ㄦ埛閫愯妭纭
+鍏宠仈浠g爜鍩虹嚎锛歏3.0 娣峰悎鏋舵瀯锛圠ocal + DeviceBroker锛夛紝杩涚▼鍐� CanSimulator
+
+## 1. 闂涓庣洰鏍�
+
+**鐜扮姸闂**锛歚CanDriverAdapter` 鐢ㄨ繘绋嬪唴 static 瀛楀吀 `_sharedBuses` 绠$悊鎬荤嚎瀹炰緥锛�
+涓荤▼搴忥紙CAN-001/002锛変笌 DeviceBroker 瀹夸富锛圕AN-003/004锛夊悇鑷寔鏈変竴濂楀悓鍚嶄絾闅旂鐨�
+CAN_BUS_1 瀹炰緥锛岃法杩涚▼涓嶅彲瑙侊紝鍙兘闈�"鍚屽涓诲绔澶�"鍙橀�氶獙璇佹敹鍙戙��
+
+**鐩爣**锛氬皢 CAN 妯℃嫙鍣ㄦ敼閫犱负鐙珛 TCP 鏈嶅姟杩涚▼锛堟�荤嚎鏉冨▉锛夛紝妯′豢鐗╃悊 CAN 鍒嗘瀽浠涓猴紝
+瀹炵幇璺ㄨ繘绋嬪閫氶亾骞跺彂娴嬭瘯锛涘悓鏃舵妸 CAN 椹卞姩鏀舵暃涓�**鍞竴绫�** `CanDeviceDriver`锛�
+Local/Broker 宸紓涓嬫矇涓洪┍鍔ㄥ唴閮ㄤ紶杈撳悗绔紝鑷姩鍖栫▼搴忓彧闈㈠悜 `IDeviceDriver` 缂栫▼銆�
+
+## 2. 宸茬‘璁ょ殑鍏抽敭鍐崇瓥
+
+| 鍐崇瓥鐐� | 缁撹 |
+|---|---|
+| 鍗忚鍙栧悜 | 鍛戒护涓茬洿浼狅紙SEND:/RECV_ALL/AUTO_RESPONSE:ON 绛夌幇鏈夎涔夊師鏍蜂紶杈擄級 |
+| 鍒嗗抚鏂瑰紡 | 4 瀛楄妭澶х闀垮害 + UTF8 鏂囨湰锛堜笌 BrokerIpc 鍚屾儻鐢ㄦ硶锛� |
+| 鏈嶅姟绔舰鎬� | 鐙珛 WPF 杩涚▼ CanSimulatorServer.exe锛堝甫 UI锛� |
+| 鍦板潃鏉ユ簮 | 鍏ㄥ眬 App.config锛圕anSimulator.Host / CanSimulator.Port锛� |
+| 妯″紡鍙栬垗 | 鍏ㄩ潰鍒� TCP锛岄┍鍔ㄥ垹闄よ繘绋嬪唴鎬荤嚎鍒嗘敮锛屾棤鍥為��寮�鍏� |
+| 鏈嶅姟绔疄鐜� | 澶嶇敤鐜版湁 CanBusSimulator/CanNode 璺敱涓庤嚜鍔ㄥ搷搴旈�昏緫锛岄浂閲嶅啓 |
+| 浼氳瘽妯″瀷 | 鏂规 A锛氳姹�-鍝嶅簲锛堜繚搴忥級+ 鏈嶅姟绔富鍔ㄦ帹閫� EV:RECV锛堝弻宸ワ級 |
+| 椹卞姩鏀舵暃 | 鍞竴 CAN 椹卞姩绫� CanDeviceDriver锛屽唴閮� ICanTransport 鍙屽疄鐜� |
+| 闈㈡澘鏀归�� | 鎶� CanChannelView + CanDebugPanel 澹冲寲涓� TabControl 澶氶�氶亾 |
+| 鍚姩鏂瑰紡 | 妯℃嫙鍣ㄦ湇鍔$函鎵嬪姩鍚姩锛屼富绋嬪簭涓� Broker 鍧囦笉鎷夎捣 |
+
+## 3. 鎬讳綋鏋舵瀯
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� CanSimulatorServer.exe锛堟柊寤猴紝WPF锛� 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� TcpListener(榛樿 127.0.0.1:9000) 鈹�
+鈹� 鈹溾攢 TcpAcceptor锛氭瘡杩炴帴涓�涓� ConnectionSession 鈹�
+鈹� 鈹溾攢 CanBusManager锛氭噿鍒涘缓 CanBusSimulator锛�(bus,nodeIndex) 鍞竴鎬т徊瑁侊紱 鈹�
+鈹� 鈹� 鑺傜偣 FrameReceived 鈫� 浼氳瘽鎺ㄩ�� 鐨勮兌姘� 鈹�
+鈹� 鈹斺攢 UI锛氳妭鐐规爲 | 瀹炴椂甯ц〃 | 鎬荤嚎鍚仠/缁熻 | 鏃ュ織 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈻� TCP锛圢odeChannelTransport锛� 鈻� TCP
+ 鈹� 鈹�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹粹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹粹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 涓荤▼搴� 鈹� 鍛藉悕绠¢亾RPC 鈹� DeviceBroker.exe 鈹�
+鈹� CAN-001/002 鈹� 鈼勨攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈻� 鈹� CAN-003/004 鈹�
+鈹� CanDeviceDriver 鈹� BrokerRpc 鈹� CanDeviceDriver 鈹�
+鈹� (NodeChannelTransport)鈹� Transport 鈹� (NodeChannelTransport) 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+- 鍏ㄧ郴缁熷彧鏈変竴浠�"鑺傜偣閫氶亾椹卞姩"浠g爜锛欱roker 妯″紡涓嬪涓昏繘绋嬪唴鐨勭墿鐞嗕細璇濆悓鏍锋槸
+ `CanDeviceDriver(NodeChannelTransport)`銆�
+- 浠茶閾捐矾瀹屽叏涓嶅姩锛欱rokerServer 涓夐噸鍏冲崱锛堢櫧鍚嶅崟鈫抍onfigHash鈫掔绾︽爡鏍忥級銆�
+ SessionGate銆佺淮鎶ょ绾︺�佸彧璇昏眮鍏嶅潎淇濈暀鍦� BrokerRpcTransport 濮旀墭璺緞涓娿��
+- 鑷姩鍖栫▼搴忕粡 `DeviceManager.GetDriver(deviceId)` 鎷垮埌鐨勬案杩滄槸 `CanDeviceDriver`锛�
+ ExecutionMode 鍦ㄩ┍鍔ㄦ瀯閫犳椂璇讳竴娆★紝涓婂眰闆舵劅鐭ャ��
+
+## 4. TCP 绾垮崗璁�
+
+鍒嗗抚锛�4 瀛楄妭澶х闀垮害 + UTF8 鏂囨湰琛岋紱鏂囨湰鎸夊啋鍙峰垎娈点��
+
+### 4.1 瀹㈡埛绔� 鈫� 鏈嶅姟绔�
+
+| 娑堟伅 | 璇存槑 |
+|---|---|
+| `HELLO:{bus}:{nodeIndex}:{clientTag}` | 鎻℃墜骞舵寕杞借妭鐐癸紱纭鍚庤妭鐐规縺娲汇�佸紑濮嬫帴鏀舵�荤嚎甯� |
+| `SEND:{frameId}:{data}` | 鍙戦�佸抚锛堢幇琛屽懡浠や覆閫忓彂锛� |
+| `QUERY:{鍛戒护涓瞹` | RECV / RECV_ALL / STATUS / AUTO_RESPONSE:ON / FILTER:id:mask / LOG 绛夐�忓彂 |
+| `DISCONNECT` | 娉ㄩ攢鏈繛鎺ヨ妭鐐� |
+
+### 4.2 鏈嶅姟绔� 鈫� 瀹㈡埛绔�
+
+| 娑堟伅 | 璇存槑 |
+|---|---|
+| `OK:{payload}` / `ERR:{code}:{message}` | 瀵逛笂涓�鏉¤姹傜殑鍝嶅簲锛堟伆濂戒竴琛岋紝淇濆簭锛� |
+| `EV:RECV:{frameId}:{data}:{HH:mm:ss.fff}:{srcNodeIndex}` | 鎬荤嚎璺敱鎺ㄩ�佺殑鎺ユ敹甯э紙涓诲姩鎺ㄩ�侊紝鏃犺姹傚叧鑱旓級 |
+| `EV:STATE:{connected\|lost}` | 瀵圭涓婁笅绾块�氱煡锛孧VP 浠呭畾涔夋牸寮忎笉鍙戦�� |
+
+### 4.3 鑺傜偣韬唤妯″瀷
+
+涓�涓�荤嚎鑺傜偣 = **(busName, nodeIndex)**锛屾湇鍔$浠� nodeIndex 涓烘�荤嚎涓婂敮涓�瀵诲潃
+锛堜笌鐪熷疄 CAN 鑺傜偣鍦板潃璇箟涓�鑷达級銆傚悓涓� nodeIndex 琚叾浠栬繛鎺ュ崰鐢ㄦ椂鎻℃墜杩斿洖
+`ERR:NODE_BUSY` 鎷掔粷鎸傝浇锛涜繛鎺ユ柇寮�鑷姩閲婃斁銆備袱涓澶囬厤缃悓 (bus,node) 灞為厤缃敊璇紝
+闈犻敊璇枃妗堝紩瀵间慨鏀圭鐐癸紝涓嶅仛鑷姩閬胯銆�
+
+### 4.4 閿欒涓庤竟鐣�
+
+- 鏈煡鍛戒护 / 鏍煎紡闈炴硶 鈫� `ERR:UNKNOWN_CMD` / `ERR:BAD_FRAME`锛屼笉鏂繛鎺�
+- `HELLO` 鍓嶅彂鍏跺畠鍛戒护 鈫� `ERR:NOT_HANDSHAKED`
+- 鏈嶅姟绔笉鍙揪 鈫� `ConnectAsync` 鎶涜繛鎺ュ紓甯革紝鏂囨鍚�"璇峰厛鍚姩 CAN 妯℃嫙鍣ㄦ湇鍔� {Host}:{Port}"
+
+## 5. 椹卞姩灞傦細缁熶竴 CanDeviceDriver
+
+### 5.1 绫诲瀷鍒掑垎锛圓ging.Infrastructure锛�
+
+```
+IDeviceDriver锛堢幇鏈夊绾︼紝涓嶅彉锛�
+ 鈻�
+CanDeviceDriver 鍏ㄧ郴缁熷敮涓� CAN 椹卞姩绫伙紙鐢� CanDriverAdapter 鏇村悕閲嶆瀯锛�
+ 鈹溾攢 鍛戒护涓茶В鏋愩�乢recvBuffer銆丷ECV/RECV_ALL 缁勮銆丏riverFrameReceived 浜嬩欢銆�
+ 鈹� STATUS/缁熻銆佽繛鎺ョ姸鎬佹満銆丏ispose
+ 鈹斺攢 ICanTransport _transport锛堟瀯閫犳椂鎸夎澶� ExecutionMode 閫夋嫨锛�
+
+ICanTransport锛堝唴閮ㄦ帴鍙o級
+ 鈹溾攢 ConnectAsync / TransceiveAsync(cmd)鈫掑搷搴旇 / Dispose
+ 鈹溾攢 event FramePushed锛圗V:RECV 琛屽埌杈撅紱NodeChannel 涓� TCP 鐩存帹锛�
+ 鈹� BrokerRpc 涓洪殢瀹夸富鍝嶅簲鎹庡甫鍒拌揪锛岃 搂5.4锛�
+ 鈹溾攢 event TransportBroken
+ 鈹�
+ 鈹溾攢 NodeChannelTransport TCP 鐩磋繛鏈嶅姟绔紱璇诲惊鐜垎娴佸搷搴�/鎺ㄩ�侊紱
+ 鈹� 鏂嚎鎸囨暟閫�閬块噸杩�(0.5s 璧枫�佷笂闄� 5s)銆侀噸杩炶嚜鍔ㄩ噸鍙� HELLO
+ 鈹斺攢 BrokerRpcTransport 鐜� BrokeredCanDriver 鐨� RPC 閫昏緫鍘熸牱杩佸叆
+ 锛圚ello 鎻℃墜 / SubmitTask / ResultBody 鎬佲啋寮傚父鏄犲皠涓嶅彉锛�
+ RejectedStaleLease鈫扡EASE_STALE銆丆onfigMismatch銆�
+ Unknown鈫扵imeoutException 绂佹鍋囧畾鏈墽琛岋級
+```
+
+### 5.2 娉ㄥ唽涓庡垎娲�
+
+- `DriverFactory.CreateDriver("CAN", 鈥�)` 缁熶竴杩斿洖 `CanDeviceDriver`锛涘伐鍘傝 data.db 璇ヨ澶�
+ `ExecutionMode/BrokerId` 閫夋嫨浼犺緭鍚庣銆�
+- `InfrastructureBootstrapper.RegisterBrokeredDrivers` 鍙栨秷鈥斺�擝roker 璁惧涓� Local 璁惧
+ 璧板悓涓�鏉� `LoadDevicesFromConfig` 娉ㄥ唽璺緞銆�
+- 鍒犻櫎锛歚BrokeredCanDriver` 绫伙紙閫昏緫鍏� BrokerRpcTransport锛夈�乣CanDriverAdapter._sharedBuses`
+ 杩涚▼鍐呭垎鏀��
+
+### 5.3 涓婂眰鍏煎
+
+- `DeviceManager.GetDriver` 濂戠害銆丏eviceService/CanBusService/AutoDeviceFacade 鑷姩鍖栭摼銆�
+ DeviceDebug 鐨� `ExistingDriver` 澶嶇敤閫昏緫鍧囦笉鏀广��
+- 鎸� `GetType().Name` 鍖哄垎椹卞姩鐨勬棩蹇�/鏂█鏀逛负鎸変紶杈撳悗绔被鍨嬪尯鍒嗐��
+- 闈㈡澘 `DrainBrokerMailbox`(RECV_ALL 1s 杞) 闄嶇骇涓哄厹搴曪紙閲嶈繛绐楀彛鏈熻ˉ鏄剧ず锛夛紝
+ 甯ф潵婧愭爣娉� `BUS@tcp` / `BUS@broker`銆�
+
+### 5.4 Broker 鎹庡甫鎺ㄩ��
+
+瀹夸富鍐呴┍鍔ㄧ殑 NodeChannelTransport 鎶� EV:RECV 杩藉姞鍒� `pendingPushes` 鍒楄〃锛堟湁鐣� 1000锛�
+婊′涪鏈�鑰侊級锛汢rokerServer 鍝嶅簲 QUERY/SEND 鏃跺湪 readback 鏈熬杩藉姞 `|PUSHED:n` + 鎺ㄩ�佽锛�
+BrokerRpcTransport 瑙f瀽鍚庡洖璋� FramePushed 骞朵粠瀹夸富鍒楄〃绉婚櫎锛堜竴娆℃�ф秷璐癸紝涓嶄涪涓嶉噸锛夈��
+绌洪棽鏃犺姹傛椂鎺ㄩ�佹粸鐣欏涓伙紝涓嬩竴娆′换鎰忚姹傛崕甯︹�斺�擝roker 璺緞瀹炴椂鎬т粛涓鸿姹傞┍鍔紝
+涓庣幇鐘朵竴鑷达紝闈㈡澘 1s RECV_ALL 鍏滃簳淇濊瘉鏈�缁堟樉绀恒��
+
+## 6. 鏈嶅姟绔伐绋� CanSimulatorServer
+
+- 鏂扮洰褰� `CanSimulatorServer\`锛孲DK 椋庢牸 WPF锛坄net472;UseWPF=true`锛夛紝
+ 寮曠敤 CanSimulator 绫诲簱 + log4net锛�**涓嶅紩鐢� Aging.Infrastructure**锛�
+ 鍔犲叆 `WPFProject\TapProject.sln`銆�
+- `App.config`锛歚ServerPort`锛堥粯璁� 9000锛夈�乣ListenOnAllInterfaces`锛堥粯璁� false锛夈��
+- 缁撴瀯锛歚TcpAcceptor` / `CanBusManager` / `ConnectionSession`锛堟瘡杩炴帴 MPSC 鏈夌晫鍙戦�侀槦鍒�
+ 1000 甯э紝婊′涪鏈�鑰�+璁℃暟锛�/ `MainWindow`锛堣妭鐐规爲銆佺幆褰� 2000 琛屽抚琛� TX/RX 鍒嗚壊銆�
+ 姣忔�荤嚎鍚仠涓庢竻绌恒�佺粺璁°�佹棩蹇楋紱Dispatcher 100ms 鎵归噺鍒锋柊锛夈��
+- 鏈嶅姟绔�**蹇呴』寮曠敤 CanSimulator 绫诲簱**锛圕anBusSimulator/CanNode/CanFrame 鍗宠矾鐢卞紩鎿庯紝
+ 澶嶇敤鍏惰矾鐢便�佽嚜鍔ㄥ搷搴斻�佹护娉㈠櫒銆佹�荤嚎鏃ュ織锛岄浂閲嶅啓锛夈��
+- 甯у幓閲嶏細TCP 妯″紡涓嬪抚杩涘叆瀹㈡埛绔┍鍔ㄤ粎缁忔帹閫佷簨浠朵竴鏉¤矾锛岄┍鍔ㄤ笉閲嶅鍏ヨ妭鐐归偖绠憋紝
+ 閬垮厤鍘嗗彶涓� buffer+閭鍙屾姤闂閲嶇幇銆�
+
+## 7. 璋冭瘯闈㈡澘澶氶�氶亾
+
+```
+CanDebugPanel锛堢被鍚�/鍏ュ彛涓嶅彉锛屽3鍖栦负 TabControl锛�
+ 鈹溾攢 宸ュ叿鏉★細[+ 娣诲姞閫氶亾] [鍏抽棴褰撳墠閫氶亾]锛汿ab 澶� "CAN-001 @CAN_BUS_1:0"
+ 鈹斺攢 TabControl 鈫� CanChannelView 脳 N锛堟柊 UserControl锛屾壙杞界幇鍗曢�氶亾鍏ㄩ儴 UI锛�
+```
+
+- CanChannelView锛氱幇鏈夐潰鏉垮洓鍖猴紙杩炴帴鎺у埗/鍙戦��/鎺ユ敹璁板綍/鐘舵�佺粺璁★級鏁翠綋鎶藉嚭锛�
+ x:Name 鎺т欢褰� View 鍐呴儴锛屾瘡 Tab 鐙珛鎺т欢鏍戙��
+- 閫氶亾涓ゅ叆鍙o細
+ 1. DeviceDebug 閫夎澶� 鈫� 鎵撳紑/鑱氱劍璇ヨ澶囬�氶亾椤碉紙閲嶅閫夋嫨鍙仛鐒︿笉閲嶅缓锛夛紝
+ 娉ㄥ叆 `CanDeviceDriver` 鍚庢�荤嚎/鑺傜偣杈撳叆鍙锛堣澶囪〃鏉冨▉锛夛紱
+ 2. 鎵嬪姩娣诲姞閫氶亾 鈫� 灏忓璇濇锛堟�荤嚎/鑺傜偣缂栧彿/鍚庣 Local-TCP锛夛紝鑷缓椹卞姩杩炴帴銆�
+- 姣� View 鐙珛 100ms PollTimer锛涚淮鎶ゆā寮忔寜閽涔夊垎涓ょ被锛氭敞鍏ラ┍鍔ㄢ啋濮旀墭
+ DebugSessionManager 绉熺害鐘舵�佹満锛圱oken 缂撳瓨澶嶇敤绛夌幇鏈夐�昏緫涓嶅姩锛夛紱
+ 鑷缓閫氶亾鈫掔淮鎸佹ā鎷熷櫒鏈湴鐩磋繛璇箟锛堜笌鑷姩鍖栨棤鍏筹紝涓嶅紩鍏ヤ徊瑁佹梺璺級銆�
+- 涓荤▼搴� Tab3"CAN 妯℃嫙鍣�"瀹夸富瀹瑰櫒鏀圭敤鍚屼竴澹崇被锛孧ainWindow 鏃犻渶澶ф敼銆�
+
+## 8. 閰嶇疆銆佸惎鍔ㄤ笌閿欒澶勭悊
+
+| 閿� | 浣嶇疆 | 榛樿 |
+|---|---|---|
+| `CanSimulator.Host` | 涓荤▼搴� + DeviceBroker App.config | 127.0.0.1 |
+| `CanSimulator.Port` | 鍚屼笂 | 9000 |
+| `ServerPort` / `ListenOnAllInterfaces` | 鏈嶅姟绔� App.config | 9000 / false |
+
+`UseTcpMode` 鍙栨秷锛汦ndpoint 鏍煎紡 `CAN_BUS_1:0` 涓嶅彉锛沝ata.db 闆惰縼绉汇��
+鍚姩椤哄簭锛氱敤鎴锋墜璧锋湇鍔� 鈫� 涓荤▼搴忥紙鐓у父鎷夎捣 DeviceBroker锛夆啋 CAN 鎸夐渶杩炴帴锛�
+涓荤▼搴忛��鍑哄彧鍏宠嚜宸辩殑杩炴帴锛屾湇鍔″父椹汇��
+
+| 鏁呴殰 | 琛屼负 |
+|---|---|
+| 鏈嶅姟涓嶅彲杈撅紙杩炴帴鏃讹級 | 鎶涜繛鎺ュ紓甯稿惈鍚姩鎻愮ず鏂囨 |
+| 涓�旀柇绾� | IsConnected=false 鈫� 鎸囨暟閫�閬块噸杩� 鈫� HELLO 閲嶅彂锛涙湡闂村彂閫佸揩閫熷け璐� NOT_CONNECTED锛汣onnectionChanged 涓婃姏 |
+| 鍦ㄩ�旇姹傛挒鏂嚎 | TimeoutException锛岃涔夌瓑鍚� Unknown(INV-06)锛岀姝㈣嚜鍔ㄩ噸璇� SEND |
+| 鑺傜偣琚崰 | ERR:NODE_BUSY锛屾彁绀轰慨鏀硅澶囩鐐� |
+| 鎺ㄩ�侀槦鍒楁弧 | 涓㈡渶鑰�+UI 璁℃暟锛涘鎴风 1s RECV_ALL 鍏滃簳琛ヨ处 |
+| Broker 绠¢亾鏂�/瀹夸富姝� | 娌跨敤鐜板紓甯革紱瀹夸富鍐� TCP 閲嶈繛瀵瑰鎴风閫忔槑 |
+
+## 9. 娴嬭瘯涓庨獙鏀�
+
+- **瀛橀噺鏀归��**锛氫緷璧栬繘绋嬪唴鎬荤嚎鐨勭敤渚嬶紙BrokerE2ETests CAN 鏀跺彂鏂█銆丆anBusService 鐩稿叧锛�
+ 鏀逛负娴嬭瘯 fixture 鍦ㄦ祴璇曡繘绋嬪唴 new `CanBusManager` + `TcpListener`锛堥殢鏈虹鍙o級
+ 鎵樼鏈嶅姟鏍稿績锛堟棤 UI 澶嶇敤灞傦級锛屼笌琚祴椹卞姩璧扮湡瀹� TCP 鍥炵幆锛屾棤闇�浜哄伐璧锋湇鍔°��
+- **鍗忚鍗曟祴**锛歋imulatorFraming 绮樺寘/鍗婂寘/瓒呴暱鎷掔粷锛汬ELLO 鐘舵�佹満锛汵ODE_BUSY 浠茶銆�
+- **椹卞姩鍗曟祴**锛氶噸杩炲悗 HELLO 閲嶅彂锛涘湪閫旇秴鏃惰涔夛紱EV:RECV鈫掍簨浠堕摼璺��
+- **鎵嬪姩楠屾敹娓呭崟**锛�
+ 1. 鍚姩 CanSimulatorServer.exe锛�
+ 2. 涓荤▼搴� CAN-001/002 缁� TCP 鎸傝浇锛�
+ 3. DeviceBroker 鍚姩锛孋AN-003/004 缁忓涓� RPC 涓浆璧� TCP锛�
+ 4. 璋冭瘯闈㈡澘鍚屽睆鎵撳紑 CAN-001 涓� CAN-003 涓や釜閫氶亾椤碉紱
+ 5. CAN-001 鍙戝抚 鈫� CAN-003 鏀跺埌锛�
+ 6. CAN-003 鍙戝抚 鈫� CAN-001 鏀跺埌锛�
+ 7. 鍙岄�氶亾骞跺彂鏀跺彂浜掍笉闃诲銆�
+
+## 10. 鏋勫缓绾︽潫涓庡凡鐭ラ闄�
+
+- 鏋勫缓椤荤敤 VS 瀹屾暣鐗� MSBuild锛堣В鍐虫柟妗� `WPFProject\TapProject.sln`锛夛紝
+ 鍛戒护琛屼笉鍔� `/p:Platform=x64`锛堣�佸紡宸ョ▼ XAML 缂栬瘧閾捐矾闄愬埗锛夈��
+- 椋庨櫓 1锛氭湇鍔$ TCP 鏍稿績涓� UI 鐨勫紩鐢ㄨ竟鐣屸�斺�斿凡瀹氾細鏈嶅姟绔繀椤诲紩鐢� CanSimulator 绫诲簱锛�
+ TcpAcceptor/CanBusManager 鏀炬湇鍔$宸ョ▼鍐咃紝CanSimulator 淇濇寔鏃� TCP 渚濊禆鐨勭函鍑�绫诲簱銆�
+- 椋庨櫓 2锛氬叏闈㈠垏 TCP 鍚庢湇鍔℃湭鍚姩鏃� Local CAN 璁惧瀹屽叏涓嶅彲鐢ㄢ�斺�斿凡瀹氾紝
+ 浠ユ竻鏅伴敊璇枃妗堜笌娴嬭瘯 fixture 鑷墭绠$紦瑙c��
+- 椋庨櫓 3锛欱roker 璺緞瀹炴椂鎬т粛涓鸿姹傞┍鍔紙鎹庡甫妯″瀷锛夆�斺�斾笌鐜扮姸涓�鑷达紝楠屾敹鏍囧噯涓嶅洜姝ゆ彁楂樸��
--
Gitblit v1.9.1