ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BRS, ISO 값 설정하기
    C#/XL_Driver 2020. 2. 19. 16:28

    BRS 비트를 설정하는 방법은 다음과 같다

     

    예제 코드의 상단부 변수 선언 부분을 살펴보면 다음과 같은 변수를 발견할 수 있는데

     

    private static uint canFdModeNoIso = 0;
    // Global CAN FD ISO (default) / no ISO mode flag
    

     

    해당 변수와 연계되어 

     

    openport() 함수와 XLcanFdConf() 함수를 호출한 후에 값을 설정하게 됩니다.

     

    canFdModeNoIso 변수를 0으로 설정 시 ISO, 1 이상으로 설정 시 NO-ISO로 동작하게 됩니다.

     

    if (canFdModeNoIso > 0)
    {
        canFdConf.options = (byte)XLDefine.XL_CANFD_ConfigOptions.XL_CANFD_CONFOPT_NO_ISO;
    }
    else
    {
        canFdConf.options = 0;
    }

     

     

     

    canFdConf 의 options 변수는 byte 형으로 다음과 같이 선언되어 있습니다.

     

    public class XLcanFdConf
    {
        public uint arbitrationBitRate;
        public uint sjwAbr;
        public uint tseg1Abr;
        public uint tseg2Abr;
        public uint dataBitRate;
        public uint sjwDbr;
        public uint tseg1Dbr;
        public uint tseg2Dbr;
        public byte reserved;
        public byte options;
        public byte[] reserved1;
        public uint reserved2;
    
        public XLcanFdConf();
    }

     

     

     

    XLDefine의 XL_CANFD_ConfigOptions enum은 다음과 같이 선언되어 있습니다.

     

    public enum XL_CANFD_ConfigOptions : byte
    {
        XL_CANFD_CONFOPT_NO_ISO = 8
    }

     

     

     

    이후 아래의 SetConfiguration 함수를 통해 설정을 적용하게 됩니다.

     

    status = CANDemo.XL_CanFdSetConfiguration(portHandle, accessMask, canFdConf);

     

     

     

     

     

     

     

    ISO / non-ISO 설정법

     

    ISO는 메시지를 송신할 때 설정하도록 되어있습니다.

     

    CANFDTransmitDemo() 함수에서 메시지 송신을 준비하는 과정에서 

     

    public static void CANFDTransmitDemo()
    {
        XLDefine.XL_Status txStatus;
                
        // Create an event collection with 2 messages (events)
        XLClass.xl_canfd_event_collection xlEventCollection 
        	= new XLClass.xl_canfd_event_collection(1);
    
        // event 1
        xlEventCollection.xlCANFDEvent[0].tag               
        	= XLDefine.XL_CANFD_TX_EventTags.XL_CAN_EV_TAG_TX_MSG;
        xlEventCollection.xlCANFDEvent[0].tagData.canId     
        	= 0x100;
        xlEventCollection.xlCANFDEvent[0].tagData.dlc       
        	= XLDefine.XL_CANFD_DLC.DLC_CAN_CANFD_8_BYTES;
        xlEventCollection.xlCANFDEvent[0].tagData.msgFlags  
        	= XLDefine.XL_CANFD_TX_MessageFlags.XL_CAN_TXMSG_FLAG_BRS | XLDefine.XL_CANFD_TX_MessageFlags.XL_CAN_TXMSG_FLAG_EDL;
        xlEventCollection.xlCANFDEvent[0].tagData.data[0]   
        	= 1;
        xlEventCollection.xlCANFDEvent[0].tagData.data[1]   
        	= 1;
        xlEventCollection.xlCANFDEvent[0].tagData.data[2]   
        	= 2;
        xlEventCollection.xlCANFDEvent[0].tagData.data[3]   
        	= 2;
        xlEventCollection.xlCANFDEvent[0].tagData.data[4]   
        	= 3;
        xlEventCollection.xlCANFDEvent[0].tagData.data[5]   
        	= 3;
        xlEventCollection.xlCANFDEvent[0].tagData.data[6]   
        	= 4;
        xlEventCollection.xlCANFDEvent[0].tagData.data[7]   
        	= 4;
                
        // ... 코드의 일부입니다

     

     

    위 코드의 tagData.msgFlags를 통해 해당 옵션을 조절하도록 되어있습니다.

     

     

    XLDefine.XL_CANFD_TX_MessageFlags의 옵션들을 비트 연산자를 사용하여 원하는 설정을 적용하여 사용하시면 됩니다.

     

    public enum XL_CANFD_TX_MessageFlags : uint
    {
        XL_CAN_TXMSG_FLAG_NONE = 0,
        XL_CAN_TXMSG_FLAG_EDL = 1,
        XL_CAN_TXMSG_FLAG_BRS = 2,
        XL_CAN_TXMSG_FLAG_RTR = 16,
        XL_CAN_TXMSG_FLAG_HIGHPRIO = 128,
        XL_CAN_TXMSG_FLAG_WAKEUP = 512
    }

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

    TODO  (0) 2020.02.10
    7. 채널 정보 출력(CAN_FD)  (0) 2020.02.10
    6. 채널 정보 출력 2 ☆보완필요☆  (0) 2020.02.05
    5. 채널 정보 출력  (0) 2020.02.05
    4. channelCount  (0) 2020.02.05
Designed by Tistory.