示例#1
0
 public bool MoveAbsolute(PolarizerPaddlePositions positions)
 {
     try
     {
         int encodedPosition = GetEncodedPosition(positions, false);
         UpdateOutput(string.Format("Move paddles to {0},{1},{2}...", positions.Paddle1, positions.Paddle2, positions.Paddle3));
         ELLDevicePort.SendStringI32(Address, "ma", encodedPosition);
         return(WaitForPositions());
     }
     catch (OverflowException)
     {
         UpdateOutput(string.Format("Parameter out of range {0},{1},{2}...", positions.Paddle1, positions.Paddle2, positions.Paddle3));
     }
     return(false);
 }
示例#2
0
 public bool MoveRelative(PolarizerPaddlePositions displacements)
 {
     try
     {
         int encodedPosition = GetEncodedPosition(displacements, true);
         UpdateOutput(string.Format("Move paddles by {0},{1},{2}...", displacements.Paddle1, displacements.Paddle2, displacements.Paddle3));
         ELLDevicePort.SendStringI32(Address, "mr", encodedPosition);
         return(WaitForPositions());
     }
     catch (OverflowException)
     {
         UpdateOutput(string.Format("Parameter out of range {0},{1},{2}...", displacements.Paddle1, displacements.Paddle2, displacements.Paddle3));
     }
     return(false);
 }
示例#3
0
        private int GetEncodedPosition(PolarizerPaddlePositions position, bool signed)
        {
            int i1, i2, i3;

            if (signed)
            {
                i1 = UnitToPulse(position.Paddle1, -0x200, 0x1FF) & paddleMask;
                i2 = (UnitToPulse(position.Paddle2, -0x200, 0x1FF) & paddleMask) << 10;
                i3 = (UnitToPulse(position.Paddle3, -0x200, 0x1FF) & paddleMask) << 20;
            }
            else
            {
                i1 = UnitToPulse(position.Paddle1, 0, 0x3FF) & paddleMask;
                i2 = (UnitToPulse(position.Paddle2, 0, 0x3FF) & paddleMask) << 10;
                i3 = (UnitToPulse(position.Paddle3, 0, 0x3FF) & paddleMask) << 20;
            }
            return((i1 | i2) | i3);
        }
示例#4
0
 private bool WaitForPositions(int msTimeout = MoveTimeout)
 {
     try
     {
         List <string> responses = new List <string> {
             "GS", "PO"
         };
         int counter = 10;
         while (true)
         {
             string msg = ELLDevicePort.WaitForResponse(Address, responses, msTimeout);
             if (!string.IsNullOrEmpty(msg))
             {
                 bool returnValue;
                 if (TestStatus(msg, "gp", true, ref counter, out returnValue))
                 {
                     return(returnValue);
                 }
                 if (msg.Substring(1, 2) == "PO")
                 {
                     if (msg.Length != 11)
                     {
                         return(false);
                     }
                     PolarizerPaddlePositions polarizerPaddlePositions = GetPositions(msg.Substring(3).ToBytes(8).ToInt(true));
                     UpdateParameter(MessageUpdater.UpdateTypes.PolarizerPositions, Address, polarizerPaddlePositions);
                     return(true);
                 }
             }
         }
     }
     catch (ELLException ex)
     {
         UpdateOutput($"Get Device Status: {ex.Message}", true);
     }
     return(false);
 }