recorder.cpp
A data recorder example
#include "rsi.h"
using namespace RSI::RapidCode::SynqNet;
#define VALUES_PER_RECORD 3
#define RECORD_PERIOD_SAMPLES 100
#define RECORD_TIME 3000
#define RSI_BOARD (0)
void recorderMain()
{
long axis0ActualPositionAddr;
long axis0CommandVelocityAddr;
long axis1ActualPositionAddr;
long recordsAvailable;
long *recordDataPtr;
long recordData[VALUES_PER_RECORD];
try
{
MotionController *controller;
controller = MotionController::CreateFromBoard(RSI_BOARD);
controller->RecorderPeriodSet(RECORD_PERIOD_SAMPLES);
controller->RecorderCircularBufferSet(false);
controller->RecorderDataCountSet(VALUES_PER_RECORD);
axis0ActualPositionAddr = controller->AddressFromStringGet("Axis[0].ActualPosition", "c:\\synqnet\\stdmei.map");
axis0CommandVelocityAddr = controller->AddressFromStringGet("Axis[0].CommandVelocity", "c:\\synqnet\\stdmei.map");
axis1ActualPositionAddr = controller->AddressFromStringGet("Axis[1].ActualPosition", "c:\\synqnet\\stdmei.map");
controller->RecorderDataAddressSet(0, axis0ActualPositionAddr);
controller->RecorderDataAddressSet(1, axis0CommandVelocityAddr);
controller->RecorderDataAddressSet(2, axis1ActualPositionAddr);
controller->RecorderStart();
controller->OS->Sleep(RECORD_TIME);
controller->RecorderStop();
long recordsAvailable = controller->RecorderRecordCountGet();
printf("There are %ld Records available.\n", recordsAvailable);
for(long i = 0; i < recordsAvailable ; i++)
{
recordDataPtr = controller->RecorderRecordDataGet();
memcpy(&recordData, recordDataPtr, sizeof(recordData));
printf("Record %ld: Axis 0 ActPos: %ld ", i, recordData[0]);
printf("Axis 0 CmdVel: %f ", (float)*((float*)&recordData[1]));
printf("Axis 1 ActPos: %ld\n", recordData[2]);
}
}
catch (RsiError *err)
{
printf("%s\n", err->text);
}
}