private async Task <long> ReceiveDataAsync() { InputFrame receivedFrame = await rsiAdapter.ReceiveDataAsync(); if (!Limits.CheckAxisPosition(receivedFrame.AxisPosition)) { Uninitialize(); throw new InvalidOperationException("Axis position limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.AxisPosition}"); } if (!Limits.CheckPosition(receivedFrame.Position)) { Uninitialize(); throw new InvalidOperationException("Available workspace limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.Position}"); } lock (receivedDataSyncLock) { position = receivedFrame.Position; axisPosition = receivedFrame.AxisPosition; } FrameReceived?.Invoke(this, new FrameReceivedEventArgs { ReceivedFrame = receivedFrame }); return(receivedFrame.IPOC); }
/// <summary> /// Receives data (IPOC, cartesian and axis position) from the robot asynchronously, /// raises <see cref="KUKARobot.FrameRecived">FrameReceived</see> event /// </summary> private async Task ReceiveDataAsync() { InputFrame receivedFrame = await rsiAdapter.ReceiveDataAsync(); RobotVector correction = receivedFrame.Position - position; if (!Limits.CheckCorrection(correction)) { Uninitialize(); throw new InvalidOperationException("Correction limit has been exceeded:" + $"{Environment.NewLine}{correction}"); } if (!Limits.CheckAxisPosition(receivedFrame.AxisPosition)) { Uninitialize(); throw new InvalidOperationException("Axis position limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.AxisPosition}"); } if (!Limits.CheckPosition(receivedFrame.Position)) { Uninitialize(); throw new InvalidOperationException("Available workspace limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.Position}"); } lock (receivedDataSyncLock) { IPOC = receivedFrame.IPOC; position = receivedFrame.Position; axisPosition = receivedFrame.AxisPosition; } FrameReceived?.Invoke(receivedFrame); }
private long ReceiveDataAsync() { correctionBuffor.Add(correction); RobotVector currentCorrection = RobotVector.Zero; if (correctionBuffor.Count == 8) { currentCorrection = correctionBuffor[0]; correctionBuffor.RemoveAt(0); } InputFrame receivedFrame = new InputFrame { Position = position + currentCorrection, AxisPosition = RobotAxisVector.Zero, IPOC = 0 }; if (!Limits.CheckAxisPosition(receivedFrame.AxisPosition)) { Uninitialize(); throw new InvalidOperationException("Axis position limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.AxisPosition}"); } if (!Limits.CheckPosition(receivedFrame.Position)) { Uninitialize(); throw new InvalidOperationException("Available workspace limit has been exceeded:" + $"{Environment.NewLine}{receivedFrame.Position}"); } lock (receivedDataSyncLock) { position = receivedFrame.Position; axisPosition = receivedFrame.AxisPosition; } FrameReceived?.Invoke(this, new FrameReceivedEventArgs { ReceivedFrame = receivedFrame }); return(receivedFrame.IPOC); }