´Ë²©¿ÍÖÐ̸µ½µÄ¹¦ÄÜÒÑÔÚÏÂÁвúÆ·ÉϽøÐÐÁ˲âÊÔ:
ÔÆº£ÓÎÏ· 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 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²»¿ÉÄÜÈ¡´ú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
ΪÁËÄܹ»ÏÔʾÊý×ÖÐźŵıíÏÖ£¬ÎÒ±ØÐëÓÐÒ»¸öÐźŷ¢ÉúÆ÷ÒÔÉú³ÉÊý×ÖÐźš£ÎÒ½«Ê¹ÓÃʾ²¨Æ÷ÏÔʾ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£¬ÎÒ»áͨ¹ýµçÓÊ·¢¸øÄã¡£
(Äã¿ÉÔÚ¸½Â¼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鿴һÏ¡£
µ±²âÊÔIoEventʱ£¬ºÜÈÝÒ׿´µ½ËüÔÚ14µ½21ºÁÃëÄÚ¼ì²âµ½´¥·¢Æ÷¡£ËüËÆºõÔÚÒÔÔ¤¶¨ÒåµÄģʽÔËÐС£ÈÃÎÒÃDzâÁ¿Ò»Ð¡Ê±ÄÚµÄÑÓ³Ù£º
ÔÚÉÏͼÖУ¬µþ¼ÓÁËÒ»¸ö¶àСʱµÄ²âÁ¿½á¹û£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÑÓ³ÙÔÚ3ºÁÃëºÍ11ºÁÃ×Ö®¼ä¾ùÔÈ·Ö²¼¡£
¸ù¾Ý¹æ·¶£¬´¥·¢Âö³å±ØÐëΪ30 ºÁÃë»ò¸ü³¤£¨·À¶¶¼ì²é£©£¬Òò´Ë3µ½11ºÁÃëµÄÑÓ³Ùʱ¼ä¶ÔÓÚËùÓÐÕý³£²Ù×÷¶¼ÍêÈ«¿ÉÒÔ¡£
Ìí¼Ó¶Ô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²»Ö§³Ö¹³×Ó¡£
ÈçÓÐÈκÎÎÊÌâ»òÆÀÂÛ£¬Çë¸øÎÒ·¢µçÓÊ£¡
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);
}
Èç¹ûÄã¶ÔÔ´´úÂë¸ÐÐËȤ£¬Çë¸øÎÒ·¢Ò»·âµç×ÓÓʼþ£¬ÎÒ»á¸øÄã·¢Ò»¸öÁ´½Ó¡£
N/A