实现诊断的过程要先实现时间同步,研究了一下,记录一下,方便以后出现问题再用
配置过程,一开始发送了报文,但是就是同步不成功,还以为自己的问题,原来CANoe需要配置
配置过程




这里不能丢弃,丢弃就会出现问题
c
/*@!Encoding:65001*/
includes
{
}
variables
{
word g_sequenceID_sync_followUp=1;//sequenceID供g_syncMessage和g_followUpMssage
word g_sequenceID_peerDelay=1;//sequenceID供g_peerDelayRespMessage和g_peerDelayFollowUpMssage
byte g_syncMessage[50];
byte g_followUpMssage[80];
byte g_peerDelayRespMessage[58];
byte g_peerDelayFollowUpMssage[58];
msTimer syncTimeCycle;
msTimer syncTimeCycle1;
ethernetPacket g_syncMessagePacket;
ethernetPacket g_followUpMssagePacket;
ethernetPacket g_peerDelayRespMessagePacket;
ethernetPacket g_peerDelayFollowUpMssagePacket;
int syncTimeInitSuccess_flag=0;
byte sourcePortID[8];
qword g_Tester_MAC=0;//测试仪MAC
qword g_LLDP_Multicast=0;//时间同步目的地址
}
on timer syncTimeCycle
{
send_sync_followUpsync_followUp();
setTimer(syncTimeCycle,125);
}
on timer syncTimeCycle1
{
int i;
dword currTime;
qword num;
for(i=44;i<44+8;i++)
{
g_peerDelayRespMessagePacket.byte(i)=sourcePortID[i-44];
g_peerDelayFollowUpMssagePacket.byte(i)=sourcePortID[i-44];
write("哈哈哈啊 %d %02x",i-44,sourcePortID[i-44]);
}
g_peerDelayRespMessagePacket.byte(30)=((g_sequenceID_peerDelay>>8)&0xff);
g_peerDelayRespMessagePacket.byte(31)=((g_sequenceID_peerDelay)&0xff);
currTime=timeNow();
num=(qword)(currTime/100000.0);
g_peerDelayRespMessagePacket.byte(34)=0x00;
g_peerDelayRespMessagePacket.byte(35)=0x00;
g_peerDelayRespMessagePacket.byte(36)=0x00;
g_peerDelayRespMessagePacket.byte(37)=((num>>16)&0xff);
g_peerDelayRespMessagePacket.byte(38)=((num>>8)&0xff);
g_peerDelayRespMessagePacket.byte(39)=((num)&0xff);
num=(qword)(currTime%100000)*10000;
g_peerDelayRespMessagePacket.byte(40)=((num>>24)&0xff);
g_peerDelayRespMessagePacket.byte(41)=((num>>16)&0xff);
g_peerDelayRespMessagePacket.byte(42)=((num>>8)&0xff);
g_peerDelayRespMessagePacket.byte(43)=((num)&0xff);
output(g_peerDelayRespMessagePacket);
g_peerDelayFollowUpMssagePacket.byte(30)=((g_sequenceID_peerDelay>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(31)=((g_sequenceID_peerDelay)&0xff);
currTime=timeNow();
num=(qword)(currTime/100000.0);
g_peerDelayFollowUpMssagePacket.byte(34)=((num>>40)&0xff);
g_peerDelayFollowUpMssagePacket.byte(35)=((num>>32)&0xff);
g_peerDelayFollowUpMssagePacket.byte(36)=((num>>24)&0xff);
g_peerDelayFollowUpMssagePacket.byte(37)=((num>>16)&0xff);
g_peerDelayFollowUpMssagePacket.byte(38)=((num>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(39)=((num)&0xff);
num=(qword)(currTime%100000)*10000+1000;
g_peerDelayFollowUpMssagePacket.byte(40)=((num>>24)&0xff);
g_peerDelayFollowUpMssagePacket.byte(41)=((num>>16)&0xff);
g_peerDelayFollowUpMssagePacket.byte(42)=((num>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(43)=((num)&0xff);
output(g_peerDelayFollowUpMssagePacket);
}
on ethernetPacket *
{
int i;
return;
if(this.type == 0x88f7 && this.byte(0)==0x12 && this.dir == rx && syncTimeInitSuccess_flag==1)
{
write("收到时间同步");
g_sequenceID_peerDelay=this.byte(30)*0x100+this.byte(31);
for(i=20;i<28;i++)
{
sourcePortID[i-20]=this.byte(i);
}
send_peerDelay();
}
}
void timeSyncInit()
{
int i;
char syncMessage[200]="1002002c00000208000000000000000000000000009acdfffe0000210001004200fd00000000000000000000";
char followUpMssage[200]="1802004c00000008000000000000000000000000009acdfffe0000210001004202fd00006a8ced24006ac2780003001c0080c200000100000000000000000000000000000000000000000000";
char peerDelayRespMessage[200]="1302003600000208000000000000000000000000024700fffe0000280001000e057f00000000001513219c901243abfffef14faf0001";
char peerDelayFollowUpMssage[200]="1a02003600000008000000000000000000000000024700fffe0000280001000e057f000000000015132440491243abfffef14faf0001";
g_syncMessagePacket.Length=44;
for(i=0;i<strlen(syncMessage);i=i+2)
{
g_syncMessagePacket.byte(i/2)=charToNum( syncMessage[i])*0x10+charToNum( syncMessage[i+1]);
}
g_followUpMssagePacket.Length=76;
for(i=0;i<strlen(followUpMssage);i=i+2)
{
g_followUpMssagePacket.byte(i/2)=charToNum( followUpMssage[i])*0x10+charToNum( followUpMssage[i+1]);
}
g_peerDelayRespMessagePacket.Length=54;
for(i=0;i<strlen(peerDelayRespMessage);i=i+2)
{
g_peerDelayRespMessagePacket.byte(i/2)=charToNum( peerDelayRespMessage[i])*0x10+charToNum( peerDelayRespMessage[i+1]);
}
g_peerDelayFollowUpMssagePacket.Length=54;
for(i=0;i<strlen(peerDelayFollowUpMssage);i=i+2)
{
g_peerDelayFollowUpMssagePacket.byte(i/2)=charToNum( peerDelayFollowUpMssage[i])*0x10+charToNum( peerDelayFollowUpMssage[i+1]);
}
g_Tester_MAC=EthGetMacAddressAsNumber("00:9a:cd:00:00:21");
g_LLDP_Multicast=EthGetMacAddressAsNumber("01:80:c2:00:00:0e");
WRITE("地址 %012llX ",g_Tester_MAC);
g_syncMessagePacket.msgChannel = 1;
g_syncMessagePacket.source = g_Tester_MAC;
g_syncMessagePacket.destination = g_LLDP_Multicast;
g_syncMessagePacket.type = 0x88f7;
g_syncMessagePacket.byte(20)=((g_Tester_MAC)&0xff);
g_syncMessagePacket.byte(21)=((g_Tester_MAC>>8)&0xff);
g_syncMessagePacket.byte(22)=((g_Tester_MAC>>16)&0xff);
g_syncMessagePacket.byte(23)=0xff;
g_syncMessagePacket.byte(24)=0xfe;
g_syncMessagePacket.byte(25)=((g_Tester_MAC>>24)&0xff);
g_syncMessagePacket.byte(26)=((g_Tester_MAC>>32)&0xff);
g_syncMessagePacket.byte(27)=((g_Tester_MAC>>40)&0xff);
g_followUpMssagePacket.msgChannel = 1;
g_followUpMssagePacket.source = g_Tester_MAC;
g_followUpMssagePacket.destination = g_LLDP_Multicast;
g_followUpMssagePacket.type = 0x88f7;
g_followUpMssagePacket.byte(20)=((g_Tester_MAC)&0xff);
g_followUpMssagePacket.byte(21)=((g_Tester_MAC>>8)&0xff);
g_followUpMssagePacket.byte(22)=((g_Tester_MAC>>16)&0xff);
g_followUpMssagePacket.byte(23)=0xff;
g_followUpMssagePacket.byte(24)=0xfe;
g_followUpMssagePacket.byte(25)=((g_Tester_MAC>>24)&0xff);
g_followUpMssagePacket.byte(26)=((g_Tester_MAC>>32)&0xff);
g_followUpMssagePacket.byte(27)=((g_Tester_MAC>>40)&0xff);
g_peerDelayRespMessagePacket.msgChannel = 1;
g_peerDelayRespMessagePacket.source = g_Tester_MAC;
g_peerDelayRespMessagePacket.destination = g_LLDP_Multicast;
g_peerDelayRespMessagePacket.type = 0x88f7;
g_peerDelayRespMessagePacket.byte(20)=((g_Tester_MAC)&0xff);
g_peerDelayRespMessagePacket.byte(21)=((g_Tester_MAC>>8)&0xff);
g_peerDelayRespMessagePacket.byte(22)=((g_Tester_MAC>>16)&0xff);
g_peerDelayRespMessagePacket.byte(23)=0xff;
g_peerDelayRespMessagePacket.byte(24)=0xfe;
g_peerDelayRespMessagePacket.byte(25)=((g_Tester_MAC>>24)&0xff);
g_peerDelayRespMessagePacket.byte(26)=((g_Tester_MAC>>32)&0xff);
g_peerDelayRespMessagePacket.byte(27)=((g_Tester_MAC>>40)&0xff);
g_peerDelayFollowUpMssagePacket.msgChannel = 1;
g_peerDelayFollowUpMssagePacket.source = g_Tester_MAC;
g_peerDelayFollowUpMssagePacket.destination = g_LLDP_Multicast;
g_peerDelayFollowUpMssagePacket.type = 0x88f7;
g_peerDelayFollowUpMssagePacket.byte(20)=((g_Tester_MAC)&0xff);
g_peerDelayFollowUpMssagePacket.byte(21)=((g_Tester_MAC>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(22)=((g_Tester_MAC>>16)&0xff);
g_peerDelayFollowUpMssagePacket.byte(23)=0xff;
g_peerDelayFollowUpMssagePacket.byte(24)=0xfe;
g_peerDelayFollowUpMssagePacket.byte(25)=((g_Tester_MAC>>24)&0xff);
g_peerDelayFollowUpMssagePacket.byte(26)=((g_Tester_MAC>>32)&0xff);
g_peerDelayFollowUpMssagePacket.byte(27)=((g_Tester_MAC>>40)&0xff);
syncTimeInitSuccess_flag=1;
setTimer(syncTimeCycle,1);
}
void send_sync_followUpsync_followUp()
{
dword currTime;
qword num;
g_syncMessagePacket.byte(30)=((g_sequenceID_sync_followUp>>8)&0xff);
g_syncMessagePacket.byte(31)=((g_sequenceID_sync_followUp)&0xff);
output(g_syncMessagePacket);
g_followUpMssagePacket.byte(30)=((g_sequenceID_sync_followUp>>8)&0xff);
g_followUpMssagePacket.byte(31)=((g_sequenceID_sync_followUp)&0xff);
currTime=timeNow();
num=(qword)(currTime/100000.0)+1787620644;
g_followUpMssagePacket.byte(34)=((num>>40)&0xff);;
g_followUpMssagePacket.byte(35)=((num>>32)&0xff);;
g_followUpMssagePacket.byte(36)=((num>>24)&0xff);;
g_followUpMssagePacket.byte(37)=((num>>16)&0xff);
g_followUpMssagePacket.byte(38)=((num>>8)&0xff);
g_followUpMssagePacket.byte(39)=((num)&0xff);
num=(currTime%100000)*10000;
g_followUpMssagePacket.byte(40)=((num>>24)&0xff);
g_followUpMssagePacket.byte(41)=((num>>16)&0xff);
g_followUpMssagePacket.byte(42)=((num>>8)&0xff);
g_followUpMssagePacket.byte(43)=((num)&0xff);
write("我看看 %lld",timeNow());
output(g_followUpMssagePacket);
g_sequenceID_sync_followUp++;
}
void send_peerDelay()
{
int i;
dword currTime;
qword num;
setTimer(syncTimeCycle1,5);
return;
for(i=44;i<44+8;i++)
{
g_peerDelayRespMessagePacket.byte(i)=sourcePortID[i-44];
g_peerDelayFollowUpMssagePacket.byte(i)=sourcePortID[i-44];
write("哈哈哈啊 %d %02x",i-44,sourcePortID[i-44]);
}
g_peerDelayRespMessagePacket.byte(30)=((g_sequenceID_peerDelay>>8)&0xff);
g_peerDelayRespMessagePacket.byte(31)=((g_sequenceID_peerDelay)&0xff);
currTime=timeNow();
num=(qword)(currTime/100000.0);
g_peerDelayRespMessagePacket.byte(34)=0x00;
g_peerDelayRespMessagePacket.byte(35)=0x00;
g_peerDelayRespMessagePacket.byte(36)=0x00;
g_peerDelayRespMessagePacket.byte(37)=((num>>16)&0xff);
g_peerDelayRespMessagePacket.byte(38)=((num>>8)&0xff);
g_peerDelayRespMessagePacket.byte(39)=((num)&0xff);
num=(qword)(currTime%100000)*10000;
g_peerDelayRespMessagePacket.byte(40)=((num>>24)&0xff);
g_peerDelayRespMessagePacket.byte(41)=((num>>16)&0xff);
g_peerDelayRespMessagePacket.byte(42)=((num>>8)&0xff);
g_peerDelayRespMessagePacket.byte(43)=((num)&0xff);
output(g_peerDelayRespMessagePacket);
g_peerDelayFollowUpMssagePacket.byte(30)=((g_sequenceID_peerDelay>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(31)=((g_sequenceID_peerDelay)&0xff);
currTime=timeNow();
num=(qword)(currTime/100000.0);
g_peerDelayFollowUpMssagePacket.byte(34)=((num>>40)&0xff);
g_peerDelayFollowUpMssagePacket.byte(35)=((num>>32)&0xff);
g_peerDelayFollowUpMssagePacket.byte(36)=((num>>24)&0xff);
g_peerDelayFollowUpMssagePacket.byte(37)=((num>>16)&0xff);
g_peerDelayFollowUpMssagePacket.byte(38)=((num>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(39)=((num)&0xff);
num=(qword)(currTime%100000)*10000+1000;
g_peerDelayFollowUpMssagePacket.byte(40)=((num>>24)&0xff);
g_peerDelayFollowUpMssagePacket.byte(41)=((num>>16)&0xff);
g_peerDelayFollowUpMssagePacket.byte(42)=((num>>8)&0xff);
g_peerDelayFollowUpMssagePacket.byte(43)=((num)&0xff);
output(g_peerDelayFollowUpMssagePacket);
//g_sequenceID_peerDelay++;
}
byte charToNum(char str1)
{
if(str1>='0' && str1<='9')
{
return str1-'0';
}
if(str1>='a' && str1 <='z')
{
return str1-'a'+0xA;
}
if(str1>='A' && str1 <='Z')
{
return str1-'A'+0xA;
}
return 0;
}
on start
{
timeSyncInit();
}