CAPL里声明一个结构体类型:
variables
{
struct DoIPMessage
{
byte version;
byte inVersion;
word type;
dword length;
byte payload[1500];
};
struct DoIPMessage doipMessage;
}
声明一个结构体类型DoIPMessage,定义了一个此结构体类型的变量doipMessage。也就是说doipMessage作为变量,它的数据类型是DoIPMessage。

由于系统变量中没有byte、word等数据类型,所以在系统变量中定义结构体里的成员时数据类型使用UInt32。payload成员在CAPL中是byte数组,在系统变量中定义为Data类型。长度也要做相应地设置:

如果DoIP消息是基于UDP协议传输的,想要把UDP头部加进来,就可以使用结构体定义一个UDP Header。
struct UDPHeader
{
word sourcePort;
word destinationPort;
word length;
word checksum;
};
要如何把一个结构体作为另一个结构体的成员?

在系统变量模块中定义如下:
