//-------------------------------------------------------------------------------------------------//
        public override ExecuteCommandInfo ProcessCommand(ExecuteCommandInfo executeCommandInfo)
        {
            const string STRLOG_MethodName = "ProcessCommand";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            CommandInfo commandInfo = (CommandInfo)executeCommandInfo;

            bool success = true;
            string errorMessage = null;

            try
            {
                //
                // Process the execute command
                //
                ExecuteCommands executeCommand = (ExecuteCommands)commandInfo.command;

                switch (executeCommand)
                {
                    case ExecuteCommands.CreateConnection:

                        //
                        // Create a connection to the RedLion controller
                        //
                        if ((success = this.redLion.CreateConnection()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.CloseConnection:

                        //
                        // Close the connection to the RedLion controller
                        //
                        if ((success = this.redLion.CloseConnection()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ResetACDrive:

                        //
                        // Reset the AC drive controller
                        //
                        if ((success = this.redLion.ResetACDrive()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ConfigureACDrive:

                        //
                        // Get AC drive configuration from parameters
                        //
                        RedLion.ACDriveConfigs acDriveConfig = (RedLion.ACDriveConfigs)commandInfo.parameters[0];

                        //
                        // Configure the AC drive
                        //
                        if ((success = this.redLion.ConfigureACDrive(acDriveConfig)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StartACDrive:

                        //
                        // Get AC drive mode from parameters
                        //
                        RedLion.ACDriveModes acDriveMode = (RedLion.ACDriveModes)commandInfo.parameters[0];

                        //
                        // Start the AC drive
                        //
                        if ((success = this.redLion.StartACDrive(acDriveMode)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StopACDrive:

                        //
                        // Get AC drive mode from parameters
                        //
                        acDriveMode = (RedLion.ACDriveModes)commandInfo.parameters[0];

                        //
                        // Stop the AC drive
                        //
                        if ((success = this.redLion.StopACDrive(acDriveMode)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.TakeMeasurement:

                        //
                        // Take a measurement
                        //
                        RedLion.Measurements measurement = new RedLion.Measurements();
                        if ((success = this.redLion.TakeMeasurement(ref measurement)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        else
                        {
                            //
                            // Add the measurement values to results - ensure the order of the measurement values is the
                            // same as in EquipmentManager.cs
                            //
                            commandInfo.results = new object[] {
                                measurement.voltageMut,
                                measurement.currentMut,
                                measurement.powerFactorMut,
                                measurement.voltageVsd,
                                measurement.currentVsd,
                                measurement.powerFactorVsd,
                                measurement.speed,
                                measurement.torque
                            };
                        }
                        break;

                    default:

                        //
                        // Unknown command
                        //
                        errorMessage = STRERR_UnknownCommand + executeCommand.ToString();
                        success = false;
                        break;
                }
            }
            catch (Exception ex)
            {
                success = false;
                errorMessage = ex.Message;
            }

            //
            // Update success of command execution
            //
            executeCommandInfo.success = success;

            string logMessage = STRLOG_Success + success.ToString();
            if (success == false)
            {
                executeCommandInfo.errorMessage = errorMessage;
                logMessage += Logfile.STRLOG_Spacer + STRLOG_ErrorMessage + errorMessage;
            }

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return executeCommandInfo;
        }
        //-------------------------------------------------------------------------------------------------//
        public override ExecuteCommandInfo ProcessCommand(ExecuteCommandInfo executeCommandInfo)
        {
            const string STRLOG_MethodName = "ProcessCommand";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            CommandInfo commandInfo = (CommandInfo)executeCommandInfo;

            bool success = true;
            string errorMessage = null;

            try
            {
                //
                // Process the execute command
                //
                ExecuteCommands executeCommand = (ExecuteCommands)commandInfo.command;

                switch (executeCommand)
                {
                    case ExecuteCommands.CreateConnection:

                        //
                        // Create a connection to the RedLion controller
                        //
                        if ((success = this.redLion.CreateConnection()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.CloseConnection:

                        //
                        // Close the connection to the RedLion controller
                        //
                        if ((success = this.redLion.CloseConnection()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ResetACDrive:

                        //
                        // Reset the AC drive
                        //
                        if ((success = this.redLion.ResetACDrive()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ConfigureACDrive:

                        //
                        // Get AC drive configuration from parameters
                        //
                        RedLion.ACDriveConfigs acCDriveConfig = (RedLion.ACDriveConfigs)commandInfo.parameters[0];

                        //
                        // Configure the AC drive with the specified configuration
                        //
                        if ((success = this.redLion.ConfigureACDrive(acCDriveConfig)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StartACDrive:

                        //
                        // Start the AC drive
                        //
                        if ((success = this.redLion.StartACDrive()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StopACDrive:

                        //
                        // Stop the AC drive
                        //
                        if ((success = this.redLion.StopACDrive()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ResetDCDriveMut:

                        //
                        // Reset the DC drive
                        //
                        if ((success = this.redLion.ResetDCDriveMut()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.ConfigureDCDriveMut:

                        //
                        // Get DC drive configuration from parameters
                        //
                        RedLion.DCDriveMutConfigs dcDriveMutConfig = (RedLion.DCDriveMutConfigs)commandInfo.parameters[0];

                        //
                        // Configure the AC drive with the specified configuration
                        //
                        if ((success = this.redLion.ConfigureDCDriveMut(dcDriveMutConfig)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StartDCDriveMut:

                        //
                        // Get DC drive mode from parameters
                        //
                        RedLion.DCDriveMutModes dcDriveMutMode = (RedLion.DCDriveMutModes)commandInfo.parameters[0];

                        //
                        // Start the DC drive
                        //
                        if ((success = this.redLion.StartDCDriveMut(dcDriveMutMode)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.StopDCDriveMut:

                        //
                        // Stop the DC drive
                        //
                        if ((success = this.redLion.StopDCDriveMut()) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.SetSpeedACDrive:

                        //
                        // Get speed from parameters
                        //
                        int speedACDrive = (int)commandInfo.parameters[0];

                        //
                        // Set the speed of the AC drive
                        //
                        if ((success = this.redLion.SetSpeedACDrive(speedACDrive)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.SetSpeedDCDriveMut:

                        //
                        // Get speed from parameters
                        //
                        int speedDCDriveMut = (int)commandInfo.parameters[0];

                        //
                        // Set the speed of the DC drive
                        //
                        if ((success = this.redLion.SetSpeedDCDriveMut(speedDCDriveMut)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.SetTorqueDCDriveMut:

                        //
                        // Get torque from parameters
                        //
                        int torqueDCDriveMut = (int)commandInfo.parameters[0];

                        //
                        // Set the torque of the DC drive
                        //
                        if ((success = this.redLion.SetTorqueDCDriveMut(torqueDCDriveMut)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.SetFieldDCDriveMut:

                        //
                        // Get torque from parameters
                        //
                        int fieldDCDriveMut = (int)commandInfo.parameters[0];

                        //
                        // Set the field of the DC drive
                        //
                        if ((success = this.redLion.SetFieldDCDriveMut(fieldDCDriveMut)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        break;

                    case ExecuteCommands.TakeMeasurement:

                        //
                        // Take a measurement
                        //
                        RedLion.Measurements measurement = new RedLion.Measurements();
                        if ((success = this.redLion.TakeMeasurement(ref measurement)) == false)
                        {
                            errorMessage = this.redLion.GetLastError();
                        }
                        else
                        {
                            //
                            // Add the measurement values to results
                            //
                            commandInfo.results = new object[] {
                                measurement.speed,
                                measurement.voltage,
                                measurement.fieldCurrent,
                                measurement.load
                            };
                        }
                        break;

                    default:

                        //
                        // Unknown command
                        //
                        errorMessage = STRERR_UnknownCommand + executeCommand.ToString();
                        success = false;
                        break;
                }
            }
            catch (Exception ex)
            {
                success = false;
                errorMessage = ex.Message;
            }

            //
            // Update success of command execution
            //
            executeCommandInfo.success = success;

            string logMessage = STRLOG_Success + success.ToString();
            if (success == false)
            {
                executeCommandInfo.errorMessage = errorMessage;
                logMessage += Logfile.STRLOG_Spacer + STRLOG_ErrorMessage + errorMessage;
            }

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return executeCommandInfo;
        }