ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 채널 정보 출력 2 ☆보완필요☆
    C#/XL_Driver 2020. 2. 5. 17:53

    이전 게시글에서 driverConfig.channel 배열에 접근하여 각 채널의 정보를 읽어보았다

     

    각 채널마다 설정된 비트레이트, 샘플 레이트 등 추가적인 정보를 확인하는 방법을 알아보자

     

    이전 게시글에서 보았던 xl_channel_config 클래스의 구조 중에서

     

    public class xl_channel_config
    {
    	... 생략
                
    	public xl_bus_params busParams;
                
    	... 생략
    }

     

     

     

     

    xl_bus_params 클래스를 멤버로 갖고 있음을 알 수 있는데, 위 클래스의 구조를 살펴보면 아래와 같다


     

    public class xl_bus_params
    {
    	public XLDefine.XL_BusTypes busType;
    	public xl_can_bus_params dataCan;
    	public xl_canFd_bus_params dataCanFd;
    	public xl_most_bus_params dataMost;
    	public xl_flexray_bus_params dataFr;
    	public xl_ethernet_bus_params dataEth;
    	public xl_a429_bus_params dataA429;
    
    	public xl_bus_params();
    }

     

     

    이들 중에서 xl_can_bus_params 클래스와 xl_canFd_bus_params 클래스를 우선 알아보자

     


    xl_can_bus_params 

     

    public class xl_can_bus_params
    {
    	public uint bitrate;
    	public byte sjw;
    	public byte tseg1;
    	public byte tseg2;
    	public byte sam;
    	public byte outputMode;
    	public byte[] reserved;
    	public byte canOpMode;
    
    	public xl_can_bus_params();
    }

     

     

     

     

    xl_canFd_bus_params 

     

    public class xl_canFd_bus_params
    {
    	public uint arbitrationBitRate;
    	public byte sjwAbr;
    	public byte tseg1Abr;
    	public byte tseg2Abr;
    	public byte samAbr;
    	public byte outputMode;
    	public byte sjwDbr;
    	public byte tseg1Dbr;
    	public byte tseg2Dbr;
    	public uint dataBitRate;
    	public byte canOpMode;
    
    	public xl_canFd_bus_params();
    }

     

    조금의 차이는 있지만 공통적으로 tseg 변수와 outputMode, bitRate 변수들이 존재함을 알 수 있다.

     

    추가적인 호출 메소드들이 있는지 알아봐야 하겠지만 우선 5번 게시글의 예제처럼 각 멤버 변수에

    접근하여 출력 및 수정할 수 있다.

     

    아래의 코드 예제를 확인해보자

     


    코드 예제

     

    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();
    
            private static String appName = "xlCANdemoNET";
    
            // Variables required by XLDriver
            private static XLDefine.XL_HardwareType hwType = XLDefine.XL_HardwareType.XL_HWTYPE_NONE;
            private static uint hwIndex = 0;
            private static uint hwChannel = 0;
    
            [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();
    
    
                // Display all found channels
                for (int i = 0; i < driverConfig.channelCount; i++)
                {
                    Console.WriteLine("\n                   [{0}] " + driverConfig.channel[i].name, i);
                    Console.WriteLine("                    - Channel Mask    : " + 
                        driverConfig.channel[i].channelMask);
                    Console.WriteLine("                    - Transceiver Name: " + 
                        driverConfig.channel[i].transceiverName);
                    Console.WriteLine("                    - Serial Number   : " + 
                        driverConfig.channel[i].serialNumber);
                    Console.WriteLine("                    - hwtype          : " + 
                        driverConfig.channel[i].hwType);
                    Console.WriteLine("                    - hwIndex         : " + 
                        driverConfig.channel[i].hwIndex);
                    Console.WriteLine("                    - hwChannel       : " + 
                        driverConfig.channel[i].hwChannel);
                    Console.WriteLine("                    - Channel Index   : " + 
                        driverConfig.channel[i].channelIndex);
                    Console.WriteLine("                    - tseg1           : " + 
                        driverConfig.channel[i].busParams.dataCan.tseg1);
                    Console.WriteLine("                    - tseg2           : " + 
                        driverConfig.channel[i].busParams.dataCan.tseg2);
                    Console.WriteLine("                    - bitrate         : " + 
                        driverConfig.channel[i].busParams.dataCan.bitrate);
                }
    
    
    
                return 0;
            }
    
            private static int PrintFunctionError()
            {
                Console.WriteLine("\nERROR: Function call failed!\nPress any key to continue...");
                Console.ReadKey();
                return -1;
            }
    
            private static void PrintAssignErrorAndPopupHwConf()
            {
                Console.WriteLine("\nPlease check application settings of \"" + appName + " CAN1/CAN2\",\nassign them to available hardware channels and press enter.");
                CANDemo.XL_PopupHwConfig(); //벡터 하드웨어 configuration tool 여는 메소드
                Console.ReadKey();
            }
        }
    }
    

     

     


    출력 결과

     

    -------------------------------------------------------------------
                         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
    
                       [0] VN1640A Channel 1
                        - Channel Mask    : 1
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 0
                        - Channel Index   : 0
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [1] VN1640A Channel 2
                        - Channel Mask    : 2
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 1
                        - Channel Index   : 1
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [2] VN1640A Channel 3
                        - Channel Mask    : 4
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 2
                        - Channel Index   : 2
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [3] VN1640A Channel 4
                        - Channel Mask    : 8
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 3
                        - Channel Index   : 3
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [4] VN1640A Channel 5
                        - Channel Mask    : 16
                        - Transceiver Name: On board D/A IO 1021
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 4
                        - Channel Index   : 4
                        - tseg1           : 0
                        - tseg2           : 0
                        - bitrate         : 0
    
                       [5] Virtual Channel 1
                        - Channel Mask    : 32
                        - Transceiver Name:  Virtual CAN
                        - Serial Number   : 0
                        - hwtype          : XL_HWTYPE_VIRTUAL
                        - hwIndex         : 0
                        - hwChannel       : 0
                        - Channel Index   : 5
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [6] Virtual Channel 2
                        - Channel Mask    : 64
                        - Transceiver Name:  Virtual CAN
                        - Serial Number   : 0
                        - hwtype          : XL_HWTYPE_VIRTUAL
                        - hwIndex         : 0
                        - hwChannel       : 1
                        - Channel Index   : 6
                        - tseg1           : 4
                        - tseg2           : 3
                        - bitrate         : 500000
    계속하려면 아무 키나 누르십시오 . . .

     

    tseg 값들과 bitrate가 출력된 것을 확인할 수 있습니다.

     

     

     

    tseg의 값을 직접 접근하여 바꿔보는 것을 시도해보겠습니다.

     

    멤버 변수에 직접 접근하여 tseg1의 값을 변경하려면 아래와같이 tseg1 = 100; 으로 바꿔주는 코드를 추가하고

     

    // Display all found channels
    for (int i = 0; i < driverConfig.channelCount; i++)
    {
    Console.WriteLine("\n                   [{0}] " + driverConfig.channel[i].name, i);
    Console.WriteLine("                    - Channel Mask    : " + 
        driverConfig.channel[i].channelMask);
    Console.WriteLine("                    - Transceiver Name: " + 
        driverConfig.channel[i].transceiverName);
    Console.WriteLine("                    - Serial Number   : " + 
        driverConfig.channel[i].serialNumber);
    Console.WriteLine("                    - hwtype          : " + 
        driverConfig.channel[i].hwType);
    Console.WriteLine("                    - hwIndex         : " + 
        driverConfig.channel[i].hwIndex);
    Console.WriteLine("                    - hwChannel       : " + 
        driverConfig.channel[i].hwChannel);
    Console.WriteLine("                    - Channel Index   : " + 
        driverConfig.channel[i].channelIndex);
    
    driverConfig.channel[i].busParams.dataCan.tseg1 = 100;
    
    Console.WriteLine("                    - tseg1           : " + 
        driverConfig.channel[i].busParams.dataCan.tseg1);
    Console.WriteLine("                    - tseg2           : " + 
        driverConfig.channel[i].busParams.dataCan.tseg2);
    Console.WriteLine("                    - bitrate         : " + 
        driverConfig.channel[i].busParams.dataCan.bitrate);
    }

     

     

     

    위 코드를 실행하면

     

    -------------------------------------------------------------------
                         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
    
                       [0] VN1640A Channel 1
                        - Channel Mask    : 1
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 0
                        - Channel Index   : 0
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [1] VN1640A Channel 2
                        - Channel Mask    : 2
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 1
                        - Channel Index   : 1
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [2] VN1640A Channel 3
                        - Channel Mask    : 4
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 2
                        - Channel Index   : 2
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [3] VN1640A Channel 4
                        - Channel Mask    : 8
                        - Transceiver Name: CANpiggy 1057Gcap (Highspeed)
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 3
                        - Channel Index   : 3
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [4] VN1640A Channel 5
                        - Channel Mask    : 16
                        - Transceiver Name: On board D/A IO 1021
                        - Serial Number   : 26638
                        - hwtype          : XL_HWTYPE_VN1640
                        - hwIndex         : 0
                        - hwChannel       : 4
                        - Channel Index   : 4
                        - tseg1           : 100
                        - tseg2           : 0
                        - bitrate         : 0
    
                       [5] Virtual Channel 1
                        - Channel Mask    : 32
                        - Transceiver Name:  Virtual CAN
                        - Serial Number   : 0
                        - hwtype          : XL_HWTYPE_VIRTUAL
                        - hwIndex         : 0
                        - hwChannel       : 0
                        - Channel Index   : 5
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    
                       [6] Virtual Channel 2
                        - Channel Mask    : 64
                        - Transceiver Name:  Virtual CAN
                        - Serial Number   : 0
                        - hwtype          : XL_HWTYPE_VIRTUAL
                        - hwIndex         : 0
                        - hwChannel       : 1
                        - Channel Index   : 6
                        - tseg1           : 100
                        - tseg2           : 3
                        - bitrate         : 500000
    계속하려면 아무 키나 누르십시오 . . .

     

    tseg1에 해당하는 값은 바뀌었지만 bitrate 계산에는 영향을 끼치지 않은 것을 볼 수 있습니다.

    'C# > XL_Driver' 카테고리의 다른 글

    TODO  (0) 2020.02.10
    7. 채널 정보 출력(CAN_FD)  (0) 2020.02.10
    5. 채널 정보 출력  (0) 2020.02.05
    4. channelCount  (0) 2020.02.05
    3. dllVersion  (0) 2020.02.05
Designed by Tistory.