diff --git a/default.aproj b/default.aproj
index 8dba383..e9fbd51 100644
--- a/default.aproj
+++ b/default.aproj
@@ -6,7 +6,6 @@
-
diff --git a/dlg/诊断子窗口.aardio b/dlg/诊断子窗口.aardio
deleted file mode 100644
index 54a0352..0000000
--- a/dlg/诊断子窗口.aardio
+++ /dev/null
@@ -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;
\ No newline at end of file
diff --git a/lib/usb2canfd.aardio b/lib/usb2canfd.aardio
index f5db3cf..ee0556c 100644
--- a/lib/usb2canfd.aardio
+++ b/lib/usb2canfd.aardio
@@ -55,6 +55,25 @@ namespace usb2canfd{
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信息帧的数据类型定义
class CANFD_MSG{
ctor( /*输入构造函数所需要的参数*/ ){
@@ -137,7 +156,7 @@ namespace usb2canfd{
//加载DLL
LoadDll = function(){
try{
- DllHandle = ..raw.loadDll("USB2XXX.dll")
+ DllHandle = ..raw.loadDll("\USB2XXX.dll")
}
catch(err)
{
@@ -191,6 +210,30 @@ namespace usb2canfd{
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){
if(index > HwNum)
@@ -227,7 +270,7 @@ namespace usb2canfd{
canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻
canconfig.CAN_ABOM = 0;//禁止自动离线
- canconfig.CAN_NART = 1;//禁止报文重传
+ canconfig.CAN_NART = 0;//禁止报文重传
canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
canconfig.CAN_TXFP = 1;//发送请求决定发送顺序
//配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2))
@@ -237,6 +280,7 @@ namespace usb2canfd{
canconfig.CAN_SJW = 2;
ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig);
//console.log("init ret = " + ret);
+ this.SetFilter(index);
}
canfd_connected = canfd;
@@ -349,14 +393,22 @@ namespace usb2canfd{
else {
//CAN
do{
- var msgbuf = ..usb2canfd.CAN_MSG();
- ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1);
+ //raw.convertArray(raw.sizeof(..usb2canfd.CAN_MSG())
+ 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){
var data = {};
- for(i=1;msgbuf.DataLen;1){
- data[i] = msgbuf.Data[i];
+ for(i=1;msgbuf[1].DataLen;1){
+ 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);
}
}while(ret > 0)
@@ -388,6 +440,19 @@ namespace usb2canfd{
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;
+ }
+
+
}
diff --git a/main.aardio b/main.aardio
index 3dd6f1c..5a7a74e 100644
--- a/main.aardio
+++ b/main.aardio
@@ -86,6 +86,14 @@ mainForm.btnFresh.oncommand = function(id,event){
mainForm.btnConnect.oncommand = function(id,event){
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)//自定义消息
/*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
@@ -119,6 +127,7 @@ listener.$SetProgress = function(pos){
}
listener.$Connected = function(){
+ thrdTable.设备连接状态 = 1;
mainForm.btnConnect.disabled = true;
mainForm.btnFresh.disabled = true;
mainForm.cbbDev.disabled = true;
@@ -133,12 +142,20 @@ listener.$SendEnd = function(isSuccess){
Display("刷写成功,用时 " + usetime + " S")
}
}
-
+import thread.table;
+thrdTable = thread.table("多线程共享数据");
+thrdTable.设备连接状态 = 0;
+thrdTable.设备 = {};
+thrdTable.test = "123"
+thrdTable["文件加载状态"] = false;
+thrdTable["电源电压"] = 0;
//线程函数
var CanThread = function(){
//线程函数内部要添加自已的import语句
import win;
import console;
+ import thread.table;
+ thrdTable = thread.table("多线程共享数据");
//console.log("线程开始运行")
loadcodex("\user\CanThread.aardio");//加载线程程序
//在子线程启动消息循环
diff --git a/user/CanThread.aardio b/user/CanThread.aardio
index 48642e0..ffad945 100644
--- a/user/CanThread.aardio
+++ b/user/CanThread.aardio
@@ -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){
DiagReqID = req;
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(){
@@ -104,6 +132,7 @@ FuncFreshHw = function(){
}
else {
FuncDisplay("找到硬件")
+ thrdTable.设备 = CANHw.GetAvailableHW()
}
}
@@ -196,19 +225,29 @@ FuncStartBoot = function(){
stopflag = 0;
}
+var delay = function(w){
+ while(w){
+ for(i=1;50000;1)
+ {
+ }
+ w -= 1;
+ }
+}
+
var PackNext = 0x21;
var Packdata = {};
var PackID = 0;
var FuncSendPackage = function(){
while(#Packdata > 0)
{
- sleep(0.3);
+ //sleep(1);
+ delay(2);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){
data[i+1] = table.remove(Packdata);
}
- sleep(1);
+ //sleep(0.3);
CANHw.SendMsg(PackID,data);
PackNext += 1;
@@ -288,6 +327,6 @@ timer1.onTimer = function(){
}
timer1.enable();
-FuncDisplay("正在运行");
+FuncDisplay("CAN线程正在运行");