2017-03-09 37 views
0

CAPL確實接受像下面如何在CAPL中創建擴展消息ID?

消息100X mymsg

但是,它沒有接受長消息ID,它是擴展的有效載荷的情況下的消息定義。換句話說,這是我希望做什麼(和CAPL不接受):

消息18FEF889x mymsg

我知道有功能mkExtId(),雖然我還沒有想通仍瞭解它的工作原理。我想是這樣

消息18FEF889x mymsg

mkExtId(mymsg.id)

,但它仍然無法正常工作。有人有任何想法嗎?

感謝

回答

0
  1. 首先聲明一個消息,而無需ID

    消息* ExtMsg; //宣言而不標識

  2. 使用CAPL功能mkExtId()返回一個擴展ID
  3. 該ID分配給該消息。
variables 
{ 
    timer T1 = 1; 
    message 0x100 stdMsg; 
    dword ext_id ; 
    message *ExtMsg; // Declaration without Id 
} 

on start 
{ 
    setTimer(T1,1); 
    ext_id = mkExtId(0x34444); 
    ExtMsg.id = ext_id; 
    ExtMsg.dlc = 2; 
} 

on Timer T1 
{ 
ExtMsg.byte(0) = 99; 
stdMsg.stdSignal =2; 
output(stdMsg); 
output(ExtMsg); 
setTimer(T1,1); 
} 
+0

非常感謝!我真的無法解決它! – Jag

1

mkExtId返回擴展的ID,那麼你assing到id其中如果消息,這裏的例子功能:

該功能設置信息的擴展ID通過:

void setExtId(dword x_id, message* m) 
{ 
    dword ext_id; 
    ext_id = mkExtId(0x1FFFFFFF); 
    m.id = mkExtId(x_id); 
    if(m.id == ext_id) 
    { 
    write("some stuff"); 
    } 
} 
+0

非常感謝!由於我沒有15張選票,我仍然無法讚揚你! – Jag

+0

沒問題。它有用嗎?我有這個片段,但我無法完全測試它。 – GurstTavo

0

你可以簡單地用這種方式宣佈消息:

message 0x114455x msg;