#include "..\..\..\SDK\SDK_ApossC.mc"
long busIds[] = {1, 4};
long numberOfBusIds = arraylen(busIds);
void errorHandler();
void faultMonitoring();
void posAbsStartForAllNodes(long pos);
void posRelStartForAllNodes(long distance);
void verifyAllNodesStateAchieved(long state);
void verfiyAllNodesTargetReached();
long main(void)
{
long handle;
long actState=0;
long idIndex;
handle = DefCanOut(0, 2);
CanOut(handle, 0, 0x8100);
handle = DefCanOut(100000, 2);
CanOut(handle, 0, 0x8100);
Delay(2000);
ErrorClear();
InterruptSetup(ERROR, errorHandler);
InterruptSetup(PERIOD, faultMonitoring, 25);
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
{
}
}
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
}
while(1)
{
posAbsStartForAllNodes(100000);
verfiyAllNodesTargetReached();
posRelStartForAllNodes(-100000);
verfiyAllNodesTargetReached();
}
return(1);
}
void posAbsStartForAllNodes(long pos)
{
long idIndex;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
}
}
void posRelStartForAllNodes(long distance)
{
long idIndex;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
}
}
void verifyAllNodesStateAchieved(long state)
{
long idIndex;
long actState;
long result;
while(result != 1)
{
result = 1;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
result = (actState == state) && result;
}
}
}
void verfiyAllNodesTargetReached()
{
long idIndex;
long result;
print("Wait until all nodes target is reached");
while(result != 1)
{
result = 1;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
}
}
}
void quickStopAllNodes()
{
long idIndex;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
}
}
void faultMonitoring()
{
long idIndex;
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
{
errorHandler();
}
}
}
void errorHandler()
{
long axeNbr = ErrorAxis();
long errNbr = ErrorNo();
long errInfoNbr = ErrorInfo();
long statusWord, idIndex, sdoAbortCode;
quickStopAllNodes();
print("-----------------------------------------------------------");
printf("Error %d: ",errNbr);
print();
print("...Info: ",errInfoNbr, " AxisNo: ", axeNbr);
print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
print();
switch(errNbr)
{
case F_CANIO:
printf("SDO Abort Code 0x%lX: ", sdoAbortCode );
print();
print("Check Can baudrate & Can bus id");
}
if(axeNbr == 0xFF && errNbr != F_CANIO)
{
for(idIndex = 0; idIndex < numberOfBusIds; idIndex++)
{
{
print();
printf("Bus Id %d, Slave device is in fault state\n", busIds[idIndex]);
{
print("...Following Error");
}
}
}
}
ErrorClear();
print();
print(" There is no error handlig → Exit()");
print("-----------------------------------------------------------");
Exit(0);
}