You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
8.5 KiB
188 lines
8.5 KiB
|
|
|
|
Option Strict Off
|
|
Option Explicit On
|
|
|
|
Imports System.Runtime.InteropServices
|
|
|
|
Module ControlCAN
|
|
'设备类型说明:
|
|
Public Const VCI_USBCAN As Int32 = 3
|
|
Public Const VCI_USBCAN2 As Int32 = 4
|
|
|
|
'------------------兼容ZLG的函数及数据类型-----------------------
|
|
'定义需要用到的数据结构
|
|
'USB-CAN总线适配器板卡信息的数据类型。
|
|
Public Structure VCI_BOARD_INFO
|
|
Dim hw_Version As Short
|
|
Dim fw_Version As Short
|
|
Dim dr_Version As Short
|
|
Dim in_Version As Short
|
|
Dim irq_num As Short
|
|
Dim can_num As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=20)> Dim str_Serial_Num() As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=40)> Dim str_hw_Type() As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim Reserved() As Short
|
|
|
|
End Structure
|
|
|
|
'定义CAN信息帧的数据类型。
|
|
Public Structure VCI_CAN_OBJ
|
|
Dim ID As Integer
|
|
Dim TimeStamp As Integer
|
|
Dim TimeFlag As Byte
|
|
Dim SendType As Byte
|
|
Dim RemoteFlag As Byte
|
|
Dim ExternFlag As Byte
|
|
Dim DataLen As Byte
|
|
|
|
Dim data0 As Byte
|
|
Dim data1 As Byte
|
|
Dim data2 As Byte
|
|
Dim data3 As Byte
|
|
Dim data4 As Byte
|
|
Dim data5 As Byte
|
|
Dim data6 As Byte
|
|
Dim data7 As Byte
|
|
|
|
Dim Reserved0 As Byte
|
|
Dim Reserved1 As Byte
|
|
Dim Reserved2 As Byte
|
|
|
|
End Structure
|
|
|
|
'定义CAN控制器状态的数据类型。
|
|
Public Structure VCI_CAN_STATUS
|
|
Dim ErrInterrupt As Byte
|
|
Dim regMode As Byte
|
|
Dim regStatus As Byte
|
|
Dim regALCapture As Byte
|
|
Dim regECCapture As Byte
|
|
Dim regEWLimit As Byte
|
|
Dim regRECounter As Byte
|
|
Dim regTECounter As Byte
|
|
Dim Reserved As Integer
|
|
End Structure
|
|
|
|
'定义错误信息的数据类型。
|
|
Public Structure VCI_ERR_INFO
|
|
Dim ErrCode As Integer
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Dim Passive_ErrData() As Byte
|
|
Dim ArLost_ErrData As Byte
|
|
|
|
End Structure
|
|
|
|
'定义初始化CAN的数据类型
|
|
Public Structure VCI_INIT_CONFIG
|
|
Dim AccCode As Integer
|
|
Dim AccMask As Integer
|
|
Dim Reserved As Integer
|
|
Dim Filter_Renamed As Byte '0,1接收所有帧。2标准帧滤波,3是扩展帧滤波。
|
|
Dim Timing0 As Byte
|
|
Dim Timing1 As Byte
|
|
Dim Mode As Byte '模式,0表示正常模式,1表示只听模式,2自测模式
|
|
End Structure
|
|
|
|
'函数声明
|
|
'-----------------------------兼容ZLG的函数---------------------------------
|
|
'返回值说明:=1操作成功,=0操作失败,=-1硬件错误(如设备未打开)
|
|
|
|
'打开设备,入口参数DeviceType表示设备类型号;DeviceInd表示设备索引号(具体见接口函数库使用手册);当设备为CAN232时Reserved表示打开串口的波特率,当为其他设备时参数无意义
|
|
Declare Function VCI_OpenDevice Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal Reserved As Integer) As Integer
|
|
'关闭设备
|
|
Declare Function VCI_CloseDevice Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer) As Integer
|
|
'初始化指定的CAN
|
|
Declare Function VCI_InitCAN Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByRef InitConfig As VCI_INIT_CONFIG) As Integer
|
|
'获取设备信息
|
|
Declare Function VCI_ReadBoardInfo Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByRef info As VCI_BOARD_INFO) As Integer
|
|
'获取最后一次错误信息
|
|
Declare Function VCI_ReadErrInfo Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByRef ErrInfo As VCI_ERR_INFO) As Integer
|
|
'获取CAN状态
|
|
Declare Function VCI_ReadCANStatus Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByRef CANStatus As VCI_CAN_STATUS) As Integer
|
|
'获取设备的相应参数
|
|
Declare Function VCI_GetReference Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByVal RefType As Integer, ByRef data As Long) As Integer
|
|
'设置设备的相应参数,主要处理不同设备的特定操作
|
|
Declare Function VCI_SetReference Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByVal RefType As Integer, ByRef data As Long) As Integer
|
|
'获取指定接收缓冲区中接收到但尚未被读取得帧数
|
|
Declare Function VCI_GetReceiveNum Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer) As Integer
|
|
'清空指定缓冲区
|
|
Declare Function VCI_ClearBuffer Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer) As Integer
|
|
'启动CAN
|
|
Declare Function VCI_StartCAN Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer) As Integer
|
|
'复位CAN
|
|
Declare Function VCI_ResetCAN Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer) As Integer
|
|
'向指定的的设备发送数据
|
|
Declare Function VCI_Transmit Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByRef Sendbuf As VCI_CAN_OBJ, ByVal length As Integer) As Integer
|
|
'从指定的设备读取数据
|
|
Declare Function VCI_Receive Lib "ControlCAN.dll" (ByVal DeviceType As Integer, ByVal DeviceInd As Integer, ByVal CANInd As Integer, ByRef Receive As VCI_CAN_OBJ, ByVal length As Integer, ByVal WaitTime As Integer) As Integer
|
|
|
|
|
|
'-------------------------------其他函数及数据结构描述---------------------------------
|
|
'USB-CAN总线适配器板卡信息的数据类型1,该数据结构在VCI_FindUsbDevice中引用
|
|
|
|
Public Structure VCI_BOARD_INFO1
|
|
Dim hw_Version As Short
|
|
Dim fw_Version As Short
|
|
Dim dr_Version As Short
|
|
Dim in_Version As Short
|
|
Dim irq_num As Short
|
|
Dim can_num As Byte
|
|
Dim reserved As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Dim str_Serial_Num() As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Dim str_hw_Type() As Byte
|
|
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Dim str_Usb_Serial() As Byte
|
|
|
|
End Structure
|
|
|
|
'定义常规参数类型
|
|
Public Structure VCI_REF_NORMAL
|
|
Dim Mode As Byte '工作模式
|
|
Dim Filter_Renamed As Byte '滤波方式
|
|
Dim AccCode As Integer '接收滤波验收码
|
|
Dim AccMask As Integer '接收滤波屏蔽码
|
|
Dim kBaudRate As Byte '波特率索引号,0-SelfDefine,1-5Kbps(未用),2-18依次为:10kbps,20kbps,40kbps,50kbps,80kbps,100kbps,125kbps,200kbps,250kbps,400kbps,500kbps,666kbps,800kbps,1000kbps,33.33kbps,66.66kbps,83.33kbps
|
|
Dim Timing0 As Byte
|
|
Dim Timing1 As Byte
|
|
Dim CANRX_EN As Byte '保留,未用
|
|
Dim UARTBAUD As Byte '保留,未用
|
|
End Structure
|
|
|
|
'定义波特率设置参数类型
|
|
Public Structure VCI_BAUD_TYPE
|
|
Dim Baud As Integer '存储波特率实际值
|
|
Dim SJW As Byte '同步跳转宽度,取值1-4
|
|
Dim BRP As Byte '预分频值,取值1-64
|
|
Dim SAM As Byte '采样点,取值0=采样一次,1=采样三次
|
|
Dim PHSEG2_SEL As Byte '相位缓冲段2选择位,取值0=由相位缓冲段1时间决定,1=可编程
|
|
Dim PRSEG As Byte '传播时间段,取值1-8
|
|
Dim PHSEG1 As Byte '相位缓冲段1,取值1-8
|
|
Dim PHSEG2 As Byte '相位缓冲段2,取值1-8
|
|
End Structure
|
|
|
|
'定义Reference参数类型
|
|
Public Structure VCI_REF_STRUCT
|
|
Dim RefNormal As VCI_REF_NORMAL
|
|
Dim reserved As Byte
|
|
Dim BaudType As VCI_BAUD_TYPE
|
|
End Structure
|
|
|
|
Declare Function VCI_GetReference2 Lib "ControlCAN.dll" (ByVal DevType As Integer, ByVal DevIndex As Integer, ByVal CANIndex As Integer, ByVal reserved As Integer, ByRef pRefStruct As VCI_REF_STRUCT) As Integer
|
|
Declare Function VCI_SetReference2 Lib "ControlCAN.dll" (ByVal DevType As Integer, ByVal DevIndex As Integer, ByVal CANIndex As Integer, ByVal RefType As Integer, ByRef data As Byte) As Integer
|
|
Declare Function VCI_ResumeConfig Lib "ControlCAN.dll" (ByVal DevType As Integer, ByVal DevIndex As Integer) As Integer
|
|
|
|
Declare Function VCI_ConnectDevice Lib "ControlCAN.dll" (ByVal DevType As Integer, ByVal DevIndex As Integer) As Integer
|
|
Declare Function VCI_UsbDeviceReset Lib "ControlCAN.dll" (ByVal DevType As Integer, ByVal DevIndex As Integer, ByVal reserved As Integer) As Integer
|
|
Declare Function VCI_FindUsbDevice Lib "ControlCAN.dll" (ByRef pInfo As VCI_BOARD_INFO1) As Integer
|
|
|
|
|
|
|
|
Public Sub bytecpy(ByRef desarr() As Byte, ByVal desoff As Long, ByVal srcarr() As Byte, ByVal srcoff As Long, ByVal len As Long)
|
|
Dim i As Long
|
|
|
|
For i = 0 To len - 1
|
|
desarr(desoff + i) = srcarr(i + srcoff)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
End Module
|