AxisMoveControl.cs 14.4 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 UserFromControl;
using DeviceLib;

namespace OnlineStore.ACPackingStore
{
    public partial class AxisMoveControl : UserControl
    {
        private List<ConfigMoveAxis> axisList = new List<ConfigMoveAxis>();
        private TinStoreBean BoxBean= null;
        private string PortName = "";
        private int SlvAddr = 0;

        public AxisMoveControl( )
        {
            InitializeComponent(); 
        }
        public void LoadData(TinStoreBean boxBean, params ConfigMoveAxis[] moveAxis)
        {
            this.BoxBean = boxBean;
            axisList = new List<ConfigMoveAxis>(moveAxis);

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

                PortName = moveAxis[0].DeviceName;
                SlvAddr = moveAxis[0].GetAxisValue();
                txtAxisDeviceName.Text = PortName;
                txtAxisValue.Text = SlvAddr.ToString(); 
            }
        }
        private void btnOpenAxis_Click(object sender, EventArgs e)
        {
            int bro = ConfigAppSettings.GetIntValue(Setting_Init.ACBaudRate);
            LogUtil.info("点击【打开伺服】,端口号【" + PortName + "】地址【" + SlvAddr + "】波特率【"+bro+"】 ");
            ACServerManager.OpenPort(PortName,bro); 
            ACServerManager.AlarmClear(PortName, SlvAddr);
            Thread.Sleep(100);
            ACServerManager.ServoOn(PortName, SlvAddr); 
        }

        private void btnCloseAxis_Click(object sender, EventArgs e)
        { 
            LogUtil.info("点击【关闭伺服】,端口号【" + PortName + "】地址【" + SlvAddr + "】 ");
            ACServerManager.ServoOff(PortName, SlvAddr);
        }
      
