我在寫CAPL腳本來Automise診斷服務。我已經閱讀了一些大於8字節的DID。直到8個字節,我可以正確捕獲我的CAPL腳本中的數據,但是當數據大小超過8個字節時,我得到剩餘字節的一些垃圾值00。用於診斷服務的CAPL腳本
我可以在CANoe Trace中看到完整的讀取數據,但我無法在CAPL腳本中捕獲它。如果有人有任何想法或解決方案,請與我分享。
在Belo腳本中,問題是我可以正確捕獲值直到this.byte(7)。但是對於this.byte(8)和this.byte(9),我讀取00,但CANoe Trace中的實際值是0x54和0x66。所以這意味着我無法從CAN讀取超過8個字節的CAPL。
我的腳本看起來像:
variables
{
//Please insert your code below this comment
byte test_num;
message DTOOL_to_UPA msg_tester;
mstimer readTimerDID_2001;
mstimer defaultSession;
byte readBuf2001[8];
}
// read request
on key 'd'
{
test_num = 0;
msg_tester.dlc = 8;
msg_tester.dir = tx;
msg_tester.can = 1;
settimer(defaultSession, 2000);
}
on timer defaultSession // Request DID: 10 01
{
msg_tester.byte(0) = 0x02;
msg_tester.byte(1) = 0x10;
msg_tester.byte(2) = 0x01;
output(msg_tester);
settimer(readTimerDID_2001, 100);
canceltimer(defaultSession);
}
on timer readTimerDID_2001 // Read Request DID: 22 20 01
{
msg_tester.byte(0) = 0x03;
msg_tester.byte(1) = 0x22;
msg_tester.byte(2) = 0x20;
msg_tester.byte(3) = 0x01;
output(msg_tester);
canceltimer(readTimerDID_2001);
}
on message UPA_to_DTOOL
{
if (this.DIR == RX)
{
// Response Data for DID 2001
if ((this.byte(0)== 0x04)&&(this.byte(1)== 0x62)&&(this.byte(2)==0x20)&&
(this.byte(3)== 0x01)&&(this.byte(4)== 0x23) &&(this.byte(5)== 0x00)
&&(this.byte(6)== 0x44)&&(this.byte(7)== 0x22) &&(this.byte(8)==0x54)&&
(this.byte(9)== 0x66))
{
readDID2001();
}
}
}
請將您的腳本代碼添加到問題中。 [問] –
嗨哈米德,你沒有提到你是否有診斷數據庫(ODX,CDD,...)或你使用的診斷協議(KWP,GMLAN,UDS)。我問的原因是診斷協議建立在ISO-TP(用於CAN)上。您可以在CAPL中使用ISO-TP(參見例如[使用CAPL在CANoe中傳輸ISO-TP上的數據](https://stackoverflow.com/questions/35626632/transmitting-data-over-iso-tp-transport -protocol-in-canoe-using-capl)),但是當診斷數據庫可用時會容易得多。 (如果沒有診斷數據庫可用,請查看基本診斷的文檔。) – Sonic78
我使用獨立軟件開發CDD協議。數據庫可用。 –