dSPACE VEOS · SIL SOLUTION

V-ECU 於 Linux ECU 平台
SIL 測試方案

針對運行於 POSIX / Linux 的 SoC 域控制器(AUTOSAR Adaptive),以 dSPACE VEOS 進行程式碼層級 SIL 測試的完整方案——涵蓋測試系統組成、實驗服務限制,以及六大互補測試手段。

Adaptive V-ECU (.vecu) Ubuntu 22.04 LTS SOME/IP · UDS Release 2024-B

現代 SoC(System-on-Chip)ECU——自動駕駛/ADAS 域控制器、座艙、中央運算單元——運行 POSIX(Linux),以 C++ 與 AUTOSAR Adaptive Platform(ara::com) 開發,骨幹是乙太網 + SOME/IP 服務導向通訊。在 VEOS 中,這類軟體被打包為 Adaptive V-ECU,於 dSPACE VEOS Linux Kernel + Hypervisor(QEMU/KVM)構成的虛擬機內執行。本方案說明如何對其進行 SIL 測試。內容整理自 dSPACE VEOS Manual 與 AutomationDesk 手冊(RLS2024-B)。

1. 為什麼 Linux/SoC 的測試「不一樣」

Adaptive V-ECU 與傳統微控制器的 Classic V-ECU,在可觀測性上有根本差異,這決定了測試手段:

面向 Classic V-ECU(微控制器) Adaptive V-ECU(Linux/SoC)
執行形態原生行程(native VPU)虛擬機內的 Linux 行程
變數可及性XCP / RTT / DsDAQ 可直接量測內部變數容器不內建這些實驗服務
主要可觀測介面內部記憶體變數(A2L)對外乙太網(SOME/IP、UDS)+ 偵錯器(GDB)
時間行為連續推進全核 idle 才前進,無限迴圈會凍結

一句話:測 Classic 像「在示波器上看內部訊號」;測 Adaptive/SoC 更像「在網路與診斷介面上看一台真正的 Linux 電腦」。

2. SIL 測試的定位與價值

VEOS 是 dSPACE 用於程式碼層級 SIL 模擬的整合與測試平台,把測試從「需要硬體才能做」左移(frontloading)到純 PC 環境:缺陷越早發現,修正成本越低。

早期驗證

軟體可編譯即可測,不必等 HIL 台架或樣車

可重現

共用同一條虛擬模擬時間,結果與是否單步偵錯無關

可平行 / 雲端

純軟體,能在容器與叢集中大量平行執行

可回歸

完全無頭(headless)可納入 CI/CD

可用於安全流程

依 ISO 26262 method 1b+1c 取得工具資格,可用於 ASIL D

3. 測試系統的組成

一個 SIL 測試系統(simulation system)由四類元素加上互連組成,各元件經 VEOS System Builder 編為 VPU,整合為單一 OSA(.osa) 後於 VEOS Simulator 執行:

元素 角色 在 SoC 測試中的來源
被測對象 DUT要驗證的 V-ECUAdaptive V-ECU(.vecu,C++ 應用 + 中間件層)
殘餘匯流排 Restbus模擬「對端 ECU」的通訊BSC(.bsc,由 Ethernet Configuration Package 產生)
環境模型 Environment被控對象 / 感測器 / 場景FMU(FMI Co-Simulation)或 SIC(Simulink)
互連 Interconnection連接上述元素乙太網 / CAN / LIN cluster

整合方式:於 Network Topology 把通訊控制器拖到對應 cluster;於 Port Topology 用 Autoconnect 依同名埠自動連接。Restbus 的測試意義:把非 DUT 的對端 ECU 以 restbus 合併模擬,即可在無真實對端下測 DUT,並操控 restbus 報文觀察反應(故障注入的基礎)。

4. 關鍵限制:實驗服務矩陣

規劃 SoC 測試前必須先理解這張表。每種容器在 VEOS 中內建的「實驗服務」不同,直接決定可用哪些工具存取它:

容器 XCP RTT DsDAQ Bus Access Bypass 變數描述
Classic V-ECU✓✓—部分¹部分²A2L
Adaptive V-ECU(Linux/SoC)✕✕✕✕✕—
FMU(一般)—✓✓——SDF/TRC
FMU(fmi-ls-xcp)✓————A2L
SIC(Simulink)✓✓✓——A2L 或 SDF/TRC
BSC(Restbus)—✓✓✓—SDF/TRC

¹ 僅當 Classic V-ECU 至少有一個通訊控制器。 ² 僅當 VECU 含 Rapid Prototyping Access(RptAccess)模組。

核心結論:Adaptive V-ECU 容器不可被 XCP/RTT/DsDAQ 直接量測。因此必須改用外圍/間接手段:對外乙太網介面(SOME/IP、UDS)、與其相連且可量測的 Restbus / 環境 VPU、應用自身偵錯介面(GDB)、以及 VEOS CoSim 外部介面。

5. 六大測試方式總覽

