TECH ARTICLE

VEOS-Linux · Ethernet BSC:
vECU / FMU 與 Embedded Linux 聯合模擬

從環境需求、安裝包與授權清單,到模擬框架設計原理與 BSC 的完整逐步建置流程 —— 一份可直接照著執行的 Ethernet Bus Simulation Container 導入指南。

在虛擬驗證平台上,把 Classic V-ECU、plant model(FMU) 與 Embedded Linux Guest 放進同一場模擬並不困難;真正困難的是讓三者之間的資料交換全程留在同一條模擬時間軸上。dSPACE VEOS 的 QEMU Coupling 只提供虛擬 Ethernet 一條官方資料通路,而 Classic V-ECU 與 FMU 通常沒有 Ethernet 通訊控制器 —— 兩者之間因此需要一個「翻譯者」。

Ethernet BSC(Bus Simulation Container) 就是原廠指名的翻譯者:它一端持有 Ethernet 控制器、可掛上 VEOS 的虛擬 Ethernet Cluster,另一端以純訊號 port 直接連到 vECU 與 FMU 的輸入輸出,而且中間的 byte 版面由 AUTOSAR 通訊矩陣明確描述。本文以 VEOS 2026-A 與 dSPACE Ethernet Configuration Package(ETHCP)26.3 為基礎,完整說明這條路線的環境準備、授權需求、框架設計理由,以及從通訊矩陣到可執行 OSA 的逐步建置流程。

本文適用對象:負責建置 SIL / 虛擬驗證平台的系統整合工程師、需要以 restbus 方式驗證 Ethernet 通訊行為的網路工程師,以及評估「Embedded Linux 節點如何與既有 AUTOSAR ECU 一起做整合測試」的架構師。

前置閱讀:本文聚焦 BSC 路線的實作。若您尚未理解 VEOS QEMU Coupling 的三層巢狀環境與兩種時間同步模式,建議先閱讀〈dSPACE VEOS:嵌入式 Linux 模擬架構解析〉。

1. 為什麼需要 BSC:先釐清問題

導入前必須先接受三個既成事實,它們共同決定了整個框架的形狀。

事實 來源與依據 造成的限制
QEMU Coupling 只認虛擬 Ethernet VEOS 官方文件明載:Guest 與 VEOS 之間以虛擬 Ethernet 交換資料;CAN / LIN / FlexRay 須另行協定轉換。 Embedded Linux Guest 無法以訊號層方式直接接到其他 VPU。
Classic V-ECU / FMU 多半沒有 Ethernet 控制器 既有 ECU 專案的通訊多以 CAN 為主;要新增 Ethernet 需在系統描述層補上完整的 AUTOSAR Eth BSW 堆疊。 Guest 與 ECU 之間「沒有共同語言」,必須有中介元件。
Ethernet BSC 只能由 ETHCP 產生 Bus Manager 產生的 BSC 僅涵蓋 CAN / LIN;Ethernet restbus 的 BSC 由 ETHCP 產生。 工具鏈固定:ARXML → ETHCP → MATLAB → VEOS,中間不可替換。

1.1 中介元件的兩種選擇

實務上有兩條可行路線,兩者都能讓 Guest 的資料進到 ECU 內部,差別在於那一段資料通路是否留在模擬時鐘內,以及資料版面由誰定義。

比較項 Gateway SIC(Simulink 容器) Ethernet BSC(本文主題)
與 Guest 的連接方式 QEMU 使用者網路(slirp)→ 主機 socket → Simulink UDP 區塊 VEOS 虛擬 Ethernet Cluster,Guest 與 BSC 同掛一個 Channel
是否離開模擬時鐘 主機 socket 那一跳在時鐘外 全程在時鐘內
資料版面由誰定義 Simulink 模型內以位元組運算自行拆解 AUTOSAR 通訊矩陣(PDU / ISignal / 位元位置),可追溯
建置鏈長度 短:一份 Simulink 模型 → SIC 容器 長:ARXML → ETHCP → 模型產生 → 接線 → 合併 → 建置
每個 Guest 位址是否需各建一份 不需要(依實際來源位址回送) 需要(反向目的位址寫在矩陣內)

選型前必須知道的一件事:「BSC 全程在模擬時鐘內」是架構事實,但它不必然轉換成更低的往返延遲。在我們的實測環境中,兩條路線的端到端往返延遲分位數(p50 / p95 / p99)在多數組態下完全相同 —— 主導項是兩端週期取樣的相位關係(Guest 的送出週期與橋接元件的回覆週期),而非傳輸那一跳。因此,若導入 BSC 的唯一動機是降低延遲,建議先量測再決定;BSC 真正不可取代的價值在於 byte 層級的 restbus 語意與矩陣可追溯性。

