• ¼¼Êõ²©¿Í

    21/05/2024 ×÷Õß ÔÆº£ÓÎÏ·

    Ö»ÐèÒ»¸ö¼òµ¥½Å±¾£¬¾ß±¸±à³Ì¹¦ÄܵÄÔÆº£ÓÎÏ·É豸Ãë±ä¸ßÐ§Íø¹Ø

    ÔÚijЩÇé¿öÏ£¬Äú¿ÉÄÜÐèÒªºÏ²¢Á½ÌõCAN×ÜÏߣ¬»òÕßÔÚʹÓò»Í¬±ÈÌØÂʺÍ/»òЭÒéµÄÁ½Ìõ×ÜÏßÖ®¼ä½øÐÐÊý¾Ý´«Êä¡£Äú¿ÉÒÔÑ¡Ôñ¹ºÂòÍø¹ØÀ´Íê³ÉÕâÏîÈÎÎñ¡£»òÕߣ¬ÄúÒ²¿ÉÒÔʹÓÃ×Ô¼ºµÄ¶àͨµÀÔÆº£ÓÎÏ·É豸ºÍt½Å±¾À´´´½¨×Ô¼ºµÄÍø¹Ø¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«¼òÒª½éÉÜt½Å±¾£¬ÒÔ¼°ÈçºÎͨ¹ý±àдÉÙÁ¿´úÂëÀ´½¨Á¢×Ô¼ºµÄÍø¹Ø¡£

    ʲôÊÇt½Å±¾£¿
    ÎÒÃǵÄt½Å±¾ÓïÑÔÓëCÓïÑÔÀàËÆ£¬ËüÔÊÐíÓû§Ê¹Óá°hooks¡±¶Ô×ÜÏßÉϵÄijЩʼþ×ö³ö±à³Ì·´Ó¦ºÍÏìÓ¦¡£t½Å±¾ÔÚÔÆº£ÓÎÏ·É豸ÉϽøÐб¾µØÔËÐС£Ò»µ©¼ÓÔØ²¢Æô¶¯t½Å±¾£¬¾ÍÎÞÐèÔÙÓëPCͨÐÅ¡£*

    ÈçºÎÉèÖÃÍø¹Ø£¿
    Ê×ÏÈ£¬ÄúÐèҪһ̨¿ÉÒÔʹÓÃt½Å±¾µÄ¶àͨµÀÉ豸£¬ÀýÈçUSBcan Pro£¨2xHS»ò4xHS£©»òÔÆº£ÓÎÏ·?Memorator Pro£¨2xHS v2»ò5xHS£©¡£È»ºó½«Í¨µÀ1ºÍ2·Ö±ðÁ¬½Óµ½Á½ÌõCAN×ÜÏßÉÏ¡£Èç¹ûÉ豸ÓÐÁ½ÌõÒÔÉϵÄͨµÀ£¬ÄÇôÄúÒ²¿ÉÒÔ½ÓÈ벻ͬµÄͨµÀ¡£ÔÚʾÀýÖУ¬ÎÒÃǽ«Ê¹ÓÃͨµÀ1ºÍͨµÀ2¡£Èç¹ûÔÚ¶ÀÁ¢Ä£Ê½ÏÂʹÓÃMemorator Pro£¬ÔòÐèҪΪͨµÀ1¹©µç¡£

    ͨ¹ýÔÆº£ÓÎÏ·ÓÃÓÚ´´½¨¡¢±àÒëºÍÔËÐÐt½Å±¾µÄ¼¯³É¿ª·¢»·¾³TRX£¬Äú¿ÉÒÔʹÓÃÒÔÏÂt½Å±¾£¬²¢½«ÆäÏÂÔØµ½Í¨µÀ1ÉϵÄÉ豸ÖУº

    variables { 
    
      const int ch1 = 0; 
    
      const int ch2 = 1; 
    
    } 
    
     
    
    on start { 
    
      canSetBitrate(ch1, canBITRATE_250K); 
    
      canSetBitrate(ch2, canBITRATE_250K); 
    
      canSetBusOutputControl(ch1, canDRIVER_NORMAL); 
    
      canSetBusOutputControl(ch2, canDRIVER_NORMAL); 
    
      canBusOn(ch1); 
    
      canBusOn(ch2); 
    
    } 
    
     
    
    on stop { 
    
      canBusOff(ch1); 
    
      canBusOff(ch2); 
    
    } 
    
     
    
    on CanMessage <ch1> * { 
    
      canWrite(ch2, this); 
    
    } 
    
     
    
    on CanMessage <ch2> * { 
    
      canWrite(ch1, this); 
    
    } 

    ÔÚTRXÖÐÔËÐд˽ű¾Ê±£¬Í¨µÀ1ºÍͨµÀ2¶¼½«ÒÔ250 kb/sµÄ±ÈÌØÂʽÓÈë×ÜÏß¡£Ö®ºó£¬µÚÒ»ÌõCAN×ÜÏßÉϵÄÁ÷Á¿½«´«ÊäÖÁµÚ¶þÌõCAN×ÜÏߣ¬·´Ö®ÒàÈ»¡£

    ÕýÔÚ·¢Éúʲô£¿
    ¸Ã½Å±¾¹²ÓÐËĸö¡°hooks¡±£¬·Ö±ðΪ£ºon start¡¢on stop¡¢on CANMessage <ch 1>ºÍ on CANMessage <ch 2>¡£µ±¼ÓÔØ½Å±¾²¢ÓÉTRX֪ͨ¿ªÊ¼Ê±£¬¡°on start¡±½«±»´¥·¢¡£ÔÚÕâ¶Î´úÂëÖУ¬Í¨µÀ½«±»ÖÃÓÚ×ÜÏßÉÏ¡£µ±Í¨ÖªTRXÍ£Ö¹½Å±¾Ê±£¬¡°on stop¡±±»´¥·¢£¬Í¨µÀ½«±»ÖÃÓÚ×ÜÏ߹رÕ״̬¡£Èç¹ûCANͨµÀ1¶ÁÈ¡±¨ÎÄ£¬Ôò»á´¥·¢on CANMessage <ch 1>£¬²¢ÔËÐдúÂ뽫±¨Îĸ´ÖƵ½CANͨµÀ2¡£¶øÈç¹ûCANͨµÀ2¶ÁÈ¡±¨ÎÄ£¬ÔòÔËÐÐon CANMessage <ch 2>ÖеĴúÂë¡£

    ͨ¹ýÕâЩ»ù±¾²½Ö裬Äú¾Í¿ÉÒÔÓµÓÐÒ»¸öÁ¬½ÓÁ½ÌõCAN×ÜÏߵŦÄÜÍø¹Ø¡£µ«ÊÇ£¬Èç¹ûÄú»¹Ïë×öµÃ¸ü¶à£¬¸ÃÔõô°ìÄØ£¿

    Èç¹ûÉ豸ÒѾ­ÔÚ×ÜÏßÉÏ£¬Ðè½øÐÐÄÄЩ²Ù×÷£¿
    Èç¹ûÉ豸ÒѾ­ÔÚ×ÜÏßÉÏ£¬ÔòÎÞÐèon startºÍon stop hooks¡£ÎªÁ˱ãÓÚ¶ÁÈ¡£¬¿ÉÒÔɾ³ýÕâЩhooks£º

    variables { 
    
      const int ch1 = 0; 
    
      const int ch2 = 1; 
    
    } 
    
     
    
    on CanMessage <ch1> * { 
    
      canWrite(ch2, this); 
    
    } 
    
     
    
    on CanMessage <ch2> * { 
    
      canWrite(ch1, this); 
    
    } 

    Èç¹ûÄúʹÓõÄÊÇÔÆº£ÓÎÏ· USBcan Pro 2xHS v2¡¢Ôƺ£ÓÎÏ· USBcan Pro 4xHS»òÔÆº£ÓÎÏ· Hybrid Pro 2xHSµÈÉ豸£¬ÒÔÏÂÊÇÆô¶¯½Å±¾µÄ²½Ö裺

    1. ´ò¿ª×ÜÏß¼à¿Ø/×ÜÏß·ÖÎöÈí¼þ
    2. ÅäÖÃÉ豸²¢´ò¿ªÍ¨µÀ
    3. Æô¶¯TRX²¢¼ÓÔØÏîÄ¿
    4. ÔÚTRXÖн«É豸ÉèÖÃΪ¡°ÔÚÏß¡±×´Ì¬
    5. ÔÚTRXÖн«t½Å±¾ÏÂÔØµ½É豸ÉÏ
    6. ÔÚTRXÖÐÆô¶¯t½Å±¾

    ÏÖÔÚ£¬É豸ÒÑ×÷ÎªÍø¹ØÔËÐУ¬ÄúÈÔ¿ÉʹÓÃ×ÜÏß·ÖÎö/×ÜÏß¼à¿ØÈí¼þ¡£ÒÔÉϾÍÊǹØÓÚÉèÖûù±¾Íø¹ØµÄÈ«²¿ÄÚÈÝ¡£µ«Èç¹ûÒªÁ¬½ÓÁ½Ìõ²»Í¬±ÈÌØÂʵÄ×ÜÏߣ¬¸ÃÔõô°ìÄØ£¿Äú¿ÉÒÔΪCANͨµÀÉèÖÃËùÐèµÄ±ÈÌØÂÊ£º

    on start { 
    
      canSetBitrate(ch1, canBITRATE_250K); 
    
      canSetBitrate(ch2, canBITRATE_500K); 
    
      canSetBusOutputControl(ch1, canDRIVER_NORMAL); 
    
      canSetBusOutputControl(ch2, canDRIVER_NORMAL); 
    
      canBusOn(ch1); 
    
      canBusOn(ch2); 
    
    } 

    Èç¹ûÄúʹÓÃÈí¼þ¼à¿Ø×ÜÏߣ¬ÔòÔÚÈí¼þÖнøÐÐÅäÖá£Èç¹ûÐèÒªÁ½¸öÒÔÉϵÄͨµÀ£¬¿ÉÒÔΪÕâЩͨµÀÌí¼Ó¸ü¶àµÄ¡°CanMessage¡±hooks¡£

    ½«Ä³Ð©±¨ÎÄID×ªÒÆµ½ÁíÒ»¸öͨµÀ£º
    ÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂhooksÇáËɵظù¾ÝID½øÐйýÂË¡£¸Ãhooksʼþ½«Ö»·¢ËÍÒ»¸ö11λID 1019£¨Ê®½øÖÆ£©µÄ±¨Îĵ½CANͨµÀ2¡£

    on CanMessage <ch1> 1019 { 
    
      canWrite(ch2, this); 
    
    } 

    ´ÓCANתµ½CAN FD£º
    ´ÓCANתµ½CAN FD£¨·´Ö®ÒàÈ»£©¸ü¼Ó¸´ÔÓ¡£ÄúÎÞ·¨Ö±½Ó¸´ÖƱ¨ÎÄ£¬¶øÊÇÐèÒªÖØÐ½«±¨Îĸñʽ»¯ÎªCAN FD¸ñʽ¡£

    ÔÚ±¾ÀýÖУ¬ÎÒÃǽ«CAN ͨµÀ2ÉèÖÃΪCAN FD£¬±ê³Æ±ÈÌØÂÊΪ1 mb/s£¬Êý¾Ý¶Î±ÈÌØÂÊΪ2 mb/s¡£CANͨµÀ1½ÓÊÕµÄÈκα¨Îͼ½«±»´«ÊäΪCANͨµÀ2µÄCAN FD¸ñʽ£¬¶øCANͨµÀ2µÄÈκÎCAN FD±¨Îͼ½«±»ÖØÐ¸ñʽ»¯ÎªCAN ¸ñʽ£¬ÒÔ±ãÔÚͨµÀ1ÉÏ·¢ËÍ¡£±¾ÀýÖÐCANºÍCAN FDµÄDLC¾ùΪ8¡£ÔÚ¸ü¸ß¼¶µÄʾÀýÖУ¬ÔÚ´«Ê䱨ÎÄʱ»¹ÐèÒª¿¼ÂÇCANºÍCAN FDÖ®¼äµÄÆäËû²îÒ죬ÈçCAN FDÖ¡´óÓÚ8¸öÊý¾Ý×Ö½Ú¡£

    variables{
      const int ch1 = 0;
      const int ch2 = 1;
      CanMessageFd msgFD;
      CanMessage msg;
    }
     
    on start { 
      canSetBitrate(ch1, canBITRATE_250K); 
     
      canSetBitrateFd(ch2, canFD_BITRATE_2M_80P);
      canSetCommunicationMode(ch2, canMODE_CAN_FD);
     
      canBusOn(ch1); 
      canBusOn(ch2); 
    } 
     
    on CanMessage <ch1> *{
      if ((this.flags & (canMSG_RTR | canMSG_ERROR_FRAME)) == 0) { 
         msgFD.id = this.id;
         if ((this.flags & canMSG_EXT) != 0) { 
           msgFD.flags = canMSG_EXT; 
         } 
         
         msgFD.flags = 0;
         msgFD.dlc   = 8; 
         msgFD.data  = this.data;   
         
         canWrite(ch2, msgFD); 
       } 
     
    } 
     
    on CanMessageFd <ch2> *{  
      if ((this.id & canMSG_ERROR_FRAME) == 0) {  
         msg.id = this.id; 
         msg.flags = 0; 
         if ((this.id & canMSG_EXT) != 0) { 
            msg.flags = canMSG_EXT; 
         } 
         
         msg.dlc   = 8; 
         msg.data  = this.data; 
     
         canWrite(ch1, msg); 
       } 
     } 
    
    on stop{
      canBusOff(ch1);
      canBusOff(ch2);
    }
    

    ÒÔÉÏËùÓÐÕâЩÓÐʲôÓÃ;£¿
    ÄúÎÞÐ蹺ÂòÈ«ÐÂÉ豸×÷ÎªÍø¹Ø£¬²¢ÇÒ¿ÉÒÔʹÓÃÏÖÓеÄ¡¢¾ßÓмæÈÝÐÔµÄÔÆº£ÓÎÏ·É豸×÷ÎªÍø¹Ø¡£Ôƺ£ÓÎÏ·µÄt½Å±¾ÓïÑÔÔÊÐíʹÓÃÏÖÓÐÓ²¼þÁé»îµØ½â¾ö³£¼ûÎÊÌ⣬ÒÔ±ã½ÚÊ¡ÄúµÄʱ¼äºÍ×ÊÔ´¡£

    ÕâÖ»ÊÇʹÓÃÖ§³Öt½Å±¾µÄÉ豸ºÍ¼¸ÐдúÂë¾ÍÄܽâ¾öÎÊÌâµÄÒ»¸öʾÀý¡£ÈçÐèÁ˽â¸ü¶àʾÀý£¬Çë²ÎÔÄÎÒÃÇµÄÆäËûDevBlogs ¡£

    *Ò²¾ÍÊÇ˵£¬Èç¹ûÄúµÄÉ豸±»ÓÃ×÷USBͨѶÒÇ£¬ÔÚ³ÌÐòÔËÐÐʱ´ÓµçÄÔÉϰÎÏÂÉ豸»áµ¼ÖÂt½Å±¾Í£Ö¹ÔËÐС£

    ´ËÍ⣬ÓÉÓÚt½Å±¾µ÷¶È³ÌÐòÿ´ÎÖ»ÄÜ´¦ÀíÒ»¸ö·Ç¶¨Ê±hooksʼþ£¬Òò´ËÔÚ´¦Àí±¨ÎÄʱ»áÓÐ1 msµÄÑÓ³Ù¡£ÔÚijЩÇé¿öÏ£¬Èç¹ûͬʱ·¢ËͶàÌõ±¨ÎÄ£¬¿ÉÄÜ»áÍÆ³ÙÖ´ÐУ¬ÒòΪµ÷¶È³ÌÐò»á±¨ÎÄÒÔ1 msµÄ´¦Àí¼ä¸ôÖðÒ»´¦ÀíÿһÌõ±¨ÎÄ¡£ÇëÔÚ½«±¾Ê¾Àý¼¯³Éµ½ÄúµÄÍøÂçʱ¿¼Âǵ½ÉÏÊöÄÚÈÝ¡£

    Author Image

    Adam Raymer

    Adam RaymerÊÇÔÆº£ÓÎÏ· AB¹«Ë¾µÄÒ»ÃûÏÖ³¡Ó¦Óù¤³Ìʦ£¬Î»ÓÚÃÀ¹úµ×ÌØÂɸ½½ü¡£Adam¶¨ÆÚÓë¿Í»§±£³ÖÁ¼ºÃ¹µÍ¨£¬ÊÇÎÒÃÇÈ«ÇòÖ§³ÖÍŶÓÖеĻîÔ¾³ÉÔ±Ö®Ò»¡£

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