¼¼Êõ²©¿Í

28/07/2022 ×÷Õß ÔÆº£ÓÎÏ·

½«DINRail SE410S-X10×÷ΪCAN FDת»»Æ÷ʹÓÃ

ÔÚ±¾²©¿ÍÖУ¬ÎÒ½«Õ¹Ê¾ÈçºÎʹÓÃÔÆº£ÓÎÏ· DINRail×÷ΪCAN FDµ½CANת»»Æ÷¡£ÎÒ½«Ê¹ÓÃÒ»¸öÒѶ¨ÒåÐźŵÄÊý¾Ý¿â£¬²¢Õ¹Ê¾ÈçºÎÔÚt½Å±¾ÖÐʹÓÃËüÃÇ¡£ÐµÄÔÆº£ÓÎÏ· DIN Rail SE410S-X10ÔÊÐí´´½¨¶ÀÁ¢µÄCANת»»µ¥Ôª£¬¶ø²»ÐèÒª¶îÍâµÄµçÄÔÀ´ÔËÐС£

±¾²©¿ÍËùÐèµÄËùÓÐÐÅÏ¢ºÍ¹¤¾ß¾ù²»ÐèÒªÐí¿ÉÖ¤£¬¿ÉÔÚÎÒÃǵÄÖ÷Ò³www.jytpm.comÉÏ»ñÈ¡¡£

±¾²©¿ÍÖÐÌáµ½µÄËùÓдúÂëʾÀýºÍÄ£ÐͶ¼¿ÉÒÔÃâ·ÑʹÓá£

ÈκξßÓÐt±à³Ì¹¦ÄܵÄÔÆº£ÓÎÏ·¶àͨµÀÉ豸¶¼¿ÉÒÔÓÃÓÚ²âÊԺ͵÷ÊÔ¡£ÎÒ½«Ê¹ÓÃÔÆº£ÓÎÏ· DIN Rail SE410S-X10¡£

Èç¹ûÄã¶Ô±¾²©¿ÍÓÐÈκÎÒÉÎÊ£¬ÇëËæÊ±ÓëÎÒÃÇÁªÏµ¡£Ö»Ð轫ÎÊÌâ»òÆÀÂÛ·¢ËÍÖÁ£ºSUPPORT@KVASER.COM

ÏÖ³¡Ó¦Óù¤³Ìʦ, ÔÆº£ÓÎÏ· AB

Lars-G?ran Fredriksson

lgfr@kvaser.com

1 ²âÊÔÄ£ÐÍ

ÎÒûÓÐÒ»¸ö¿ÉÓõÄÎïÀíÍøÂ磬ËùÒÔÐèÒª´´½¨Ò»¸ö¡£ÎÒ¾ö¶¨Ê¹ÓÃÒ»¸öCAN FDÍøÂçºÍÒ»¸ö±ê×¼CANÍøÂ磺

ÎÒ±ØÐë˵£¬ÕâÊÇÒ»·ù·Ç³£ÃÀÀöµÄͼ»­¡£ÎÒÒªÏÔʾµÄÊÇÁ½Â·¶Ë½ÓÁ¼ºÃµÄCAN×ÜÏߣ¬Á¬½Óµ½Ò»¸öDINRail SE410ÊÊÅäÆ÷¡£


1.1 ÎÒµÄCAN FDÍøÂç

ÔÚÎÒµÄFDÍøÂ磨Á¬½Óµ½Í¨µÀ1ºÍͨµÀ2µÄÍøÂ磩ÉÏÓÐÒ»¸öÉñÆæµÄÉ豸£¬Ëü¿ÉÒÔ·¢ËͺͽÓÊÕ±¨ÎÄTEST_MSG_101¡£ËüÊÇÒ»¸öIDΪ101µÄCAN FDÖ¡£¬°üº¬°ËÖÖ²»Í¬µÄÐźÅ£ºÎ³¶È¡¢¾­¶È¡¢¸ß¶È¡¢µØÃæËÙ¶È¡¢µØÃ溽Ïò¡¢ºá¹ö¡¢¸©ÑöºÍº½Ïò¡£ÕâЩ¿ÉÒÔÊÇÀ´×Ô×éºÏʽGPS/ÍÓÂÝ´«¸ÐÆ÷µÄµäÐÍÖµ¡£


1.2 ÎÒµÄ(±ê×¼)CANÍøÂç

ÔÚÎҵıê×¼CANÍøÂ磨Á¬½Óµ½Í¨µÀ3ºÍͨµÀ4µÄÍøÂ磩ÉÏ£¬ÎÒÓÐÈý¸öÉñÆæµÄÉ豸£¬¿ÉÒÔ·¢ËͺͽÓÊÕ±¨ÎÄTEST_MSG_201¡¢TEST_MSG_202ºÍTEST_MSG_203¡£

µÚÒ»Ö¡±¨ÎÄ´¦Àíºá¹ö¡¢¸©ÑöºÍº½ÏòÐźÅ¡£µÚ¶þÖ¡´¦Àíγ¶È¡¢¾­¶ÈºÍ¸ß¶È¡£µÚÈýÖ¡´¦ÀíµØÃæËٶȺ͵ØÃ溽Ïò¡£

