AxisMoveControl.cs 11.8 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OnlineStore.DeviceLibrary;
using OnlineStore.Common;
using System.Threading;
using OnlineStore.LoadCSVLibrary;
using DeviceLib;

namespace OnlineStore.AutoCountClient
{
    public partial class AxisMoveControl : UserControl
    {
        private List<AxisBean> axisList = new List<AxisBean>();
        private EquipBase equipBase = null;
        private string PortName = "";
        private int SlvAddr = 0;

        public AxisMoveControl()
        {
            InitializeComponent();
        }
        public void LoadData(EquipBase equipBase, params AxisBean[] moveAxis)
        {
            this.equipBase = equipBase;
            axisList = new List<AxisBean>(moveAxis);

            if (axisList.Count > 0)
            {
                comboBox1.Items.Clear();
                foreach (AxisBean a in axisList)
                {
                    comboBox1.Items.Add(a.Config.Explain);
                }
                comboBox1.SelectedIndex = 0;

                PortName = moveAxis[0].Config.DeviceName;
                SlvAddr = moveAxis[0].Config.GetAxisValue();
                txtAxisDeviceName.Text = PortName;
                txtAxisValue.Text = SlvAddr.ToString();
            }
            btnAddMove.BackColor = Color.White;
            btnDelMove.BackColor = Color.White;
        }


