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 統一推進模擬時間。
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。
3. 環境需求
BSC 路線橫跨三類主機,缺少任何一類都無法完成整條鏈。以下依角色說明職責與規格要求。
3.1 三類主機的職責分工
工程工作站(Windows)
執行 ETHCP 與 MATLAB / Simulink,完成通訊矩陣製作、BSC 產碼、模型接線與合併;同時是 SystemDesk / TargetLink 與 ControlDesk 的所在。BSC 的建置工作幾乎全部發生在這裡。
VEOS 模擬主機(Linux)
Ubuntu 24.04 LTS。以 veos build bsc 把 BSC 容器建成 OSA、匯入其他 VPU、完成接線與執行。所有模擬執行都在這裡。
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 共分十個步驟,橫跨兩台主機。下圖是整條工具鏈與各步驟的產出物。
7. 逐步操作:從通訊矩陣到可執行的模擬
以下每一步都包含操作內容、預期輸出、以及失敗時應返回的步驟。指令中的 <PROJECT> 代表您的專案根目錄,~/dsqemu 代表 VEOS 主機上的工作目錄。
開工前的四項檢查:① 授權伺服器可達(CodeMeter Control Center 或 TCP 22350 探測);② MATLAB 為正確版本且能載入 dSPACE 目標;③ ETHCP 可正常啟動;④ VEOS 主機可經 SSH 連線,且 Guest 映像與 OSA 工作目錄已就緒。
準備 AUTOSAR 通訊矩陣(ARXML)
矩陣定義了 Guest 與 BSC 之間交換的每一個位元組。至少需描述:一個 Ethernet Cluster 與 Physical Channel、兩個 ECU 實例(Guest 節點與 BSC 節點)、雙向各一個 PDU 與其 ISignal 對映,以及兩端的 socket 端點(IP 位址與 UDP 埠)。
矩陣可由 SystemDesk 等系統設計工具匯出,也可由腳本產生。建議以腳本產生並納入版本控管:矩陣是規格,改版頻繁,手改 XML 極易產生懸空參照。
⛔ 這一步唯一不可違反的規則:不要使用協定保留埠。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 與遠端端點。
ETHCP:匯入矩陣並確認元素存活
GUI 操作:
- 啟動 dSPACE Ethernet Configuration Tool,
File → New Project,建立專案檔(.ethprj)。 File → Import Communication Matrix…,選擇步驟 A 的 ARXML。- 檢查訊息視窗:應出現
Finished import of file '….arxml'.,且不應出現任何關於「remote endpoint information is missing」而移除元素的訊息。 - 在左側
Communication Matrix樹中展開 Cluster,找到要被模擬的節點(即 BSC 要扮演的那個 ECU;Guest 是真實節點,不要選它),右鍵 →Add to Configuration。 - 檢查 Configuration Data 面板:該 ECU 下應同時列出 Rx 與 Tx 兩個 PDU。若顯示
Corresponding ECU(s) = No items,代表矩陣在匯入時已被丟棄元素 —— 返回步驟 A。
為什麼要在這裡停下來檢查:ETHCP 的匯入與產碼是兩個階段。匯入時被丟棄的元素不會讓產碼失敗,工具會拿「還活著的東西」繼續產碼並回報成功。唯一可靠的判準是配置樹上看得到正確的 ECU 與 PDU。
ETHCP:產生 initial BSC
Configuration → General Properties → Code Generation,設定Base path與BSC file path至您的產碼輸出目錄。- 確認 Tx PDU 的週期發送屬性已啟用(見下方警告)。
File → Save Project,然後點選工具列的 Code Generation 圖示(此功能沒有對應的選單項)。
⛔ 兩個會讓您白跑一輪的陷阱:
- 產碼按鈕反灰=配置中沒有任何 ECU。返回步驟 B。
- Tx PDU 的「應用啟動時即啟用週期發送」屬性預設為關閉。若未開啟,模擬可以正常載入與執行、不會有任何警告,但 BSC 永遠不會發送反向封包 —— Guest 端只會看到「送得出去、收不到回應」。請在配置中啟用該屬性,並於匯出的組態檔中確認其值為 true。
自我檢查:打開 ethcpcom\*.trc(純文字),確認矩陣中規劃的每一條 ISignal 都在裡面。EXITCODE = 0 不是成功判準,.trc 的內容才是。
MATLAB:產生 Ethernet 模型
以正確版本的 MATLAB 開啟(版本錯誤會在步驟 F 才失敗,且訊息不會指向版本),切換到產碼輸出目錄後執行模型產生函式:
判準是 Model generation was successful。回傳碼非 0 未必是錯誤 —— 當 PDU 較小、未達使用 Simulink Bus Object 介面的門檻時,工具會逐條展開訊號而非包成 bus,並以回傳碼反映這件事。模型檔會自動開啟並存放於同一目錄。
理解 ETHCP 留下的接點(這是下一步的基礎):往下鑽進 ECU 子系統的 PDU 層,會看到兩組對映區塊 ——
| 方向 | 區塊型態 | 語意 |
|---|---|---|
| RX(Guest → BSC) | Gain |
收到的訊號值從這裡流出,您要把它接走送到根層 Outport。 |
| TX(BSC → Guest) | Constant |
這是佔位符,您要用自己的訊號來源取代它。 |
MATLAB:在模型根層補上訊號 port(最關鍵的一步)
為什麼一定要做這一步:ETHCP 產生的模型沒有根層 I/O。若直接進入合併,得到的 BSC 進到 VEOS 會是「有 Ethernet 控制器、0 個訊號 port」—— 也就是說 FMU 與 vECU 無從接線,整個框架不成立。這是建模工作,無法靠調整工具設定取得。
操作步驟:
File → Save As,另存為與自動產生的模型不同的名稱(例如veosgw_bsc.slx)。後續合併以這個模型為輸入。- 正向(RX → ECU):鑽進 RX 對映層,在目標訊號的
Gain輸出接上Goto區塊,Tag Visibility設為global;回到根層,以From接一個Outport。Outport 的名稱就是 VEOS 中看到的 port 名稱,請採用可辨識的命名。 - 反向(ECU → TX):在根層新增
Inport並接Goto;鑽進 TX 對映層,刪除佔位用的Constant,改以From接到原本的輸出線。 - 回音訊號(建議):若要在 Guest 端量測往返延遲,可在模型內把收到的序號與時間戳直接回拷到反向 PDU 的對應欄位。這樣回音全程在模擬時鐘內完成,量到的是純粹的模擬時間往返。
- 設定模型組態: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,數量與訊號對照表一致,且型別正確。
MATLAB:合併為 final BSC
把步驟 C 的 initial BSC 與步驟 E 的模型合併,產生 VEOS 可接受的最終容器:
合併失敗不會拋出例外。當模型建置失敗時,函式只會印出「BSC merge aborted」而不會中斷腳本,真正的錯誤訊息被吞掉。若合併未成功,請單獨對模型執行一次 slbuild,才能看到具體原因。
為什麼一定要合併:VEOS 在匯入時會檢查 BSC 是否包含由 Simulink 模型產生的程式碼。未經合併的 initial BSC 雖然已宣告 Ethernet 介面,仍會被明確拒絕。這是強制要求,不是建議。
VEOS 主機:由 BSC 建立 OSA
將 final BSC 傳送至 VEOS 主機後執行:
立即驗證 port 是否存在(這是步驟 E 是否生效的唯一客觀證據):
若 Ports : 0,代表步驟 E 沒有做或沒有生效,返回步驟 E。
注意事項:透過非互動式 SSH 執行時,VEOS 的環境設定腳本不會生效,請使用執行檔的絕對路徑。此外,veos model 系列指令會讀取標準輸入以接收修改內容,在腳本或 SSH 中必須附加 < /dev/null,否則指令會一直等待直到連線逾時。
VEOS 主機:匯入其餘 VPU(順序不可調換)
⛔ 一定要以 BSC 的 OSA 為底。若先用 Guest 的 JSON 建立 OSA 再匯入 BSC,會因為兩個 OSA 各自帶著同名的 Ethernet Cluster 而直接失敗。JSON 之間會自動合併同名 Cluster,OSA 之間不會。
Guest 映像更新後必須重建 OSA。Guest 的 JSON 以資源清單方式引用 Kernel 與 rootfs,這些檔案在 model import 當下就被嵌入 OSA,不是執行時才讀取。因此重新部署映像之後若沒有重建 OSA,跑的仍然是舊的 Guest —— 而且沒有任何警告。這是回歸測試中最容易產生錯誤結論的一個環節。
VEOS 主機:完成接線
接線分兩類,處理方式不同:
⛔ 不要使用訊號自動接線。自動接線依名稱配對,而 BSC 的 port 名稱來自通訊矩陣、ECU 的 port 名稱來自 AUTOSAR 系統描述,兩者幾乎不可能相同。結果是它會安靜地什麼都不接,而模擬照樣載入並執行 —— 這是最典型的「看起來成功」的失敗。請以明確的對照檔指定每一條連線。
驗收接線:重新匯出 OSA 的模型描述,確認連線數與訊號對照表一致,且 ECU 端原本的「訊號未連接」警告已消失。刻意保留不接的觀測用 port 會留下警告,屬預期行為,應在文件中記錄下來以免誤判。
執行與驗收
sim start 不會阻塞,需等待模擬時間走完後再查詢狀態:
驗收必須雙重判定 —— 只看其中一項都可能得出錯誤結論:
判定一: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 | 矩陣即規格,避免模型內的手寫拆解與正式通訊設計產生分歧。 |
| 單純想降低往返延遲 | 先量測 | 主導項通常是兩端的週期取樣相位,而非傳輸那一跳。要改善延遲,調整週期設計比更換傳輸層有效得多。 |
先打通一條訊號
第一次建置時,只在根層接出一條正向訊號並確認端到端有值,再擴充到完整的訊號對照表。整條鏈的失敗點很多,逐步縮小範圍遠比一次到位有效率。
為每條訊號設計可辨識波形
鋸齒、三角、固定階數的階梯、常數對照組 —— 讓「接錯通道」在第一眼就露餡,而不是等到數值分析階段才發現。
把整條鏈腳本化
從矩陣產生到模擬驗收共十個步驟、橫跨兩台主機。手動重跑一輪成本很高,且容易漏掉「重建 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