• 検索結果がありません。

CanSendMessage

ドキュメント内 GPC-4851 (ページ 167-176)

第4章 リファレンス

5. CanSendMessage

●Visual C# .NET(x86、x64 共用)

[DllImport(“IFCan.dll”)]

public static extern uint CanSendMessage(

IntPtr DeviceHandle, ref CAN_MESSAGE CanMessage, uint Count );

[DllImport(“IFCan.dll”)]

public static extern uint CanSendMessage(

IntPtr DeviceHandle, CAN_MESSAGE[] CanMessage, uint Count );

●Visual C# .NET(x86 専用)

[DllImport(“IFCan.dll”)]

public static extern uint CanSendMessage(

uint DeviceHandle, ref CAN_MESSAGE CanMessage, uint Count );

[DllImport(“IFCan.dll”)]

public static extern uint CanSendMessage(

uint DeviceHandle, CAN_MESSAGE[] CanMessage, uint Count );

●Visual Basic .NET(x86、x64 共用)

Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _

ByRef CanMessage As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer

Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _

●Visual Basic .NET(x86 専用)

Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _

ByRef CanMessage As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer

Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _

ByVal CanMessage() As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer

【パラメータ】

hDeviceHandle

CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage

送信するメッセージを格納した構造体のポインタを指定してください。

高機能版、バスマスタ版CAN製品では、 CAN_MESSAGE構造体のulTimeメンバ変数がディレ イ時間を表します。単位は 10μsです。例えば、ulTimeに 100 を指定して、CanSendMessage 関数を呼ぶと、1ms(100×10μs)待ってから、データを送信します。設定可能範囲は 0

~1FFFFFhです。1FFFFFhより大きい値を設定しても、自動的に 1FFFFFhになります。スタ ンダード版では、CAN_MESSAGE構造体のulTimeは使用しません。設定値は無効となります。

ulCount で指定された個数分の領域を用意してください。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

ulCount

送信バッファにセットするメッセージの個数を指定してください。

【戻り値】

正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。

IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。

【使用例】

●C 言語 INT nRet;

CAN_MESSAGE CanMessage[10];

HANDLE hDeviceHandle;

unsigned long ulSendValue;

hDeviceHandle = CanOpenPort(“IFCAN1”);

: :

for (i=0;i<10;i++) {

// 送信メッセージ長のセット CanMessage[i].ulLength = 4;

// 送信メッセージの ID をセット

CanMessage[i].ulID = 0x01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage[i].ulFlag = 0;

// ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage[i].ulTime = 0;

// 送信メッセージの内容をコピー

*(unsigned long*)CanMessage[i].bData = ulSendValue;

}

nRet = CanActivate(hDeviceHandle);

// 送信メッセージのセット(送信開始)

nRet = CanSendMessage(hDeviceHandle, CanMessage, 10);

●Visual Basic

Dim lpszName As String Dim hDeviceHandle As Long

Dim CanMessage(0 To 9) As CAN_MESSAGE Dim bSendValue(0 To 3) As Byte

Dim nRet As Long

lpszName = "IFCAN1" & Chr( 0 )

hDeviceHandle = CanOpenPort(lpszName) :

For i = 0 To 9

‘ 送信メッセージ長のセット CanMessage(i).ulLength = 4 ‘ 送信メッセージの ID をセット

CanMessage(i).ulID = &H01 Or CAN_EXT_FRAME ‘ フラグの設定

CanMessage(i).ulFlag = 0

‘ ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage(i).ulTime = 0

‘ 送信メッセージの内容をコピー

CanMessage(i).bData(0) = bSendValue(0) CanMessage(i).bData(1) = bSendValue(1) CanMessage(i).bData(2) = bSendValue(2) CanMessage(i).bData(3) = bSendValue(3) Next

nRet = CanActivate(hDeviceHandle)

‘ 送信メッセージのセット(送信開始)

nRet = CanSendMessage(hDeviceHandle, CanMessage(0), 10)

●Delphi var

