diff --git a/lib/usb2canfd.aardio b/lib/usb2canfd.aardio index 10f37f5..dadd603 100644 --- a/lib/usb2canfd.aardio +++ b/lib/usb2canfd.aardio @@ -36,7 +36,26 @@ namespace usb2canfd{ BYTE __Res0[8]; } - //CAN信息帧的数据类型定义 + //初始化CAN的数据类型定义 + class CAN_INIT_CONFIG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + //CAN波特率 = 100MHz/(CAN_BRP)/(CAN_SJW+CAN_BS1+CAN_BS2) + INT CAN_BRP; //取值范围1~1024 + BYTE CAN_SJW; //取值范围1~4 + BYTE CAN_BS1; //取值范围1~16 + BYTE CAN_BS2; //取值范围1~8 + BYTE CAN_Mode; //CAN工作模式,0-正常模式,1-环回模式,2-静默模式,3-静默环回模式,bit7为1则接入适配器内部终端电阻,否则不接入 + BYTE CAN_ABOM; //自动离线管理,0-禁止,1-使能 + BYTE CAN_NART; //报文重发管理,0-使能报文重传,1-禁止报文重传 + BYTE CAN_RFLM; //FIFO锁定管理,0-新报文覆盖旧报文,1-丢弃新报文 + BYTE CAN_TXFP; //发送优先级管理,0-标识符决定,1-发送请求顺序决定 + } + + //CANfd信息帧的数据类型定义 class CANFD_MSG{ ctor( /*输入构造函数所需要的参数*/ ){ @@ -52,6 +71,22 @@ namespace usb2canfd{ BYTE Data[64]; //报文的数据。 } + //CAN信息帧的数据类型定义 + class CAN_MSG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + INT ID; //报文ID。 + INT TimeStamp; //接收到信息帧时的时间标识,从CAN 控制器初始化开始计时。 + BYTE RemoteFlag; //是否是远程帧 + BYTE ExternFlag; //是否是扩展帧 + BYTE DataLen; //数据长度(<=8),即Data 的长度。 + BYTE Data[8]; //报文的数据。 + BYTE __Res; + } + class CAN_UDS_ADDR{ ctor( /*输入构造函数所需要的参数*/ ){ @@ -157,33 +192,51 @@ namespace usb2canfd{ } //打开设备,包括初始化通道 - OpenDevice = function(index,channel){ + OpenDevice = function(index,channel,canfd = true){ if(index > HwNum) { //如果序号大于最大硬件数 return 0; } var ret = DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW) + if(canfd == true){ + canconfig = ..usb2canfd.CANFD_INIT_CONFIG(); - canconfig = ..usb2canfd.CANFD_INIT_CONFIG(); - - canconfig.Mode = 0; //0-正常模式,1-自发自收模式 - canconfig.ISOCRCEnable = 0;//0-禁止ISO CRC,1-使能ISO CRC - canconfig.RetrySend = 0;//0-禁止重发,1-无限制重发 - canconfig.ResEnable = 1;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻 - //波特率参数可以用TCANLINPro软件里面的波特率计算工具计算 - //仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2) - canconfig.NBT_BRP = 1; //参数来自官方上位机,默认500K - canconfig.NBT_SEG1 = 59; - canconfig.NBT_SEG2 = 20; - canconfig.NBT_SJW = 2; - //数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2) - canconfig.DBT_BRP = 2; //参数来自官方上位机,默认500K - canconfig.DBT_SEG1 = 29; - canconfig.DBT_SEG2 = 10; - canconfig.DBT_SJW = 2; - - ret = DllHandle.CANFD_Init(AvailableHW[index].hLINHW,channel,canconfig); + canconfig.Mode = 0; //0-正常模式,1-自发自收模式 + canconfig.ISOCRCEnable = 0;//0-禁止ISO CRC,1-使能ISO CRC + canconfig.RetrySend = 0;//0-禁止重发,1-无限制重发 + canconfig.ResEnable = 1;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻 + //波特率参数可以用TCANLINPro软件里面的波特率计算工具计算 + //仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2) + canconfig.NBT_BRP = 1; //参数来自官方上位机,默认500K + canconfig.NBT_SEG1 = 59; + canconfig.NBT_SEG2 = 20; + canconfig.NBT_SJW = 2; + //数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2) + canconfig.DBT_BRP = 2; //参数来自官方上位机,默认500K + canconfig.DBT_SEG1 = 29; + canconfig.DBT_SEG2 = 10; + canconfig.DBT_SJW = 2; + + ret = DllHandle.CANFD_Init(AvailableHW[index].hLINHW,channel,canconfig); + } + else { + canconfig = ..usb2canfd.CAN_INIT_CONFIG(); + + canconfig.CAN_Mode = 0;//0-正常模式 1-环回模式 + + canconfig.CAN_ABOM = 0;//禁止自动离线 + canconfig.CAN_NART = 1;//禁止报文重传 + canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文 + canconfig.CAN_TXFP = 1;//发送请求决定发送顺序 + //配置波特率,波特率 = 100M/(BRP*(SJW+BS1+BS2)) + canconfig.CAN_BRP = 25; + canconfig.CAN_BS1 = 2; + canconfig.CAN_BS2 = 1; + canconfig.CAN_SJW = 1; + ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig); + } + canfd_connected = if(ret == 0){//调用成功 Hwconnected = AvailableHW[index].hLINHW; Chconntected = channel; @@ -227,20 +280,26 @@ namespace usb2canfd{ if(#data == 0 || #data>8){//长度不对 return 0; } - var msg = ..usb2canfd.CANFD_MSG(); - msg.Flags = 0; - if(id <= 0x7ff){ - msg.ID = id; //| (1<<31);//扩展帧 + if(canfd_connect == true){ + var msg = ..usb2canfd.CANFD_MSG(); + msg.Flags = 0; + if(id <= 0x7ff){ + msg.ID = id; //| (1<<31);//扩展帧 + } + else { + msg.ID = id | (1<<31);//扩展帧 + } + + + msg.DLC = #data; + msg.Data = data; + var ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1); } else { - msg.ID = id | (1<<31);//扩展帧 + var msg = ..usb2canfd.CAN_MSG(); } - msg.DLC = #data; - msg.Data = data; - var ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1); - return ret; } diff --git a/main.aardio b/main.aardio index 31c6b41..2343b51 100644 --- a/main.aardio +++ b/main.aardio @@ -14,6 +14,7 @@ btnReadSw={cls="button";text="读取软件版本号";left=33;top=260;right=132;b btnTest={cls="button";text="停止";left=148;top=229;right=247;bottom=257;z=11}; cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3}; cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1}; +checkbox={cls="checkbox";text="Checkbox";left=151;top=101;right=248;bottom=120;z=21}; edFile={cls="richedit";left=8;top=131;right=288;bottom=187;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14}; edit={cls="edit";left=296;top=8;right=598;bottom=383;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5}; progress={cls="progress";left=16;top=349;right=279;bottom=377;edge=1;max=100;min=0;z=15};