Log
紀錄登錄共享記憶體的特定數據。
語法
KsCommandStatus Log(
int Length,
KsLogChannel* Channels,
int TriggerChannel,
double TriggerValue,
KsLogTriggerType TriggerType,
double Duration
);
參數
Length:儲存登錄通道的陣列長度,最多為八個通道。
Channels:各通道裡將被記錄的數據。請見 KsLogChannel 結構。
TriggerChannel:觸發記錄的通道。
TriggerValue:紀錄會在登錄通道值達到觸發值時開始。
TriggerType:觸發紀錄的方式。請見 KsLogTriggerType 。
Duration:欲記錄數據的時間長度,每秒為一單位,最多可記錄 10 分鐘。若設置為零,系通將繼續記錄並保存最後 10 分鐘的數據。
回傳值
返回 KsCommandStatus 結構。
- Value:紀錄共享記憶體指標。
- ValueLength:欲紀錄的所有點數量。
- InSyn:當前的紀錄索引(亦為以記錄的點數量)。
備註
使用 RtOpenSharedMemory 以獲取紀錄數據時,必須使用 "KSLogSpace" 作為共享記憶體物件之名稱。
可用的 EtherCAT 狀態
ecatOP
範例
複製
double* LogData = NULL;
KsLogChannel Channels[3] =
{
{KsLogSource::logAxis, 0, KsLogVariable::logActualPosition, 0, KsLogDataType::logDouble},
{KsLogSource::logAxis, 0, KsLogVariable::logActualVelocity, 0, KsLogDataType::logDouble},
{KsLogSource::logAxis, 0, KsLogVariable::logFollowingError, 0, KsLogDataType::logDouble}
};
// Stop current log
KsCommandStatus cmdStopLog = WaitForCommand(1, TRUE, StopLog());
if (!cmdStopLog.Error)
{
// Log for 10 seconds
KsCommandStatus cmdLog = Log(3, Channels, 0, 0, KsLogTriggerType::logImmediately, 10);
cmdLog = WaitForCommand(11, TRUE, cmdLog);
if (cmdLog.Done)
{
// Open log space
HANDLE hLogMem = RtOpenSharedMemory(SHM_MAP_READ, FALSE, L"KSLogSpace", (void**)&LogData);
double* data = (double*)malloc(sizeof(double) * 3 * (cmdLog.ValueLength));
memcpy((void*)data, (void*)LogData, sizeof(double) * 3 * (cmdLog.ValueLength));
RtCloseHandle(hLogMem); // Close log space
// Access to log data
free(data);
}
}
使用需求
RT | Win32 | |
---|---|---|
最低支援版本 | 4.0 | 4.0 |
標頭檔 | ksapi.h | ksapi.h |
程式庫 | KsApi_Rtss.lib | KsApi.lib |
參見