¼¼Êõ²©¿Í

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¡¿