UCRobot.cs 5.8 KB
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;
using static JAKA.JKTYPE;

namespace JAKA
{
    public partial class UCRobot : UserControl
    {
        public UCRobot()
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
        }
        private JAKABean jakaBean;
        private JAKAServer server;
        public void Regidter(JAKABean jakabean, JAKAServer jAKAServer)
        {
            this.jakaBean = jakabean;
            groupBox1.Text = $"[{jakabean.IP}]";
            server = jAKAServer;
            foreach (var item in server.RobotCmds.Keys)
            {
                comboBox1.Items.Add(item);
            }
            if (comboBox1.Items.Count > 0)
                comboBox1.SelectedIndex = 0;
            jakabean.RegisterUpdataEvent(Update);
        }
        public void Update(RobotData robotData)
        {
            if (!this.IsHandleCreated)
                return;
            try
            {
                if (robotData == null) return;
                this.Invoke((Action)(() =>
                {
                    lblestop.BackColor = robotData.RobotStatus.emergency_stop == 0 ? Color.YellowGreen : Color.Red;
                    lblpoweredon.BackColor = robotData.RobotStatus.powered_on == 0 ? Color.Red : Color.YellowGreen;
                    lblservoenabled.BackColor = robotData.RobotStatus.enabled == 0 ? Color.Red : Color.YellowGreen;
                    lblinpos.BackColor = robotData.RobotStatus.inpos == 0 ? Color.Red : Color.YellowGreen;
                    lblprotectivestop.BackColor = robotData.RobotStatus.protective_stop == 0 ? Color.YellowGreen : Color.Red;
                    lblonsoftlimit.BackColor = robotData.RobotStatus.on_soft_limit == 0 ? Color.YellowGreen : Color.Red;
                    lblsdkconnect.BackColor = robotData.RobotStatus.is_socket_connect == 0 ? Color.Red : Color.YellowGreen;
                    lbldragstatus.BackColor = robotData.RobotStatus.drag_status == 0 ? Color.Red : Color.YellowGreen;
                    lblrapidrate.Text = $"运动倍率:{robotData.RobotStatus.rapidrate.ToString("f3")}";
                    lblerrorcode.Text = robotData.Errorinfo;
                    lblresponse.Text = $"命令反馈:{robotData.RecvMsg}";
                    if (robotData.ProgramState.Equals(ProgramState.PROGRAM_IDLE))
                    {
                        lblProgramstate.BackColor = Color.Red;
                    }
                    else if (robotData.ProgramState.Equals(ProgramState.PROGRAM_PAUSED))
                    {
                        lblProgramstate.BackColor = Color.Yellow;
                    }
                    else if (robotData.ProgramState.Equals(ProgramState.PROGRAM_RUNNING))
                    {
                        lblProgramstate.BackColor = Color.YellowGreen;
                    }
                    lblCmd.Text = $"当前命令:{robotData.CurCmd}";
                    if (robotData.Online)
                    {
                        groupBox1.Text = $"[{jakaBean.IP}][在线]";
                    }
                    else
                    {
                        groupBox1.Text = $"[{jakaBean.IP}][离线]";
                    }
                }));

            }
            catch { }
        }

        private void btnPowerOn_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.PowerOn(); });

        }

        private void btnPowerOff_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.PowerOff(); });

        }

        private void btnEnable_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.EnableRobot(); });

        }

        private void btnDisable_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.DisableRobot(); });

        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.Run(); });
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => { jakaBean.Abort(); });

        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                if (groupBox1.Text.Contains("在线"))
                {
                    string cmd = comboBox1.SelectedItem.ToString();//textBox1.Text;
                    int.TryParse(textBox1.Text,out int round);
                    server.SendCmd(jakaBean.RemoteEndPoint, cmd, round);
                }
            });


        }

        private void btnRun_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                if (jakaBean.PowerOn())
                    jakaBean.EnableRobot();
            });
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (jakaBean?.GetDigitalOutput(IOType.IO_CABINET, 0, out bool insafe)??false)
                {
                    lblSafe.BackColor = insafe ? Color.YellowGreen : Color.Red;
                }
            }
            catch
            {

            }
        }

        private void UCRobot_Load(object sender, EventArgs e)
        {
           // timer1.Start();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            jakaBean.ClearError();
        }


        private void button4_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                if (jakaBean.DisableRobot())
                    jakaBean.PowerOff();

            });
        }
    }
}