This commit is contained in:
sunbeam 2024-09-18 14:49:47 +08:00
parent cb2a256dc5
commit a383ba31c3
5 changed files with 132 additions and 79 deletions

View File

@ -6,7 +6,6 @@
</folder> </folder>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false"> <folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
<file name="about.aardio" path="dlg\about.aardio" comment="dlg\about.aardio"/> <file name="about.aardio" path="dlg\about.aardio" comment="dlg\about.aardio"/>
<file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/>
</folder> </folder>
<folder name="user" path="user" embed="true" comment="目录" local="false" ignored="false"> <folder name="user" path="user" embed="true" comment="目录" local="false" ignored="false">
<file name="CanThread.aardio" path="user\CanThread.aardio" comment="user\CanThread.aardio"/> <file name="CanThread.aardio" path="user\CanThread.aardio" comment="user\CanThread.aardio"/>

View File

@ -1,67 +0,0 @@
import win.ui;
/*DSG{{*/
var winform = win.form(text="诊断读取";right=679;bottom=319;border="thin";max=false;mode="popup")
winform.add(
btnDID_1701={cls="button";text="电机当前位置霍尔数";left=36;top=162;right=163;bottom=193;z=5};
btnDID_1702={cls="button";text="软止点位置霍尔数";left=36;top=203;right=163;bottom=234;z=6};
btnDID_1706={cls="button";text="软止点学习状态";left=178;top=40;right=305;bottom=71;z=7};
btnDID_1707={cls="button";text="座椅电机电流";left=178;top=80;right=305;bottom=111;z=8};
btnDID_1708={cls="button";text="模块输入信号状态";left=178;top=121;right=305;bottom=152;z=9};
btnDID_1709={cls="button";text="模块输出信号状态";left=178;top=162;right=305;bottom=193;z=11};
btnDID_170B={cls="button";text="系统供电电压";left=178;top=203;right=305;bottom=234;z=10};
btnDID_F187={cls="button";text="车辆备用零部件编号";left=36;top=40;right=163;bottom=71;z=2};
btnDID_F18A={cls="button";text="供应商公司名称代码";left=36;top=80;right=163;bottom=111;z=3};
btnDID_F197={cls="button";text="ECU 系统名称";left=36;top=121;right=163;bottom=152;z=4};
groupbox={cls="groupbox";text="DID";left=16;top=12;right=328;bottom=260;edge=1;z=1};
groupbox2={cls="groupbox";text="DTC";left=343;top=12;right=655;bottom=260;edge=1;z=12}
)
/*}}*/
winform.btnDID_F187.oncommand = function(id,event){
DiagReadDID(0xF187);
}
winform.btnDID_F18A.oncommand = function(id,event){
DiagReadDID(0xF18A);
}
winform.btnDID_F197.oncommand = function(id,event){
DiagReadDID(0xF197);
}
winform.btnDID_1701.oncommand = function(id,event){
DiagReadDID(0x1701);
}
winform.btnDID_1702.oncommand = function(id,event){
DiagReadDID(0x1702);
}
winform.btnDID_1706.oncommand = function(id,event){
DiagReadDID(0x1706);
}
winform.btnDID_1707.oncommand = function(id,event){
DiagReadDID(0x1707);
}
winform.btnDID_1708.oncommand = function(id,event){
DiagReadDID(0x1708);
}
winform.btnDID_1709.oncommand = function(id,event){
DiagReadDID(0x1709);
}
winform.btnDID_170B.oncommand = function(id,event){
DiagReadDID(0x170B);
}
winform.onClose = function(hwnd,message,wParam,lParam){
winform.show(false);
return 0;
}
winform.show();
win.loopMessage();
return winform;

View File