lpszName: String;

hDeviceHandle: THandle;

CanMessage: array[0..9] of CAN_MESSAGE;

bSendValue: array[0..3] of Byte;

nRet: Integer;

i: Integer;

lpszName := ‘IFCAN1’;

hDeviceHandle := CanOpenPort(lpszName);

: :

for i := 0 to 9 do begin // 送信メッセージ長のセット CanMessage[i].ulLength := 4;

// 送信メッセージの ID をセット

CanMessage[i].ulID := $01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage[i].ulFlag := 0;

// ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage[i].ulFlag := 0;

// 送信メッセージの内容をコピー

CanMessage[i].bData[0] := bSendValue[0];

CanMessage[i].bData[1] := bSendValue[1];

CanMessage[i].bData[2] := bSendValue[2];

CanMessage[i].bData[3] := bSendValue[3];

end;

nRet := CanActivate(hDeviceHandle);

// 送信メッセージのセット(送信開始)

nRet := CanSendMessage(hDeviceHandle, CanMessage[0], 10);

●Visual C# .NET uint Ret;

IFCCAN_ANY.CAN_MESSAGE[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE[10];

IntPtr DeviceHandle;

byte SendValue;

int i;

DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);

for (i = 0; i < 10; i++) {

// Data 配列の初期化

CanMessage[i].InitializeArray();

// 送信メッセージ長のセット CanMessage[i].Length = 1;

// 送信メッセージの ID をセット

CanMessage[i].ID = 0x01 | IFCCAN_ANY.CAN_EXT_FRAME;

// フラグの設定

CanMessage[i].Flag = 0;

// ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage[i].Time = 0;

// 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue;

}

Ret = IFCCAN_ANY.CanActivate(DeviceHandle);

// 送信メッセージのセット(送信開始)

Ret = IFCCAN_ANY.CanSendMessage(DeviceHandle, CanMessage, 10);

●Visual Basic .NET

Dim DeviceHandle As Integer

Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE Dim SendValue As Byte

Dim Ret As Integer

DeviceHandle = CanOpenPort(“IFCAN1”) :

For i = 0 To 9 ‘ Data 配列の初期化

CanMessage(i).InitializeArray() ‘ 送信メッセージ長のセット CanMessage(i).Length = 4 ‘ 送信メッセージの ID をセット

CanMessage(i).ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME ‘ フラグの設定

CanMessage(i).Flag = 0

‘ ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage(i).Time = 0

‘ 送信メッセージの内容をコピー CanMessage(i).Data(0) = SendValue Next

Ret = IFCCAN_ANY.CanActivate(DeviceHandle)

‘ 送信メッセージのセット(送信開始)

Ret = IFCCAN_ANY.CanSendMessage(DeviceHandle, CanMessage, 10)

●Visual C++ CLR プロジェクト unsigned int Ret;

array<IFCCAN_ANY::CAN_MESSAGE>^ CanMessage =

gcnew array<IFCCAN_ANY::CAN_MESSAGE>(10);

IntPtr DeviceHandle;

unsigned char SendValue;

int i;

DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);

for (i = 0; i < 10; i++) {

// Data 配列の初期化

CanMessage[i].InitializeArray();

// 送信メッセージ長のセット CanMessage[i].Length = 1;

// 送信メッセージの ID をセット

CanMessage[i].ID = 0x01 | IFCCAN::CAN_EXT_FRAME;

// フラグの設定

CanMessage[i].Flag = 0;

// ディレイ時間なし(高機能版、バスマスタ版 CAN 製品のみ有効) CanMessage[i].Time = 0;

// 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue;

}

Ret = IFCCAN_ANY::CanActivate(DeviceHandle);

// 送信メッセージのセット(送信開始)

Ret = IFCCAN_ANY::CanSendMessage(DeviceHandle, CanMessage, 10);

デバイス名「IFCAN1」の CAN インタフェースから 10 件のメッセージ送信を行います。

ドキュメント内 GPC-4851 (ページ 167-176)