2. 模擬框架設計

下圖是本文要建置出來的目標框架。四個 VPU 位於同一個 OSA(Offline Simulation Application)內,由 VEOS 統一推進模擬時間。

VEOS 模擬主機(Ubuntu 24.04) 單一 OSA · 四個 VPU · 統一的模擬時間軸 VEOS 模擬時間軸(Step 1 ms) FrontEcu(FMU) plant / ECU 行為模型 類比輸入 Adc1–3 · 數位輸入 Di1–3 數位輸出 Do1–6 DashboardEcu(Classic V-ECU) AUTOSAR BSW + RTE + SWC TestPoints 群組:12 個訊號 port XCP on TCP 供 ControlDesk 連入 CAN Cluster Ethernet BSC(Bus Simulation Container) 上緣:29 個訊號 port(17 out / 12 in),型別為 Bool / UInt16 / UInt32 下緣:Ethernet 通訊控制器,自動接上同名 Cluster 內含由通訊矩陣產生的 PDU 封解包邏輯(byte 版面可追溯) 純訊號連線 純訊號連線 VEOS 虛擬 Ethernet Cluster(例:EthBackbone) veos-qemu 行程 · POSIX-based V-ECU Buildroot / Yocto 映像:bzImage + rootfs(ext2 / ext4) eth0 靜態 IP · virtio-net-pci · 應用程式以 UDP 收送 為什麼要 BSC FMU / vECU 沒有 Ethernet 控制器, 無法直接掛上 Ethernet Cluster BSC 的雙重身分 對 Guest 是一個 Ethernet restbus 節點; 對 ECU 是一組 純訊號來源/接收端

2.1 每個元件為什麼必須存在

  • 虛擬 Ethernet Cluster —— 因為這是唯一的官方通路: Guest 的網路卡必須掛在 VEOS 的 Ethernet Cluster 上,資料才會在模擬時間軸內傳遞。實作上只要 Guest 的 JSON 組態與 BSC 的通訊控制器宣告相同的 Cluster 名稱,VEOS 在匯入時就會自動建立 Cluster、Channel 並完成接線。
  • BSC —— 因為需要一個同時懂兩種語言的節點: 它是整個框架中唯一同時具備 Ethernet 通訊控制器與訊號 port 的元件。少了它,Guest 的封包無處可去;多了它,ECU 完全不需要修改就能收到 Guest 的資料。
  • 通訊矩陣 —— 因為 byte 版面必須是規格,不是約定: Guest 送出的位元組要對應到哪一個訊號、佔幾個 bit、什麼位元組序、以什麼週期發送,全部由 ARXML 描述並由工具產生程式碼。這讓通訊行為可以被審查、被版本控管,也讓後續改版不必翻閱模型內部。
  • CAN Cluster —— 因為 ECU 之間的既有通訊要保留: FMU 與 Classic V-ECU 之間原本就以 CAN 交換訊號,這一段不受 BSC 影響,維持原樣即可。BSC 只是額外注入 Guest 來的資料。

2.2 資料通路在時間軸上的位置

下圖對照兩條路線的通路。理解這張圖,才能判斷自己的測試目的究竟需不需要 BSC。

路線 A · Gateway SIC VEOS 模擬時間軸內 Gateway SIC FMU / vECU 純訊號 主機 OS Socket 此段在模擬時鐘之外 (QEMU slirp) Embedded Linux Guest 應用程式 UDP 收送 路線 B · Ethernet BSC VEOS 模擬時間軸內(全程) Ethernet BSC FMU / vECU 純訊號 虛擬 Ethernet Cluster Embedded Linux Guest

3. 環境需求

BSC 路線橫跨三類主機,缺少任何一類都無法完成整條鏈。以下依角色說明職責與規格要求。

3.1 三類主機的職責分工

01

工程工作站(Windows)

執行 ETHCP 與 MATLAB / Simulink,完成通訊矩陣製作、BSC 產碼、模型接線與合併;同時是 SystemDesk / TargetLink 與 ControlDesk 的所在。BSC 的建置工作幾乎全部發生在這裡。

02

VEOS 模擬主機(Linux)

Ubuntu 24.04 LTS。以 veos build bsc 把 BSC 容器建成 OSA、匯入其他 VPU、完成接線與執行。所有模擬執行都在這裡。

03

BSP 建置主機(Linux)

