/////////////////////////////////////////////////////////////// // Demo4: DeviceNet I/O control for I-8000 MCU with I-8120 // /////////////////////////////////////////////////////////////// #include "8000.h" #include "I87kcan.h" #include #include #include unsigned long BaudRate[3]={125000UL,250000UL,500000UL}; unsigned long Count = 25000L; char DataStr2[100]; int flag = 0; void main(void) { int ret; int slot,baud; char command,StrCount=0; char DataStr[100],DataStr0[100],DataStr1[100]; Print("\r\n"); Print("/******************************************************/\r\n"); Print("/* Demo4: DeviceNet 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:125Kbps\r\n"); Print("1:250Kbps\r\n"); Print("2:500Kbps\r\n"); do{ Print("I-87123 baud(0~2):"); Scanf("%d\r\n",&baud); }while((baud<0)||(baud>2)); 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: Connect DeviceNet Slave\r\n"); Print("b: Output I/O data to Slave\r\n"); Print("q: Exit Program\r\n"); Print("\r\na.Connect , b.Output , q.Exit :\r\n"); ClearCom0(); while(1){ command = Kbhit(); if(command){ Getch(); switch(command){ case 'a': //_AIDT: ID: device id, 0x00~0x3F, // T: Connection Type, 1: Explicit, 2: Polling, 3:1+2 //_SIDTEEEE: ID: device id, 0x00~0x3F, // T: Connection Type, 1: Explicit, 2: Polling // EEEE: Expected_Packet_Rate From 0x0000 ~ 0xFFFF { int node,dlen; do{ Print("Node id(0~63):"); Scanf("%d\r\n",&node); }while((node<0)||(node>63)); Print("Output length:"); Scanf("%d\r\n",&dlen); sprintf(DataStr0,"_A%02X3\r",node); ToCom0Str(DataStr0);//Send Allocate Connection message DelayMs(100); sprintf(DataStr1,"_S%02X21027\r",node); ToCom0Str(DataStr1);//Set Connection Expected_Packet_Rate 10000ms DelayMs(100); sprintf(DataStr2,"_P%02X%X00000000000000\r",node,dlen); flag = 1; } break; case 'b': //Send Master's I/O Poll Command Message //_PIDLData: ID: device id, 0x00~0x3F, // L: lengthe of data (value must be 0 to 8) // Data: at most 8 bytes data. { int node,dlen; char data[8]; Print("Node id(0~63):"); Scanf("%d\r\n",&node); Print("Output length:"); Scanf("%d\r\n",&dlen); Print("Output data(0 ~ 8 byte hex):"); Scanf("%s\r\n",&data); sprintf(DataStr2,"_P%02X%X%s\r",node,dlen,data); } break; case 'q': { RestoreCom0(); return; } //break; } } if(flag){ if(!(Count--)){ ToCom0Str(DataStr2); Count = 50000L; } } if(IsCom(0)){ DataStr[StrCount]=ReadCom(0); //if((DataStr[StrCount]==0x0)||(DataStr[StrCount]==0x0d)||(DataStr[StrCount]==0x0a)){ if((DataStr[StrCount]==0x0a)){ DataStr[StrCount+1] = 0; StrCount=0; Print("%s",DataStr); } else{ StrCount++; } } } }