sequencerDigitalOutput.cpp
Fire a Digital Output pulse when an Axis' Actual Position is exceeded
#include "rsi.h"
#define SEQUENCER 0
#define TRIGGERS 100
#define BIT_MASK RSIXmpControlIOMaskUSER0_OUT
using namespace RSI::RapidCode::SynqNet;
void sequencerDigitalOutputMain()
{
try
{
MotionController *controller ;
Axis *axis ;
long controllerDigitalOutputAddr;
long axisActualPositionAddr;
controller = MotionController::CreateFromBoard(0);
axis = controller->AxisGet(0);
IOPoint *userOut;
controllerDigitalOutputAddr = controller->AddressFromStringGet("SystemData.IO.HostOutput[0]", "c:\\mei\\xmp\\bin\\winnt\\stdmei.map");
axisActualPositionAddr = axis->AddressGet(RSIAxisAddressTypeACTUAL_POSITION);
controller->SequencerEnableSet(SEQUENCER, true);
for(int i = 0; i < TRIGGERS; i++)
{
controller->CommandWaitLong(SEQUENCER,
RSICommandOperatorGREATER_OR_EQUAL,
axisActualPositionAddr,
(i + 1) * 100 );
controller->CommandComputeLong(SEQUENCER,
RSICommandOperatorOR,
controllerDigitalOutputAddr,
controllerDigitalOutputAddr,
BIT_MASK );
controller->CommandDelay(SEQUENCER, 0.50);
controller->CommandComputeLong(SEQUENCER,
RSICommandOperatorAND,
controllerDigitalOutputAddr,
controllerDigitalOutputAddr,
~(BIT_MASK) );
}
controller->SequencerStart(0);
printf("press a key to stop and delete sequencer \n");
while(controller->OS->KeyGet(RSIWaitPOLL) < 0)
{
controller->OS->Sleep(1);
}
controller->SequencerStop(0);
controller->SequencerEnableSet(0, false);
}
catch (RsiError *err)
{
printf("%s\n", err->text);
}
}