(Çë²é¿´¸½Â¼AÒÔÁ˽â¶ÔDBCÎļþºÍÕâЩÐźŵĽâÊÍ)

ΪʲôÎÒÒª´´½¨Ò»¸ö²»´æÔÚµÄÍøÂ磿´ó¶àÊýÇé¿öÏ£¬µ±Ê¹ÓÃDBCÎļþʱ£¬Í¨ÐÅЭÒé×ñÑ­J1939±ê×¼¡£J1939ÊÇSAEÓµÓеıê×¼£¬ÎÒ²»¿ÉÒÔ·¢²¼ËûÃǵÄÈκÎЭÒé»òÐźÅid¡£

ÔÚDINRailÉÏ£¬Í¨µÀ1ºÍ3½«ÓÃÓÚt½Å±¾¡£Í¨µÀ2ºÍ4½«ÓÃ×÷µ÷ÊÔͨµÀ£¬ÒÔ±ãÎÒ¿ÉÒÔÄ£ÄâÎÒµÄÉñÆæÉ豸¡££¨ÎÒ½«Ê¹ÓÃÔÆº£ÓÎÏ· CANKingÈí¼þÔÚͨµÀ2ºÍͨµÀ4ÉÏ·¢ËͺͽÓÊÕÎı¾±¨ÎÄ¡££©


2 ¹ØÓÚt½Å±¾

(ÒªÁ˽âÈçºÎʹÓÃt½Å±¾£¬Çë²é¿´5.4½Ú)

(ÔÚ¸½Â¼AºÍBÖУ¬Äã¿É¿´µ½ÍêÕûµÄt½Å±¾ÎļþºÍDBCÎļþĿ¼)


2.1 »ù±¾ÉèÖÃ

variables {
  const int MyCANFDch=0;
  const int MyCANch=2;
}

on start {
  printf("Script started...\n");

  canBusOff(MyCANFDch);
  canBusOff(MyCANch);

  //Set First channel (FD)
  canSetBitrate(MyCANFDch,canFD_BITRATE_500K_80P);
  canSetBusOutputControl(MyCANFDch, canDRIVER_NORMAL);

  canSetBitrateFd(MyCANFDch,canFD_BITRATE_2M_80P);
  canSetCommunicationMode(MyCANFDch, canMODE_CAN_FD);

  //Set Second channel (STD)
  canSetBitrate(MyCANch,canBITRATE_250K);
  canSetBusOutputControl(MyCANch, canDRIVER_NORMAL);


  canBusOn(MyCANFDch);
  canBusOn(MyCANch);
}

on stop {
  canBusOff(MyCANFDch);
  canBusOff(MyCANch);
printf("Script stopped...\n");
}

Õâ¸ö½Å±¾¼¸ºõ×ö²»ÁËʲô£¬µ«ÊÇËü×îÖØÒªµÄ×÷ÓÃÊÇÆô¶¯Á½¸öCANͨµÀ¡£

µÚÒ»¸öͨµÀÉèÖÃΪ500kbit/2Mbit CAN FDͨµÀ£¬µÚ¶þ¸öͨµÀÉèÖÃΪ250kbit±ê×¼CANͨµÀ¡£

Èç¹ûÎÒÃÇÔÚTRXÖбàÒë²¢ÔËÐÐÕâ¸ö½Å±¾£¬ÎÒÃǽ«¿´µ½´Ë½Å±¾¿ªÊ¼ºÍÍ£Ö¹¡£

ºÃ°É£¬ÕýÊÇÎÒÃÇÏëÒªµÄ£¬µ«»¹Ã»ÓпªÊ¼Ê©Õ¹Ä§·¨¡£


2.2 Ìí¼ÓÎļþDB_FD.DBC

´ò¿ª²Ëµ¥£ºÏîÄ¿£¬Ñ¡Ôñ£ºÌí¼ÓÊý¾Ý¿â(Add Database)

½«³öÏÖÒ»¸ö¶Ô»°¿ò£¬Äã¿ÉÒÔ¸øÄãµÄÏîÄ¿Ìí¼ÓDBCÎļþ¡£

ÖØÒªÌáʾ£º±ØÐë±£´æÄãµÄÏîÄ¿¡£Èç¹ûʹÓÃFILE/SAVE£¬ÔòÖ»Äܱ£´ætÎļþ¡£ÄãÐèҪʹÓÃPROJECT/Save PROJECT As(ÏîÄ¿/Áí´æÎªÏîÄ¿)¡­


2.3ʹÓÃDBC±¨ÎÄ×÷Ϊ±äÁ¿

µ±ÎÒÃǸøÏîÄ¿Ìí¼ÓDBCÎļþºó£¬¾Í¿ÉÒÔ´´½¨±¨ÎĺÍÐźűäÁ¿¡£

DBCÎļþÖж¨ÒåµÄCAN±¨ÎÄÖ®Ò»ÊÇ£ºTEST_MSG_101

