顯示具有 PCAN_Basic API 標籤的文章。 顯示所有文章
顯示具有 PCAN_Basic API 標籤的文章。 顯示所有文章

2025年8月5日 星期二

PeakCAN 與 ECU Simulator 通訊利用OpenAI 來找尋DTC 的解釋

在這一篇文章中PeakCAN Bus 與 ECU Simulator 通訊 擷取 DTC Data
得到DTC錯誤代碼但是有太多的錯誤代碼, 本來想說在本機建立一個database來搜尋, 靈機一動想說現在萬物都OpenAI, 於是就在得到DTC時把OpenAI API的功能寫進去來尋找 DTC的意義!
錯誤碼=>所有常見的 OBD2 錯誤代碼:解讀 P、B、C、U 程式碼
在Microsoft Visual Studio中利用NuGet 安裝OpenAI

using OpenAI;
using OpenAI.Chat;

private async void button3_Click(object sender, EventArgs e)
{
    //string dtcCode = txtDTC.Text.Trim();
    string dtcCode = "P0218".Trim();

    if (string.IsNullOrEmpty(dtcCode))
    {
        MessageBox.Show("請輸入 DTC 代碼,例如 P0202");
        return;
    }

    button3.Enabled = false;
    //txtResult.Text = "查詢中,請稍候...";
    CommonData.WriteMessage("查詢中,請稍候...", "", Color.Blue, Color.Red);

    string myApiKey = "your key";

    ChatClient client = new(
        model: "gpt-4.1",  //gpt-4
        apiKey: myApiKey
    );

    try
    {
        var prompt = $"請解釋 OBD2 故障碼 {dtcCode} 的意思,用繁體中文回答";
        
        ChatCompletion completion = await client.CompleteChatAsync(prompt);   
        CommonData.WriteMessage("查詢結果...", completion.Content[0].Text.ToString(), Color.Blue, Color.Red);
    }
    catch (Exception ex)
    {
        //txtResult.Text = "錯誤:" + ex.Message;
    }
    finally
    {
        button3.Enabled = true;
    }
}


還真的可以用!真是方便!!

2025年7月31日 星期四

PeakCAN 與 ECU Simulator 通訊 擷取 DTC Data

讀取 ECU Simulator 診斷故障碼 (Diagnostic Trouble Code, DTC)
利用PeakCAN Tools抓取的資料

送出以下 Flow Control(FC)封包,才會收到後面的連續幀:
CAN ID: 0x7E0(ECU 接收 ID)
DATA:   30 00 00 00 00 00 00 00
                
                └─ 0x30 = Flow Control (CTS: Continue To Send)

第一幀:
CAN ID: 7E8  
Data:    10 10 43 02 01 68 03 03
DTC 解碼規則:
Byte  位置     說明
0    10        First Frame (FF) 標誌(高4位元=1),表示這是多幀資料起始幀
1    10        剩餘資料長度 = 0x10 = 16 bytes(不含前2個控制位元)
2    43        服務ID:0x43,代表回應「Mode 03(讀取 DTC)」請求(0x03 + 0x40)
3    02        DTC 數量 = 2(總共兩筆故障碼)
4~5  01 68  第1筆 DTC
6~7  03 03  第2筆 DTC

每個 DTC 為 2 bytes,使用下列方式轉為代碼(5 碼):
高 2 bits(byte1) → 類型代碼(P, C, B, U):
00 = P(Powertrain)
01 = C(Chassis)
10 = B(Body)
11 = U(Network)
第一筆:01 68
0x0168 = 00000001 01101000
高兩位是 00 → P
剩下:168 → P0168
說明:燃油溫度過高(Fuel Temperature Too High)
第二筆:03 03
0x0303 = 00000011 00000011
高兩位是 00 → P
剩下:303 → P0303
說明:汽缸 3 點火失敗(Cylinder 3 Misfire Detected)
第二幀:
21 00 00 00 00 00 00 00 00   ← Consecutive Frame #1
第三幀:
22 00 00 00 00 00 00 00 00   ← Consecutive Frame #2

PeakCAN 與 ECU Simulator 通訊 擷取 VIN Data

