FrmRobotTest.cs 10.3 KB
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.Discovery;
using ABB.Robotics.Controllers.EventLogDomain;
using ABB.Robotics.Controllers.IOSystemDomain;
using ABB.Robotics.Controllers.RapidDomain;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text; 
using System.Windows.Forms;

namespace ABBRobotTest
{
    public partial class FrmRobotTest : Form
    {
        public FrmRobotTest()
        {
            InitializeComponent();
        }
        private NetworkScanner scanner = null;
       private Controller controller = null;
        private Task[] tasks = null;
        private NetworkWatcher networkwatcher = null;
        private List<Controller> controllerList = new List<Controller>();
        private void FrmRobotTest_Load(object sender, EventArgs e)
        {
            LoadListView();
            LoadController();
            timer1.Start();
            comboBox1.SelectedIndex = 0;
        }
        private void LoadListView()
        {
            this.listView1.Columns.Clear();
            AddHealder("IPAddress", 100);
            AddHealder("ID", 80);
            //   AddHealder("设备状态", 100);
            AddHealder("Availability", 100);
            AddHealder("IsVirtual", 100);
            AddHealder("SystemName", 100);
            AddHealder("Version", 100);
            AddHealder("ControllerName", 180);
            AddHealder("Statue", 100);
        }
           
         
        private void AddHealder(string name, int widht)
        {
            ColumnHeader preSendwire = new ColumnHeader();
            preSendwire.Text = name;   //设置列标题
            preSendwire.Width = widht;    //设置列宽度
            preSendwire.TextAlign = HorizontalAlignment.Left;   //设置列的对齐方式
            this.listView1.Columns.Add(preSendwire);    //将列头添加到ListView控件。
        }
        private void LoadController()
        {
            this.scanner = new NetworkScanner();
            this.scanner.Scan();
            ControllerInfoCollection controllers = scanner.Controllers;
            int i = 0;
            foreach (ControllerInfo controllerInfo in controllers)
            {
                ListViewItem item = new ListViewItem(controllerInfo.IPAddress.ToString());
                item.SubItems.Add(controllerInfo.Id);
                item.SubItems.Add(controllerInfo.Availability.ToString());
                item.SubItems.Add(controllerInfo.IsVirtual.ToString());
                item.SubItems.Add(controllerInfo.SystemName);
                item.SubItems.Add(controllerInfo.Version.ToString());
                item.SubItems.Add(controllerInfo.ControllerName);

                Controller con = ControllerFactory.CreateFrom(controllerInfo);
                con.Logon(UserInfo.DefaultUser);
                ControllerState state = con.State;
                controllerList.Add(con);
            
                item.Tag = controllerInfo;
                item.SubItems.Add(state.ToString());
                this.listView1.Items.Add(item);
                this.listView1.Items[i].Selected = true;
                controller = con;
                i++;

            }

            this.networkwatcher = new NetworkWatcher(scanner.Controllers);
            this.networkwatcher.Found += new EventHandler<NetworkWatcherEventArgs>(HandleFoundEvent);
            this.networkwatcher.Lost += new EventHandler<NetworkWatcherEventArgs>(HandleLostEvent);
            this.networkwatcher.EnableRaisingEvents = true;
        }

        private void HandleLostEvent(object sender, NetworkWatcherEventArgs e)
        {
            
        }

        void HandleFoundEvent(object sender, NetworkWatcherEventArgs e)
        {
            this.Invoke(new
            EventHandler<NetworkWatcherEventArgs>(AddControllerToListView),
            new Object[] { this, e });
        }
        private void AddControllerToListView(object sender, NetworkWatcherEventArgs e)
        {
            ControllerInfo controllerInfo = e.Controller; ListViewItem item
             = new ListViewItem(controllerInfo.IPAddress.ToString());
            item.SubItems.Add(controllerInfo.Id); item.SubItems.Add(controllerInfo.Availability.ToString()); item.SubItems.Add(controllerInfo.IsVirtual.ToString()); item.SubItems.Add(controllerInfo.SystemName); item.SubItems.Add(controllerInfo.Version.ToString()); item.SubItems.Add(controllerInfo.ControllerName); this.listView1.Items.Add(item); item.Tag
                   = controllerInfo;
        }
        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                if (controller.OperatingMode == ControllerOperatingMode.Auto)
                {
                   
                    tasks = controller.Rapid.GetTasks();
                    using (Mastership m = Mastership.Request(controller.Rapid))
                    {
                        tasks[0].SetProgramPointer("aaa", "main");
                        controller.State = ControllerState.MotorsOn;
                        controller.Rapid.Start();
                        //Perform operation
                        //tasks[0].Start();

                        m.Dispose();
                    }
              

                }
                else
                {
                    MessageBox.Show("Automatic mode is required to start execution from a remote client.");
                }
            }
            catch (System.InvalidOperationException ex)
            {
                MessageBox.Show("Mastership is held by another client." + ex.Message);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Unexpected error occurred: " + ex.Message);
            }
        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }

        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            //ListViewItem item = this.listView1.SelectedItems[0];
            //if (item.Tag != null)
            //{
            //    ControllerInfo controllerInfo = (ControllerInfo)item.Tag;
            //    if
            //    (controllerInfo.Availability == Availability.Available)
            //    {
            //        if (this.controller != null)
            //        {
            //            this.controller.Logoff();
            //            this.controller.Dispose();
            //            this.controller = null;
            //        }
            //        this.controller = ControllerFactory.CreateFrom(controllerInfo);
            //        this.controller.Logon(UserInfo.DefaultUser);
            //    }
            //    else
            //    {
            //        MessageBox.Show("Selected controller not available.");
            //    }
            //}
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string name = comboBox1.Text;
            Signal singalValue = controller.IOSystem.GetSignal(name);
            DigitalSignal digitalSig = (DigitalSignal)singalValue; 
           
            digitalSig.Set();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string name = comboBox1.Text;
            Signal singalValue = controller.IOSystem.GetSignal(name);
            DigitalSignal digitalSig = (DigitalSignal)singalValue; 
            digitalSig.Reset();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (controller != null)
            {
                int i = 0;
                foreach(Controller con in controllerList)
                {
                    ControllerState state = con.State;
                    listView1.Items[i].SubItems[7] .Text= state.ToString();
                    i++;
                }
             
            }
        } 

        private void button4_Click(object sender, EventArgs e)
        {
            IOFilterTypes aSigFilter = IOFilterTypes.Digital | IOFilterTypes.Input;
            SignalCollection signals =   controller.IOSystem.GetSignals(aSigFilter);

            //string name = "di_startatmain";
            //Signal singalValue = controller.IOSystem.GetSignal(name);
            //DigitalSignal digitalSig = (DigitalSignal)singalValue; 
            //digitalSig.Set();
            richTextBox1.Clear();
            List<Signal> signalList = signals.ToList<Signal>();
            foreach(Signal s in signalList)
            {
                richTextBox1.AppendText(s.ToString()+ Environment.NewLine);
            }
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            try
            {
                if (controller.OperatingMode == ControllerOperatingMode.Auto)
                {

                    tasks = controller.Rapid.GetTasks();
                    using (Mastership m = Mastership.Request(controller.Rapid))
                    {
                        //tasks[0].SetProgramPointer("aaa", "main");
                        //controller.State = ControllerState.MotorsOn;
                        //controller.Rapid.Start();
                        //Perform operation
                        //tasks[0].Start();
                        controller.Rapid.Stop();
                        m.Dispose();
                    }


                }
                else
                {
                    MessageBox.Show("Automatic mode is required to start execution from a remote client.");
                }
            }
            catch (System.InvalidOperationException ex)
            {
                MessageBox.Show("Mastership is held by another client." + ex.Message);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Unexpected error occurred: " + ex.Message);
            }
        }

        private void FrmRobotTest_FormClosing(object sender, FormClosingEventArgs e)
        {
            foreach(Controller con in controllerList)
            {
                con.Logoff();
                con.Dispose();
            }

        }

        private void listView1_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (listView1.SelectedItems != null && listView1.SelectedItems.Count > 0)
            {
                int index = listView1.SelectedItems[0].Index;
                controller = controllerList[index];
            }
        }
    }
}