# 測試方式 主要工具 測什麼
①服務導向通訊測試Ethernet Config + Restbus(BSC)SOME/IP 服務發現、事件/方法/欄位收發
②故障注入測試Restbus 報文 + A2L + AutomationDesk錯誤偵測、安全降級、容錯與恢復
③自動化測試AutomationDesk + RTT批次回歸、自動判定、報告產生
④量測 / 校正 / 診斷ControlDesk(Bus Navigator / MCD-3D)乙太網監控、UDS/DTC、環境變數量測
⑤外部協同模擬VEOS CoSim Interface(DsVeosCoSim)以自有 C++ 程式做刺激/評估/共模
⑥偵錯與性能分析GDB + dSPACE NMI Profiler原始碼偵錯、卡死定位、火焰圖

6. 各測試方式詳解

①服務導向通訊測試(SOME/IP Restbus)

以殘餘匯流排(Restbus)模擬對端 ECU 的乙太網/SOME/IP 通訊,驗證 DUT 的 ara::com 行為:服務發現(Offer/Find,SOME/IP-SD)、事件(訂閱、週期收發、欄位通知)、方法(RPC 呼叫/回應、錯誤碼)、欄位(Getter/Setter/Notifier)、序列化正確性(ID 指派與封包結構)。觀測手段:ControlDesk 的 Bus Navigator 解碼報文、Bus Instruments 主動操控 restbus 報文。

②故障注入測試(Fault Injection)

驗證 DUT 的穩健性與安全機制。由於 Adaptive V-ECU 內部不可直接寫入,故障注入主要從外圍進行,分三類注入點:

注入層手段範例
匯流排層故障操控 restbus 報文 / A2L 變數報文缺失、逾時、竄改、錯誤計數;BusConnectionState=1 一鍵斷開所有總線
訊號 / 數值故障以 A2L 變數覆寫,或由環境模型注入超量程、凍結、跳變、雜訊
電氣錯誤模擬AutomationDesk Simulating Electrical Errors 函式庫短路、斷路、對地/對電源短路

標準流程:建立基準 → 注入單一故障(一次只改一個,確保可歸因)→ 比對反應(是否在規定時間內偵測並進入安全狀態、設置正確 DTC)→ 恢復測試 → 以 AutomationDesk 自動判定 Pass/Fail。

③自動化測試(AutomationDesk + RTT)

將手動測試腳本化、批次化、可回歸。堆疊:AutomationDesk(測試序列、資料管理、自動判定、報告)→ 存取庫(模擬平台 / ControlDesk / RTT / MATLAB;訊號式測試)→ RTT(以 Python 即時讀寫變數)→ VEOS(OSA)。

兩個關鍵注意:① RTT 不能作用在 Adaptive V-ECU 上(其容器無 RTT 服務),實際是施加在 Restbus / 環境 VPU 側,間接驅動 DUT。② 版本須一致:PC 上的 RTT 版本須與 VEOS Simulator 內含版本相容(VEOS 2024-B ↔ RTT 2024-A);自動化介面相容 Python 3.12。

訊號式測試(Signal-Based Tests)特別適合 ADAS/AD:以時間序列定義輸入激勵與期望輸出曲線,自動比對容差帶。

④量測 / 校正 / 診斷(ControlDesk / UDS)

操作要點:註冊平台(Register Platforms → VEOS,可本機或遠端 Linux)→ 建立專案匯入變數描述(.sdf/.a2l)→ Go Online → 乙太網監控(Bus Navigator 解碼 SOME/IP)→ 故障注入(Bus Instruments 操控 restbus,接方式②)→ 診斷測試(ECU Diagnostics MCD-3D 裝置匯入 ODX,執行 UDS 服務、讀取/清除 DTC)。Adaptive V-ECU 的內部變數不可經 XCP 直接量測,功能正確性須靠對外介面(UDS、SOME/IP)與可量測的 Restbus/環境 VPU 間接驗證。

⑤外部協同模擬(VEOS CoSim Interface)

當需以自有 C/C++ 程式對 VEOS 模擬做步進控制與 I/O / 匯流排資料交換時(第三方求解器、HIL/SIL 共模、自製刺激與評估器),使用 DsVeosCoSim。伺服端以 JSON 描述介面並匯入為 OSA;客戶端自 github.com/dspace-group/veos-cosim-client 取得函式庫,用 CMake 連結 DsVeosCoSim。

# Linux:匯入 JSON → 載入 → 等待 client 連入
veos model import -n ./VeosCoSimOsa.osa -p ./Example.json
veos sim load ./VeosCoSimOsa.osa

⑥偵錯與性能分析(GDB / NMI Profiler)

遠端 GDB:在 V-ECU 內以 gdbserver 啟動應用,遠端 GDB 連入。先決條件:匯入時設 HostOnly hypervisor 連接、設好 TAP 虛擬網卡、GDB 主機上有應用副本。

gdb <application>
set sysroot <path>
target extended-remote tcp:<VECU_IP>:<port>

NMI Profiler:由於模擬時間「全核 idle 才前進」,含無限迴圈的應用會凍結模擬。NMI Profiler 在不停止模擬下週期觸發 NMI,蒐集各核當下執行的任務,產生堆疊追蹤並以火焰圖視覺化——寬而高者即為卡住的熱點。

