/////////////////////////////////////////////////////////////// // Demo3: CANopen I/O control for I-8000 MCU with I-8120 // /////////////////////////////////////////////////////////////// #include "8000e.h" #include "I87kcan.h" #include #include #include unsigned long BaudRate[8]={10000UL,20000UL,50000UL,125000UL,250000UL,500000UL,800000UL,1000000UL}; void main(void) { int ret; int slot,baud; char command,StrCount=0; char DataStr[100]; //Initiate host InitLib(); Print("\r\n"); Print("/******************************************************/\r\n"); Print("/* Demo3: CANopen I/O control */\r\n"); Print("/*Use I-8000 MCU to send 232 command to control I-8120*/\r\n"); Print("/******************************************************/\r\n"); do{ Print("I-87120 slot(0~7):"); Scanf("%d\r\n",&slot); }while((slot<0)||(slot>7)); Print("0:10Kbps\r\n"); Print("1:20Kbps\r\n"); Print("2:50Kbps\r\n"); Print("3:125Kbps\r\n"); Print("4:250Kbps\r\n"); Print("5:500Kbps\r\n"); Print("6:800Kbps\r\n"); Print("7:1000Kbps\r\n"); do{ Print("I-87123 baud(0~7):"); Scanf("%d\r\n",&baud); }while((baud<0)||(baud>7)); ret = InstallCom0(115200UL,8,0,1); // Install com port if(ret){ ret = RestoreCom0(); if(ret){ Print("Com 0 restore error, code = %d\r\n",ret); return; } else{ ret = InstallCom0(115200UL,8,0,1); if(ret){ Print("Com 0 install error, code = %d\r\n",ret); return; } } } ChangeToSlot(slot); ret=I87KCANInit(BaudRate[baud],0,0,0x00000000L,0xffffffffL,0,0); // Configure CAN port if (ret){ Print("Initialize I-87120 error, code = %d\r\n",ret); ret = RestoreCom0(); if(ret){ Print("Com 0 restore error, code = %d\r\n",ret); } return; } Print("\r\n"); Print("/*********************/\r\n"); Print("/* I/O Command */\r\n"); Print("/*********************/\r\n"); Print("a: Read DI data\r\n"); Print("b: Write DO data\r\n"); Print("c: Read AI data\r\n"); Print("d: Write AO data\r\n"); Print("q: Exit Program\r\n"); Print("\r\na.DI , b.DO , c.AI , d.AO , q.Exit :\r\n"); ClearCom0(); while(1){ command = Kbhit(); if(command){ Getch(); switch(command){ case 'a': // DI : _DIiiicc // _DI: command , iii: cob id , cc: channel(start from 1) { int node,channel; Print("Node id(1~127):"); Scanf("%d\r\n",&node); Print("Read channel:"); Scanf("%d\r\n",&channel); sprintf(DataStr,"_DI%03X%02X\r",0x600+node,channel); ToCom0Str(DataStr); } break; case 'b': // DO : _DOiiiccdd // _DO: command , iii: cob id , cc: channel(start from 1) , dd: output data { int node,channel,data; Print("Node id(1~127):"); Scanf("%d\r\n",&node); Print("Output channel:"); Scanf("%d\r\n",&channel); Print("Output data(1 byte hex):"); Scanf("%x\r\n",&data); sprintf(DataStr,"_DO%03X%02X%02X\r",0x600+node,channel,data); ToCom0Str(DataStr); } break; case 'c': // AI : _AIiiicc // _AI: command , iii: cob id , cc: channel(start from 1) { int node,channel; Print("Node id(1~127):"); Scanf("%d\r\n",&node); Print("Read channel:"); Scanf("%d\r\n",&channel); sprintf(DataStr,"_AI%03X%02X\r",0x600+node,channel); ToCom0Str(DataStr); } break; case 'd': // AO : _AOiiiccdddd // _AO: command , iii: cob id , cc: channel(start from 1) , dddd: output data { int node,channel,data; Print("Node id(1~127):"); Scanf("%d\r\n",&node); Print("Output channel:"); Scanf("%d\r\n",&channel); Print("Output data(2 byte hex):"); Scanf("%x\r\n",&data); sprintf(DataStr,"_AO%03X%02X%04X\r",0x600+node,channel,data); ToCom0Str(DataStr); } break; case 'q': { RestoreCom0(); return; } //break; } } if(IsCom(0)){ DataStr[StrCount]=ReadCom(0); //if((DataStr[StrCount]==0x0)||(DataStr[StrCount]==0x0d)||(DataStr[StrCount]==0x0a)){ if((DataStr[StrCount]==0x0d)){ DataStr[StrCount+1] = 0; StrCount=0; Print("%s",DataStr); Print("\r\na.DI , b.DO , c.AI , d.AO , q.Exit :\r\n"); } else{ StrCount++; } } } }