ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. OpenDriver, GetDriverConfig
    C#/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
Designed by Tistory.