ÏÖÔÚÎÒ½«´´½¨´ËÀàÐ͵ÄÒ»¸öÈ«¾Ö±äÁ¿(FD_GPS)¡£
ÔÚ´Ë¿éÀï: Variables {}ÖÐ,Ìí¼ÓÒÔÏÂÐÐ:
CanMessageFd_TEST_MSG_101 FD_GPS;

ÔÚMessageNameÖÐÌí¼ÓÎı¾¡°CanMessageFD_¡±£¬TRX½«Àí½âÓ¦¸ÃÔÚDBCÎļþÖвéÕÒËü¡£

variables  {
  const int MyCANFDch =0;
  const int MyCANch   =2;

  CanMessageFd_TEST_MSG_101 FD_GPS;


  int FD_GPS_TEST=0;

}

ÏÖÔÚÎÒÒѵõ½ÁËÒ»¸ö¿ÉÓõÄÈ«¾Ö±äÁ¿¡£


2.4 ÒÔDBC±¨ÎÄ×÷Ϊ±êʶ·û

on CanMessageFd <MyCANFDch> TEST_MSG_101 {
  printf("Detected TEST_MSG_101 :%d\n", this.id);
}

ÿµ±CAN FD×ÜÏßÉϳöÏÖIDΪ101µÄ±¨ÎÄʱ£¬´ËHOOK½«±»¼¤»î¡£

ÏÖÔÚħ·¨À´ÁË£ºÎÒÃÇ¿ÉÒÔʹÓÃÕâЩÐźŵÄÎïÀíÖµ£¬¶øÎÞÐèÈκη±ËöµÄ¸ß¼¶¼ÆËã¡£

on CanMessageFd <MyCANFDch> TEST_MSG_101 {
  printf("Detected TEST_MSG_101 :%d\n", this.id);

  printf("LAT P:%f\n", this.S_101_LAT.Phys);
  printf("LAT R:%d\n", this.S_101_LAT.Raw);
}

ÔËÐÐÉÏÊö½Å±¾£¬²¢¼ì²â¡°101¡±±¨ÎÄ¡£

ÎÒÃÇ¿ÉÒÔÖ±½ÓѰַÐźÅS_101_LATÖеÄÊý¾Ý¡£ÎÒÃǿɽ«Æä×÷ΪÎïÀíÖµ(Physical values)»òԭʼֵ(Raw values)·ÃÎÊ¡£ÔÚÉÏÃæµÄÊä³öÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½1800000µÄÖµÏ൱ÓÚ0.000¶È¡££¨ËäÈ»Ëü´òÓ¡³öÀ´ÊÇ0.000015£¬µ«ÒѾ­·Ç³£½Ó½ü0.000£©


2.5 Ìí¼ÓÒ»¸öCanMessageFdhook

on CanMessageFd <MyCANFDch> TEST_MSG_101 {
  CanMessage_TEST_MSG_201   STD_GPS_RPH;
  CanMessage_TEST_MSG_202   STD_GPS_LatLonAlt;
  CanMessage_TEST_MSG_203   STD_GPS_SogCog;

//  printf("Detected TEST_MSG_101 :%d\n", this.id);
//  printf("LAT P:%f\n", this.S_101_LAT.Phys);
//  printf("LAT R:%d\n", this.S_101_LAT.Raw);

  STD_GPS_RPH.S_201_ROLL.Phys      =this.S_101_ROLL.Phys;
  STD_GPS_RPH.S_201_PITCH.Phys     =this.S_101_PITCH.Phys;
  STD_GPS_RPH.S_201_HEAD.Phys      =this.S_101_HEADING.Phys;
  canWrite(MyCANch,STD_GPS_RPH);
  
  STD_GPS_LatLonAlt.S_202_LAT.Phys =this.S_101_LAT.Phys;
  STD_GPS_LatLonAlt.S_202_LON.Phys =this.S_101_LON.Phys;
  STD_GPS_LatLonAlt.S_202_ALT.Phys =this.S_101_ALT.Phys;
  canWrite(MyCANch,STD_GPS_LatLonAlt);

  STD_GPS_SogCog.S_203_SOG.Phys    =this.S_101_SOG.Phys;
  STD_GPS_SogCog.S_203_COG.Phys    =this.S_101_COG.Phys;
  canWrite(MyCANch,STD_GPS_SogCog);
}

´ËFD ±¨ÎÄ¡°101¡±½«±»·ÖΪ3¸ö±ê×¼CAN±¨ÎÄ¡£

201¡¢202ºÍ203±¨ÎÄÖеÄÐźÅÔÚÆäÖµÖеķֱæÂʽϵͣ¬µ«ÎÒÃDz»ÐèÒªµ£ÐÄÕâÒ»µã¡£t½Å±¾½«³Ðµ£Âß¼­Î»ºÍ×ֽڵķ­Òë¡£


2.6Ìí¼Ó3¸ö CanMessage hooks

on CanMessage <MyCANch> TEST_MSG_201 {

  FD_GPS.S_101_ROLL.Phys    =this.S_201_ROLL.Phys;
  FD_GPS.S_101_PITCH.Phys   =this.S_201_PITCH.Phys;
  FD_GPS.S_101_HEADING.Phys =this.S_201_HEAD.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 1);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
  }
}
on CanMessage <MyCANch> TEST_MSG_202 {

  FD_GPS.S_101_LAT.Phys  =this.S_202_LAT.Phys;
  FD_GPS.S_101_LON.Phys  =this.S_202_LON.Phys;
  FD_GPS.S_101_ALT.Phys  =this.S_202_ALT.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 2);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