在這篇文章 ECU Simulator CAN Bus Data with ESP32+MCP2515
當要去讀取 VIN (Vehicle Identification Number) Mode $09 - Vehicle Information 
始終都是只有得到
CAN ID: 0x7E8  
DATA:   10 14 49 02 01 31 46 54  
                │  │
                │  └─ 0x14 = 20 bytes 要回傳(包含 service, pid, vin 等)
                └─ 0x10 = First Frame(多幀傳輸)
找了許多資料知道有些ECU 需要 Flow Control Frame
所以送出以下 Flow Control(FC)封包,才會收到後面的連續幀:
CAN ID: 0x7E0(ECU 接收 ID)
DATA:   30 00 00 00 00 00 00 00
                
                └─ 0x30 = Flow Control (CTS: Continue To Send)
利用之前寫的PeakCAN Tool送出command frame:

終於得到完整的datas
第一幀 
10 14 49 02 01 31 46 54
│  │
│  └─ 0x14 = 20 bytes 資料總長
└──── 0x10 = First Frame

49 02 = 回應 Mode 0x09 + PID 0x02(VIN)
01 = 回傳資料塊 ID = 第 1 組 VIN 塊
31 46 54 = '1FT'(ASCII)
第二幀
21 4C 52 34 46 45 58 42
│ └────────────── 'LR4FEXB'
└─ 0x21 = Consecutive Frame index 1
第三幀
22 50 41 39 38 39 39 34
│ └────────────── 'PA98994'
└─ 0x22 = Consecutive Frame index 2

完整 VIN 字串共 17 個字元,已完全符合 OBD-II 規範
VIN: 1FTLR4FEXBPA98994


2025年7月25日 星期五

CAN Bus 測距通訊軟件開發

Purpose:
基於Radar, UWB等可以量測距離的產品, 開發出一套可以解析CAN bus上接收到的資料, 繪製成360度的GUI顯示出來距離跟角度.
構成要件:
接收介面:
PeakCAN接收的GUI 參閱之前的文章 
PeakCAN Windows GUI Application - Two Channel
解析介面:
CAN bus 通訊的UWB產品
由Initiator跟responder通訊後經由responder解析收到的資料後送至顯示介面顯示.
顯示介面:
360度距離角度GUI
接收解析後的距離跟角度的資料後, 繪製GUI顯示.
影像介面:
經由WEBCAM由responder視角看出, 顯示目前時間跟中心位置cross焦點.

2025年5月9日 星期五

PeakCAN Windows GUI Application - Two Channel

Purpose:
利用兩台PeakCAN撰寫一個利用c#寫的MDI(Mutliple Document Interface)來擷取CAN Bus上面的資料, 可應用於CAN Bus介面上的產品分析, 或是配合OBD2的介面的接線來接收車子的CAN Bus上的資料.

介面設計:
利用PeakCAN給的範例架構在MDI的GUI上面

另外在撰寫一個transmit的介面, 可同時連續傳送或是傳送一次勾選的ID內容
GUI上半部可同時監看兩台PeakCAN的接收與傳送的資料


2024年7月1日 星期一

CAN Bus Sniffer by PeakCAN windows software GUI

Purpose:
經由這篇文章PeakCAN windows software for CAN Bus message後, 再次利用PeakCAN的 PCANBasic API for C#的sample修改為自己的CAN Bus Sniffer擷取在CAN BUS介面上的資料!
特點
1. 增加monitor功能 
所有的CAN Bus上的資料 Tx and Rx 都可以即時監控.
2. 增加可同時多個Tx 傳送的CAN Bus資料依據個別定義的時序傳送
After reading this article PeakCAN windows software for CAN Bus message, I once again used the sample of PeakCAN's PCANBasic API for C# to modify it into my own CAN Bus Sniffer to capture the data on the CAN BUS interface!
Features
1. Add monitor function
All data Tx and Rx on the CAN Bus can be monitored in real time.
2. Added CAN Bus data that can be transmitted by multiple Tx at the same time according to individually defined timings.
利用自己製作的ESP32 CAN module搭配CAN Hacker software去做驗證!

YouTubeDemo:


2024年4月29日 星期一

PeakCAN windows software for CAN Bus message

Purpose:
利用PeakCAN提供的PCANBasic API for C#的sample去修改成自己適用的專案程式.

PCAN-Basic API
PCAN DB9 Connector

PCAN-Basic API for C#


Architectures:
利用ESP32_MCP2515 module 去驗證 PCAN_Basic API
YouTube Demo: