◆ RecorderRecordDataValueGet() [1/3]

virtual int32_t RecorderRecordDataValueGet ( int32_t  index)
pure virtual

Get one value from a retrieved record.

ℹ This function is avaliable in RapidCode and RapidSequencer

Part of the Recorder method group.

RecorderRecordDataValueGet gets one value from a retrieved record.
indexindex of the recorded value, within the record
the value from the index of the record
Sample Code:
// Constants
const int VALUES_PER_RECORD = 2; // How many values to store in each record.
const int RECORD_PERIOD_SAMPLES = 1; // How often to record data. (samples between consecutive records)
const int RECORD_TIME = 250; // How long to record. (in milliseconds)
const int INPUT_INDEX = 0;
// Get the host controller addresses for the values we want to record
controller.RecorderCountSet(1); // Number of processed Recorders in the controller.
Axis axis = CreateAndReadyAxis(Constants.AXIS_NUMBER); //Helper function to setup an axis
UInt64 userBufferAddress = controller.AddressGet(RSIControllerAddressType.RSIControllerAddressTypeUSER_BUFFER, 0); // Grabing an memory address to store a simulated IO point.
//Instead of using physical IO we will use simulated IO using a memory address as simulated IO. See the IO sample apps to see how to use a physical IO instead.
IOPoint input = IOPoint.CreateDigitalInput(controller, userBufferAddress, INPUT_INDEX); // Create a simulated IOpoint using userBuffer memory.
//uint firmwareioAddress = controller.FirmwareAddressGet(ioAddress);
if (controller.RecorderEnabledGet() == true) // Check if the recorder is running already. If it is, stop it.
controller.RecorderStop(); // Stop recording.
controller.RecorderReset(); // Reset controller.
controller.RecorderPeriodSet(RECORD_PERIOD_SAMPLES); // Configure recorder to record every 'n' samples (Every 'n' ms)
controller.RecorderCircularBufferSet(false); // Do not use a circular buffer
controller.RecorderDataCountSet(VALUES_PER_RECORD); // Configure the number of values for each record. (how many things to record)
controller.RecorderDataAddressSet(0, axis.AddressGet(RSIAxisAddressType.RSIAxisAddressTypeACTUAL_POSITION)); // Configure the recoder to record values from this address (1st recorded address)
controller.RecorderDataAddressSet(1, input.AddressGet()); // Configure the recoder to record values from this address (2nd recorded address)
controller.RecorderStart(); // Start recording.
controller.OS.Sleep(RECORD_TIME); // Put this thread to sleep for some milliseconds.
int recordsAvailable = controller.RecorderRecordCountGet(); // find out how many records were recorded. (Get the number of records that are stored and ready for reading)
Console.WriteLine("There are {0} Records available.\n", recordsAvailable); // Print the number of records recorded.
for (int i = 0; i < recordsAvailable; i++) // Check every record recorded.
controller.RecorderRecordDataRetrieve(); // Retrieve one record of recorded data.
double positionRecord = controller.RecorderRecordDataDoubleGet(0);// Get the value from the 1st specified address. /use double
var digitalInputsValue = controller.RecorderRecordDataValueGet(1); // Get the value from the 2nd specified address.
if ((digitalInputsValue & input.MaskGet()) == input.MaskGet()) // We are checking to see if the digital input 1 bit changes. If it does then we record the position when that input went high.
i = recordsAvailable; // break from loop.
Console.WriteLine("Your encoder position was: " + positionRecord + " when the input triggered.");
controller.RecorderStop(); // Stop recording.
controller.RecorderReset(); // Reset controller.
See also