倩——使⽤周⽴功CAN接⼝卡的注意点
记住我
根据多年的技术⽀持经验,客户反映的⼀些使⽤CAN接⼝卡使⽤问题主要有:
1.“收数据时,开始不丢帧,过了5-6分钟开始丢帧”:这个现象主要是客户程序效率低,从CAN缓冲区中取数太慢导致。CAN接⼝卡的缓冲达到10万帧,可以保证⼤流量时(5000帧/秒)不丢帧,但是⽤户程序若取得不及时,多⼤的缓冲都会被占满了。这种现象⼀般出现在使⽤VB 编程的客户,由于显⽰占⽤⼤量时间,故取CAN帧就不那么快了。——解决⽅案:加⼤显⽰刷新时间,并且增加接收函数
VCI_Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1);中Len,就是每次最多取的帧数。使每⼀次可以取的帧数⾜够⼤,避免缓冲区堆积,⼀般Len设为1000即可。
2.“有时候收数据,丢了⼀半,⽽且是间隔着丢,⽐如第⼀帧能收到,第⼆帧就收不到,第三帧⼜能收到......”:这个现象是客户使⽤⽼的驱动库,并且打开了两次设备,即调⽤了两次VCI_OpenDevice(DWORD DevType, DWORD DevIndex, DWORD Reserved);函数。导致系统产⽣2个CAN取数线程,即当CAN帧传到电脑后,遇到2个取数线程,那么只好公平分配了,所以造成隔着收帧。——解决⽅案:使⽤新的驱动库,当没有关闭设备前,不能再打开设备。或者在软件的关闭中加⼊VCI_CloseDevice(DWORD DevType, DWORD DevIndex);的函数,关闭这个CAN卡的接收线程。
3.“⾃发⾃收能成功,但是正常发送就失败了”:这是可能⽤户的⽹络上就⼀个CAN接⼝卡,没有其他的设备,⽽CAN协议规定,在发送后,需要有正确的应答(帧尾两个位时间中,有⼀个显性电平)才能算这帧发送成功了,⽽⽹络上只有1个节点的话,就不可能有应答,所以只能发送失败。⽽⾃发⾃收,就是⾃⾝进⾏应答,保证发送成功。另⼀种可能,若⽹络上有2个以上的节点,正常发送不成功,就可能是(1)波特率不匹配(我的就是这个原因,可是你也得告诉我在哪⾥是设置波特率吧);(2)位定时不匹配(多数是采样点不匹配,正确的应该是在75~85%);(3)下位机节点初始化错误。
4.“⾃发⾃收都不成功了”:这个有⼏种可能,(1)500K波特率以上必须接上120欧的终端电阻,否则不能通讯;(2)CAN收发器、或光耦、或DC-DC损坏了,由于雷击或强电造成损坏;(3)总线短路。
5.“USBCAN的USB线插上后红灯亮,⽆法打开设备”:这说明没安装驱动,可以光盘安装⼀下。
6.“驱动安装不上”:可以使⽤安装包安装,安装包可以向各地技术⽀持询问。
7.“USBCAN插着电脑不⼯作,放了⼏个⼩时,指⽰灯就全灭了,再打开设备就打不开了”:这个原因估计是USB接⼝进⼊挂起状态了,建议长时间固定使⽤时,⽤PCI接⼝的CAN接⼝卡。毕竟USBCAN是便携的设备。
8.“插了USBCAN的USB线,指⽰灯不亮”:⾸先估计是USB线坏了,其次才要怀疑卡的电源坏了。