#include "stdafx.h" #include "ZLG.h" CZLG::CZLG() { m_dwDevType = 20; //设备类型USBCAN2 init_config.Filter = 1; //单滤波 init_config.Mode = 0; //正常模式 init_config.Reserved = 0; } CZLG::~CZLG() { // FreeLibrary(hDLL); } BOOL CZLG::LoadDLL() { if (m_wrapper.Init("C:\\DFOC\\Library\\Hardware\\ControlCAN.dll"))//尝试一下 完整路径。看看效果如何。 return TRUE; else return FALSE; } BOOL CZLG::OpenDevice(DWORD devInd) { if (m_wrapper.VCI_OpenDevice(m_dwDevType, devInd, 0) != STATUS_OK) return FALSE; return TRUE; } void CZLG::CloseDevice(DWORD devInd) { m_wrapper.VCI_CloseDevice(m_dwDevType, devInd); } BOOL CZLG::InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig) { //note DWORD regALCapture = 0x160023;//100kps m_wrapper.VCI_SetReference(m_dwDevType, devInd, CANInd, 0, ®ALCapture); init_config.AccCode = pInitConfig->AccCode; init_config.AccMask = pInitConfig->AccMask; init_config.Timing0 = pInitConfig->Timing0; init_config.Timing1 = pInitConfig->Timing1; if (m_wrapper.VCI_InitCAN(m_dwDevType, devInd, CANInd, &init_config) != STATUS_OK) return FALSE; return TRUE; } BOOL CZLG::StartCAN(DWORD devInd, DWORD CANInd) { if (m_wrapper.VCI_StartCAN(m_dwDevType, devInd, CANInd) != STATUS_OK) return FALSE; return TRUE; } BOOL CZLG::ResetCAN(DWORD devInd, DWORD CANInd) { if (m_wrapper.VCI_ResetCAN(m_dwDevType, devInd, CANInd) != STATUS_OK) return FALSE; return TRUE; } BOOL CZLG::ClearBuffer(DWORD devInd, DWORD CANInd) { if (m_wrapper.VCI_ClearBuffer(m_dwDevType, devInd, CANInd) != STATUS_OK) return FALSE; return TRUE; } void CZLG::ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo) { m_wrapper.VCI_ReadErrInfo(m_dwDevType, devInd, CANInd, pErrInfo); return; } BOOL CZLG::ReadCANStatus(DWORD devInd, DWORD CANInd,PVCI_CAN_STATUS pCANStatus) { if (m_wrapper.VCI_ReadCANStatus(m_dwDevType, devInd, CANInd, pCANStatus) != STATUS_OK) return FALSE; return TRUE; } ULONG CZLG::GetReceiveNum(DWORD devInd, DWORD CANInd) { ULONG len = m_wrapper.VCI_GetReceiveNum(m_dwDevType, devInd, CANInd); return len; } ULONG CZLG::Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len) { ULONG len; VCI_CAN_OBJ_ZLG frameinfo; frameinfo.ID = pSend->ID; frameinfo.DataLen = pSend->DataLen; frameinfo.ExternFlag = pSend->ExternFlag; frameinfo.RemoteFlag = pSend->RemoteFlag; frameinfo.SendType = 0; frameinfo.TimeFlag = pSend->TimeFlag; frameinfo.TimeStamp = pSend->TimeStamp; memcpy(frameinfo.Data, pSend->Data, 8); memcpy(frameinfo.Reserved, pSend->Reserved, 3); len = m_wrapper.VCI_Transmit(m_dwDevType, devInd, CANInd, &frameinfo, Len); return len; } ULONG CZLG::Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive,ULONG Len, INT WaitTime/* =-1 */) { ULONG len; VCI_CAN_OBJ_ZLG frameinfo[10]; len = m_wrapper.VCI_Receive(m_dwDevType, devInd, CANInd, frameinfo, Len, WaitTime); if (len > 0) { for (int i=0;i