增加USBCAN
This commit is contained in:
parent
534bebb6b7
commit
a50d01ce7c
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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};
|
||||
|
Loading…
x
Reference in New Issue
Block a user