        private bool  AxisCanMove()
        {
            if (BoxBean.Config.Middle_Axis.IsSameAxis(PortName, SlvAddr) || BoxBean.Config.UpDown_Axis.IsSameAxis(PortName, SlvAddr))
            {
                int InOutDefaultPosition = ConfigAppSettings.GetIntValue(Setting_Init.InOutDefaultPosition);
                int currValue = ACServerManager.GetActualtPosition(BoxBean.Config.InOut_Axis.DeviceName, BoxBean.Config.InOut_Axis.GetAxisValue());
                //旋转轴和升降轴运动时,叉子必须在待机位
                if (currValue > InOutDefaultPosition)
                {
                    MessageBox.Show("叉子不在待机位,请先将叉子退回待机位(" + InOutDefaultPosition + ")", "警告(叉子在待机位时,才能移动升降轴和旋转轴) ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                } 
            }
            if (BoxBean.Config.Stir_Axis.IsSameAxis(PortName, SlvAddr))
            {
                if (!StoreManager.Store.StirAxisCanMove())
                {
                    MessageBox.Show("搅拌气缸不在上升端,清先上升搅拌气缸", "警告(搅拌气缸上升时,搅拌轴才能动作) ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
            }
            return true;
        }
        private void btnAxisAMove_Click(object sender, EventArgs e)
        {
            int position = FormUtil.GetIntValue(txtAPosition);
            int speed = FormUtil.GetIntValue(txtASpeed);

            if (!AxisCanMove())
            {
                return;
            }
            LogUtil.info("点击【绝对运动】,端口号【" + PortName + "】地址【" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
            ACServerManager.AbsMove(PortName, SlvAddr, position, speed); 
        }

        private void btnAxisRMove_Click(object sender, EventArgs e)
        {
            int position = FormUtil.GetIntValue(txtAPosition);
            int speed = FormUtil.GetIntValue(txtASpeed);

            if (!AxisCanMove())
            {
                return;
            }
            LogUtil.info("点击【相对运动】,端口号【" + PortName + "】地址【" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
            ACServerManager.RelMove(PortName, SlvAddr, position, speed);
        }

        private void btnAxisVMove_Click(object sender, EventArgs e)
        {
            int speed = FormUtil.GetIntValue(txtASpeed);

            if (!AxisCanMove())
            {
                return;
            }
            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);
        }

        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)
        {
            int speed = FormUtil.GetIntValue(txtASpeed);

            if (!AxisCanMove())
            {
                return;
            }
            LogUtil.info("点击【原点返回】,端口号【" + PortName + "】地址【" + SlvAddr + "】 速度【" + speed + "】");
            ACServerManager.HomeMove(PortName, SlvAddr, speed);
        }

        private void btnGetAlarm_Click(object sender, EventArgs e)
        {
            string PortName = txtAxisDeviceName.Text;
            short SlvAddr = FormUtil.GetShortValue(txtAxisValue);
            txtServoStatue.Text = ACServerManager.ServerOnStatus(PortName, SlvAddr) ? "✔" : "✘";
            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();
            int speed = ACServerManager.GetActualSpeed(PortName, SlvAddr);

            this.txtS.Text = speed.ToString();
            if (axis != null && axis.SpeedChangeV != 1)
            {
                int r =(int) Math.Round(speed / axis.SpeedChangeV);
                lblSpeed.Text = "转速:" + r;
            }
            else
            {
                lblSpeed.Text = "";
            }
            UpdatePosition(); 

        }

        private void btnReadPosition_Click(object sender, EventArgs e)
        {
            ReadPosistion();
            UpdatePosition();
        }

        private void ReadPosistion()
        {
           
            //判断私服是否打开、
            if (ACServerManager.ServerOnStatus(PortName, SlvAddr))
            {
                txtServoStatue.Text = "✔";
            }
            else
            {
                txtServoStatue.Text = "✘";
            }
         //  ReadA(BoxBean.Config.Middle_Axis, lblActual1, lblTargetP1, txtMiddleTarget, axis_1_Alarm);
          //  ReadA(BoxBean.Config.UpDown_Axis, lblActual2, lblTargetP2, txtUpdownTarget, axis_2_Alarm);
          //  ReadA(BoxBean.Config.InOut_Axis, lblActual3, lblTargetP3, txtInoutTarget, axis_3_Alarm);
           //ReadA(BoxBean.Config.Comp_Axis, lblActual4, lblTargetP4, txt4Target, axis_4_Alarm);

        }
        private void ReadA(ConfigMoveAxis axis, TextBox lblActual, TextBox lblTarget, TextBox lblT, IOStatusControl sta)
        {
     
            if (ACServerManager.ServerOnStatus(axis.DeviceName, axis.GetAxisValue()))
            {
                sta.IOValue = ACServerManager.GetAlarmStatus(axis.DeviceName, axis.GetAxisValue());
                int tP = ACServerManager.GetTargetPosition(axis.DeviceName, axis.GetAxisValue());
                lblTarget.Text = string.Format("{0:d}", tP);
                int aP = ACServerManager.GetActualtPosition(axis.DeviceName, axis.GetAxisValue());
                lblActual.Text = string.Format("{0:d}", aP);
                lblT.Text = axis.TargetPosition.ToString();
                if (axis.IsSameAxis(PortName, SlvAddr))
                {
                    txtP.Text = lblActual.Text;
                }
            }
        }
        private ConfigMoveAxis axis = null;
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex >= 0)
            {
                axis = axisList[comboBox1.SelectedIndex];
                PortName = axis.DeviceName;
                SlvAddr = axis.GetAxisValue();
                txtAxisDeviceName.Text = PortName;
                txtAxisValue.Text = SlvAddr.ToString();
                Color color = Color.Black;
                if (BoxBean.Config.Middle_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = Color.Red;
                }
                else if (BoxBean.Config.UpDown_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = Color.Blue;
                }
                else if (BoxBean.Config.InOut_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = Color.Green;
                }
                else if (BoxBean.Config.Warming_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); ;
                }
                else if (BoxBean.Config.Colding_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
                }
                else if (BoxBean.Config.Stir_Axis.IsSameAxis(axis.DeviceName, axis.GetAxisValue()))
                {
                    color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
                }
                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;
                btnMove.ForeColor = color;
                btnMovej.ForeColor = color;
            }
        }

      
        private void AxisABSMove(ConfigMoveAxis moveAxis, int targetPosition, int targetSpeed)
        {
            moveAxis.TargetPosition = targetPosition;
            ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
        }

        private void groupAxis_Enter(object sender, EventArgs e)
        {

        }

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

     
        private void AxisMove(int speed)
        {
            LogUtil.debug("点动:[" + PortName + "_" + SlvAddr + "],speed=" + speed);
            ACServerManager.SpeedMove(PortName, SlvAddr, speed);
        }
        public void UpdatePosition()
        {
            int position = ACServerManager.GetTargetPosition(PortName, SlvAddr);
            if (!txtP.Text.Equals(position.ToString()))
            {
                txtP.Text = position.ToString();
            }
        }
        private void btnMove_MouseDown(object sender, MouseEventArgs e)
        {
            if (!AxisCanMove())
            {
                return;
            }
            if (btnMove.BackColor.Equals(System.Drawing.SystemColors.Control))
            {
                int speed = FormUtil.GetIntValue(txtASpeed);
                if (speed <= 0)
                {
                    MessageBox.Show("提示", "请先输入正确的速度");
                    txtASpeed.Focus();
                    return;
                }
                btnMove.BackColor = Color.Green;
                AxisMove(speed);
            }
        }

        private void btnMove_MouseUp(object sender, MouseEventArgs e)
        {
            if (btnMove.BackColor == Color.Green)
            {
                btnMove.BackColor = System.Drawing.SystemColors.Control;
                ACServerManager.SuddenStop(PortName, SlvAddr);
                UpdatePosition();
            }
        }

        private void btnMovej_MouseDown(object sender, MouseEventArgs e)
        {
            if (!AxisCanMove())
            {
                return;
            }  
            if (btnMovej.BackColor.Equals(System.Drawing.SystemColors.Control))
            {
                int speed = FormUtil.GetIntValue(txtASpeed);
                if (speed <= 0)
                {
                    MessageBox.Show("提示", "请先输入正确的速度");
                    txtASpeed.Focus();
                    return;
                }
                btnMovej.BackColor = Color.Green;
                AxisMove(-speed);
            }
        }

        private void btnMovej_MouseUp(object sender, MouseEventArgs e)
        {
            if (btnMovej.BackColor == Color.Green)
            {
                btnMovej.BackColor = System.Drawing.SystemColors.Control;
                ACServerManager.SuddenStop(PortName, SlvAddr);
                UpdatePosition();
            }
        }
    }
}