7. 虛擬模擬時間對測試正確性的影響

  • 時間前進規則模擬時間只有在所有 CPU 核心都切到 idle task 時才前進。含無限迴圈的應用會使模擬時間凍結、測試卡住 → 用 NMI Profiler 定位。
  • 時鐘來源VEOS 把 Linux clock source 與全域模擬時間同步,應用應一律取自 Linux clock source。RTC 裝置(/dev/rtc*)不與模擬時間同步,依賴它的時間邏輯在 SIL 中會異常。
  • 預啟動初始化預設模擬時間在 kernel boot 時就開始。若希望 V-ECU 完全初始化後才計時,可用 veos.clock_noinit 暫停時鐘,於 SUT 內呼叫 veos-start 啟動。

8. CI/CD 無頭自動化回歸測試(Docker)

VEOS on Linux 全程可無 GUI 執行,天然適合 CI/CD。dSPACE 提供 Dockerfile + Python 腳本把 VEOS 跑在容器中。

# 建置含 Adaptive 支援的映像
BuildVeos.py online <acceptEula> <veosImage> <veosInstallFile> --target veosAdaptive
# 構建 Linux 目標的 OSA(可在 Windows 構建、Linux 運行)
veos build adaptive-vecu MyVecu.vecu -t HostPCLinux64/GCC \
  --hypervisor-connection-state HostOnly -o MySoC.osa
# 運行容器(指定共享記憶體)
RunVeos.py <veosImage> <licenseServer> --dockerRunArgs "--shm-size 300m --cpus 3"
  • 容器內啟動順序(缺一不可):① CodeMeter server → ② port mapper(rpcbind / dspace-portmapper)→ ③ VEOS Kernel(建議用 supervisord 管理)。
  • 共享記憶體 --shm-size ≥ 256m(Bus access 每 bus VPU 32 MB、DsDAQ 每 VPU 16 MB)。
  • 構建 / 運行分離:在 Windows 用 SystemDesk + VEOS 構建 HostPCLinux64/GCC 目標,部署到 Linux/容器運行;archive-based Adaptive V-ECU 建議先做成 QEMU image。

9. 測試方式選型決策表

測試目標 建議方式 為什麼
驗證 SOME/IP 服務發現與收發① + ④DUT 對外介面即乙太網/服務
驗證錯誤偵測 / 安全降級 / 容錯② + ③須主動製造異常並觀察反應
大量回歸 / 夜間批次 / 報告③腳本化、自動判定、產生報告
讀 DTC / 跑 UDS 診斷序列④標準診斷協定經乙太網
接自有 C++ 測試框架 / 第三方求解器⑤程式化步進與 I/O 交換
應用層 bug / 崩潰 / 邏輯錯誤⑥ GDB原始碼層單步、中斷點
模擬卡住 / 不前進 / 性能熱點⑥ NMI Profiler不停模擬即可採樣定位迴圈
想量測「內部變數」改測 Restbus/環境 VPUAdaptive V-ECU 容器無 XCP/RTT/DsDAQ

10. 端到端測試流程

階段 工具 產出 / 動作
建模 / 產生SystemDeskSWC、Executable、四類 Manifest
建 Adaptive V-ECUSystemDeskV-ECU + Tmc(核數/記憶體/乙太網卡)→ 匯出 .vecu
構建VEOS(Win 或 Linux)veos build adaptive-vecu → 整合 Restbus/環境 VPU → OSA
運行VEOS(Linux)veoskernel → veos sim load/start
測試 / 分析RTT / AutomationDesk / CoSim / ControlDesk / GDB / NMI執行測試、量測診斷、偵錯與性能分析

11. 測試規劃最佳實務

  • 先讀「實驗服務矩陣」再決定測試手段——這是 SoC 測試與 Classic 最大的不同
  • 單一變因原則:故障注入一次只改一個條件,確保可歸因
  • 基準 + 容差:訊號式測試以基準曲線 + 容差帶自動判定,避免人工目視
  • 構建/運行分離 + CI:Windows 構建 Linux 目標,Linux/容器無頭回歸
  • 偵錯前以 Debug configuration 構建(預設),確保原始碼有除錯資訊
  • 每個模擬僅一個 Adaptive V-ECU 可設 HostOnly(供外部存取/遠端 GDB),其餘須 Disconnected

原始文件出處(dSPACE RLS2024-B)

文件 內容範圍
VEOS ManualSIL 模擬基礎、Adaptive V-ECU 整合與模擬、實驗服務、虛擬模擬時間、VEOS on Linux、CoSim Interface、NMI Profiler、Docker/CI
AutomationDesk 手冊Signal-Based Tests、Accessing Real-Time Testing、Simulating Electrical Errors
veos-cosim-clientDsVeosCoSim 外部協同模擬客戶端函式庫

來源:dSPACE VEOS / AutomationDesk 手冊(RLS2024-B)。執行平台基準:Ubuntu Linux 22.04 LTS。不同 Release 之選單、路徑、參數名稱可能略有差異,請以實機為準。