on CanMessage <MyCANch> TEST_MSG_203 {

  FD_GPS.S_101_COG.Phys  =this.S_203_COG.Phys;
  FD_GPS.S_101_SOG.Phys  =this.S_203_SOG.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 4);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
    FD_GPS_TEST=(FD_GPS_TEST & (1+2+0));
  }
}

ÎÒÃDZØÐëÔÚÊÕµ½ËùÓÐ3Ìõ±¨Îĺ󣬲ÅÄÜÖØÐ´«Êä¡°101¡±±¨ÎÄ¡£


3½«t½Å±¾±£´æµ½ÄÚ´æÖÐ

ÔÆº£ÓÎÏ· DIN Rail SE410S-X10¾ß±¸µç³ØÖ§³ÖµÄ16GB²»¿ÉÌæ»»ÄÚ´æ¡£Ëüͨ¹ýµç³ØÈ·±£ËùÓÐδÌá½»µÄ¸ü¸ÄÔڹػúǰÕýÈ·±£´æ¡£

ÄÚ´æÇøÓò¿ÉÓÃÓÚ´æ´¢±¾µØÊý¾ÝºÍt½Å±¾¡£¿Éͨ¹ýSDK(CANlib)¡¢t½Å±¾»òÔÆº£ÓÎÏ· Device Guide (1)(2)ÖеÄfilehandler¶ÔÄÚ´æ½øÐÐÐ޸ġ£

(1) ¾ß±¸filehandlerµÄ2020-12-20°æ±¾ÉÐδ·¢²¼¡£¼Æ»®Óë5.36°æÒ»Æð·¢²¼¡£

(2) Èç¹ûÄãÔÚCANlib SDK 5.36·¢²¼Ö®Ç°ÔĶÁ´Ë²©¿Í£¬²¢ÇÒÏë²âÊÔfilehandler£¬Çë·¢µç×ÓÓʼþ¸øÎÒ£¬ÎһὫÆä·¢¸øÄã¡£(lgfr@kvaser.com)

ÓйØÏêϸµÄÄÚ´æÏÞÖÆ£¬Çë²Î¼û¸½Â¼C


3.1×Ô¶¯Æô¶¯t½Å±¾

(´ËÐÅÏ¢Ò²¿ÉÔÚÓû§Ö¸ÄÏÖв鿴)

ÔÆº£ÓÎÏ· DIN Rail SE410S-X10ÔÚͨµçʱ¿Éͨ¹ýÄÚ´æ×Ô¶¯¼ÓÔØºÍÔËÐÐ×î¶àËĸöt½Å±¾¡£ÕâÊÇͨ¹ý½«t½Å±¾µÄÃû³ÆÊäÈëµ½Ò»¸öÌØ¶¨Îļþ£¬autoexec.txtÀ´ÊµÏֵ쬲¢¸´ÖÆÒѱàÒëµÄt½Å±¾£¨*.TXE£©ºÍAUTOEXEC.TXTµ½ÄÚ´æ¡£

Ҫֹͣt½Å±¾ÔÚͨµçʱÆô¶¯£¬Ö»Ðè´ÓÉÁ´æÖÐɾ³ýAUTOEXEC.TXT»ò±à¼­AUTOEXEC.TXTÎļþ¡£


3.2 AUTOEXEC.TXT

ÕâÊÇÒ»¸öÌØÊâµÄÎı¾Îļþ£¬Ôƺ£ÓÎÏ· DIN Rail SE410S-X10ÔÚͨµçʱ»á´ÓÉÁ´æÖжÁÈ¡Ëü¡£Ã¿ÐбØÐë¾ßÓÐÒÔϸñʽ:?

Filename,Channel,slot(ÎļþÃû£¬Í¨µÀ£¬²å¿Ú)


3.2.1 ÎļþÃû

ÎļþÃûÊÇÒѱàÒëµÄt½Å±¾µÄÃû³Æ¡£ËüµÄÀ©Õ¹ÃûÊÇTXE¡£


3.2.2 ͨµÀ

ͨµÀÊÇt½Å±¾Ä¬ÈÏʹÓõÄCANͨµÀ¡££¨ÔÚÎÒÃǵĽű¾ÖÐûÓÐʹÓÃĬÈÏͨµÀ£©

(Óйظü¶àÏêϸÐÅÏ¢£¬Çë²ÎÔÄÔÆº£ÓÎÏ· t±à³ÌÓïÑÔÖ¸ÄÏ¡£)


3.2.3 ²å¿Ú

²å¿ÚÊÇÔÆº£ÓÎÏ· DIN Rail SE410S-X10ÖÐt½Å±¾¿ÉÓõÄËĸö±àºÅΪ0µ½3µÄ²å¿ÚÖ®Ò»¡£


3.3 ÎÒÃǵÄAUTOEXEC.TXTÎļþ

ÎÒÃüÃûÎÒµÄt½Å±¾Îª: T-DEM-FD¡£

