Exemplo n.º 1
0
        static void Main(string[] args)
        {
            // GLOBAL VARIABLES
            double analogMaxValue        = 65536; // The analog inputs used are 16 bit wide.
            double currentVelocity       = 0;     // Used to update velocity based on analog input value.
            double analogCurrentValue    = 0;     // Used to store current analog input value.
            double analogValuePrecentage = 0;     // analogCurrentValue/anlogMaxValue.
            double velocityAbsoluteSum   = 0;     // Absolute sum of min and max velocities.

            // CONSTANTS
            const int AXIS_NUMBER    = 0;       // Specify which axis/motor to control.
            const int NODE_NUMBER    = 0;       // Specify which IO Terminal/Node to control. 0 for RSI AKD DemoBench
            const int ANALOG_INPUT_0 = 0;       // Specify which Analog Input to read.
            const int MIN_VEL        = -10;     // Specify Min Velocity.
            const int MAX_VEL        = 10;      // Specify Max Velocity.
            const int ACC            = 100;     // Specify Acceleration/Deceleration value.
            const int USER_UNITS     = 1048576; // Specify your counts per unit / user units.  (the motor used in this sample app has 1048576 encoder pulses per revolution)


            // Initialize RapidCode Objects
            MotionController controller = MotionController.CreateFromSoftware(/*@"C:\RSI\X.X.X\"*/); // Insert the path location of the RMP.rta (usually the RapidSetup folder)

            SampleAppsCS.HelperFunctions.CheckErrors(controller);                                    // [Helper Function] Check that the controller has been initialized correctly.
            SampleAppsCS.HelperFunctions.StartTheNetwork(controller);                                // [Helper Function] Initialize the network.

            Axis axis = controller.AxisGet(AXIS_NUMBER);                                             // Initialize the axis.

            SampleAppsCS.HelperFunctions.CheckErrors(axis);                                          // [Helper Function] Check that the axis has been initialized correctly.

            IO ioNode = controller.IOGet(NODE_NUMBER);                                               // Initialize the axis.

            SampleAppsCS.HelperFunctions.CheckErrors(ioNode);                                        // [Helper Function] Check that the axis has been initialized correctly.

            try
            {
                // CONSOLE OUT
                Console.WriteLine("Velocity Move Initialized.");
                Console.WriteLine("Max Speed = " + MAX_VEL);
                Console.WriteLine("Min Speed = " + MIN_VEL);
                Console.WriteLine("\nPress SPACEBAR to exit.");

                // READY AXIS
                axis.UserUnitsSet(USER_UNITS);                                              // Specify the counts per Unit.
                axis.ErrorLimitTriggerValueSet(1);                                          // Specify the position error limit trigger. (Learn more about this on our support page)
                axis.PositionSet(0);                                                        // Make sure motor starts at position 0 everytime.
                axis.DefaultAccelerationSet(ACC);                                           // Set Acceleration.
                axis.DefaultDecelerationSet(ACC);                                           // Set Deceleration.
                axis.Abort();                                                               // If there is any motion happening, abort it.
                axis.ClearFaults();                                                         // Clear faults.
                axis.AmpEnableSet(true);                                                    // Enable the motor.

                do
                {
                    while (!Console.KeyAvailable)
                    {
                        velocityAbsoluteSum   = Math.Abs(MIN_VEL) + Math.Abs(MAX_VEL);
                        analogCurrentValue    = (double)ioNode.AnalogInGet(ANALOG_INPUT_0);                        // Get analog in value.
                        analogValuePrecentage = analogCurrentValue / analogMaxValue;                               // Get percentage of analog voltage.

                        /*
                         *  REPRESENTATION OF ANALOG INPUT VALUE BASED ON DIGITAL OUTPUT VOLTAGE
                         *
                         *  AI Value     -->   0 ............ 32,769 ............ 65,536
                         *  DO Voltage   -->   0 ........8 9 10   -10 -9 -8...... 0
                         */

                        if (analogValuePrecentage * 100 > 99 || analogValuePrecentage * 100 < 1)                        // If the Analog Input value is close to 0 or 65,536 then velocity is ZERO.
                        {
                            currentVelocity = 0;
                        }

                        else if (analogValuePrecentage * 100 < 50)                                                      // If the Analog Input value is less than 50% of 65,536 then velocity varies from 0 to 10.
                        {
                            currentVelocity = velocityAbsoluteSum * analogValuePrecentage;
                        }

                        else                                                                                            // If the Analog Input value is greater than 50% of 65,536 then velocity varies from 0 to -10.
                        {
                            currentVelocity = -velocityAbsoluteSum + (velocityAbsoluteSum * analogValuePrecentage);
                        }

                        axis.MoveVelocity(currentVelocity);                                                             // Update Velocity.
                    }
                } while (Console.ReadKey(true).Key != ConsoleKey.Spacebar);                                             // If the Spacebar key is pressed, exit.

                axis.Abort();                                                                                           // Abort Motion.
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);                           // If there are any exceptions/issues this will be printed out.
            }
        }