Q: CAN FD通信ができない

A:

CAN FD通信の概要については、「CAN2.0B通信とCAN FD通信の違い」を参照ください。

①CAN FD通信は、アービトレーション領域に対するビットレート設定と、データ領域に対するビットレート設定には異なる値を指定できます。
 その際、CanTransmit関数のMessageType引数で、CAN FDメッセージ(CCAN_MSG_TYPE_CAN_FD)とともに、ビットレートスイッチ(CCAN_MSG_TYPE_BITRATE_SWITCH)が必要になります。

②同じCAN経路上のアービトレーション領域及び、データ領域に対する各ビットレート設定とサンプリングポイントは、送信デバイスと受信デバイスで同等の設定を行ってください。
 設定には、CanSetCanFdTiming関数を使用します。

 また、設定値を確認する場合は、CanGetCanFdTiming関数を使用します。
 詳細は、各関数の関数リファレンスを参照ください。

 

アービトレーション領域と、データ領域のビットレート値が異なる場合のCAN送信例:

CANデバイスのChannelNo = 1から、CAN FD送信。
MessageNum =1、CAN ID = 0x11c、DataLength = 1 、Data = 0xff

VB.NET

Dim Ret As Integer

Dim MessageType(0) As UInteger

Dim CanId(0) As UInteger

Dim DataLength(0) As UShort

Dim Data(0)(63) As Byte

 

MessageType(0) =  CCAN_MSG_TYPE_CAN_FD Or CCAN_MSG_TYPE_BITRATE_SWITCH

CanId(0) = &H11C

Data(0)(0) = &HFF

 

Ret = CanTransmit ( Id , 1 , 1 , MessageType , CanId , Data )
 

C, C++

long Ret;

unsinged long MessageType[1];

unsinged long CanId[1];

unsinged short DataLength[1];

unsinged char Data[1][64];

 

MessageType[0] = CCAN_MSG_TYPE_CAN_FD | CCAN_MSG_TYPE_BITRATE_SWITCH;

CanId[0] = 0x11c;

Data[0][0] = 0xff;


Ret = CanTransmit ( Id , 1 , 1 , &MessageType[0] , &CanId[0] , &Data[0][0] );
 

C#

int Ret;

uint[] MessageType = new unit[1];

uint[] CanId = new uint[1];

ushort[] DataLength = new ushort[1];

ubyte[,] Data = new ubyte[1,64];

 

MessageType[0] = CCAN_MSG_TYPE_CAN_FD | CCAN_MSG_TYPE_BITRATE_SWITCH;

CanId[0] = 0x11c;

Data[0,0] = 0xff;


Ret = can.Transmit ( Id , 1 , 1 , ref MessageType , ref CanId , ref Data );