protected override void OnData(double time, DataRecorderSignal signal, object value)
            {
                try
                {
                    string[] signalId = signal.Id.ToString().Split('\\');

                    /*  for (int i = 0; i < signalId.Length; i++)
                     * {
                     *    Logger.AddMessage(signalId[i]);
                     * }*/
                    //Logger.AddMessage("时间为" + time.ToString());
                    time_list.Add(time.ToString());


                    if (signalId[signalId.Length - 1].ToString().Equals("3"))
                    {
                        //Logger.AddMessage(new LogMessage("能耗值为:" + value.ToString()));
                        energy_list.Add(value.ToString());
                    }
                    else if (signalId[signalId.Length - 1].ToString().Equals("9878"))
                    {
                        //Logger.AddMessage("速度为" + value.ToString());
                        if (value == null || value.ToString() == "0")
                        {
                            speed_list.Add("0");
                        }
                        else
                        {
                            speed_list.Add(value.ToString());
                        }
                    }
                    else
                    {
                        Logger.AddMessage("未找到");
                    }
                }
                catch (Exception ex)
                {
                    Logger.AddMessage(new LogMessage(ex.Message.ToString()));
                }
            }
        //创建虚拟信号
        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
        }