CANoe基礎:仿真節點VLAN配置、UDP Capl編寫
不管是搞汽車軟件開發還是軟件測試,仿真是必不可少的一個環節。對于開發,可以通過仿真,确認軟件功能的可靠性;對于測試,可以通過仿真,發現軟件潛在的Bug。仿真的軟/硬件設備多種多樣,各有各的特點。本文基于CANoe+,聊一聊仿真節點的VLAN( Local Area )配置以及仿真節點UDP Capl編寫。
本文+前文《以太網基礎:為什麼需要VLAN?》,希望可以更好地幫助你理解和學習VLAN。
1、仿真節點創建及UDP Capl編寫
(一)仿真節點創建
CANoe軟件中,可以在總線中創建仿真網絡節點( Node)模拟整車通信環境,以此替代真實的物理節點。本文,創建一個仿真節點,具體步驟如下:
1、-> Setup->Nodes-> Node
創建的仿真節點如下所示:
2、配置仿真節點,右擊仿真節點->...->對仿真節點命名,eg:Title修改為。如下所示:
(二)UDP Capl腳本編寫
1、單擊仿真節點的"Edit"按鈕,進行Capl腳本的編寫
2、本文給出一個UDP周期(eg:100ms)發送的CAPL腳本,源地址IP:Port(192.168.0.10:49153),目标IP:Port(192.168.0.11:49155)。腳本如下所示:
/*@!Encoding:936*/
variables
{
UdpSocket gSocket;
char text[200];
int sendCnt;
msTimer waitTime;
}
on start
{
/* Open an UDP socket. As source address
192.168.0.10 is used,Port = 49153 */
gSocket = UdpSocket::Open( IP_Endpoint(192.168.0.10:49153) );
if (IpGetLastError() != 0)
{
// if UdpSocket::Open fails, we print a message to the write window
write( "<%BASE_FILE_NAME%> UdpSocket::Open failed with result %d", IpGetLastError() );
}
setTimer(waitTime,1);
}
on preStop
{
cancelTimer(waitTime);
// Close socket on measurement stop
gSocket.Close();
}
on timer waitTime
{
text[0] = sendCnt++;
text[1] = 0x55;
text[2] = 0xAA;
// send text to IP address/UDP port of the receiver
gSocket.SendTo( IP_Endpoint(192.168.0.11:49155), text, strlen(text) );
write ("Send UDP Info.");
setTimer(waitTime,100);
}
3、對編寫的capl腳本進行編譯當capl腳本編寫完成以後,在編寫界面單擊""或者" All"進行編譯,确保編寫的腳本沒有語法錯誤,如下所示:
将編譯好的capl腳本下載到仿真節點,單擊仿真節點的"",進行下載操作,此過程中,會彈出 提示,如下所示:
2、仿真節點的VLAN配置
工程中,節點會進行VLAN配置,為了更好地模拟真實物理節點,需要在仿真設備中進行VLAN操作。具體操作如下:
1、右擊仿真節點->TCP/IP ...
2、選中目标仿真節點(本文:),選擇" TCP/IP stack",如下所示:
單擊"Add...",在彈出的界面中選擇目标,設置VLAN ID(eg:10),設置VLAN ,如下所示:
如下所示:
在創建的VLAN 1.10中進行設置,對本文的Local IP(192.168.0.10)添加VLAN,如下所示:
3、包含指定VLAN的UDP通信
在使能仿真節點(本文:)與物理節點通信之前,先确保仿真節點端口和物理節點端口處于激活狀态(),如下所示:
啟動仿真,觀察的UDP通信(帶有VLAN),當仿真節點與目标節點的VLAN相同時,兩者通信數據流如下所示:
當仿真節點與目标節點的VLAN不同時,兩者無法通信,隻能各自不斷發送ARP報文,請求去查找目标節點MAC,如下所示:
我來說兩句