zw_7627 发表于 2017-2-23 15:33:30

求助:VC上位机ITEK驱动转Kvaser can 驱动

已经把KVASER打开CAN和关闭CAN调通了。但发送VCI_Transmit(nDeviceType, nDeviceInd, nCANInd, &vco, i); 和接收VCI_Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1);
如何对应到canWrite(const inthnd,longid, void *msg, unsigned intdlc, unsigned intflag); 以及canRead (const int hnd, long * id, void * msg, unsigned int * dlc,unsigned int *flag,unsigned long *time);
实在没明白的。

q457344370 发表于 2017-2-23 15:33:31

hnd应该按handle来理解,kvaser的驱动是可以多个上位机非独占式同时操作一个通道的,估计是通过这个进行区分的,dlc是数据发送的长度,接收时用来指示收到的数据长度,为防止越界数组长度应不小于dlc,flag具体功能忘记了,之前我做上位机的时候把kvaser的驱动又封装了一层,只保留了初始化,获取通道数量和名称,开,关,设置波特率,读写,读写事件这几个接口,想换其他CAN设备就把这个中间层的dll换掉就OK了

daat 发表于 2017-2-23 15:37:03

楼主用kvaser做什么

zw_7627 发表于 2017-2-23 15:44:55

daat 发表于 2017-2-23 15:37
楼主用kvaser做什么

CAN通讯,单片机与PC机数据,CAN报文。

zw_7627 发表于 2017-2-23 21:34:24

感觉发错版块了,{:sad:}

q457344370 发表于 2017-2-23 22:21:27

你可以看下kvaser的SDK,里边有详细的接口文档和应用damo,canWrite里传的第一个参数hnd是open时的返回值,flag直接传0就行,read也类似,time是返回的接收到这一帧的时间

zw_7627 发表于 2017-2-23 22:57:58

q457344370 发表于 2017-2-23 22:21
你可以看下kvaser的SDK,里边有详细的接口文档和应用damo,canWrite里传的第一个参数hnd是open时的返回值, ...

谢谢回复。
我看ITEK的文档比较明白,可能是中文写的缘故吧{:smile:}
比如:VCI_Transmit(Devtype,DevIndex,Cannum,&frameinfo,1);文档讲的比较清楚,各个形参代办的意思也比较明朗。
如:DevType:设备类型号;
DevIndex:设备索引号;
CANIndex:第几路CAN;
pSend:要发送的数据帧数组的首指针;
Len:要发送的数据帧数组的长度。

而SDK里写的就不是那么明白了。canWrite(const inthnd,longid, void *msg, unsigned intdlc, unsigned intflag);
1、hnd A handle to an open CAN circuit. 加上你刚描述的是open的一个返回值,我理解应该是can的通道值;
2、id The identifier of the CAN message to send ;这个ID,是发送CAN的ID值,这个也可以理解;
3、msg A pointer to the message data ,是要发送数据帧的数组首指针,与ITEK的类似;
4、dlc The length of the message in bytes.For Classic CAN dlc can be at most 8, unless canOPEN_ACCEPT_LARGE_DLC is used.For CAN FD dlc can be one of the following 0-8, 12, 16, 20, 24, 32, 48, 64.
这个值是数据帧长度,还是数组长度,没明白。
5、flag A combination of message flags ,这个应该是区别是标准帧还是扩展帧。

q457344370 发表于 2017-2-24 05:41:46

而且kvaser的驱动是支持同时使用多个外设通道的,大多接口都需要传入选择的handle,它可以通过getchannel获取通道的index,然后open这个index来获取handle

zw_7627 发表于 2017-2-24 16:17:12

q457344370 发表于 2017-2-24 05:41
而且kvaser的驱动是支持同时使用多个外设通道的,大多接口都需要传入选择的handle,它可以通过getchannel获 ...

谢谢回复。
现在编译是通过了,但没有数据到PC机。
我修改了VCI_Transmit(Devtype,DevIndex,Cannum,&frameinfo,1);为canWrite(h,My_ID, &frameinfo,8,0);
VCI_Receive(Devtype,DevIndex,Cannum,frameinfo,100,200);改为canRead(h, &My_ID, frameinfo, &dlc, &flags, &time);

unsigned int dlc = 100;
unsigned int flags = 0;
unsigned long time = 200;
My_ID = 0x180099AA;
可能是ID号没填对。。。

wh9602 发表于 2017-2-24 18:22:43

共享一下文档嘛!

zw_7627 发表于 2017-2-24 22:23:47

wh9602 发表于 2017-2-24 18:22
共享一下文档嘛!

需要ITEK的文档,还是Kvaser的文档?Kvaser的是官网下载的SDK,ITEK的文档就是莫坛上的。链接:http://www.amobbs.com/thread-5536013-1-1.html
页: [1]
查看完整版本: 求助:VC上位机ITEK驱动转Kvaser can 驱动