Õâ·ÖΪ4²¿·Ö:
ÕâÀïչʾµÄ´úÂëÊǽÚÑ¡µÄ£¬²»ÊÇÈ«²¿¡£Çë²é¿´Ô´´úÂë¡£
²½Öè: ³õʼ»¯
Ñ¡ÔñCLASSIC CAN »ò CAN FD
ÉèÖó£Ì¬MyApp Ϊ canFD »òcanCLASSIC CAN¡£
½«ÐèÒª×÷Ϊ·¢Ë͵ÄÊÊÅäÆ÷ͨµÀÉèÖÃΪTX_MySelCh ¡£
½«ÐèÒª×÷Ϊ½ÓÊÕµÄÊÊÅäÆ÷ͨµÀÉèÖÃΪRX_MySelCh ¡£
¼¸ºõËùÓÐÔÆº£ÓÎÏ· CAN ÊÊÅäÆ÷¿ÉͬʱΪ·¢ËÍÆ÷ºÍ½ÓÊÕÆ÷¡£ÎÒÃÇÔÚÕâ¸ö·¶ÀýÀïÑ¡ÔñÒÔÒ»¸öΪTX£¬ÁíÒ»¸öRX £¬ÒÔʹÕâ¸ö·¶ÀýµÄ´úÂëÈÝÒ×±»Àí½â¡£
Ê×ÏÈÎÒÃÇÔËÐÐ3¸öÃüÁî:
canInitializeLibrary()
canGetChannelData()
ÏÖÔÚÎÒÃÇÖªµÀ´æÔÚ¶àÉÙ¸öÊÊÅäÆ÷ÒÔ¼°ËüÃǵÄÃû³Æ¡£ÎÒÃÇ¿ÉÒÔ´ò¿ªÆäÖÐÁ½¸ö¡£
canOpenChannel()
CAN CLASSIC
TX_MyHnd := canOpenChannel(TX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL);
RX_MyHnd := canOpenChannel(RX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL);
CAN FD
TX_MyHnd := canOpenChannel(TX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD);
RX_MyHnd := canOpenChannel(RX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD);
ÔÚ´ò¿ªÒ»¸öFDͨµÀʱ£¬Ê¹ÓÃÆì±ê£¨FLAG£©ÊÇÖØÒªµÄ: canOPEN_CAN_FD
ÎÒÃÇÓÃÁªºÏÃüÁî¡°canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD¡± ´ò¿ªÒ»¸öÐéÄâÊÊÅäÆ÷£¬ÉèÖÃģʽΪFD¡£
ÏÖÔÚÊÊÅäÆ÷´ò¿ªÁË£¬ÎÒÃÇÐèÒªÉèÖÃËüÃǵIJÎÊý¡£
canSetBusParams() and canSetBusParamsFD()
- FDÐèÒª±à¼ºÍ¸½¼ÓÐÅÏ¢FD!
- ¿ÉÒÔÓÃÆäËûÖµ£¬¶ø²»ÓÃÔ¤ÉèÖµ (±¾ÎIJ»½éÉÜÕⲿ·Ö)¡£
CAN CLASSIC
canSetBusParams()½öÄÜÓëcanBITRATE_xxxÒ»ÆðÓÃ.
TX := canSetBusParams(TX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0);
RX := canSetBusParams(RX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0);
CAN FD
canSetBusParams() and canSetBusParamsFD()ÄÜÓë canFD_BITRATE_xxxÒ»ÆðÓá£
TX := canSetBusParams(TX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0);
RX := canSetBusParams(RX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0);
TX := canSetBusParamsFD(TX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0);
RX := canSetBusParamsFD(RX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0);
- Çë×¢Òâ, ²»ÒªÔÚFDÉÏʹÓÃcanBITRATE_xxx Öµ!
ÏÖÔÚËùÓвÎÊý¶¼ÉèÖúÃÁË£¬ÎÒÃÇ¿ÉÒÔÉÏÏßÁË£¬ËùÒÔÎÒÃÇÒª½áÊø³õʼ»¯¹ý³Ì£¬´ò¿ª×ÜÏߣ¬×öһЩÇåÀí¡£
canBusOn()
canFlushTransmitQueue()
canFlushReceiveQueue()
?
²½Öè: ·¢ËÍ
ÎÒÃǼ¤»îÁË×ÜÏߣ¬ÊÊÅäÆ÷ÔÚµÈÎÒÃǵÄÏÂÒ»²½²Ù×÷¡£ÎÒÃÇÓ¦´ÓÒ»¸öÑ¡³öµÄÊÊÅäÆ÷·¢ËÍÒ»¸öÖ¡¡£
canWrite()
(ÎÒÃÇ¿ÉÒÔÓÃcanWrite() »ò canWriteWait()ÃüÁµ«ÔÚ±¾·¶ÀýÖÐÎÒÃÇÖ»ÓÃcanWrite¡£)
ÍÆ¼ö: ²ÎÔÄTHE HELP!
CAN CLASSIC
BUF? := ‘Hello!’;
id?? := 111;
dlc? := 8; // For Classic CAN dlc can be at most 8*
Flag := canMSG_STD;
R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag);
CAN FD
BUF? := ‘Hello World!’;
id?? := 222;
dlc? := 16; // for CAN FD dlc CAN be one of the following 0-8,12, 16, 20, 24, 32, 48, 64
Flag := canMSG_STD OR canFDMSG_FDF OR canFDMSG_BRS;
R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag);
- Р»º´æÈÝÁ¿¿É´ï64 bytes
- ¼Ó canFDMSG_FDF µ½Æì±êflag ÉÏ(±íÃ÷´ËÖ¡ÊÇÒ»¸öFD Ö¡)
- ¼Ó canFDMSG_BRS µ½Æì±ê flag ÉÏ(±íÃ÷¸ÃÖ¡ÐèÒÔ±ÈÌØÂʵ÷½Ú·¢ËÍ)
Çë×¢ÒâcanFDMSG_BRS¿ÉÑ¡¿É²»Ñ¡¡£µ±¼ÓÁËBRS flag, Êý¾Ý²¿·ÖÊÇÒÔ FD±ÈÌØÂÊ·¢Ë͵쬶ø²»ÊÇÒÔÖٲñÈÌØÂÊ·¢Ë͵ġ£
ÔÚÄ㼤»îFDÒÔºóÈÔ¿ÉÒÔ·¢ËÍclassic CAN Ö¡! Ö»ÄÜÓÃcanMSG_STD »ò canMSG_EXT Éú³ÉÒ»¸öclassic Ö¡¡£
?
²½Öè: ½ÓÊÕ
canRead()
(¿ÉÓÃÀ´½ÓÊÕFDͨѶµÄcanRead() (ÖÁÉÙ)ÓÐËĸö°æ±¾µÄ¡£ÔÚ´Ë·¶ÀýÖÐÎÒÃǽöÓÃcanRead()£¬ËùÒÔÎÒÃǽ¨ÒéÄãÔĶÁ¡®Help¡¯ ²¿·Ö!)
R?? := canRead(RX_MyHnd, id, @BUF, dlc, Flag, myTime);
ÎÒÃDz»ÐèÒª¶ÔÔĶÁÃüÁî×öÈκÎÐ޸쬵«ÊÇ ¡
- È·ÈÏ»º´æ[BUF]µÄ×îСÈÝÁ¿ÊÇ64 bytes¡£¼´Ê¹ÎÒÃDz¢²»Ïë·¢Ëͳ¤¹ý24 bytesµÄÖ¡, ±ðÈË»òÐíÐèÒª¡£
- Ñо¿±»·µ»ØµÄÆì±êÖµ£¬ËüÃǰüº¬ÁËһЩÐÂÖµ¡£ÕâЩÊÇcanMSG_xxx, canMSGERR_xxx ºÍ canFDMSG_xxx ÖµµÄ×ۺϡ£
¼´Ê¹Ö»ÓÐÎÒÃÇÔÚ×ÜÏßÉÏ£¬¶øÇÒÎÒÃǽö·¢ÁËÒ»Ö¡, ½ÓÊܵ½µÄ֡δ±ØÊÇÎÒÃÇÏëÒªµÄ¡£ÀýÈ磬Èç¹ûÆì±êÀï°üÀ¨ÁËÖµcanMSG_ERROR_FRAME, ÄÇô´ËÖ¡ÊÇÒ»¸ö´íÎóÖ¡£¬²»ÊÇÎÒÃÇÏ£Íû¿´µ½µÄ¡£.
- Ò»¶¨Òª×ÜÊǼì²é·µ»ØµÄÖµ[R] ºÍ·µ»ØµÄÆì±ê!
ÏÖÔÚÎÒÃÇÒѾÊÕµ½ÁËÎÒÃǵÄÖ¡¡£
²½Öè: Íê³É
Íê³É²½Öè²»ÐèÒª±à¼¡£
canBusOff()
canClose()
canUnloadLibrary()