AxisTipControl.cs 4.9 KB
using DeviceLibrary;
using HuichuanLibrary;
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;


public partial class AxisTipControl : Form
{
    public AxisTipControl()
    {
        InitializeComponent();
        this.Deactivate += AxisTipControl_Deactivate;
        this.LostFocus += AxisTipControl_LostFocus;
        this.TopMost = true;
    }

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

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

    short SlvAddr;
    string PortName;
    int targetSpeed;
    static Control c;
    public void ShowTips(Control _c,string title, short axisid, int _targetSpeed)
    {
        if (_c.Tag == null)
            return;

        if (c!=null && c.Name == _c.Name)
            return;
        Text = title;
        /*var cp = c.PointToScreen(new Point(0, 0));
        var cc = this.Parent.PointToClient(cp);
        cc.Y += c.Height;
        this.Location = cc;
        */
        c = _c;
        SlvAddr = axisid;
        PortName = c.Name;
        targetSpeed = _targetSpeed;
        comjSpeed.Items.Clear();
        for (int i = 1; i <= 10; i++)
        {
            comjSpeed.Items.Add(targetSpeed * i / 10);
        }
        comjSpeed.SelectedIndex = 4;

        
        //【2】读取轴状态,如果读取出错将关闭此定时器
        AxisSts sts = HCBoardManager.GetAxisSts(SlvAddr);
        if (sts.ServoOn < 0)
        {
            showToolTip("伺服尚未使能");
            return;
        }
        if (sts.ALM != 0 || sts.WARN != 0 || sts.EMG != 0) {
            showToolTip("伺服警报状态中");
            return;
        }
        readPosition();
        this.Show();
    }
    void showToolTip(string txt) {
        var m_ToolTip = new ToolTip();
        m_ToolTip.ToolTipIcon = ToolTipIcon.Warning;
        m_ToolTip.ToolTipTitle = "无法操作";
        m_ToolTip.AutoPopDelay = 0;
        m_ToolTip.AutomaticDelay = 0;
        m_ToolTip.InitialDelay = 0;
        m_ToolTip.ShowAlways = true;
        m_ToolTip.Show(txt, c);
        Task.Run(() => {
            Task.Delay(5000).Wait();
            m_ToolTip.Dispose();
        });

    }
    private void AxisMove(int speed)
    {

        LogUtil.info("【" + PortName + "_" + SlvAddr + "】点动: 速度:" + speed);
        AxisManager.SpeedMove(PortName, SlvAddr, speed, speed * 3, speed * 3);

    }
    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;
            AxisManager.SuddenStop(PortName, SlvAddr);
            readPosition();
        }
    }
    void readPosition()
    {
        textBox_pos.Text = AxisManager.GetActualtPosition(PortName, SlvAddr).ToString();
    }

    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;
            AxisManager.SuddenStop(PortName, SlvAddr);
            readPosition();
        }
    }
    bool CanMove()
    {
        AxisSts sts = HCBoardManager.GetAxisSts(SlvAddr);
        if (sts.ServoOn < 0)
        {
            showToolTip("伺服尚未使能");
            return false;
        }
        if (sts.ALM != 0 || sts.WARN != 0 || sts.EMG != 0)
        {
            showToolTip("伺服警报状态中");
            return false;
        }
        return true;
    }

    private void btn_cancel_Click(object sender, EventArgs e)
    {
        this.Close();
        //c.Select();
        //c.Focus();
    }

    private void btn_ok_Click(object sender, EventArgs e)
    {
        
        c.Text = textBox_pos.Text;
        this.Close();
    }
}