Buildroot 或 Yocto 環境,產出 Guest 的 bzImage 與 rootfs。可與模擬主機共用,但建議分離以避免長時間編譯影響模擬。

3.2 各主機的規格與組態要求

主機 項目 要求 未滿足時的後果
工程工作站 作業系統 Windows 10 / 11 64 位元,符合 ETHCP 與 MATLAB 的系統需求。 ETHCP 或 MATLAB 無法安裝/啟動。
MATLAB 版本 必須是已註冊 dSPACE 目標(dsrt.tlc)的版本,由 ETHCP/RTI 的相容性清單決定。本文驗證環境為 R2024b。 BSC 合併階段找不到 System Target File,最終 BSC 無法產生。
磁碟 單一 BSC 專案的產碼輸出約 150–200 個檔案、2 MB 以上;含多版本比對時建議預留 5 GB。 產碼中斷,且錯誤訊息不一定指向磁碟。
VEOS 模擬主機 作業系統 Ubuntu 24.04 LTS + General Availability Kernel;Desktop / Server / Cloud 版本皆在支援清單內。 多半仍可執行,但落在原廠支援範圍外,回報問題時可能被要求以支援組態重現。
CPU / 記憶體 建議 8 vCPU 以上、32 GB RAM。icount 模式為單執行緒 TCG,單核效能比核心數更關鍵。 模擬加速比下降,長時間回歸測試的牆鐘時間顯著拉長。
/dev/kvm 僅 idle-detect 模式需要。虛擬機部署時須開啟巢狀虛擬化,並以原廠腳本建立 kvm 群組與 udev 規則。 只能使用 icount 模式;idle-detect 於載入階段直接中止。
網路可達性 須連得到 CodeMeter License Server(TCP 22350);若以 SSH 自動化,亦須放行對應埠。 授權不可達時 veos build / model / sim 全數停擺。
Guest 映像 檔案系統 單一 raw ext2 / ext4 磁碟映像;不可為 initramfs、squashfs 或 overlay 型態。 Guest 無法掛載 rootfs。
裝置驅動 網卡 virtio-net-pci、磁碟 virtio-blk,且必須編譯為 built-in 而非模組;Console 僅保留 ttyS0。 Guest 看不到網卡;idle-detect 下模組版本不符無法載入。
網路組態 靜態 IP,並關閉所有時間同步機制(NTP / chrony / hwclock)。 Cluster 內沒有 DHCP 伺服器,開機將卡在等待逾時;校時會破壞模擬時間同步。

4. 安裝包需求

下表列出 BSC 路線所需的軟體套件、安裝位置與用途。「必要性」欄位以本文的目標框架(BSC + Guest + FMU + vECU)為準;若您的組合較簡單,部分項目可省略。

安裝包 安裝於 在 BSC 流程中的角色 必要性
dSPACE Ethernet Configuration Package(ETHCP) 工程工作站 匯入 AUTOSAR 通訊矩陣、產生 initial BSC 與 Simulink 產碼資料;提供 ethernetconfig_* 系列 MATLAB 函式與 Ethernet Configuration 區塊庫。 必要。Ethernet BSC 無其他產生途徑。
MATLAB / Simulink + Simulink Coder 工程工作站 產生 Ethernet 模型、在根層補上訊號 port、並執行最終的 BSC 合併與程式碼產生。 必要,且版本須與 ETHCP/RTI 相容。
dSPACE RTI/dsrt 目標支援 工程工作站 提供 dsrt.tlc System Target File,BSC 合併時作為模型的建置目標。 必要。通常隨 ETHCP/RTI 安裝並註冊至特定 MATLAB 版本。
dSPACE VEOS(Linux 版) VEOS 模擬主機 Simulator 本體。提供 veos build / model / sim,並內含 QEMU Coupling 擴充(veos-qemu)。 必要。
dSPACE Bus API VEOS 模擬主機 匯流排存取服務,供 bus log 匯出與外部工具讀取匯流排流量。 建議安裝。需要以 Wireshark 分析 Ethernet/CAN 流量時必備。
dSPACE XIL API VEOS 模擬主機 以 ASAM XIL 標準讀寫模擬中的 ECU 內部變數,是自動化驗收的關鍵工具。 強烈建議。沒有它就只能靠 Guest 主控台輸出間接判斷。
dSPACE RTT / RTT Tools VEOS 模擬主機 即時測試與訊號追蹤服務,供 vECU 內部訊號的高頻取樣。 選用。依驗證需求決定。
SystemDesk / TargetLink 工程工作站 產生 Classic V-ECU(.vecu)與 ECU 行為 FMU;亦是系統層通訊矩陣的來源之一。 視組合而定。若 ECU 容器由他處提供則不需要。
ControlDesk 工程工作站 執行期的量測、標定與視覺化,透過 XCP on TCP 連入。 選用。純自動化驗證可改用 XIL API。
Buildroot / Yocto 工具鏈 BSP 建置主機 建置 Guest 的 Kernel 與 rootfs,並將受測應用程式打包進映像。 必要(除非已有現成映像)。