±àÒëÃû³Æ: T-DEM-FD.TXE

ÈÃÎÒÃÇͨ¹ýÒÔÏÂÐд´½¨Ò»¸öÃûΪ¡°autoexec.txt¡±µÄÎļþ:

T-DEM-FD.TXE, 0, 0

Æô¶¯T-DEM-FD£¬Ê¹ÓÃĬÈÏͨµÀ0²¢ÔÚ²å¿Ú0ÖÐÆô¶¯¡£


4 ½áÂÛ

ÔÚt³ÌÐòÖÐʹÓÃDBCÎļþºÜ¼òµ¥¡£µ±±¨ÎÄIDºÍÐźÅÔÚDBCÎļþÖб»¶¨ÒåÖ®ºó£¬´¦ÀíËüÃǾÍÈÝÒ×¶àÁË¡£

ÎÒÃÇÈÔÈ»±ØÐë´´½¨ÈçºÎ´«ÊäÊý¾ÝÒÔ¼°ÈçºÎÔÚ²»Í¬ÐźÅÖ®¼äת»»µÄÂß¼­£¬µ«ÎÒÃDz»ÐèÒª´¦ÀíԭʼÊý¾Ý¡£

ÓÉÓÚ¾«¶ÈºÍ·¶Î§µÄ²îÒ죬t½Å±¾²»»á¼ì²éÊý¾Ý¶ªÊ§¡£Õâ±ØÐëÔÚ´´½¨½Å±¾Ê±×öºÃ×¼±¸¡£

ÎÒÏ£Íû±¾²©¿ÍÖеÄÐÅÏ¢ÄܶÔÄãÓÐËù°ïÖú¡£»¶Ó­ÆÀÂÛºÍÌáÎÊ£¡

ÏÖ³¡Ó¦Óù¤³Ìʦ, ÔÆº£ÓÎÏ· AB

Lars-G?ran Fredriksson

lgfr@kvaser.com

5ʵÓõIJο¼ºÍ¹¤¾ß

5.1 ÎĵµT-DEMO-FD.t

ÕâÊÇÒ»¸ö°üº¬±¾²©¿ÍÖÐʹÓõÄt³ÌÐò´úÂëµÄÎı¾Îĵµ£¬Çë²é¿´¸½Â¼BÒÔ»ñÈ¡ÍêÕûÁбí¡£


5.2 ÎļþDB_FD.DBC

Çë¼û¸½Â¼A¡£

´ËÎļþ°üº¬±¾²©¿ÍÖÐʹÓõı¨ÎĺÍÐźÅ¡£


5.3 ÔÆº£ÓÎÏ· SDKºÍÇý¶¯³ÌÐò

ΪÁËÄܹ»Ê¹Óñ¾²©¿ÍÖÐÌáµ½µÄÈí¼þ£¬Äã±ØÐëÏÂÔØ²¢°²×°Ôƺ£ÓÎÏ·Çý¶¯³ÌÐòºÍSDK¡£
https://www.kvaser.com/download/?utm_source=software&utm_ean=7330130980013&utm_status=latest

https://www.kvaser.com/download/?utm_source=software&utm_ean=7330130980150&utm_status=latest


5.4 ÔÆº£ÓÎÏ· t±à³ÌÓïÑÔ

Óû§Ö¸ÄÏÖеÄ˵Ã÷:
ÔÆº£ÓÎÏ· t
ÓïÑÔÊÇÒÔʼþΪÖÐÐÄ£¬ÒÔCÓïÑÔΪģÐÍ¡£Ëü¿ÉÒÔÓÃÀ´¶¨ÖÆÔƺ£ÓÎÏ· EagleºÍÆäËûÖ§³ÖÔÆº£ÓÎÏ· t½Å±¾µÄÉ豸µÄ²Ù×÷¡£
t
³ÌÐòͨ¹ýhooksµ÷Óã¬hookÊÇÔÚÌØ¶¨Ê¼þ·¢Éúʱ²Ù×÷µÄÈë¿Úµã¡£ÀýÈ磬ÕâЩʼþ¿ÉÒÔÊÇÌØ¶¨CAN±¨ÎĵĽÓÊÕ¡¢¼ÆÊ±Æ÷µ½ÁËʱ¼ä»òÍⲿÊäÈë¡£
ͨ¹ýÖ±½ÓÔÚÔÆº£ÓÎÏ·É豸ÉÏÔËÐеÄt³ÌÐò£¬¸ÃÉ豸¿É¸ü¿ìµØ¶ÔCAN×ÜÏßÉϵÄʼþ×ö³ö·´Ó¦£¨ÀýÈ磬¼Ó¿ìÎļþ´«ÊäЭÒé»òÄ£ÄâȱʧµÄÓ²¼þ£©¡£Ò»Ð©Ôƺ£ÓÎÏ·É豸Ҳ¿ÉÒÔÍêÈ«×ÔÖ÷ÔËÐУ¬ÀýÈçÔÆº£ÓÎÏ·¼Ç¼ÒÇ¡£

