-
2. OpenDriver, GetDriverConfigC#/XL_Driver 2020. 2. 5. 15:46
vxlapi_NET DLL을 참조하여 사용하게 된다
1. 클래스 구조
- public class XLDriver
- XL Driver API의 기능들이 구현되어있는 클래스
- public class XLDefine
- const 상수와 enum 구조로 이루어진 클래스
- enum XL_Status 가 구현되어 XLDriver 클래스에서 대부분의 메소드의 반환형으로 사용된다
Vector 사에서 제공하는 예제 코드를 살펴보겠습니다.
편의상 매 코드마다 단계별로 변수와 함수들을 추가해가며 예제를 보여드리겠습니다.
2. 샘플 코드_준비
using System; using System.Threading; using Microsoft.Win32.SafeHandles; using vxlapi_NET; namespace XLpractice { class Class1 { private static XLDriver CANDemo = new XLDriver(); [STAThread] static int Main(string[] args) { XLDefine.XL_Status status; Console.WriteLine("-------------------------------------------------------------------"); Console.WriteLine(" xlCANdemo.NET C# V11.0 "); Console.WriteLine("Copyright (c) 2019 by Vector Informatik GmbH. All rights reserved."); Console.WriteLine("-------------------------------------------------------------------\n"); // print .NET wrapper version Console.WriteLine("vxlapi_NET : " + typeof(XLDriver).Assembly.GetName().Version); // Open XL Driver status = CANDemo.XL_OpenDriver(); Console.WriteLine("Open Driver : " + status); if (status != XLDefine.XL_Status.XL_SUCCESS) PrintFunctionError(); return 0; } private static int PrintFunctionError() { Console.WriteLine("\nERROR: Function call failed!\nPress any key to continue..."); Console.ReadKey(); return -1; } } }
C# 프로젝트의 참조 항목에서 XL_Driver의 vxlapi_NET.Dll을 참조하게 되면 위 클래스들을 사용할 준비가 됩니다.
XL 드라이버를 사용하기 위해서는 XLDriver 클래스의 XL_OpenDriver() 함수를 호출하는 것에서부터 시작합니다.
이 과정을 진행하지 않으면 다른 API들을 불러올 수 없습니다.
이때, XL_OpenDriver() 함수의 반환 값이 enum 자료형인 XL_Status를 반환하게 되며
드라이버 로드의 성공, 실패 여부를 알 수 있게 됩니다
맨 아래의 int Printint PrintFunctionError() 함수는 Vector 사에서 제공한 예제 코드에서 가져온 메소드 입니다.
XL_Status 메소드를 살펴보자면 아래와 같습니다.
public enum XL_Status : short { XL_SUCCESS = 0, XL_PENDING = 1, XL_ERR_QUEUE_IS_EMPTY = 10, XL_ERR_QUEUE_IS_FULL = 11, XL_ERR_TX_NOT_POSSIBLE = 12, XL_ERR_NO_LICENSE = 14, XL_ERR_WRONG_PARAMETER = 101, XL_ERR_TWICE_REGISTER = 110, XL_ERR_INVALID_CHAN_INDEX = 111, XL_ERR_INVALID_ACCESS = 112, XL_ERR_PORT_IS_OFFLINE = 113, XL_ERR_CHAN_IS_ONLINE = 116, XL_ERR_NOT_IMPLEMENTED = 117, XL_ERR_INVALID_PORT = 118, XL_ERR_HW_NOT_READY = 120, XL_ERR_CMD_TIMEOUT = 121, XL_ERR_CMD_HANDLING = 122, XL_ERR_HW_NOT_PRESENT = 129, XL_ERR_NOTIFY_ALREADY_ACTIVE = 131, XL_ERR_INVALID_TAG = 132, XL_ERR_INVALID_RESERVED_FLD = 133, XL_ERR_INVALID_SIZE = 134, XL_ERR_INSUFFICIENT_BUFFER = 135, XL_ERR_ERROR_CRC = 136, XL_ERR_BAD_EXE_FORMAT = 137, XL_ERR_NO_SYSTEM_RESOURCES = 138, XL_ERR_NOT_FOUND = 139, XL_ERR_INVALID_ADDRESS = 140, XL_ERR_REQ_NOT_ACCEP = 141, XL_ERR_INVALID_LEVEL = 142, XL_ERR_NO_DATA_DETECTED = 143, XL_ERR_INTERNAL_ERROR = 144, XL_ERR_UNEXP_NET_ERR = 145, XL_ERR_INVALID_USER_BUFFER = 146, XL_ERR_INVALID_PORT_ACCESS_TYPE = 147, XL_ERR_NO_RESOURCES = 152, XL_ERR_WRONG_CHIP_TYPE = 153, XL_ERR_WRONG_COMMAND = 154, XL_ERR_INVALID_HANDLE = 155, XL_ERR_RESERVED_NOT_ZERO = 157, XL_ERR_INIT_ACCESS_MISSING = 158, XL_ERR_WRONG_VERSION = 160, XL_ERR_CANNOT_OPEN_DRIVER = 201, XL_ERR_WRONG_BUS_TYPE = 202, XL_ERR_DLL_NOT_FOUND = 203, XL_ERR_INVALID_CHANNEL_MASK = 204, XL_ERR_NOT_SUPPORTED = 205, XL_ERR_CONNECTION_BROKEN = 210, XL_ERR_CONNECTION_CLOSED = 211, XL_ERR_INVALID_STREAM_NAME = 212, XL_ERR_CONNECTION_FAILED = 213, XL_ERR_STREAM_NOT_FOUND = 214, XL_ERR_STREAM_NOT_CONNECTED = 215, XL_ERR_QUEUE_OVERRUN = 216, XL_ERROR = 255, XL_ERR_PDU_OUT_OF_MEMORY = 260, XL_ERR_FR_CLUSTERCONFIG_MISSING = 261, XL_ERR_PDU_OFFSET_REPET_INVALID = 262, XL_ERR_PDU_PAYLOAD_SIZE_INVALID = 263, XL_ERR_FR_NBR_FRAMES_OVERFLOW = 265, XL_ERR_FR_SLOT_ID_INVALID = 267, XL_ERR_FR_SLOT_ALREADY_OCCUPIED_BY_ERAY = 268, XL_ERR_FR_SLOT_ALREADY_OCCUPIED_BY_COLDC = 269, XL_ERR_FR_SLOT_OCCUPIED_BY_OTHER_APP = 270, XL_ERR_FR_SLOT_IN_WRONG_SEGMENT = 271, XL_ERR_FR_FRAME_CYCLE_MULTIPLEX_ERROR = 272, XL_ERR_PDU_NO_UNMAP_OF_SYNCFRAME = 278, XL_ERR_SYNC_FRAME_MODE = 291, XL_ERR_INVALID_DLC = 513, XL_ERR_INVALID_CANID = 514, XL_ERR_INVALID_FDFLAG_MODE20 = 515, XL_ERR_EDL_RTR = 516, XL_ERR_EDL_NOT_SET = 517, XL_ERR_UNKNOWN_FLAG = 518, XL_ERR_ETH_PHY_ACTIVATION_FAILED = 4352, XL_ERR_ETH_PHY_CONFIG_ABORTED = 4355, XL_ERR_ETH_RESET_FAILED = 4356, XL_ERR_ETH_SET_CONFIG_DELAYED = 4357, XL_ERR_ETH_UNSUPPORTED_FEATURE = 4358, XL_ERR_ETH_MAC_ACTIVATION_FAILED = 4359 }
3. 코드 실행 결과
------------------------------------------------------------------- xlCANdemo.NET C# V11.0 Copyright (c) 2019 by Vector Informatik GmbH. All rights reserved. ------------------------------------------------------------------- vxlapi_NET : 11.0.14.22309 Open Driver : XL_SUCCESS 계속하려면 아무 키나 누르십시오 . . .
4. 샘플코드_GetDriverConfig(ref driverConfig)
using System; using System.Threading; using Microsoft.Win32.SafeHandles; using vxlapi_NET; namespace XLpractice { class Class1 { // Driver access through XLDriver (wrapper) private static XLDriver CANDemo = new XLDriver(); // Driver configuration private static XLClass.xl_driver_config driverConfig = new XLClass.xl_driver_config(); [STAThread] static int Main(string[] args) { XLDefine.XL_Status status; Console.WriteLine("-------------------------------------------------------------------"); Console.WriteLine(" xlCANdemo.NET C# V11.0 "); Console.WriteLine("Copyright (c) 2019 by Vector Informatik GmbH. All rights reserved."); Console.WriteLine("-------------------------------------------------------------------\n"); // print .NET wrapper version Console.WriteLine("vxlapi_NET : " + typeof(XLDriver).Assembly.GetName().Version); // Open XL Driver status = CANDemo.XL_OpenDriver(); Console.WriteLine("Open Driver : " + status); if (status != XLDefine.XL_Status.XL_SUCCESS) PrintFunctionError(); // Get XL Driver configuration status = CANDemo.XL_GetDriverConfig(ref driverConfig); Console.WriteLine("Get Driver Config : " + status); if (status != XLDefine.XL_Status.XL_SUCCESS) PrintFunctionError(); return 0; } private static int PrintFunctionError() { Console.WriteLine("\nERROR: Function call failed!\nPress any key to continue..."); Console.ReadKey(); return -1; } } }
OpenDriver 함수와 마찬가지로 XL_Status 자료형을 반환하여 성공, 실패 여부를 출력해볼 수 있습니다.
OpenDriver 함수 호출로 CANDemo 변수의 xl_driver_config 메소드에 접근 가능해져 클래스 변수 선언부에서 이를 호출하여 XLClass.xl_driver_confg 자료형에 저장하여 이를 출력해보는 예제 코드입니다.
5. 코드 실행 결과
------------------------------------------------------------------- xlCANdemo.NET C# V11.0 Copyright (c) 2019 by Vector Informatik GmbH. All rights reserved. ------------------------------------------------------------------- vxlapi_NET : 11.0.14.22309 Open Driver : XL_SUCCESS Get Driver Config : XL_SUCCESS 계속하려면 아무 키나 누르십시오 . . .
'C# > XL_Driver' 카테고리의 다른 글
6. 채널 정보 출력 2 ☆보완필요☆ (0) 2020.02.05 5. 채널 정보 출력 (0) 2020.02.05 4. channelCount (0) 2020.02.05 3. dllVersion (0) 2020.02.05 1. XL 드라이버 준비물 및 지원 정보 (0) 2020.02.05 - public class XLDriver