Example #1
0
        async Task RunAutoConfig()
        {
            // Add a very short async delay to give give UI a chance to update
            //(:TODO: Rewrite autoconfig as async)
            await Task.Delay(1);

            var path             = Station.ActiveStation.ActiveTask.ActivePathProcedure;
            var autoConfig       = new CKT_AutoConfiguration(path, false);
            var startJointTarget = GetStartJointTarget();

            if (startJointTarget != null)
            {
                autoConfig.ExternalStartJointTarget = startJointTarget;
            }
            if (autoConfig.ExternalStartJointTarget == null && !autoConfig.FirstTargetConfigured)
            {
                return;
            }

            bool success = await autoConfig.ExecuteAsync();

            if (success)
            {
                //set current (=last target in path) jointvalues to the controller
                RsTask           task = (RsTask)path.Parent;
                RsIrc5Controller ctrl = (RsIrc5Controller)task.Parent;
                foreach (RsMechanicalUnit mu in ctrl.FindMechanicalUnitsByMechanism(task.Mechanism))
                {
                    await RobotStudio.API.Internal.ControllerHelper.CommitJointValues(mu.Mechanism);
                }
            }
        }
Example #2
0
        public static string CheckControllerStatus()
        {
            Station          station          = Station.ActiveStation as Station;
            RsTask           task             = station.ActiveTask;
            RsIrc5Controller rsIrc5Controller = (RsIrc5Controller)task.Parent;

            return("Controller: " + rsIrc5Controller.SystemState.ToString());
        }
Example #3
0
        public static string LoadModuleFromFile(string moduleFilePath)
        {
            //Get Station object
            Station station = Project.ActiveProject as Station;

            //Check for existance of Module
            if (System.IO.File.Exists(moduleFilePath))
            {
                try
                {
                    RsTask task = station.ActiveTask;
                    if (task != null)
                    {
                        RsIrc5Controller rsIrc5Controller = (RsIrc5Controller)task.Parent;
                        ABB.Robotics.Controllers.Controller controller =
                            new ABB.Robotics.Controllers.Controller(new Guid(rsIrc5Controller.SystemId.ToString()));

                        if (controller != null)
                        {
                            //Request Mastership
                            using (ABB.Robotics.Controllers.Mastership m =
                                       ABB.Robotics.Controllers.Mastership.Request(controller.Rapid))
                            {
                                if (controller.Rapid.ExecutionStatus ==
                                    ABB.Robotics.Controllers.RapidDomain.ExecutionStatus.Stopped)
                                {
                                    //Load Module if Rapid Execution State is stopped
                                    ABB.Robotics.Controllers.RapidDomain.Task vTask = controller.Rapid.GetTask(task.Name);
                                    bool loadResult = vTask.LoadModuleFromFile(moduleFilePath,
                                                                               ABB.Robotics.Controllers.RapidDomain.RapidLoadMode.Replace);
                                    Thread.Sleep(1000);
                                }
                            }
                        }
                    }
                }
                catch (ABB.Robotics.GeneralException gex)
                {
                    Logger.AddMessage(new LogMessage(gex.Message.ToString()));
                }

                catch (Exception ex)
                {
                    Logger.AddMessage(new LogMessage(ex.Message.ToString()));
                }
            }
            return("Loading module: " + moduleFilePath);
        }
