FrmRobotMain.cs 7.9 KB
using ABB.Robotics.Controllers;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ABBRobotTest
{
    public partial class FrmRobotMain : Form
    {
        public FrmRobotMain()
        {
            InitializeComponent();
        }
        private string SelConIp = "";
        private void FrmRobotMain_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            LoadCom();
            LoadListView();
            LoadController();
            timer1.Start();
            ABBRobotServer.StartServer();
            ABBRobotManager.ControllerAddEvent += ABBRobotManager_ControllerAddEvent;
            LogUtil.logBox = this.richTextBox1;
        }

        private void ABBRobotManager_ControllerAddEvent(ControllerInfo controller)
        {
            int index = listView1.Items.Count;
            AddConInfo(controller, index);
        }

        private void LoadCom()
        {
            comMoveCmd.Items.Clear();
            comMoveCmd.Items.Add(ABBRobotServer.Cmd_movep);
            comMoveCmd.Items.Add(ABBRobotServer.Cmd_moveget);
            comMoveCmd.Items.Add(ABBRobotServer.Cmd_moveput);
            comMoveCmd.Items.Add(ABBRobotServer.Cmd_validateP);

            comMoveP.Items.Clear();
            for(int i = 1; i <= 30; i++)
            {
                comMoveP.Items.Add("p" + i);
            }
            comMoveP.SelectedIndex = 0;
            comMoveCmd.SelectedIndex = 0;

            radioButton1.Checked = true;

        }

        private void LoadController()
        {
            ABBRobotManager.LoadController();
            int i = 0;
            foreach (ControllerInfo con in ABBRobotManager.controllerInfoMap.Values)
            {
                AddConInfo(con,i);
                  i++; 
            } 
        } 

        private void AddConInfo(ControllerInfo con,int i)
        {
            ListViewItem item = new ListViewItem(con.IPAddress.ToString());
            item.SubItems.Add(con.Id.ToString());
            item.SubItems.Add(con.Availability.ToString());
            item.SubItems.Add(con.IsVirtual.ToString());
            item.SubItems.Add(con.SystemName);
            item.SubItems.Add(con.Version.ToString());
            item.SubItems.Add(con.ControllerName);

            item.Tag = con.IPAddress;
            string state = ABBRobotManager.GetRobotState(con.IPAddress.ToString());
            item.SubItems.Add(state);
            this.listView1.Items.Add(item);
            this.listView1.Items[i].Selected = true;
            SelConIp = con.IPAddress.ToString();
        }
        private void LoadListView()
        {
            this.listView1.Columns.Clear();
            AddHealder("IPAddress", 150);
            AddHealder("ID", 180);
            //   AddHealder("设备状态", 100);
            AddHealder("Availability", 150);
            AddHealder("IsVirtual", 150);
            AddHealder("SystemName", 150);
            AddHealder("Version", 150);
            AddHealder("ControllerName", 180);
            AddHealder("Statue", 180);
        }


        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 timer1_Tick(object sender, EventArgs e)
        {
            int i = 0;
            List<string> conList = new List<string>(ABBRobotManager.controllerMap.Keys);
            foreach (string con in conList)
            {
                string result = ABBRobotManager.GetRobotState(con);
                listView1.Items[i].SubItems[7].Text = result;
                i++;
            }
            if (ABBRobotServer.RobotIsConnect(SelConIp))
            {
                groupMove.Enabled = true;
            }
            else
            {
                groupMove.Enabled = false;
            }
            if (String.IsNullOrEmpty(SelConIp))
            {
                lblState.Text = "";
                return;
            }
            bool isOk = false;
            int esValue = ABBRobotManager.GetSingalState(SelConIp);
            if (esValue.Equals(1))
            {
                SetMsg("机器人[" + SelConIp + "]急停中", Color.Red);
            }
            else
            {
                lblState.Text = ""; 
                int isRun = ABBRobotManager.GetSingalState(SelConIp, ABBRobotManager.DO_IsRun);
                if (isRun.Equals(1))
                {
                    isOk = true;
                    SetMsg("机器人程序正常运行中", Color.Green);
                }
                else
                {
                    SetMsg("机器人[" + SelConIp + "]程序未运行", Color.Red);
                }
            }
            if (isOk && ABBRobotServer.RobotIsConnect(SelConIp))
            {
                if (!groupMove.Enabled)
                {
                    groupMove.Enabled = true;
                }
            }
            else if (groupMove.Enabled)
            {
                groupMove.Enabled = false;
            }
        }
    
        private void SetMsg(string msg,Color foreColor)
        {
            lblState.Text = msg;
            lblState.ForeColor = foreColor;
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(SelConIp))
            {
                return;
            }
            ABBRobotManager.StartRobotBySingle(SelConIp);
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(SelConIp))
            {
                return;
            }
            ABBRobotManager.StopRobotBySingle(SelConIp);
        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
        {
            if (listView1.SelectedItems != null && listView1.SelectedItems.Count > 0)
            {
                int index = listView1.SelectedItems[0].Index;
                string ip = listView1.Items[index].SubItems[0].Text.ToString();
                if (!String.IsNullOrEmpty(ip))
                {
                    SelConIp = ip;
                    if (ABBRobotServer.RobotIsConnect(SelConIp))
                    {
                        groupMove.Enabled = true;
                    }
                    else
                    {
                        groupMove.Enabled = false;
                    }
                }
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void FrmRobotMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            ABBRobotManager.DisposeControllers();
            ABBRobotServer.StopServer();
            LogUtil.logBox = null;
        }

        private void btnMove_Click(object sender, EventArgs e)
        {
            string moveCmd = comMoveCmd.Text;
            string PPoint = comMoveP.Text;
            string MType = "L";
            if (radioButton2.Checked)
            {
                MType = "J";
            }
            int speed =(int) numSpeed.Value;
            if (speed > 500)
            {
                speed = 100;
            }
            ABBRobotServer.SendCmd(SelConIp, moveCmd, PPoint, MType, speed, MoveEnd);
        }
        private void MoveEnd(string msg)
        {
            LogUtil.info("机器人运动完成:" + msg);
        }

        private void btnClearLog_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Clear();
            LogUtil.ClearLog();
        }
    }
}