-
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