Example #4
0
        /// <summary>
        /// Get instance of virtual controller of active system in RobotStudio
        /// </summary>
        /// <returns>Virtual controller</returns>
        private static Controller GetVirtualController()
        {
            //variable used to capture the active controller
            Controller controller = default(Controller);
            Station    station    = Station.ActiveProject as Station;

            //get active task controller
            RsIrc5Controller rsActiveController = station.ActiveTask.Parent as RsIrc5Controller;

            if (rsActiveController != null)
            {
                //Create an object of networkscanner to scan the network for controllers
                //controllers can either be a virtual or real
                NetworkScanner scanner = null;
                if (scanner == null)
                {
                    scanner = new NetworkScanner();
                }
                scanner.Scan();

                //Get virtual controllers from scanner object
                ControllerInfo[] arrControllerInfo = scanner.GetControllers(NetworkScannerSearchCriterias.Virtual);

                if (arrControllerInfo.Length > 0)
                {
                    for (int i = 0; i < arrControllerInfo.Length; i++)
                    {
                        string virtSystemId = string.Concat("{", arrControllerInfo[i].SystemId.ToString().ToUpper(), "}");

                        //Compares the SystemId of virtual controller and RobotStudio Controller
                        if (arrControllerInfo[i].BaseDirectory != null && (virtSystemId.ToUpper().Equals(
                                                                               rsActiveController.SystemId, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            controller = ControllerFactory.CreateFrom(arrControllerInfo[i]);
                            return(controller);
                        }
                    }
                }
            }
            return(controller);
        }
Example #5
0
        public static string SaveRapid(string filePath)
        {
            string result = "Rapid saved: false";

            try
            {
                Station          station          = Project.ActiveProject as Station;
                RsTask           rsTask           = station.ActiveTask;
                RsIrc5Controller rsIrc5Controller = (RsIrc5Controller)rsTask.Parent;

                ABB.Robotics.Controllers.Controller controller = new ABB.Robotics.Controllers.Controller(new Guid(rsIrc5Controller.SystemId.ToString()));
                Task   controllerTask = controller.Rapid.GetTask(rsTask.Name);
                string name           = controllerTask.Name;

                if (!Directory.Exists(filePath))
                {
                    Directory.CreateDirectory(filePath);
                }

                filePath = filePath + @"\";
                int i = 1;

                while (Directory.Exists(filePath + "simulation-" + i))
                {
                    i++;
                }
                Directory.CreateDirectory(filePath + "simulation-" + i);
                controllerTask.SaveProgramToFile(filePath + "simulation-" + i);
                result = filePath + "simulation-" + i;
            }
            catch (ABB.Robotics.GeneralException gex)
            {
                Logger.AddMessage(new LogMessage(gex.Message.ToString()));
            }
            catch (Exception ex)
            {
                Logger.AddMessage(new LogMessage(ex.Message.ToString()));
            }
            return(result);
        }
Example #6
0
        public static string LoadStation(string stationFilepath)
        {
            Station station = Station.Load(stationFilepath, false);

            if (station != null)
            {
                Project.ActiveProject = station;
                GraphicControl gc = new GraphicControl();
                gc.RootObject = station;
                DocumentWindow docwindow = new DocumentWindow();
                docwindow.Control = gc;
                docwindow.Caption = System.IO.Path.GetFileName("View");
                UIEnvironment.Windows.Add(docwindow);
                string test = ABB.Robotics.RobotStudio.Controllers.ControllerType.StationVC.ToString();

                Logger.AddMessage(new LogMessage(test, "MyKey"));
            }

            RsTask           task         = station.ActiveTask;
            RsIrc5Controller rscontroller = (RsIrc5Controller)task.Parent;

            return("Loading station: " + stationFilepath);
        }
Example #7
0
        //创建虚拟信号
        public static void VirtualSignals()
        {
            #region VirtualSignals Example
            Project.UndoContext.BeginUndoStep("VirtualSignals");
            try
            {
                Station station = Project.ActiveProject as Station;
                #region ISStep1
                if (Simulator.DataRecorder.Sinks.Contains("SignalSink"))
                {
                    Simulator.DataRecorder.Sinks.Remove(Simulator.DataRecorder.Sinks["SignalSink"]);
                }
                #endregion

                #region ISStep2

                Simulator.DataRecorder.Sinks.Add(new DataRecorderSink("SignalSink"));
                #endregion
                DataRecorderSink signalSink            = (DataRecorderSink)Simulator.DataRecorder.Sinks["SignalSink"];
                BuiltInControllerSourceSignals signals = station.BuiltInDataRecorderSignals.ControllerSignals;
                signalSink.Enabled = true;
                signalSink.DataRecorder.Start();

                RsTask           task             = station.ActiveTask;
                RsIrc5Controller rsIrc5Controller = (RsIrc5Controller)task.Parent;
                ABB.Robotics.Controllers.Controller controller =
                    new ABB.Robotics.Controllers.Controller(new Guid(rsIrc5Controller.SystemId.ToString()));
                Logger.AddMessage("isVitural:" + controller.IsVirtual);

                BuiltInDataRecorderMotionSignal energy = BuiltInDataRecorderMotionSignal.TotalMotorPowerConsumption;
                BuiltInDataRecorderMotionSignal speed  = BuiltInDataRecorderMotionSignal.TCPSpeedInCurrentWorkObject;
                // DataRecorderSignal dr = signals.GetMotionSignal(new Guid(rsIrc5Controller.SystemId.ToString()), controller.MotionSystem.ActiveMechanicalUnit.Name, energy);
                RsIrc5ControllerCollection controllerlist = station.Irc5Controllers;
                foreach (RsIrc5Controller irc5Controller in controllerlist)
                {
                    DataRecorderSignal energy_consumption = signals.GetMotionSignal(new Guid(rsIrc5Controller.SystemId.ToString()), controller.MotionSystem.ActiveMechanicalUnit.Name, energy);
                    DataRecorderSignal TcpSpeed           = signals.GetMotionSignal(new Guid(rsIrc5Controller.SystemId.ToString()), controller.MotionSystem.ActiveMechanicalUnit.Name, speed);
                    if (TcpSpeed != null && !signalSink.Signals.Contains(TcpSpeed) && energy_consumption != null && !signalSink.Signals.Contains(energy_consumption))
                    {
                        signalSink.Signals.Add(energy_consumption);
                        signalSink.Signals.Add(TcpSpeed);
                        Logger.AddMessage("TCP_ID:" + TcpSpeed.Id);
                        Logger.AddMessage("TCP_DisplayPath:" + TcpSpeed.DisplayPath);
                        Logger.AddMessage("ENERGY_ID:" + energy_consumption.Id);
                        Logger.AddMessage("ENERGY_DisplayPath:" + energy_consumption.DisplayPath);
                    }
                    else
                    {
                        Logger.AddMessage("TcpSpeed为空");
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.AddMessage(new LogMessage(ex.Message.ToString()));
                Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
            }
            finally
            {
                Project.UndoContext.EndUndoStep();
            }
            #endregion
        }
Example #8
0
        public static bool LoadProgramFromFile(string filePath)
        {
            bool result = false;

            Project.UndoContext.BeginUndoStep("LoadProgramFromFile");
            //Get Station object
            #region LoadProgramFromFileStep1
            Station station = Project.ActiveProject as Station;
            #endregion

            //Check for existance of Program
            if (System.IO.File.Exists(filePath))
            {
                try
                {
                    RsTask task = station.ActiveTask;

                    if (task != null)
                    {
                        //Get RsIrc5Controller instance
                        #region LoadProgramFromFileStep2
                        RsIrc5Controller rsIrc5Controller = (RsIrc5Controller)task.Parent;
                        //Get virtual controller instance from  RsIrc5Controller
                        ABB.Robotics.Controllers.Controller controller =
                            new ABB.Robotics.Controllers.Controller(new Guid(rsIrc5Controller.SystemId.ToString()));
                        //get task
                        ABB.Robotics.Controllers.RapidDomain.Task vTask = controller.Rapid.GetTask(task.Name);
                        #endregion

                        //Request Mastership
                        #region LoadProgramFromFileStep3
                        using (ABB.Robotics.Controllers.Mastership m =
                                   ABB.Robotics.Controllers.Mastership.Request(controller.Rapid))
                        #endregion
                        {
                            if (controller.Rapid.ExecutionStatus ==
                                ABB.Robotics.Controllers.RapidDomain.ExecutionStatus.Stopped)
                            {
                                //Load Program if Rapid Execution is stopped
                                #region LoadProgramFromFileStep4
                                vTask.LoadProgramFromFile(filePath,
                                                          ABB.Robotics.Controllers.RapidDomain.RapidLoadMode.Replace);
                                #endregion
                                System.Threading.Thread.Sleep(1000);
                                result = true;
                            }
                        }
                    }
                }
                catch (ABB.Robotics.GeneralException gex)
                {
                    Logger.AddMessage(new LogMessage(gex.Message.ToString()));
                    Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
                    result = false;
                }
                catch (Exception ex)
                {
                    Logger.AddMessage(new LogMessage(ex.Message.ToString()));
                    Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
                    result = false;
                }
                finally
                {
                    Project.UndoContext.EndUndoStep();
                }
            }
            return(result);
        }