• ¼¼Êõ²©¿Í

    31/01/2022 ×÷Õß ÔÆº£ÓÎÏ·

    ʹÓÃÍⲿ´¥·¢Æ÷ÊäÈëºÍÊä³öÒý½Å×÷ΪÊý×ÖI/O

    ´Ë²©¿ÍÖÐ̸µ½µÄ¹¦ÄÜÒÑÔÚÏÂÁвúÆ·ÉϽøÐÐÁ˲âÊÔ:

    ÔÆº£ÓÎÏ· Memorator Pro 5xHS?????????EAN: 73-30130-00778-9
    ÔÆº£ÓÎÏ· Memorator Pro 2xHS v2? ? EAN: 73-30130-00819-9

    ÔÆº£ÓÎÏ·µÄWindowsÇý¶¯³ÌÐò? V5.35
    ÔÆº£ÓÎÏ· CANlib SDK? ? ? ? ? ? ? ? V5.35

    ²âÊÔǰµÄ×¼±¸

    ҪʹÓô¥·¢Æ÷Òý½Å½øÐвâÊÔ£¬Ä㵱ȻÐèÒªÔÆº£ÓÎÏ· Memorator Pro¡£
    Äã²»ÐèÒªGPS/Arduino²âÊ԰壬µ«Ðźŷ¢ÉúÆ÷ÔÚ²âÊÔʱ·Ç³£±ã½Ý¡£Èç¹ûÄãÏë¿´µ½²»Í¬ÐźÅÖ®¼äµÄ¹ØÁª£¬Ê¾²¨Æ÷Ò²ÊǺܺõÄÑ¡Ôñ¡£

    ΪʲôʹÓÃMemorator´¥·¢Æ÷I/OÒý½Å£¿

    ÔÚһЩÇé¿öÏ£¬Äã¿ÉÄÜÐèÒª¼ì²âÊý×ÖÐźţ¬»òÕßÐèÒªÔÚÌØ¶¨×´¿ö³öÏÖʱ·¢ËÍÊý×ÖÐźÅ¡£Memorator²»¿ÉÄÜÈ¡´úPLC»ò¸ß¼¶I/O²¿¼þ£¬µ«ÔÚijЩÇé¿öÏ£¬Ò»¸öÊý×ÖͨµÀ¾Í×ã¹»ÁË¡£

    Õª×Ô²úƷʹÓÃ˵Ã÷:

    ÔÆº£ÓÎÏ· Memorator Pro 2xHS v2¿ÉÉèÖÃΪͨ¹ýÍⲿÐźŴ¥·¢£¬»¹¿ÉÅäÖÃΪÔÚϽµÑغÍÉÏÉýÑØÉÏ´¥·¢¡£

    ÔÆº£ÓÎÏ· Memorator Pro 2xHS v2¿ÉÉèÖÃΪͨ¹ýÍⲿ´¥·¢Æ÷Êä³öÒý½Å£¬·¢ËÍÍⲿÂö³å¡£

    ÔÚͨµÀCAN1ÉÏÓÐÒ»¸ö´¥·¢Æ÷ÊäÈ룬ÔÚͨµÀCAN2ÉÏÓÐÒ»¸ö´¥·¢Æ÷Êä³ö¡£Á½Õß¶¼ÊÇ5VÂß¼­£¬¿ÉʹÓÃTTLµçƽ¡£ËüÃǵÄÄ¿µÄÊǹ涨µ±Ò»¸öÌØ¶¨Ê¼þ·¢Éúʱ£¬Ö´ÐÐÒ»¸ö¾ßÌåÀàÐ͵IJÙ×÷¡£

    µ±Ôƺ£ÓÎÏ·ÍÆ³ö ÔÆº£ÓÎÏ· DIN Rail SE400S-X10£¬¼°Æä¸½¼ÓÄ£¿éʱ£¬°üÀ¨Ö§³ÖÔÚÔÆº£ÓÎÏ· Memorator Pro v2É豸ÉÏ´¦ÀíI/OÒý½Å¡£ÎÒÃÇÏÖÔÚ¿ÉÒÔÖ±½Ó¿ØÖÆÔƺ£ÓÎÏ· Memorator ProÉ豸ÉϵÄÊý×ÖÊäÈëºÍÊä³ö¡£

    ¿ÉʹÓÃCAN1ÉϵĴ¥·¢Æ÷ÊäÈëºÍCAN2ÉϵĴ¥·¢Æ÷Êä³ö£¬×÷Ϊͨ¹ýCANLib»òt³ÌÐò¿ØÖƵÄÊý×ÖI/O¡£

    ÔÚ±¾ÎÄÖУ¬ÎÒ½«Õ¹Ê¾ÈçºÎ½øÐд˲Ù×÷£¬ÒÔ¼°ÎÒÃÇ¿ÉÒÔͨ¹ýI/OÒý½Å»ñµÃµÄһЩÐÅÏ¢¡£

    ÎÒ½«Ê¹ÓÃÔÆº£ÓÎÏ· t±à³ÌÑÝʾ£¬µ«Ò²¿ÉÒÔʹÓÃCANlib¡£Ê¹ÓÃCANLibµÄ²½ÖèÓëʹÓÃt±à³Ì»ù±¾Ïàͬ¡£

    Äã¿ÉÒÔÔÚ´Ë´¦²é¿´t±à³ÌʹÓÃÊֲ᣺

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

    ÓйØCANLib I/Oº¯ÊýµÄһЩʵÓÃÐÅÏ¢£»

    https://www.kvaser.com/canlib-webhelp/page_user_guide_kviopin.html

    1ÎÒµÄÐźŷ¢ÉúÆ÷ºÍ²âÊÔÉèÖÃ

    ΪÁËÄܹ»ÏÔʾÊý×ÖÐźŵıíÏÖ£¬ÎÒ±ØÐëÓÐÒ»¸öÐźŷ¢ÉúÆ÷ÒÔÉú³ÉÊý×ÖÐźÅ¡£ÎÒ½«Ê¹ÓÃʾ²¨Æ÷ÏÔʾCANÖ¡ºÍÊý×ÖÐźÅÖ®¼äµÄ¹ØÏµ¡£

    ÎÒʹÓÃһ̨СÐÍArduinoµçÄÔ£¬ËüÁ¬½Óµ½Ò»¸öGPSÄ£¿éºÍÒ»¸öMCP2515Ä£¿é£¨CAN¿ØÖÆÆ÷£©¡£

    GPSÉú³É1PPS£¨Ã¿Ãë1¸öÂö³å£©ÐźÅ[ÂÌÏß]¡£¸ÃÐźÅÁ¬½Óµ½ArduinoÉϵÄÒ»¸öÊý×ÖÊäÈëºÍÎÒµÄʾ²¨Æ÷¡£

    ÿ´ÎGPS·¢ËÍ1PPSÐźÅʱ£¬Arduino¶¼»á²úÉú35ºÁÃ볤µÄÂö³å[ºìÏß]¡£´ËÂö³å±»·¢ËÍÖÁMemorator ProÉϵĴ¥·¢ÊäÈ롣ͬʱ£¬ArduinoÏòCAN×ÜÏß[À¶Ïß]·¢ËÍÒ»¸ö ¡°0x201 ±¨ÎÄ¡±¡£

    Memorator»¹¿É¿ØÖÆCAN2[³ÈÉ«Ïß]ÉϵĴ¥·¢Êä³ö¡£ËüÁ¬½Óµ½Arduino£¬ArduinoÓÐÒ»¸öÄÚÖÃÉÏÀ­µç×èÆ÷¡£

    ËùÓÐÉÏÊöÐźŶ¼Á¬½Óµ½Ò»¸ö²î·ÖUSBʾ²¨Æ÷¡£

    ÈçͼËùʾ£¬GPS[ÂÌÉ«]ʹÓÃ3.3VÂß¼­£¬ArduinoÉú³É5V¸ºÂö³å[ºìÉ«]¡£

    Èç¹ûÎÒÃÇ×Ðϸ¹Û²ì£¬»á·¢ÏÖµ±1PPS[ÂÌÉ«]±ä¸ßʱ£¬´¥·¢[ºìÉ«]½«ÔÚ´óÔ¼16 ¦Ìsºó±äµÍ¡£´óÔ¼140 ¦Ìsºó£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Arduinoͨ¹ýMCP2515·¢³öÒ»¸öCAN±¨ÎÄ[À¶É«]¡£ËüµÄIDΪ0x201 (dec 513)¡£

    ±¾ÎÄδÁгöÔÚArduinoÉÏÔËÐеijÌÐò¡£Çë·¢µçÓÊÖÁlgfr@kvaser.com£¬ÎÒ»áͨ¹ýµçÓÊ·¢¸øÄã¡£

    2ͨ¹ýt±à³ÌʹÓô¥·¢Òý½Å

    (Äã¿ÉÔÚ¸½Â¼A – ¡°Test_Memorator_Trigger_V100.t¡± ÖÐÕÒµ½t³ÌÐò)

    Ê×ÏÈ£¬ÎÒÃÇÐèҪһЩ³£Á¿ºÍ±äÁ¿:

    variables {
      int status = 0;
    
      // Memorator Pro
      const int MAX_CHANNELS = 2;
      const int DIGITAL_IN   = 0;
      const int DIGITAL_OUT  = 1;
    
      CanMessage Test_msg202;
      CanMessage Test_msg203;
    }
    

    ÎÒÃǶ¨Òå³õʼ»¯¹ý³Ì£º

    on start {
      int ch;
      printf("[START]\n");
    
      Test_msg202.id=0x202;//Dummy msg 202
      Test_msg202.dlc=0;
      Test_msg202.flags=0;
      Test_msg202.data="\x11\x22\x33\x44\x55\x66\x77\x88";
      
      Test_msg203.id=0x203;//Dummy msg 203 
      Test_msg203.dlc=1;
      Test_msg203.flags=0;
      Test_msg203.data="\x11\x22\x33\x44\x55\x66\x77\x88";
    
    
      status = kvIoPinSetInfo(0,kvIO_INFO_SET_DI_LOW_HIGH_FILTER,3000);
      status = kvIoPinSetInfo(0,kvIO_INFO_SET_DI_HIGH_LOW_FILTER,3000);
    
      status = kvIoConfirmConfig();
      if (status != 0) {
    	printf("kvIoConfirmConfig failed: %d\n", status);
     }
      for (ch=0;ch < MAX_CHANNELS; ch++) {
    	canBusOff(ch);
    	canSetCommunicationMode(ch, canMODE_CAN);
    	canSetBitrate(ch, canBITRATE_250K);
    	canSetBusOutputControl(ch, canDRIVER_NORMAL);
    	canBusOn(ch);
      }
    }
    ²»ÒªÍü¼ÇÇåÀí²½Ö裺
    on stop {
      int ch;
      printf("[STOP]\n");
      for (ch=0;ch < MAX_CHANNELS; ch++) {
    	canBusOff(ch);
      }
    }
    

    ²»ÒªÍü¼ÇÇåÀí²½Ö裺

    on stop {
      int ch;
      printf("[STOP]\n");
      for (ch=0;ch < MAX_CHANNELS; ch++) {
    	canBusOff(ch);
      }
    }
    
    

    ÈÃÎÒÃÇÁ¬½ÓMemorator£¬²¢Îª²âÊÔ×ÜÏ߯ô¶¯t³ÌÐò£¬¿´¿´»á·¢Éúʲô¡£

    1PPS[ÂÌÉ«]ÿÃëÉý¸ßÒ»´Î£¬
    Arduino¼ì²âµ½Ëü²¢½µµÍ´¥·¢[ºìÉ«]£¨´óÔ¼ÐèÒª35ºÁÃ룩¡£
    Arduino»¹ÔÚCAN×ÜÏßÉÏ·¢ËÍ ¡°±¨ÎÄ201¡±¡£

    ¿ÉÒÔÀí½â£¬ËƺõûÓÐÊ²Ã´ÌØ±ðµÄÏÖÏó·¢Éú£¬ÒòΪÎÒÃÇÖ»ÈÃMemoratorÁ¬½Ó×ÜÏߣ¬¶øÎÒÃÇ»¹Ã»×öʲô¡£

    µ«´úÂëÖÐÓÐÒ»ÐкÜÖØÒª£º
    status = kvIoConfirmConfig();

    ÔÚµ÷ÓÃÈκÎI/Oº¯Êý֮ǰ£¬±ØÐëÏȵ÷ÓôËÐС£

    Ìí¼ÓÒ»¸ö ON CANMESSAGE ¹³×Ó:

    ÈÃÎÒÃǼÓÉÏÕâ¸ö¹³×Ó£º

    on CanMessage <0> 0x201
    {
    ? canWrite(Test_msg202);
    }

    Õâ¸ö¹³×ÓµÄÄ¿µÄÊÇÏÔʾMemoratorÔÚÔËÐС£µ±Ëü¿´µ½Ò»¸ö ¡°201¡± ±¨ÎÄʱ£¬·¢ËÍÒ»¸ö ¡°202¡± ±¨ÎÄ¡£Äã¿ÉÒÔÔÚÉÏͼÖп´µ½ÕâÊǵڶþ¸öÀ¶É«±ê¼Ç¡£

    Ìí¼ÓһЩÊý×ÖIO

    on CanMessage <0> 0x201
    {
      status = kvIoPinSetDigital(DIGITAL_OUT, 0);  
      canWrite(Test_msg202);
      status = kvIoPinSetDigital(DIGITAL_OUT, 1);  
    }
    

    ʹÓÃÃüÁî¡°kvIoPinSetDigital(DIGITAL_OUT,?0);¡±£¬ÎÒÃÇÏÖÔÚ¿ÉÒÔ¿ØÖÆCAN2ͨµÀÉϵÄÊý×ÖÊä³öÒý½Å¡£ÔÚÉÏͼÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬µ±·¢ËÍ ¡°202¡± ±¨ÎÄʱ£¬CAN2ÉϵÄÊý×ÖÊä³ö±äµÍ¡£

    Ìí¼ÓÒ»¸ö¼ì²â´¥·¢Æ÷µÄʼþ

    on IoEvent <DIGITAL_IN> kvIO_EVENT_FALLING_EDGE {
      status = kvIoPinSetDigital(DIGITAL_OUT, 0);  
      canWrite(1,Test_msg203);
      status = kvIoPinSetDigital(DIGITAL_OUT, 1);  
    }
    

    ÕâÊÇÒ»¸öÐÂʼþ£¬IoEvent¡£Ëü¿ÉÒÔ¼ì²âµ½Ï½µÑØ¡£Çë×¢Ò⣬´¥·¢ÊäÈëʼÖÕ±»¶¨ÒåΪ¼¤»îµÍµçƽ¡£

    ÿµ±Memorator¼ì²âµ½Ò»¸öϽµÊý×ÖÊäÈëʱ£¬Ëü½«·¢ËÍÒ»¸ö ¡°203±¨ÎÄ¡±¡£ÎÒ»¹Ìí¼ÓÁ˼¤»îÊý×ÖÊä³öµÄ˵Ã÷¡£
    ÔÚÉÏͼÖУ¬ÎÒÃÇÔÚÔ¼7ºÁÃëºó¿´µ½ ¡°203±¨ÎÄ¡±¡££¨ÎÒÒѹرÕÁË ¡°202±¨ÎÄ¡±£©¡£

    7ºÁÃëµÄÏìӦʱ¼äÊǵäÐ͵ÄÏìӦʱ¼äÂð£¿

    ÈÃÎÒÃDz鿴һÏ¡£

    MemoratorÄܶà¿ì¼ì²âµ½´¥·¢Æ÷£¿

    µ±²âÊÔIoEventʱ£¬ºÜÈÝÒ׿´µ½ËüÔÚ14µ½21ºÁÃëÄÚ¼ì²âµ½´¥·¢Æ÷¡£ËüËÆºõÔÚÒÔÔ¤¶¨ÒåµÄģʽÔËÐС£ÈÃÎÒÃDzâÁ¿Ò»Ð¡Ê±ÄÚµÄÑÓ³Ù£º

    ÔÚÉÏͼÖУ¬µþ¼ÓÁËÒ»¸ö¶àСʱµÄ²âÁ¿½á¹û£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÑÓ³ÙÔÚ3ºÁÃëºÍ11ºÁÃ×Ö®¼ä¾ùÔÈ·Ö²¼¡£

    ¸ù¾Ý¹æ·¶£¬´¥·¢Âö³å±ØÐëΪ30 ºÁÃë»ò¸ü³¤£¨·À¶¶¼ì²é£©£¬Òò´Ë3µ½11ºÁÃëµÄÑÓ³Ùʱ¼ä¶ÔÓÚËùÓÐÕý³£²Ù×÷¶¼ÍêÈ«¿ÉÒÔ¡£

    3 Summary×ܽá

    Ìí¼Ó¶ÔMemoratorµÄÊý×ÖI/OͨµÀµÄ¶ÁºÍд֧³Ö (TRIG IN ºÍ TRIG OUT) ·Ç³£¼òµ¥¡£
    ÎÒÃÇÖ»ÐèÒªÎå¸öв½ÖèºÍÒ»¸öй³×Ó£º

    kvIoPinSetInfo();
    kvIoGetNumberOfPins();
    kvIoConfirmConfig();
    kvIoPinSetDigital();
    kvIoPinGetDigital();

    on IoEvent <DIGITAL_IN> kvIO_EVENT_FALLING_EDGE
    Êý×ÖIOµÄÑÓ³ÙԼΪ3µ½11ºÁÃë¡£
    Êý×ÖIOÒ²¿ÉÒÔͨ¹ýCANlib¿ØÖÆ£»ÃüÁîÏàͬ£¬Ö»ÊÇCANlib²»Ö§³Ö¹³×Ó¡£

    ÈçÓÐÈκÎÎÊÌâ»òÆÀÂÛ£¬Çë¸øÎÒ·¢µçÓÊ£¡

    Field Application Engineer

    Lars-G?ran Fredriksson

    LGFR@KVASER.COM

    4 ¸½Â¼ A - ¡°Test_Memorator_Trigger_V100.t¡±

    variables {
      int status = 0;
    
      // Memorator Pro 2xHS
      const int MAX_CHANNELS = 2;
      const int DIGITAL_IN   = 0;
      const int DIGITAL_OUT  = 1;
    
      CanMessage Test_msg202;
      CanMessage Test_msg203;
    }
    
    on start {
      int ch;
      printf("[START]\n");
    
      //Dummy msg 202  
      Test_msg202.id=0x202;
      Test_msg202.dlc=0;
      Test_msg202.flags=0;
      Test_msg202.data="\x11\x22\x33\x44\x55\x66\x77\x88";
    
      //Dummy msg 203  
      Test_msg203.id=0x203;
      Test_msg203.dlc=0;
      Test_msg203.flags=0;
      Test_msg203.data="\x11\x22\x33\x44\x55\x66\x77\x88";
    
      int pinCount = 0;
      status = kvIoGetNumberOfPins(&pinCount);
      
      status = kvIoPinSetInfo(0,kvIO_INFO_SET_DI_LOW_HIGH_FILTER,3000 );
      status = kvIoPinSetInfo(0,kvIO_INFO_SET_DI_HIGH_LOW_FILTER,3000  );
      
      status = kvIoConfirmConfig();
    
      if (status != 0) {
        printf("kvIoConfirmConfig failed: %d\n", status);
     }
    
      for (ch=0;ch < MAX_CHANNELS; ch++) {
        canBusOff(ch);
        canSetCommunicationMode(ch, canMODE_CAN); 
        canSetBitrate(ch, canBITRATE_250K);
        canSetBusOutputControl(ch, canDRIVER_NORMAL);
        canBusOn(ch);
      }
    
      int value = 0;
    
      status = kvIoPinGetDigital(DIGITAL_IN, &value);
    
      status = kvIoPinSetDigital(DIGITAL_OUT, 1);  
    }
    
    on stop {
      int ch;
      printf("[STOP]\n");
      for (ch=0;ch < MAX_CHANNELS; ch++) {
        canBusOff(ch);
      }
      status = kvIoPinSetDigital(DIGITAL_OUT, 1);
      if (status == 0) {
        printf("Restored digital out\n");
      } else {
        printf("FAILED: %d\n", status);
      }
    }
    
    on IoEvent <DIGITAL_IN> kvIO_EVENT_FALLING_EDGE
    {
      status = kvIoPinSetDigital(DIGITAL_OUT, 0);  
      canWrite(0,Test_msg203);
      status = kvIoPinSetDigital(DIGITAL_OUT, 1);  
    }
    

    5 ¸½Â¼ B GPS Signal Generator

    Èç¹ûÄã¶ÔÔ´´úÂë¸ÐÐËȤ£¬Çë¸øÎÒ·¢Ò»·âµç×ÓÓʼþ£¬ÎÒ»á¸øÄã·¢Ò»¸öÁ´½Ó¡£

    Field Application Engineer

    Lars-G?ran Fredriksson

    LGFR@KVASER.COM
    Author Image

    Prachi Patel

    N/A

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