版本相容性的查核方式:ETHCP 產生的 BSC 必須被 VEOS 接受,兩者的版本相容性以原廠文件中的相容性列表為準。實務上請注意:官方網頁上的相容性表格更新可能落後於產品發行,此時應以該版本 VEOS 使用手冊內載明的相容性宣告為準,並可從 ETHCP 安裝目錄內的 BSC 產生器元件版本交叉確認。

5. 授權需求

dSPACE 產品以 CodeMeter 管理授權,可採本機 dongle 或網路授權伺服器。BSC 路線牽涉的授權比單純的 Embedded Linux 模擬多,建議在專案啟動前一次盤點完畢。

授權項目 用途 缺少時的具體症狀
VEOS – Base VEOS Simulator 本體:建置容器、組裝 OSA、載入與執行模擬。 任何 veos 指令都會失敗;整條鏈停擺。
VEOS_AAP
AUTOSAR Adaptive Platform
啟用 QEMU Coupling 擴充,使 VEOS 能載入 POSIX-based V-ECU(Embedded Linux Guest)。 含 Guest 的 OSA 在 sim load 啟動 QEMU 擴充時失敗。
Ethernet Configuration Package ETHCP 工具本體與 BSC 產生器。 無法匯入矩陣或無法產碼,取不到 initial BSC。
MATLAB / Simulink / Simulink Coder 模型產生、接線與程式碼產生(MathWorks 授權)。 BSC 合併階段無法建置模型,最終 BSC 不會產生。
SystemDesk / TargetLink 產生 Classic V-ECU 與 FMU;匯出系統層通訊描述。 無法自行產生 ECU 容器,需由他處提供。
ControlDesk 執行期人機介面的量測與標定。 僅影響觀測方式,不影響模擬本身。

授權部署的兩個實務建議:

  • 保留一份本機授權作為退路。採用網路授權伺服器時,只要伺服器不可達,建置、組裝與執行會同時失效,且錯誤訊息(例如「License Server not found」)與真正的授權不足難以區分。有本機 dongle 可立即切換,並縮小問題範圍。
  • 注意 seat 佔用行為。模擬載入期間會佔用一個 seat。單 seat 環境下,前一輪模擬若未卸載,下一次建置或載入會以「使用者達到上限」的訊息失敗 —— 這不是授權不足,只需先卸載模擬。建議在自動化腳本中,於每次載入前固定先執行一次卸載。

6. BSC 建置流程總覽

從通訊矩陣到可執行的 OSA 共分十個步驟,橫跨兩台主機。下圖是整條工具鏈與各步驟的產出物。

工程工作站(Windows) A · 通訊矩陣 AUTOSAR ARXML PDU / ISignal / 端點 B–C · ETHCP 匯入矩陣 → 選 restbus ECU 產出 initial BSC + 產碼資料 D–E · MATLAB 模型 產生 Ethernet 模型 ★ 根層補上訊號 port F · BSC 合併 bscmerge + 程式碼產生 產出 final BSC 關鍵檢查點 A:矩陣不可使用保留埠  B:產碼「成功」不代表元素沒被丟棄  E:不補 port,BSC 進 VEOS 會是 0 訊號 port F:合併失敗不會拋出例外,只會印出訊息 —— 必須逐步檢查輸出,不可只看回傳值 VEOS 模擬主機(Linux) G · 建 OSA veos build bsc 確認 port 數量正確 H · 匯入其他 VPU Guest JSON · FMU · vECU ★ 以 BSC 的 OSA 為底 I · 接線 匯流排自動接線 訊號依對照表明確指定 J · 執行與驗收 sim load / start 主控台 + XIL 雙重判定 傳輸 final BSC

7. 逐步操作:從通訊矩陣到可執行的模擬

以下每一步都包含操作內容、預期輸出、以及失敗時應返回的步驟。指令中的 <PROJECT> 代表您的專案根目錄,~/dsqemu 代表 VEOS 主機上的工作目錄。

開工前的四項檢查:① 授權伺服器可達(CodeMeter Control Center 或 TCP 22350 探測);② MATLAB 為正確版本且能載入 dSPACE 目標;③ ETHCP 可正常啟動;④ VEOS 主機可經 SSH 連線,且 Guest 映像與 OSA 工作目錄已就緒。

