第4章 リファレンス
7. CanStopCyclicSendMessage
【パラメータ】
hDeviceHandle
CanOpenPort 関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。
IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。
【備考】
本関数は、スタンダード版 CAN 製品では使用することはできません。
【使用例】
●C 言語 INT nRet;
CAN_MESSAGE CanMessage;
HANDLE hDeviceHandle;
unsigned long ulSendValue;
hDeviceHandle = CanOpenPort(“IFCAN1”);
: :
// 送信メッセージ長のセット CanMessage.ulLength = 4;
// 送信メッセージの ID をセット
CanMessage.ulID = 0x01 | CAN_EXT_FRAME;
// フラグの設定
CanMessage.ulFlag = 0;
// 300ms 周期
CanMessage.ulTime = 300*100;
// 送信メッセージの内容をコピー
*(unsigned long*)CanMessage[i].bData = ulSendValue;
nRet = CanActivate(hDeviceHandle);
// 300ms 周期で送信
nRet = CanCyclicSendMessage(hDeviceHandle, CanMessage);
: :
// 周期送信の停止
nRet = CanStopCyclicSendMessage(hDeviceHandle);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim CanMessage As CAN_MESSAGE Dim bSendValue(0 To 3) As Byte Dim nRet As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) :
:
‘ 送信メッセージ長のセット CanMessage.ulLength = 4
‘ 送信メッセージの ID をセット
CanMessage.ulID = &H01 Or CAN_EXT_FRAME
‘ フラグの設定
CanMessage.ulFlag = 0 ‘ 300ms 周期
CanMessage.ulTime = 300*100 ‘ 送信メッセージの内容をコピー CanMessage.bData(0) = bSendValue(0) CanMessage.bData(1) = bSendValue(1) CanMessage.bData(2) = bSendValue(2) CanMessage.bData(3) = bSendValue(3) nRet = CanActivate(hDeviceHandle)
‘ 300ms 周期で送信
nRet = CanCyclicSendMessage(hDeviceHandle, CanMessage) :
:
‘ 周期送信の停止
nRet = CanStopCyclicSendMessage(hDeviceHandle)
●Delphi var
lpszName: String;
hDeviceHandle: THandle;
CanMessage: CAN_MESSAGE;
bSendValue: array[0..3] of Byte;
nRet: Integer;
i: Integer;
lpszName := ‘IFCAN1’;
hDeviceHandle := CanOpenPort(lpszName);
: :
// 送信メッセージ長のセット CanMessage.ulLength := 4;
// 送信メッセージの ID をセット
CanMessage.ulID := $01 | CAN_EXT_FRAME;
// フラグの設定
CanMessage.ulFlag := 0;
// 300ms 周期
CanMessage.ulTime := 300*100;
// 送信メッセージの内容をコピー CanMessage.bData[0] := bSendValue[0];
CanMessage.bData[1] := bSendValue[1];
CanMessage.bData[2] := bSendValue[2];
CanMessage.bData[3] := bSendValue[3];
nRet := CanActivate(hDeviceHandle);
// 300ms 周期で送信
nRet := CanCyclicSendMessage(hDeviceHandle, CanMessage);
: :
// 周期送信の停止
nRet := CanStopCyclicSendMessage(hDeviceHandle);
●Visual C# .NET uint Ret;
IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE();
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);
:
// Data 配列の初期化
CanMessage.InitializeArray();
// 送信メッセージ長のセット CanMessage.Length = 4;
// 送信メッセージの ID をセット
CanMessage.ID = 0x01 | IFCCAN_ANY.CAN_EXT_FRAME;
// フラグの設定 CanMessage.Flag = 0;
// 300ms 周期
CanMessage.Time = 300*100;
// 送信メッセージの内容をセット CanMessage.Data[0] = 0x01;
CanMessage.Data[1] = 0x02;
CanMessage.Data[2] = 0x03;
CanMessage.Data[3] = 0x04;
Ret = IFCCAN_ANY.CanActivate(DeviceHandle);
// 300ms 周期で送信
Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, ref CanMessage);
:
// 周期送信の停止
Ret = IFCCAN_ANY.CanStopCyclicSendMessage(DeviceHandle);
●Visual Basic .NET
Dim DeviceHandle As Integer
Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
‘ Data 配列の初期化
CanMessage.InitializeArray()
‘ 送信メッセージ長のセット CanMessage.Length = 4
‘ 送信メッセージの ID をセット
CanMessage.ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME
‘ フラグの設定 CanMessage.Flag = 0
‘ 300ms 周期
CanMessage.Time = 300*100
‘ 送信メッセージの内容をコピー CanMessage.Data(0) = &H01 CanMessage.Data(1) = &H02 CanMessage.Data(2) = &H03 CanMessage.Data(3) = &H04
Ret = IFCCAN_ANY.CanActivate(DeviceHandle)
‘ 300ms 周期で送信
Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, CanMessage) :
‘ 周期送信の停止
Ret = IFCCAN_ANY.CanStopCyclicSendMessage(DeviceHandle)
●Visual C++ CLR プロジェクト uint Ret;
IFCCAN_ANY::CAN_MESSAGE CanMessage;
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);
:
// Data 配列の初期化
CanMessage.InitializeArray();
// 送信メッセージ長のセット CanMessage.Length = 4;
// 送信メッセージの ID をセット
CanMessage.ID = 0x01 | IFCCAN_ANY::CAN_EXT_FRAME;
// フラグの設定 CanMessage.Flag = 0;
// 300ms 周期
CanMessage.Time = 300*100;
// 送信メッセージの内容をセット CanMessage.Data[0] = 0x01;
CanMessage.Data[1] = 0x02;
CanMessage.Data[2] = 0x03;
CanMessage.Data[3] = 0x04;
Ret = IFCCAN_ANY::CanActivate(DeviceHandle);
// 300ms 周期で送信
Ret = IFCCAN_ANY::CanCyclicSendMessage(DeviceHandle, CanMessage);
:
// 周期送信の停止
Ret = IFCCAN_ANY::CanStopCyclicSendMessage(DeviceHandle);
デバイス名「IFCAN1」の CAN インタフェースの周期送信を停止します。
8. CanStopMultiCyclicSendMessage
【機能】
CAN メッセージの周期送信を停止します。
データ送信中にこの関数を実行すると、現在送信中のデータの送信が完了してから、周期送信 が停止されます。
この関数で周期送信を停止した場合、周期送信停止イベントは発生しません。
【書式】
●C 言語
INT CanStopMultiCyclicSendMessage(
HANDLE hDeviceHandle, DWORD dwRoute );
●Visual Basic
Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal hDeviceHandle As Long, _
ByVal dwRoute As Long _ )As Long
●Delphi
function CanStopMultiCyclicSendMessage(
hDeviceHandle: THandle;
dwRoute: DWORD
): Integer; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用)
[DllImport(“IFCan.dll”)]
public static extern uint CanStopMultiCyclicSendMessage(
IntPtr DeviceHandle, uint Route
);
●Visual C# .NET(x86 専用)
[DllImport(“IFCan.dll”)]
public static extern uint CanStopMultiCyclicSendMessage(
uint DeviceHandle, uint Route
);
●Visual Basic .NET(x86、x64 共用)
Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByVal Route As Integer _ ) As Integer
●Visual Basic .NET(x86 専用)
Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _
ByVal Route As Integer _ ) As Integer
【パラメータ】
hDeviceHandle
CanOpenPort 関数で取得したデバイスハンドルを指定してください。
dwRoute
周期送信を停止するメッセージの番号を 1~12 の範囲で指定します。
【戻り値】
正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。
IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。
【備考】
本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で使用できま す。
【使用例】
●C 言語 INT nRet;
CAN_MESSAGE CanMessage;
HANDLE hDeviceHandle;
hDeviceHandle = CanOpenPort(“IFCAN1”);
: :
// 送信周期を 100ms に設定
nRet = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000);
// 送信メッセージのセット CanMessage.ulLength = 4;
CanMessage.ulID = 0x01;
CanMessage.ulFlag = 0;
CanMessage.ulTime = 0;
CanMessage[0].bData = 0x11;
CanMessage[1].bData = 0x22;
CanMessage[2].bData = 0x33;
CanMessage[3].bData = 0x44;
nRet = CanActivate(hDeviceHandle);
// メッセージ番号 4 の周期送信開始
nRet = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage);
: :
// メッセージ番号 4 の周期送信の停止
nRet = CanStopMultiCyclicSendMessage(hDeviceHandle, 4);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim CanMessage As CAN_MESSAGE Dim nRet As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) :
:
‘ 送信周期を 100ms に設定
nRet = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000)
‘ 送信メッセージのセット CanMessage.ulLength = 4 CanMessage.ulID = &H01 CanMessage.ulFlag = 0 CanMessage.ulTime = 0 CanMessage[0].bData = &H11 CanMessage[1].bData = &H22 CanMessage[2].bData = &H33 CanMessage[3].bData = &H44 nRet = CanActivate(hDeviceHandle)
‘ メッセージ番号 4 の周期送信開始
nRet = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage) :
:
‘ メッセージ番号 4 の周期送信の停止
nRet = CanStopMultiCyclicSendMessage(hDeviceHandle, 4)
●Delphi nRet: Integer;
lpszName := ‘IFCAN1’;
hDeviceHandle := CanOpenPort(lpszName);
: :
// 送信周期を 100ms に設定
nRet := CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000);
// 送信メッセージのセット CanMessage.ulLength := 4;
CanMessage.ulID := $01;
CanMessage.ulFlag := 0;
CanMessage.ulTime := 0;
CanMessage.bData[0] := $11;
CanMessage.bData[1] := $22;
CanMessage.bData[2] := $33;
CanMessage.bData[3] := $44;
nRet := CanActivate(hDeviceHandle);
// メッセージ番号 4 の周期送信開始
nRet := CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage);
: :
// メッセージ番号 4 の周期送信の停止
nRet := CanStopMultiCyclicSendMessage(hDeviceHandle, 4);
●Visual C# .NET uint Ret;
IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE();
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);
: :
// 送信周期を 100ms に設定
Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000);
// 送信メッセージのセット CanMessage.InitializezArray();
CanMessage.Length = 4;
CanMessage.ID = 0x01;
CanMessage.Flag = 0;
CanMessage.Time = 0;
CanMessage.Data[0] = 0x11;
CanMessage.Data[1] = 0x22;
CanMessage.Data[2] = 0x33;
CanMessage.Data[3] = 0x44;
Ret = IFCCAN_ANY.CanActivate(DeviceHandle);
// メッセージ番号 4 の周期送信開始
Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, ref CanMessage);
: :
// メッセージ番号 4 の周期送信の停止
Ret = IFCCAN_ANY.CanStopMultiCyclicSendMessage(DeviceHandle, 4);
●Visual Basic .NET
Dim DeviceHandle As Integer
Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
:
‘ 送信周期を 100ms に設定
Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000)
‘ 送信メッセージのセット CanMessage.InitializeArray() CanMessage.Length = 4
CanMessage.ID = &H01 CanMessage.Flag = 0 CanMessage.Time = 0 CanMessage.Data(0) = &H11 CanMessage.Data(1) = &H22 CanMessage.Data(2) = &H33 CanMessage.Data(3) = &H44
Ret = IFCCAN_ANY.CanActivate(DeviceHandle)
‘ メッセージ番号 4 の周期送信開始
Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage) :
:
‘ メッセージ番号 4 の周期送信の停止
Ret = IFCCAN_ANY.CanStopMultiCyclicSendMessage(hDeviceHandle, 4)
●Visual C++ CLR プロジェクト unsigned int Ret;
IFCCAN_ANY::CAN_MESSAGE CanMessage;
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);
: :
// 送信周期を 100ms に設定
Ret = IFCCAN_ANY::CanSetTransmissionCycle(DeviceHandle,
IFCCAN_ANY::CAN_ROUTE_4_6, 100*1000);
// 送信メッセージのセット CanMessage.InitializezArray();
CanMessage.Length = 4;
CanMessage.ID = 0x01;
CanMessage.Flag = 0;
CanMessage.Time = 0;
CanMessage.Data[0] = 0x11;
CanMessage.Data[1] = 0x22;
CanMessage.Data[2] = 0x33;
CanMessage.Data[3] = 0x44;
Ret = IFCCAN_ANY::CanActivate(DeviceHandle);
// メッセージ番号 4 の周期送信開始
Ret = IFCCAN_ANY::CanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage);
: :
// メッセージ番号 4 の周期送信の停止
Ret = IFCCAN_ANY::CanStopMultiCyclicSendMessage(DeviceHandle, 4);
デバイス名「IFCAN1」の CAN インタフェースの周期送信を停止します。