ÎÒ²»ÔÚÕâÀï½éÉÜÔÆº£ÓÎÏ· t±à³ÌµÄ»ù´¡ÖªÊ¶£¬Çë²é¿´ÆäÓû§ÊÖ²á: The ÔÆº£ÓÎÏ· t Programming Language.
https://www.kvaser.com/download/?utm_source=software&utm_ean=7330130980327&utm_status=latest

ÕâÀïÊÇÎÒÃÇÍøÕ¾Ö÷Ò³ÉϵÄһЩÏà¹Ø²©¿Í:
https://www.kvaser.com/developer_category/t-script/


5.5 TRXÈí¼þ

ÔÆº£ÓÎÏ· TRXÒ»¸öÇáÁ¿¼¶¼¯³É¿ª·¢»·¾³£¬ÓÃÓÚΪ֧³Öt½Å±¾µÄÔÆº£ÓÎÏ·É豸¿ª·¢¶¨Öƽű¾¡£

https://www.kvaser.com/resource/trx-guide/

ÔÚ°²×°Ôƺ£ÓÎÏ· SDKʱ£¬»á°²×°´ËÈí¼þ¡£


5.6 ÔÆº£ÓÎÏ· Êý¾Ý¿â±à¼­Æ÷3

ÎÒ½«²»½éÉÜÈçºÎ´´½¨¡¢Ê¹ÓúÍά»¤ÐźÅÊý¾Ý¿â¡£Ôƺ£ÓÎÏ·ÓÐÒ»¸öÃâ·Ñ¹¤¾ß:¡°Ôƺ£ÓÎÏ· Database Editor 3¡±

ͨ¹ý´Ë¹¤¾ß£¬Äã¿ÉÒԲ鿴¡¢´´½¨ºÍ±à¼­*.DBCÎļþ¡£

https://www.kvaser.com/download/?utm_source=software&utm_ean=7330130981942&utm_status=latest

ÎÒÃǵÄÖ÷Ò³ÉÏ»¹ÓÐһЩ²©¿Í¹©²Î¿¼:
https://www.kvaser.com/developer_category/dbc/
https://www.kvaser.com/developer_category/database/


5.7 ÔÆº£ÓÎÏ· CANKing

Ò»¸öÃâ·ÑµÄͨÓÃCAN×ÜÏß¼à²âÆ÷¡£Ëü¿ÉÓëÔÆº£ÓÎÏ·µÄËùÓÐCANÊÊÅäÆ÷ÒÔ¼°ÐéÄâCAN×ÜÏßÁªºÏʹÓá£

https://www.kvaser.com/download/utm_source=software&utm_ean=7330130980686&utm_status=latest


6 Appendix A, the file DB_FD.DBC

Çë×¢Ò⣬CAN FD±¨ÎÄ£¨101£©ÖеÄÐźűÈCAN±¨ÎÄ£¨201¡¢202ºÍ203£©ÖеÄÐźžßÓиü¸ßµÄ·Ö±æÂÊ¡£ÆäÄ¿µÄÊÇÏÔʾÔÚt½Å±¾ÖÐת»»ÐźÅÖµºÜÈÝÒס£ÎÒ²»»á·ÖÎöÕ⽫Ôì³ÉµÄ¾«¶ÈËðʧ¡£


6.1 DB_FD.DBCÖеı¨ÎÄ

6.1.1 TEST_MSG_101


6.1.2 TEST_MSG_201


6.1.3 TEST_MSG_202


6.1.4 TEST_MSG_203


6.2 Êý¾Ý¿âDB_FD.DBCÔ´´úÂë

Ç뽫ÒÔÏÂÐÅÏ¢¸´ÖƲ¢Õ³Ìùµ½Ò»¸öÎı¾ÎļþÖУ¬²¢½«ÆäÃüÃûΪ: DB_FD.DBC

VERSION ¡°¡±
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_

BS_:

BU_:

BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX
SG_ NewSignal_0008 : 0|0@1+ (1,0) [0|0] ¡°¡± Vector__XXX

