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)でビット演算します。
定義 |
値 |
意味 |
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 ]
定義 |
戻り値 |
内容 |
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 |
MessageNum |
設定範囲は、1のみとなります。 |
CAN-2-USB |
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;
|
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;
|
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 )
|