Thanks for your replies. They pointed me in the right direction as it seems. The error does not occur anymore but since there was no way to reproduce this error, I can't be sure.
Here is what I did (pseudocode with only relevant parts):
Code
class MxaController {
private KRC_INVERSE _krcInverse;
private RobotState _state;
// this loops runs every 40ms
private void Loop() {
switch (_state) {
case RoboState.IK:
_krcInverse.OnCycle();
if (_krcInverse.DONE) {
if (_krcInverse.ERROR) {
// error handling
}
else
{
MoveRobotToAxisPosition(_krcInverse.AXISPOSITION);
}
}
else if (_krcInverse.ABORTED)
{
// error handling
}
}
}
public void MoveRobotToAxisPosition(E6AXIS axis)
{
// create PLC function block for moving to axis position
// ...
}
public void ComputeIk(E6POS pos)
{
_krcInverse = new KRC_INVERSE();
_krcInverse.AXISGROUPIDX = _axisGroupIdx;
_krcInverse.EXECUTECMD = true;
_krcInverse.POSITION = _nextE6Pos;
_krcInverse.POSVALIDS = false;
_krcInverse.POSVALIDT = false;
_krcInverse.START_AXIS = _lastE6Axis;
_krcInverse.CHECKSOFTEND = true;
_krcInverse.BUFFERMODE = 2;
_state = RobotState.IK;
}
}
Alles anzeigen