        private bool CanMove()
        {

            //如果是取料升降轴,取料旋转轴,如果进出轴不在待机点,不能运动
            if (RobotManager.robot.inputEquip.UpdownAxis.Config.IsSameAxis(PortName, SlvAddr)
                || (RobotManager.robot.inputEquip.MiddleAxis.Config.IsSameAxis(PortName, SlvAddr)))
            {
                int InOutDefaultPosition = ConfigAppSettings.GetIntValue(Setting_Init.InoutDefaultPosition);
                int currValue = RobotManager.robot.inputEquip.InOutAxis.GetAclPosition();
                if (currValue <= InOutDefaultPosition)
                {
                    return true;
                }
                MessageBox.Show("叉子不在待机位,请先将叉子退回待机位(" + InOutDefaultPosition + ")", "警告(叉子在待机位时,才能移动升降轴和旋转轴) ", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            else
            {
                return true;
            } 
        }
        private void btnOpenAxis_Click(object sender, EventArgs e)
        {
            LogUtil.info("点击【打开伺服】,【" + PortName + "_" + SlvAddr + "】 ");
            equipBase.RunAxis(false, axisList[comboBox1.SelectedIndex]);
        }

        private void btnCloseAxis_Click(object sender, EventArgs e)
        {
            LogUtil.info("点击【关闭伺服】,【" + PortName + "_" + SlvAddr + "】 ");
            //   ACServerManager.ServoOff(PortName, SlvAddr); 
            equipBase.CloseAxis(axisList[comboBox1.SelectedIndex]);
        }

        private void btnAxisAMove_Click(object sender, EventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            int position = FormUtil.GetIntValue(txtAPosition);
            int speed = FormUtil.GetIntValue(txtASpeed);
            LogUtil.info("点击【绝对运动】,【" + PortName + "_" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
            ACServerManager.AbsMove(PortName, SlvAddr, position, speed);
        }

        private void btnAxisRMove_Click(object sender, EventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            int position = FormUtil.GetIntValue(txtAPosition);
            int speed = FormUtil.GetIntValue(txtASpeed);
            LogUtil.info("点击【相对运动】,【" + PortName + "_" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
            ACServerManager.RelMove(PortName, SlvAddr, position, speed);
        }

        private void btnAxisVMove_Click(object sender, EventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            int speed = FormUtil.GetIntValue(txtASpeed);
            LogUtil.info("点击【匀速运动】,【" + PortName + "_" + SlvAddr + "】 速度【" + speed + "】");
            ACServerManager.SpeedMove(PortName, SlvAddr, speed);

        }
        private void btnAxisStop_Click(object sender, EventArgs e)
        {
            LogUtil.info("点击【停止运动】,【" + PortName + "_" + SlvAddr + "】 ");
            ACServerManager.SuddenStop(PortName, SlvAddr);
            if (btnAddMove.BackColor == Color.Green)
            {
                btnAddMove.BackColor = System.Drawing.SystemColors.Control;

            }
            if (btnDelMove.BackColor == Color.Green)
            {
                btnDelMove.BackColor = System.Drawing.SystemColors.Control;
            }
            btnReadPosition_Click(null, null);
        }

        private void btnComAlarmClear_Click(object sender, EventArgs e)
        {
            LogUtil.info("点击【清理报警】,【" + PortName + "_" + SlvAddr + "】 ");
            ACServerManager.AlarmClear(PortName, SlvAddr);
            Thread.Sleep(100);
            ACServerManager.ServoOn(PortName, SlvAddr);
        }

        private void btnAxisReturnHome_Click(object sender, EventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            int speed = FormUtil.GetIntValue(txtASpeed);
            LogUtil.info("点击【原点返回】,【" + PortName + "_" + SlvAddr + "】 速度【" + speed + "】");
            ACServerManager.HomeMove(PortName, SlvAddr, speed);
        }

        private void btnGetAlarm_Click(object sender, EventArgs e)
        {
            this.txtAlarmStatus.Text = ACServerManager.GetAlarmStatus(PortName, SlvAddr).ToString();
            this.txtBusyStatus.Text = ACServerManager.GetBusyStatus(PortName, SlvAddr).ToString();
            this.txtHomeStatus.Text = ACServerManager.GetHomeEndStatus(PortName, SlvAddr).ToString();
            this.txtHomeSingle.Text = ACServerManager.GetHomeSingle(PortName, SlvAddr).ToString();
            this.txtLimit1.Text = ACServerManager.GetLimitPositiveSingle(PortName, SlvAddr).ToString();
            this.txtLimit2.Text = ACServerManager.GetLimitNegativeSingle(PortName, SlvAddr).ToString();
            txtServoStatue.Text = ACServerManager.ServerOnStatus(PortName, SlvAddr) ? "✔" : "✘";
        }


        private void btnReadPosition_Click(object sender, EventArgs e)
        {
            lblCountPulse.Text = ACServerManager.GetActualtPosition(PortName, SlvAddr).ToString();
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex >= 0)
            {
                ConfigMoveAxis axis = axisList[comboBox1.SelectedIndex].Config;
                PortName = axis.DeviceName;
                SlvAddr = axis.GetAxisValue();
                txtAxisDeviceName.Text = PortName;
                txtAxisValue.Text = SlvAddr.ToString();
                Color color = Color.Black;

                int targetSpeed = axis.TargetSpeed;
                comjSpeed.Items.Clear();
                for (int i = 1; i <= 10; i++)
                {
                    comjSpeed.Items.Add(targetSpeed * i / 10);
                }
                comjSpeed.SelectedIndex = 4;
                btnAddMove.Text = "点动+ ";
                btnDelMove.Text = "点动- ";
                txtASpeed.Text = targetSpeed.ToString();
                int SelIndex = comboBox1.SelectedIndex;
                if (SelIndex.Equals(0))
                {
                    color = Color.Blue;
                }
                else if (SelIndex.Equals(1))
                {
                    color = Color.Red;
                }

                else if (SelIndex.Equals(2))
                {
                    color = Color.Green;
                }
                else if (SelIndex.Equals(3))
                {
                    color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); ;
                }
                else if (SelIndex.Equals(4))
                {
                    color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
                }
                else if (SelIndex.Equals(5))
                {
                    color = Color.BlueViolet;
                }
                else if (SelIndex.Equals(6))
                {
                    color = Color.Firebrick;
                } 
                btnOpenAxis.ForeColor = color;
                btnCloseAxis.ForeColor = color;
                btnAxisAMove.ForeColor = color;
                btnAxisRMove.ForeColor = color;
                btnAxisVMove.ForeColor = color;
                btnAxisReturnHome.ForeColor = color;
                btnAxisStop.ForeColor = color;
                btnComAlarmClear.ForeColor = color;
                btnReadPosition.ForeColor = color;
                btnGetAlarm.ForeColor = color;
                btnAddMove.ForeColor = color;
                btnDelMove.ForeColor = color;

                this.txtAlarmStatus.Text = "";
                this.txtBusyStatus.Text = "";
                this.txtHomeStatus.Text = "";
                this.txtHomeSingle.Text = "";
                this.txtLimit1.Text = "";
                this.txtLimit2.Text = "";
                txtServoStatue.Text = "";
            }
        }
        private void AxisMove(int speed)
        {
            LogUtil.info("【" + PortName + "_" + SlvAddr + "】点动: 速度:" + speed);
            ACServerManager.SpeedMove(PortName, SlvAddr, speed);
        }
        private void btnAddMove_MouseDown(object sender, MouseEventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            if (btnAddMove.BackColor.Equals(Color.White))
            {
                int speed = Convert.ToInt32(comjSpeed.Text);
                if (speed <= 0)
                {
                    MessageBox.Show("提示", "请先输入正确的速度");
                    return;
                }
                btnAddMove.BackColor = Color.Green;
                AxisMove(speed);
            }
        }

        private void btnAddMove_MouseUp(object sender, MouseEventArgs e)
        {
            if (btnAddMove.BackColor == Color.Green)
            {
                btnAddMove.BackColor = Color.White;
                ACServerManager.SuddenStop(PortName, SlvAddr);
                btnReadPosition_Click(null, null);
            }
        }

        private void btnDelMove_MouseDown(object sender, MouseEventArgs e)
        {
            if (!CanMove())
            {
                return;
            }
            if (btnDelMove.BackColor.Equals(Color.White))
            {
                int speed = Convert.ToInt32(comjSpeed.Text);
                if (speed <= 0)
                {
                    MessageBox.Show("提示", "请先输入正确的速度");
                    return;
                }
                btnDelMove.BackColor = Color.Green;
                AxisMove(-speed);
            }
        }

        private void btnDelMove_MouseUp(object sender, MouseEventArgs e)
        {
            if (btnDelMove.BackColor == Color.Green)
            {
                btnDelMove.BackColor = Color.White;
                ACServerManager.SuddenStop(PortName, SlvAddr);
                btnReadPosition_Click(null, null);
            }
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Clipboard.SetDataObject(lblCountPulse.Text, true);
        }
    }
}