A

準備 AUTOSAR 通訊矩陣(ARXML)

矩陣定義了 Guest 與 BSC 之間交換的每一個位元組。至少需描述:一個 Ethernet Cluster 與 Physical Channel、兩個 ECU 實例(Guest 節點與 BSC 節點)、雙向各一個 PDU 與其 ISignal 對映,以及兩端的 socket 端點(IP 位址與 UDP 埠)。

矩陣可由 SystemDesk 等系統設計工具匯出,也可由腳本產生。建議以腳本產生並納入版本控管:矩陣是規格,改版頻繁,手改 XML 極易產生懸空參照。

# 產生矩陣並做 XML 結構檢查(示意) python gen_eth_matrix.py python validate_arxml.py <PROJECT>\bsc\eth\EthGateway.arxml
wrote EthGateway.arxml 92,949 bytes wrote EthGateway.ethcfg 415 bytes both files are well-formed XML VALID (0 unresolved references)

⛔ 這一步唯一不可違反的規則:不要使用協定保留埠。AUTOSAR 將 UDP 30490 保留給 SOME/IP Service Discovery。若 PDU 的 socket 端點使用該埠,ETHCP 會在匯入階段靜默丟棄相關的 PDU instance,而後續產碼仍回報成功,問題要到 BSC 進入 VEOS 時才會以「沒有訊號」的形式浮現。請改用未被保留的埠(例如 40010 / 40011),並在提交矩陣前檢查 <PORT-NUMBER> 是否含有保留值。

自我檢查:ARXML 內保留埠出現次數應為 0;PDU 長度(<LENGTH>)與您規劃的封包版面一致;每個 PDU 都有對應的 socket connection 與遠端端點。

B

ETHCP:匯入矩陣並確認元素存活

GUI 操作:

  1. 啟動 dSPACE Ethernet Configuration Tool,File → New Project,建立專案檔(.ethprj)。
  2. File → Import Communication Matrix…,選擇步驟 A 的 ARXML。
  3. 檢查訊息視窗:應出現 Finished import of file '….arxml'.,且不應出現任何關於「remote endpoint information is missing」而移除元素的訊息。
  4. 在左側 Communication Matrix 樹中展開 Cluster,找到要被模擬的節點(即 BSC 要扮演的那個 ECU;Guest 是真實節點,不要選它),右鍵 → Add to Configuration。
  5. 檢查 Configuration Data 面板:該 ECU 下應同時列出 Rx 與 Tx 兩個 PDU。若顯示 Corresponding ECU(s) = No items,代表矩陣在匯入時已被丟棄元素 —— 返回步驟 A。

為什麼要在這裡停下來檢查:ETHCP 的匯入與產碼是兩個階段。匯入時被丟棄的元素不會讓產碼失敗,工具會拿「還活著的東西」繼續產碼並回報成功。唯一可靠的判準是配置樹上看得到正確的 ECU 與 PDU。

C

ETHCP:產生 initial BSC

  1. Configuration → General Properties → Code Generation,設定 Base path 與 BSC file path 至您的產碼輸出目錄。
  2. 確認 Tx PDU 的週期發送屬性已啟用(見下方警告)。
  3. File → Save Project,然後點選工具列的 Code Generation 圖示(此功能沒有對應的選單項)。
[Info]: Code generation successful. EXITCODE = 0 BSC : codegen\veosgw.bsc ≈ 400 KB model data : codegen\veosgw_data.m signals : codegen\ethcpcom\veosgw.trc

⛔ 兩個會讓您白跑一輪的陷阱:

  • 產碼按鈕反灰=配置中沒有任何 ECU。返回步驟 B。
  • Tx PDU 的「應用啟動時即啟用週期發送」屬性預設為關閉。若未開啟,模擬可以正常載入與執行、不會有任何警告,但 BSC 永遠不會發送反向封包 —— Guest 端只會看到「送得出去、收不到回應」。請在配置中啟用該屬性,並於匯出的組態檔中確認其值為 true。

自我檢查:打開 ethcpcom\*.trc(純文字),確認矩陣中規劃的每一條 ISignal 都在裡面。EXITCODE = 0 不是成功判準,.trc 的內容才是。

D

MATLAB:產生 Ethernet 模型

以正確版本的 MATLAB 開啟(版本錯誤會在步驟 F 才失敗,且訊息不會指向版本),切換到產碼輸出目錄後執行模型產生函式:

cd('<PROJECT>\ethcp-bsc\work\port\<tag>\codegen') [inT, outT, rc] = ethernetconfig_modelgenerate('veosgw_data.m'); fprintf('rc = %d\n', rc);
--> ...adding ECU specific subsystems... --> ...for ECU: GwEcu Model generation was successful. Number of Ethernet Configuration blocks: 6 rc = 2

判準是 Model generation was successful。回傳碼非 0 未必是錯誤 —— 當 PDU 較小、未達使用 Simulink Bus Object 介面的門檻時,工具會逐條展開訊號而非包成 bus,並以回傳碼反映這件事。模型檔會自動開啟並存放於同一目錄。

理解 ETHCP 留下的接點(這是下一步的基礎):往下鑽進 ECU 子系統的 PDU 層,會看到兩組對映區塊 ——

方向 區塊型態 語意
RX(Guest → BSC) Gain 收到的訊號值從這裡流出,您要把它接走送到根層 Outport。
TX(BSC → Guest) Constant 這是佔位符,您要用自己的訊號來源取代它。
E

MATLAB:在模型根層補上訊號 port(最關鍵的一步)

為什麼一定要做這一步:ETHCP 產生的模型沒有根層 I/O。若直接進入合併,得到的 BSC 進到 VEOS 會是「有 Ethernet 控制器、0 個訊號 port」—— 也就是說 FMU 與 vECU 無從接線,整個框架不成立。這是建模工作,無法靠調整工具設定取得。

操作步驟:

  1. File → Save As,另存為與自動產生的模型不同的名稱(例如 veosgw_bsc.slx)。後續合併以這個模型為輸入。
  2. 正向(RX → ECU):鑽進 RX 對映層,在目標訊號的 Gain 輸出接上 Goto 區塊,Tag Visibility 設為 global;回到根層,以 From 接一個 Outport。Outport 的名稱就是 VEOS 中看到的 port 名稱,請採用可辨識的命名。
  3. 反向(ECU → TX):在根層新增 Inport 並接 Goto;鑽進 TX 對映層,刪除佔位用的 Constant,改以 From 接到原本的輸出線。
  4. 回音訊號(建議):若要在 Guest 端量測往返延遲,可在模型內把收到的序號與時間戳直接回拷到反向 PDU 的對應欄位。這樣回音全程在模擬時鐘內完成,量到的是純粹的模擬時間往返。
  5. 設定模型組態:System Target File 設為 dSPACE 目標(dsrt.tlc),Solver 設為固定步長,步長與其他 VPU 的基礎步長一致(常用 1 ms)。

⛔ 三個實際踩過的坑:

  • 不要更動原有區塊與訊號線的名稱。下游的 Bus Selector 依訊號名稱選取,改名會導致建置時出現與名稱完全無關的匯流排階層錯誤。
  • Inport 的資料型別不可留在 Inherit。否則 VEOS 端的 port 型別會被推斷成非預期的整數型別,與 ECU 的布林輸出接不起來 —— 而 veos build bsc 仍會回報建置有效。請明確指定(例如 boolean)。
  • 位元遮罩型的訊號要拆成獨立的布林 port。ECU 的數位輸入輸出通常是布林;若 BSC 只提供一個整數遮罩 port,兩者無法直接連線。請在模型內完成拆解與打包。

預期結果:根層可以看到您新增的所有 Outport 與 Inport,數量與訊號對照表一致,且型別正確。

F

MATLAB:合併為 final BSC

把步驟 C 的 initial BSC 與步驟 E 的模型合併,產生 VEOS 可接受的最終容器:

cd('<PROJECT>\ethcp-bsc\work\final-bsc') ethernetconfig_bscmerge( ... '<PROJECT>\ethcp-bsc\work\port\<tag>\codegen\veosgw.bsc', ... 'veosgw_bsc', 'OverwriteBsc', true);
*** Target architecture : 64-bit Build Summary ... Code generated. BSC merge was successful. Merged BSC file: veosgw_bsc.bsc ≈ 1.0 MB

合併失敗不會拋出例外。當模型建置失敗時,函式只會印出「BSC merge aborted」而不會中斷腳本,真正的錯誤訊息被吞掉。若合併未成功,請單獨對模型執行一次 slbuild,才能看到具體原因。

為什麼一定要合併:VEOS 在匯入時會檢查 BSC 是否包含由 Simulink 模型產生的程式碼。未經合併的 initial BSC 雖然已宣告 Ethernet 介面,仍會被明確拒絕。這是強制要求,不是建議。

G

VEOS 主機:由 BSC 建立 OSA

