CanTransmit


機能

CAN, もしくはCAN FD送信をします。

書式

Ret = CanTransmit ( Id , ChannelNo , MessageNum , MessageType , CanId , DataLength , Data )

引数

Id [ VB.NET: Short ] [ C, C++: short ] [ C#: short ] [ Python: ctypes.c_short ]
CanInitで取得したデバイスIDを指定します。

ChannelNo [ VB.NET: UShort ] [ C, C++: unsigned short ] [ C#: ushort ] [ Python: ctypes.c_ushort ]
チャネル番号を指定します。

MessageNum [ VB.NET: UInteger ] [ C, C++: unsigned long ] [ C#: uint ] [ Python: ctypes.c_uint ]
送信メッセージ数を指定します。
詳細は、デバイス別仕様の項目を参照ください。

MessageType [ VB.NET: UInteger ] [ C, C++: unsigned long * ] [ C#: ref uint ] [ Python: ctypes.POINTER(ctypes.c_uint) ]
送信メッセージタイプを1次元配列で指定します。
複数のメッセージタイプを指定する場合は、論理和(OR)でビット演算します。

定義


[Hex]

意味

CCAN_MSG_TYPE_CAN

0x01

CANメッセージ

CCAN_MSG_TYPE_CAN_FD

0x02

CAN FDメッセージ

CCAN_MSG_TYPE_REMOTE_FRAME

0x04

リモートフレーム。 ※CANのみ有効にできます

CCAN_MSG_TYPE_BITRATE_SWITCH

0x08

ビットレートスイッチ。 ※CAN FDのみ有効にできます

CCAN_MSG_TYPE_EXTENDED_FORMAT

0X20

拡張フォーマット

CanId [ VB.NET: UInteger ] [ C, C++: unsigned long * ] [ C#:ref uint ] [ Python: ctypes.POINTER(ctypes.c_uint) ]
送信CAN IDを1次元配列で指定します。

標準フォーマットが指定されている場合は、ベースID(11bit)で指定します。
有効な指定範囲は、0x000~0x7FFです。

拡張フォーマットが指定されている場合は、拡張ID + ベースID (合計29bit)で指定します。
有効な指定範囲は、0x000~0x1FFFFFFFです。

CanIdのビット番号

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

拡張ID / ベースID

-

-

-

拡張ID

ベースID

各ID のビット番号

-

-

-

17

16

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

10

09

08

07

06

05

04

03

02

01

00

DataLength [ VB.NET: UShort ] [ C, C++: unsigned short * ] [ C#: ref ushort ] [ Python: ctypes.POINTER(ctypes.c_ushort) ]
送信メッセージデータ長を一次元配列で指定します。

CAN通信が指定されている場合、有効な指定範囲は0~8です。
CAN FD通信が指定されている場合、有効な指定範囲は0~8、および、12, 16, 20, 24, 32, 48, 64です。

Data [ VB.NET: Byte ] [ C, C++: unsigned char * ] [ C#: ref byte ] [ Python: ctypes.POINTER(ctypes.c_ubyte) ]
送信データを2次元配列で指定します。
2次元配列の要素数(列数)は64です。

全メッセージのデータ長(DataLength)が0の場合はNULL文字を指定します。

戻り値

Ret [ VB.NET: Integer ] [ C, C++: long ] [ C#: int ] [ Python: ctypes.c_long ]

定義

戻り値
[Dec]

内容

CAN_ERR_SUCCESS

0

正常終了

CAN_ERR_SYS_RECOVERED_FROM_STANDBY

7

スタンバイモードから復帰したため、CanResetDevice関数を実行してください

CAN_ERR_DLL_INVALID_ID

10001

無効なIDが指定されました。

CAN_ERR_DLL_CALL_DRIVER

10002

ドライバーを呼び出せません(デバイスI/Oコントロールに失敗)。

CAN_ERR_DLL_BUFF_ADDRESS

10100

データバッファアドレスが不正です。

CAN_ERR_SYS_CH_NO

20101

チャネル番号が設定可能範囲外です

CAN_ERR_SYS_MESSAGE_NUM

20150

メッセージ数が設定可能範囲外です。

CAN_ERR_SYS_MESSAGE_TYPE

20151

メッセージタイプが設定可能範囲外です。

CAN_ERR_SYS_DATA_LEN

20160

データ長が設定可能範囲外です。

CAN_ERR_SYS_CAN_ID

20170

CAN IDが設定可能範囲外です。

CAN_ERR_SYS_TIMEOUT_TIME

20180

タイムアウト時間が設定可能範囲外です。

CAN_ERR_SYS_BUSOFF

20201

バスオフのため実行できません。

CAN_ERR_SYS_BUS_DISCONNECT

20202

バス未接続のため実行できません。

CAN_ERR_SYS_TIMEOUT

20250

タイムアウトしました。

その他のエラー(参照:エラーコード詳細

初期値

なし

説明

CAN, もしくはCAN FD送信をします。

メッセージタイプ(MessageType)、CAN ID(CanId)、データー長(DataLength)は、1次元配列でメモリを確保し数値を指定し、先頭アドレスを引数とします。
1次元配列のイメージ

配列変数名[メッセージ番号]

要素の値(例)

MessageType[0]

CCAN_MSG_TYPE_CAN

MessageType[1]

CCAN_MSG_TYPE_CAN

MessageType[2]

CCAN_MSG_TYPE_CAN

MessageType[3]

CCAN_MSG_TYPE_CAN

・・・

・・・

MessageType[MessageNum - 1]

CCAN_MSG_TYPE_CAN

 

送信データ(Data)は、64個の要素を持つ2次元配列でメモリを確保し、先頭アドレスを引数とします。
2次元配列のイメージ

配列変数名[メッセージ番号][(要素番号)]

要素01の値

要素02の値

要素03の値

・・・

要素64の値

Data[0][]

Data[0][0]

Data[0][1]

Data[0][2]

・・・

Data[0][63]

Data[1][]

Data[1][0]

Data[1][1]

Data[1][2]

・・・

Data[1][63]

Data[2][]

Data[2][0]

Data[2][1]

Data[2][2]

・・・

Data[2][63]

Data[3][]

Data[3][0]

Data[3][1]

Data[3][2]

・・・

Data[3][63]

・・・

・・・

・・・

・・・

・・・

・・・

Data[MessageNum - 1][]

Data[MessageNum - 1][0]

Data[MessageNum - 1][1]

Data[MessageNum - 1][2]

・・・

Data[MessageNum - 1][63]

デバイス別仕様

型式

引数名

内容

CAN-4P-PE
CAN-4PF-PE

MessageNum

設定範囲は、1のみとなります。

CAN-2-USB
CAN-2-WF

MessageNum

設定範囲は、1~90となります。

使用例

ChannelNo = 1から、CAN送信をします。MessageNum =1、MessageType = CCAN_MSG_TYPE_CAN、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

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;

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;

CanId[0] = 0x11c;

Data[0,0] = 0xff;


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

Python

Ret = ctypes.c_long()

MessageTypeType = ctypes.c_uint() * 1

MessageType = MessageTypeType()

CanIdType = ctypes.c_uint() * 1

CanId = CanIdType()

DataLengthType = ctypes.c_ushort() *1

DataLength = DataLengthType()

SingleDataType = ctypes.c_ubyte() * 64

DataType = ctypes.SingleDataType * 1

Data = DataType()

 

MessageType[0] = ccan.CCAN_MSG_TYPE_CAN

CanId[0] = 0x11c

Data[0][0] = 0xff

 

 

Ret.value = ccan.CanTransmit ( Id , 1 , 1 , MessageType , CanId , Data )

 

関連項目

CanRecieve