@ -55,6 +55,25 @@ namespace usb2canfd{
BYTE CAN_TXFP; //发送优先级管理0-标识符决定1-发送请求顺序决定 BYTE CAN_TXFP; //发送优先级管理0-标识符决定1-发送请求顺序决定
} }
class CAN_FILTER_CONFIG{
ctor( /*输入构造函数所需要的参数*/ ){
};
type=me;
/*对象的所有成员必须用分号分隔*/
BYTE Enable; //使能该过滤器1-使能0-禁止
BYTE FilterIndex; //过滤器索引号取值范围为0到13
BYTE FilterMode; //过滤器模式0-屏蔽位模式1-标识符列表模式
BYTE ExtFrame; //过滤的帧类型标志为1 代表要过滤的为扩展帧为0 代表要过滤的为标准帧。
INT ID_Std_Ext; //验收码ID
INT ID_IDE; //验收码IDE
INT ID_RTR; //验收码RTR
INT MASK_Std_Ext; //屏蔽码ID该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_IDE; //屏蔽码IDE该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_RTR; //屏蔽码RTR该项只有在过滤器模式为屏蔽位模式时有用
}
//CANfd信息帧的数据类型定义 //CANfd信息帧的数据类型定义
class CANFD_MSG{ class CANFD_MSG{
ctor( /*输入构造函数所需要的参数*/ ){ ctor( /*输入构造函数所需要的参数*/ ){
@ -137,7 +156,7 @@ namespace usb2canfd{
//加载DLL //加载DLL
LoadDll = function(){ LoadDll = function(){
try{ try{
DllHandle = ..raw.loadDll("USB2XXX.dll") DllHandle = ..raw.loadDll("\USB2XXX.dll")
} }
catch(err) catch(err)
{ {
@ -191,6 +210,30 @@ namespace usb2canfd{
return AvailableHW; return AvailableHW;
} }
SetFilter = function(index){
CANFilter = ..usb2canfd.CAN_FILTER_CONFIG();
CANFilter.FilterIndex = 0;
CANFilter.Enable = 1;
CANFilter.ExtFrame = 0; //需要过滤接收的帧为标准帧
CANFilter.FilterMode = 1;//标识符列表模式
CANFilter.ID_IDE = 0; //接收到的数据帧IDE必须为1也就是必须为扩展帧数据
CANFilter.ID_RTR = 0; //接收到的帧类型必须为数据帧
CANFilter.ID_Std_Ext = 0x620;//接收到的帧ID必须等于CANFilter.ID_Std_Ext设置的值
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
CANFilter.FilterIndex = 1;
CANFilter.ID_Std_Ext = 0x610;
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
for(i=2;13;1){
CANFilter.FilterIndex = i;
CANFilter.Enable = 0;
DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
}
}
//打开设备,包括初始化通道 //打开设备,包括初始化通道
OpenDevice = function(index,channel,canfd){ OpenDevice = function(index,channel,canfd){
if(index > HwNum) if(index > HwNum)
@ -227,7 +270,7 @@ namespace usb2canfd{
canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻 canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻
canconfig.CAN_ABOM = 0;//禁止自动离线 canconfig.CAN_ABOM = 0;//禁止自动离线
canconfig.CAN_NART = 1;//禁止报文重传 canconfig.CAN_NART = 0;//禁止报文重传
canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文 canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
canconfig.CAN_TXFP = 1;//发送请求决定发送顺序 canconfig.CAN_TXFP = 1;//发送请求决定发送顺序
//配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2)) //配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2))
@ -237,6 +280,7 @@ namespace usb2canfd{
canconfig.CAN_SJW = 2; canconfig.CAN_SJW = 2;
ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig); ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig);
//console.log("init ret = " + ret); //console.log("init ret = " + ret);
this.SetFilter(index);
} }
canfd_connected = canfd; canfd_connected = canfd;
@ -349,14 +393,22 @@ namespace usb2canfd{
else { else {
//CAN //CAN
do{ do{
var msgbuf = ..usb2canfd.CAN_MSG(); //raw.convertArray(raw.sizeof(..usb2canfd.CAN_MSG())
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1); var msgbuf = {};
for(i=1;10;1){
//msgbuf.push(new ..usb2canfd.CAN_MS())
var temp = ..usb2canfd.CAN_MSG()
..table.push(msgbuf,temp);
}
//var msgbuf = ..raw.toarray(10,"struct",..usb2canfd.CAN_MS);
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf[1],1);
if(ret == 1){ if(ret == 1){
var data = {}; var data = {};
for(i=1;msgbuf.DataLen;1){ for(i=1;msgbuf[1].DataLen;1){
data[i] = msgbuf.Data[i]; data[i] = msgbuf[1].Data[i];
} }
var msg = {"id"=msgbuf.ID;"data"=data;};// var msg = {"id"=msgbuf[1].ID;"data"=data;};//
..table.push(retdata,msg); ..table.push(retdata,msg);
} }
}while(ret > 0) }while(ret > 0)
@ -388,6 +440,19 @@ namespace usb2canfd{
return ret,2,res_data; return ret,2,res_data;
} }
SetPower = function(state){
var ret = DllHandle.LIN_EX_CtrlPowerOut(Hwconnected,state);
return ret;
}
GetPower = function(){
var buf = ..raw.buffer(10);
var ret = DllHandle.LIN_EX_GetVbatValue(Hwconnected,buf);
return ret,buf;
}
} }

View File

@ -86,6 +86,14 @@ mainForm.btnFresh.oncommand = function(id,event){
mainForm.btnConnect.oncommand = function(id,event){ mainForm.btnConnect.oncommand = function(id,event){
var canfd_check = 0x80;//mainForm.checkbox.checked?0x80:0x00; var canfd_check = 0x80;//mainForm.checkbox.checked?0x80:0x00;
var devstr = mainForm.cbbDev.selText;
var devhw = string.slice(devstr,9,9);
if(devhw == 4)
{
//Display(devhw);
canfd_check = 0x00;
}
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息 ::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息
/* /*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1 var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
@ -119,6 +127,7 @@ listener.$SetProgress = function(pos){
} }
listener.$Connected = function(){ listener.$Connected = function(){
thrdTable.设备连接状态 = 1;
mainForm.btnConnect.disabled = true; mainForm.btnConnect.disabled = true;
mainForm.btnFresh.disabled = true; mainForm.btnFresh.disabled = true;
mainForm.cbbDev.disabled = true; mainForm.cbbDev.disabled = true;
@ -133,12 +142,20 @@ listener.$SendEnd = function(isSuccess){
Display("刷写成功,用时 " + usetime + " S") Display("刷写成功,用时 " + usetime + " S")
} }
} }
import thread.table;
thrdTable = thread.table("多线程共享数据");
thrdTable.设备连接状态 = 0;
thrdTable.设备 = {};
thrdTable.test = "123"
thrdTable["文件加载状态"] = false;
thrdTable["电源电压"] = 0;
//线程函数 //线程函数
var CanThread = function(){ var CanThread = function(){
//线程函数内部要添加自已的import语句 //线程函数内部要添加自已的import语句
import win; import win;
import console; import console;
import thread.table;
thrdTable = thread.table("多线程共享数据");
//console.log("线程开始运行") //console.log("线程开始运行")
loadcodex("\user\CanThread.aardio");//加载线程程序 loadcodex("\user\CanThread.aardio");//加载线程程序
//在子线程启动消息循环 //在子线程启动消息循环

View File

@ -79,6 +79,21 @@ FuncLoopMsg = function(msg){
} }
} }
FuncReadDeviceVersion = function(id){
var ret,DeviceInfo,funcstr = CANHw.GetDevInfo(id);
if(ret != 0){
var v1 = (DeviceInfo.FirmwareVersion>>24)&0xff;
var v2 = (DeviceInfo.FirmwareVersion>>16)&0xff;
var v3 = DeviceInfo.FirmwareVersion&0xffff;
FuncDisplay("固件版本"++v1++"."++v2++"."++v3)
}
else {
FuncDisplay("读取失败");
}
}
FuncSetCANID = function(req,resp){ FuncSetCANID = function(req,resp){
DiagReqID = req; DiagReqID = req;
DiagRespID = resp; DiagRespID = resp;
@ -95,6 +110,19 @@ FuncSendMsg = function(no){
} }
} }
FuncPowerCtrl = function(state){
var ret = CANHw.SetPower(state);
return ret;
}
FuncGetPowerVal = function(){
var ret,buf = CANHw.GetPower();
var val = (buf[2]<<8) + buf[1];
//console.dumpJson(buf);
FuncDisplay("BAT电压"++val++"mV")
thrdTable["电源电压"] = val;
}
FuncFreshHw = function(){ FuncFreshHw = function(){
@ -104,6 +132,7 @@ FuncFreshHw = function(){
} }
else { else {
FuncDisplay("找到硬件") FuncDisplay("找到硬件")
thrdTable.设备 = CANHw.GetAvailableHW()
} }
} }
@ -196,19 +225,29 @@ FuncStartBoot = function(){
stopflag = 0; stopflag = 0;
} }
var delay = function(w){
while(w){
for(i=1;50000;1)
{
}
w -= 1;
}
}
var PackNext = 0x21; var PackNext = 0x21;
var Packdata = {}; var Packdata = {};
var PackID = 0; var PackID = 0;
var FuncSendPackage = function(){ var FuncSendPackage = function(){
while(#Packdata > 0) while(#Packdata > 0)
{ {
sleep(0.3); //sleep(1);
delay(2);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata; var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){ for(i=1;max;1){
data[i+1] = table.remove(Packdata); data[i+1] = table.remove(Packdata);
} }
sleep(1); //sleep(0.3);
CANHw.SendMsg(PackID,data); CANHw.SendMsg(PackID,data);
PackNext += 1; PackNext += 1;
@ -288,6 +327,6 @@ timer1.onTimer = function(){
} }
timer1.enable(); timer1.enable();
FuncDisplay("正在运行"); FuncDisplay("CAN线程正在运行");