將 final BSC 傳送至 VEOS 主機後執行:

cd ~/dsqemu veos build bsc bsc/veosgw_bsc.bsc -o osa/ethbsc.osa < /dev/null
BUILD OF SIMULATION SYSTEM FINISHED WITH STATE VALID

立即驗證 port 是否存在(這是步驟 E 是否生效的唯一客觀證據):

veos model get osa/ethbsc.osa < /dev/null > /tmp/ethbsc.json # 以 JSON 工具檢視頂層 Ports 與 bus connector
top-level Ports : 29 bus connector : Ethernet -> /EthBackbone/EthBackbone Bool SocD0..SocD5 · GwDo1..GwDo12 UInt16 SocA0..SocA5 UInt32 SocMagic / SocSeq / SocTMs

若 Ports : 0,代表步驟 E 沒有做或沒有生效,返回步驟 E。

注意事項:透過非互動式 SSH 執行時,VEOS 的環境設定腳本不會生效,請使用執行檔的絕對路徑。此外,veos model 系列指令會讀取標準輸入以接收修改內容,在腳本或 SSH 中必須附加 < /dev/null,否則指令會一直等待直到連線逾時。

H

VEOS 主機:匯入其餘 VPU(順序不可調換)

cd ~/dsqemu cp osa/ethbsc.osa osa/bscfull.osa veos model import osa/bscfull.osa -p configs/guest-icount-bsc.json -o osa/bscfull.osa < /dev/null veos model import osa/bscfull.osa -p sut/FrontEcu.osa -o osa/bscfull.osa < /dev/null veos model import osa/bscfull.osa -p sut/DashboardEcu.osa -o osa/bscfull.osa < /dev/null
Vpus: veosgw_bsc / FrontEcu / DashboardEcu / GuestLinux-icount

⛔ 一定要以 BSC 的 OSA 為底。若先用 Guest 的 JSON 建立 OSA 再匯入 BSC,會因為兩個 OSA 各自帶著同名的 Ethernet Cluster 而直接失敗。JSON 之間會自動合併同名 Cluster,OSA 之間不會。

Guest 映像更新後必須重建 OSA。Guest 的 JSON 以資源清單方式引用 Kernel 與 rootfs,這些檔案在 model import 當下就被嵌入 OSA,不是執行時才讀取。因此重新部署映像之後若沒有重建 OSA,跑的仍然是舊的 Guest —— 而且沒有任何警告。這是回歸測試中最容易產生錯誤結論的一個環節。

I

VEOS 主機:完成接線

接線分兩類,處理方式不同:

# 1) 匯流排:同型態的通訊控制器自動接上同名 cluster veos model connect osa/bscfull.osa --autoconnect-communication-controllers -o osa/bscfull.osa < /dev/null # 2) 訊號:以明確的對照檔逐條指定 veos model connect osa/bscfull.osa -c configs/bscconn.json -o osa/bscfull.osa < /dev/null

⛔ 不要使用訊號自動接線。自動接線依名稱配對,而 BSC 的 port 名稱來自通訊矩陣、ECU 的 port 名稱來自 AUTOSAR 系統描述,兩者幾乎不可能相同。結果是它會安靜地什麼都不接,而模擬照樣載入並執行 —— 這是最典型的「看起來成功」的失敗。請以明確的對照檔指定每一條連線。

驗收接線:重新匯出 OSA 的模型描述,確認連線數與訊號對照表一致,且 ECU 端原本的「訊號未連接」警告已消失。刻意保留不接的觀測用 port 會留下警告,屬預期行為,應在文件中記錄下來以免誤判。

J

執行與驗收

veos sim down < /dev/null veos sim config --enable-sim-log --enable-bus-log -e 0.001 < /dev/null veos sim load osa/bscfull.osa < /dev/null veos sim start 30s < /dev/null

sim start 不會阻塞,需等待模擬時間走完後再查詢狀態:

State : Paused SimulationTime : 30 ElapsedTime : 31.005 → 加速比 0.968

驗收必須雙重判定 —— 只看其中一項都可能得出錯誤結論:

判定一:Guest 主控台

從 Guest 的標準輸出記錄檢查應用程式的收送統計。

  • 收到的封包數 > 0 — 證明 BSC 真的在發送(否則就是週期發送屬性沒開)。
  • 格式錯誤計數 = 0 — 證明反向封包的版面與識別碼正確。
  • 序號無回退 — 證明反向通路沒有亂序。
  • 回音序號與送出序號相符 — 證明 BSC 收到的正是 Guest 送出的那一包。

判定二:ECU 內部變數