BO_ 101 TEST_MSG_101: 32 Vector__XXX
SG_ S_101_LAT : 0|32@1+ (0.001,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_101_LON : 32|32@1+ (0.001,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_101_ALT : 64|32@1+ (0.001,-1000) [-1000|20000] ¡°m¡± Vector__XXX
SG_ S_101_SOG : 96|32@1+ (0.001,0) [0|1000] ¡°m/s¡± Vector__XXX
SG_ S_101_COG : 128|32@1+ (0.001,0) [0|360] ¡°deg¡± Vector__XXX
SG_ S_101_ROLL : 160|32@1+ (0.001,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_101_PITCH : 192|32@1+ (0.001,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_101_HEADING : 224|32@1+ (0.001,-180) [-180|180] ¡°deg¡± Vector__XXX

BO_ 201 TEST_MSG_201: 6 Vector__XXX
SG_ S_201_ROLL : 0|16@1+ (0.1,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_201_PITCH : 16|16@1+ (0.1,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_201_HEAD : 32|16@1+ (0.1,-180) [-180|180] ¡°deg¡± Vector__XXX

BO_ 202 TEST_MSG_202: 6 Vector__XXX
SG_ S_202_LAT : 0|16@1+ (0.1,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_202_LON : 16|16@1+ (0.1,-180) [-180|180] ¡°deg¡± Vector__XXX
SG_ S_202_ALT : 32|16@1+ (0.1,-1000) [-1000|20000] ¡°m¡± Vector__XXX

BO_ 203 TEST_MSG_203: 4 Vector__XXX
SG_ S_203_SOG : 0|16@1+ (0.1,0) [0|1000] ¡°m/s¡± Vector__XXX
SG_ S_203_COG : 16|16@1+ (0.1,0) [0|360] ¡°deg¡± Vector__XXX

BA_DEF_ BO_ ¡°CANFD_BRS¡± ENUM ¡°0¡±,¡±1¡å;
BA_DEF_ ¡°BusType¡± STRING ;
BA_DEF_ BU_ ¡°ECU¡± STRING ;
BA_DEF_ BO_ ¡°VFrameFormat¡± ENUM ¡°StandardCAN¡±,¡±ExtendedCAN¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±reserved¡±,¡±StandardCAN_FD¡±,¡±ExtendedCAN_FD¡±;
BA_DEF_DEF_ ¡°CANFD_BRS¡± ¡°1¡±;
BA_DEF_DEF_ ¡°BusType¡± ¡°¡±;
BA_DEF_DEF_ ¡°ECU¡± ¡°¡±;
BA_DEF_DEF_ ¡°VFrameFormat¡± ¡°StandardCAN¡±;
BA_ ¡°BusType¡± ¡°CAN FD¡±;
BA_ ¡°VFrameFormat¡± BO_ 101 14;
BA_ ¡°VFrameFormat¡± BO_ 201 0;
BA_ ¡°VFrameFormat¡± BO_ 202 0;
BA_ ¡°VFrameFormat¡± BO_ 203 0;


7 ¸½Â¼B,ÎļþT-DEMO-FD.t

variables {
  const int MyCANFDch =0;
  const int MyCANch   =2;

  CanMessageFd_TEST_MSG_101 FD_GPS;
  //CanMessage_TEST_MSG_201   STD_GPS_RPH;
  //CanMessage_TEST_MSG_202   STD_GPS_LatLonAlt;
  //CanMessage_TEST_MSG_203   STD_GPS_SogCog;

  int FD_GPS_TEST=0;
  
}

on start {
  printf("Script started...\n");

  canBusOff(MyCANFDch);
  canBusOff(MyCANch);

  //Set First channel (FD)
 
  canSetBitrate(MyCANFDch,canFD_BITRATE_500K_80P); //canSetBitrate(MyCANFDch,canBITRATE_500K);
  canSetBusOutputControl(MyCANFDch, canDRIVER_NORMAL);
  canSetBitrateFd(MyCANFDch,canFD_BITRATE_2M_80P);
  canSetCommunicationMode(MyCANFDch, canMODE_CAN_FD);

  //Set Second channel (STD)
  canSetBitrate(MyCANch,canBITRATE_250K);
  canSetBusOutputControl(MyCANch, canDRIVER_NORMAL);


  canBusOn(MyCANFDch);
  canBusOn(MyCANch);
}

on stop {
  canBusOff(MyCANFDch);
  canBusOff(MyCANch);
  printf("Script stopped...\n");
}

on CanMessageFd <MyCANFDch> TEST_MSG_101 {
  CanMessage_TEST_MSG_201   STD_GPS_RPH;
  CanMessage_TEST_MSG_202   STD_GPS_LatLonAlt;
  CanMessage_TEST_MSG_203   STD_GPS_SogCog;

//  printf("Detected TEST_MSG_101 :%d\n", this.id);
//  printf("LAT P:%f\n", this.S_101_LAT.Phys);
//  printf("LAT R:%d\n", this.S_101_LAT.Raw);

  STD_GPS_RPH.S_201_ROLL.Phys      =this.S_101_ROLL.Phys;
  STD_GPS_RPH.S_201_PITCH.Phys     =this.S_101_PITCH.Phys;
  STD_GPS_RPH.S_201_HEAD.Phys      =this.S_101_HEADING.Phys;
  canWrite(MyCANch,STD_GPS_RPH);
  
  STD_GPS_LatLonAlt.S_202_LAT.Phys =this.S_101_LAT.Phys;
  STD_GPS_LatLonAlt.S_202_LON.Phys =this.S_101_LON.Phys;
  STD_GPS_LatLonAlt.S_202_ALT.Phys =this.S_101_ALT.Phys;
  canWrite(MyCANch,STD_GPS_LatLonAlt);

  STD_GPS_SogCog.S_203_SOG.Phys    =this.S_101_SOG.Phys;
  STD_GPS_SogCog.S_203_COG.Phys    =this.S_101_COG.Phys;
  canWrite(MyCANch,STD_GPS_SogCog);
}

on CanMessage <MyCANch> TEST_MSG_201 {

  FD_GPS.S_101_ROLL.Phys    =this.S_201_ROLL.Phys;
  FD_GPS.S_101_PITCH.Phys   =this.S_201_PITCH.Phys;
  FD_GPS.S_101_HEADING.Phys =this.S_201_HEAD.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 1);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
  }
}

on CanMessage <MyCANch> TEST_MSG_202 {

  FD_GPS.S_101_LAT.Phys  =this.S_202_LAT.Phys;
  FD_GPS.S_101_LON.Phys  =this.S_202_LON.Phys;
  FD_GPS.S_101_ALT.Phys  =this.S_202_ALT.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 2);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
  }
}

on CanMessage <MyCANch> TEST_MSG_203 {

  FD_GPS.S_101_COG.Phys  =this.S_203_COG.Phys;
  FD_GPS.S_101_SOG.Phys  =this.S_203_SOG.Phys;

  FD_GPS_TEST= (FD_GPS_TEST | 4);  

  if (FD_GPS_TEST>=7) {
    canWrite(MyCANFDch,FD_GPS);
    FD_GPS_TEST=0;
  }
}


8 ¸½Â¼C,´æ´¢ÇøÓòµÄÎļþ½á¹¹

´æ´¢ÇøµÄÄÚ²¿¸ñʽ×ñÑ­FAT-32¸ñʽ£¬µ«ÔÚÈçºÎʹÓÃ´æ´¢Çø·½ÃæÓм¸¸öÏÞÖÆ¡£

ÎÒÃDz»Ö§³ÖÈκÎĿ¼£¬Òò´ËËùÓÐÎļþ¶¼Î»ÓÚÄÚ´æÇøÓòµÄ¸ùĿ¼(ROOT)ÖС£

DIN Rail SE410S-X10, ʹÓÃ8.3ÎļþÃûÔ¼¶¨¡£

ÎļþÃûµÄ¿ÉÓÃ×Ö·û°üÀ¨:
´óд×Öĸ A¨CZ
Сд×Öĸ a¨Cz (ÒÔA¨CZʹÓÃ)
Êý×Ö 0¨C9
Ï»®Ïß ¡°_¡±

²»ÔÊÐí:
ASCII 0 ¨C ASCII 32 (¿ØÖÆ 0¨C31 ¸ö×Ö·ûºÍ¿Õ¸ñ)
ASCII127 ¨C ASCII255 (°üÀ¨ DEL(127))
¡± * + / : ; < = > ? \ [ ] |
! @ (ÓÐЩÎļþϵͳÖпÉÓ㬵«ÎÒÃDz»ÓÃ)
# $ % & ¡® ( ) ¨C ^ ` { } ~

ÔÚÆäËûÔÆº£ÓÎÏ·ÊÊÅäÆ÷ÖÐ,´æ´¢Çø¿ÉÄÜÒѾ­ÓÐһЩÎļþ(ÀýÈçÔÚÔÆº£ÓÎÏ· MemoratorÖÐ)¡£

²»ÒªÊ¹ÓÃÏÂÁÐÈκÎÎļþÃû:
*.LIF
LOG*.KMF
DATABASE.BIN

´ËÍ⣬Çë±ÜÃâʹÓÃÏÂÁÐÎļþÃû£¬Ôƺ£ÓÎÏ·É豸ÉÏÔÊÐíʹÓÃÕâЩÎļþÃû£¬µ«¸´ÖÆÊ±¿ÉÄܻᵼÖ´íÎó¡£
COM, COM1, COM2, COM3
LPT, LPT1,LPT2,LPT3
CON
DEVICE

¾ßÓÐÔ¤¶¨Ò庯ÊýµÄÎļþÃû
AUTOEXEC.TXT (ÓÃÓÚÆô¶¯*.TXEÎļþ)

Author Image

Lars-G?ran Fredriksson

Lars-G?ran FredrikssonÏÖÈÎÔÆº£ÓÎÏ· ABµÄÏÖ³¡Ó¦Óù¤³Ìʦ¡£ËûÓµÓеØÀíÐÅϢϵͳ£¨GIS£©ºÍÒ£¸ÐÁìÓòµÄ±³¾°£¬Ä¿Ç°×¨×¢ÓÚ½«Ôƺ£ÓÎÏ·¿ª·¢ÍŶӵÄרҵ֪ʶÓëÖÕ¶ËÓû§µÄʵ¼ÊÐèÇóÏà½áºÏ¡£Ëû¶ÔCAN¼¼ÊõµÄÈÈÇé¿É¼ûÒ»°ß£ºÈëÖ°Ê×ÖÜ£¬Ëû±ãÉè¼ÆÁËÒ»¿î»¥¶¯Ê½CAN֪ʶÎÊ´ðÓÎÏ·£¬Òý·¢Á˰칫ÊÒȫԱѰÕÒÕýÈ·´ð°¸µÄÈȳ±¡£´ËÍ⣬Ëû»¹ÊÇһλ¶Ô»·±£²¶Óã³äÂúÈÈÇéµÄÓæÃñ£¬ÖÂÁ¦ÓÚÑз¢ÐÂÐÍ»·±£²¶Óã¼¼Êõ¡£Ä¿Ç°£¬Ëû·ÅÉúµÄ×î´óÓãÖÖÊÇÒ»Î²ÖØÔ¼325¹«½ï£¨715°õ£©µÄÀ¶÷¢½ðǹÓã¡£

¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