import usb2canfd; import thread.command; import win.timer; //初始化CAN句柄对象 CANHw = usb2canfd.USB2CANHW(); CANHw.LoadDll(); DiagReqID = 0x18dadff1; DiagRespID = 0x18daf1df; //注册一个消息钩子函数 FuncLoopMsg = function(msg){ //console.log( "收到消息",msg.message ); //console.dumpJson(msg); select(msg.message) { case 100 {//刷新硬件 FuncFreshHw(); } case 101 { FuncConnect(msg.wParam,msg.lParam); } case 102 { FuncBootload(); } case 103 { FuncStop(); } case 110 {//readDID FuncReadDID(msg.wParam); } case 111 { FuncReq10(msg.wParam); } case 112 { FuncReq28(msg.wParam); } case 113 { FuncReq85(msg.wParam); } case 114 { FuncReq27(msg.wParam); } else { } } } FuncFreshHw = function(){ var hwnum = CANHw.FlashHw(); if(hwnum == 0){ //mainForm.cbbDev.text = "未找到硬件" } else { FuncDisplay("找到硬件") } } FuncConnect = function(dev,chn){ var ret = CANHw.OpenDevice(dev,chn); if(ret == 0){ FuncDisplay("连接成功"); } else { FuncDisplay("连接失败"); } } FuncDisplay = function(str){ thread.command.$Display(str);//"线程" + } loadcodex("\user\Diag10code.aardio"); loadcodex("\user\Diag22code.aardio"); loadcodex("\user\Diag85code.aardio"); loadcodex("\user\Diag28code.aardio"); loadcodex("\user\Diag7Fcode.aardio"); var RespState = 0; FuncDiagPro = function(diagmsg){ //console.log("诊断服务") //console.dumpJson(diagmsg); select(diagmsg.sid) { case 0x50 { FuncDiag10Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x62 { FuncDiag22Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x67 { } case 0x74 { } case 0x76 { } case 0x68 { FuncDiag28Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0xC5 { FuncDiag85Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x7F { FuncDiag7FPro(table.slice(diagmsg.data,1,diagmsg.len)) } else { } } RespState = diagmsg.sid; } FuncStop = function(){ stopflag = 1; } FuncWait = function(sid){ for(i=1;40;1){ sleep(100); if(RespState == (sid + 0x40)){//正响应 return 0; } errsid,errnrc = FuncGetNrc() if(errsid == sid){ if(errnrc == 0x78){ FuncClrNrc();//等待 i = 1; } else { return 1; //负响应 } } } } FuncBootload = function(){ } timer1 = win.timer(,1); diagresp = {} timer1.onTimer = function(){ if(CANHw.isConnected() == false){ return; } ret = CANHw.GetMsg(); for(i=1;#ret;1){ //console.log("id = " + tostring(ret[i].id)) if(ret[i].id&0x7FFFFFFF == DiagRespID){ if(ret[i].data[1] == 0x10){//首帧 var data = {0x30,0x00,0x14,0x00,0,0,0,0}; CANHw.SendMsg(DiagReqID,data); diagresp["sid"] = ret[i].data[3]; diagresp["len"] = ret[i].data[2]-1; diagresp["data"] = {}; diagresp["next"] = 0x21; table.append(diagresp["data"],table.slice(ret[i].data,4)); } elseif(ret[i].data[1] <= 0x06){ //console.dumpJson() diagresp["sid"] = ret[i].data[2]; diagresp["len"] = ret[i].data[1]-1; diagresp["data"] = table.slice(ret[i].data,3); FuncDiagPro(diagresp); } elseif(ret[i].data[1] >= 0x21){ if(ret[i].data[1] == diagresp["next"]){ diagresp["next"] += 1; if(diagresp["next"] >= 0x2F){ diagresp["next"] = 0x20; } table.append(diagresp["data"],table.slice(ret[i].data,2)); if(#diagresp["data"] >= diagresp["len"]){ FuncDiagPro(diagresp); } } } } } } timer1.enable(); FuncDisplay("正在运行");