以 XIL API 週期性讀取 ECU 內部的輸入變數。這是唯一能證明訊號真的到位的判準。

  • 數值會變動且相異值數量符合預期 — 證明資料流真的進到 ECU。
  • 波形特徵吻合 — 建議在 Guest 端刻意為每條訊號設計可辨識的波形(鋸齒、三角、固定階數的階梯、常數對照組),一眼就能判斷有沒有接錯通道。

關於「連線數」與「已驗證訊號數」:OSA 內確認 24 條連線存在,與執行期實際目擊 24 條訊號的數值,是兩件不同的事。撰寫驗收報告時請明確區分,避免把前者當成後者。

8. 失敗症狀對照表

BSC 路線的失敗絕大多數不會在發生的當下報錯。下表整理實際遭遇過的症狀與對應根因,可作為除錯時的第一份檢查清單。

症狀 根因 返回步驟
ETHCP 產碼成功,但 .trc 內找不到規劃的訊號 矩陣的 socket 端點使用了協定保留埠,PDU instance 在匯入階段被丟棄。 A
產碼按鈕反灰/CLI 回報「至少要選一個元素」 配置中沒有任何 ECU(PDU 的對應 ECU 為空)。 B
VEOS 匯入時拒絕 BSC,訊息提及「未包含由 Simulink 模型產生的程式碼」 使用了未經合併的 initial BSC。 F
建置有效,但 OSA 內 Ports : 0 模型根層沒有 Inport / Outport。 E
模擬正常執行,但 Guest 完全收不到反向封包 Tx PDU 的「應用啟動時啟用週期發送」屬性為關閉。 C
Guest 收得到封包,但全部被判為格式錯誤 識別碼/版面常數兩端不一致(常見於手算常數值)。建議由工具計算,不要手動換算。 E
匯入時報「已有同名匯流排叢集」 兩個 OSA 各自帶著同名 Cluster;匯入順序錯誤。 H
一切正常,但 ECU 內部變數完全不動 使用了訊號自動接線,實際上一條都沒接。 I
重新部署 Guest 映像後,行為與舊版完全相同 OSA 內嵌的是舊映像,未重建 OSA。 H
載入時回報找不到授權伺服器或使用者達到上限 前者是網路/伺服器問題;後者多半是前一輪模擬尚未卸載佔用 seat。 J

9. 導入建議

依測試目的選擇路線,避免為了架構的「純度」而付出不必要的建置成本。

您的測試目的 建議路線 理由
應用層資料交換(感測值、設定值、狀態回報) Gateway SIC 建置鏈短得多,且延遲表現在多數組態下與 BSC 相同。
需要 byte 層級的 restbus 語意:PDU 版面、位元位置、與通訊矩陣的可追溯性 Ethernet BSC 唯一選擇。這是 BSC 不可取代的價值,也是它值得投入建置成本的理由。
要與既有的 AUTOSAR 通訊設計保持單一事實來源 Ethernet BSC 矩陣即規格,避免模型內的手寫拆解與正式通訊設計產生分歧。
單純想降低往返延遲 先量測 主導項通常是兩端的週期取樣相位,而非傳輸那一跳。要改善延遲,調整週期設計比更換傳輸層有效得多。
01

先打通一條訊號

第一次建置時,只在根層接出一條正向訊號並確認端到端有值,再擴充到完整的訊號對照表。整條鏈的失敗點很多,逐步縮小範圍遠比一次到位有效率。

02

為每條訊號設計可辨識波形

鋸齒、三角、固定階數的階梯、常數對照組 —— 讓「接錯通道」在第一眼就露餡,而不是等到數值分析階段才發現。

03

把整條鏈腳本化

從矩陣產生到模擬驗收共十個步驟、橫跨兩台主機。手動重跑一輪成本很高,且容易漏掉「重建 OSA」這類沒有警告的步驟。腳本化之後才有辦法納入 CI。

關於本文

本文依據 dSPACE VEOS 2026-A、veos-qemu 26.1 與 dSPACE Ethernet Configuration Package 26.3 的官方文件,並結合捷策動能實際完成 Ethernet BSC 端到端聯合模擬(FMU + Classic V-ECU + Embedded Linux Guest,四個 VPU 同一 OSA)的專案經驗整理而成。文中的檢查點與失敗症狀均來自實作過程中的實際遭遇。

產品行為與工具介面可能隨版本演進而調整,實際專案請以對應版本之原廠文件為準。若需要針對貴公司的 ECU 架構、通訊矩陣現況與驗證需求進行可行性評估或導入協助,歡迎與我們聯繫:info@jotactic.com