AxisTipControl.cs 7.2 KB
using DeviceLibrary;
using HuichuanLibrary;
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
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 AxisManager = OnlineStore.DeviceLibrary.AxisManager;
public partial class AxisTipControl : Form
{
    //static AxisManager AxisManager = AxisManager;
    public AxisTipControl()
    {
        InitializeComponent();
        this.Deactivate += AxisTipControl_Deactivate;
        this.LostFocus += AxisTipControl_LostFocus;
        this.TopMost = true;
        crc.OpenResourceLog = true;
        crc.LanguageChangeEvent += Crc_LanguageChangeEvent;
        crc.LanguageProcess(this);
    }
    private void Crc_LanguageChangeEvent(object sender, EventArgs e)
    {
        crc.LanguageProcess(this);
    }
    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;
        comjSpeed.KeyUp += ComjSpeed_KeyUp;
        SetRelList((int)comjSpeed.SelectedItem);

        //【2】读取轴状态,如果读取出错将关闭此定时器
        AxisSts sts = HCBoardManager.GetAxisSts(SlvAddr);
        if (sts.ServoOn < 0)
        {
            showToolTip("伺服尚未使能",c);
            return;
        }
        if (sts.ALM != 0 || sts.WARN != 0 || sts.EMG != 0) {
            showToolTip("伺服警报状态中",c);
            return;
        }
        readPosition();
        this.Show();
        //LanguageProcess();
    }

    private void ComjSpeed_KeyUp(object sender, KeyEventArgs e)
    {
        if (!int.TryParse(comjSpeed.Text, out _))
        {
            //e.Handled = false;
            return;
        }
        SetRelList(int.Parse(comjSpeed.Text));
    }

    private void ComjSpeed_KeyPress(object sender, KeyPressEventArgs e)
    {

    }

    void SetRelList(int speed) {
        flowLayoutPanel1.Controls.Clear();
        int[] zoom = new int[] { 1, 3, 5, 7, 9, 11 };
        for (int i = 0; i < zoom.Length; i++) {
            Button b = new Button();
            b.Size = new Size(60, 30);
            var bs = (int)Math.Floor(speed / (decimal)zoom[i]);
            b.Text = "+" + bs.ToString();
            b.Tag = bs;
            b.Click += B_Click;
            flowLayoutPanel1.Controls.Add(b);
        }
        for (int i = 0; i < zoom.Length; i++)
        {
            Button b = new Button();
            b.Size = new Size(60, 30);
            var bs = (int)Math.Floor(speed / (decimal)zoom[zoom.Length-i-1]) *-1;
            b.Text =  bs.ToString();
            b.Tag = bs;
            b.Click += B_Click;
            flowLayoutPanel1.Controls.Add(b);
        }
    }

    private void B_Click(object sender, EventArgs e)
    {
        var b = sender as Button;
        int pos = (int)b.Tag;
        LogUtil.info("【" + PortName + "_" + SlvAddr + "】相对运动: 点位:" + pos);
        AxisManager.RelMove(PortName, SlvAddr, pos, targetSpeed, targetSpeed * 3, targetSpeed * 3);
    }

    void showToolTip(string txt,Control control) {
        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, control);
        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*4, speed*4);

    }
    private void btnAddMove_MouseDown(object sender, MouseEventArgs e)
    {
        if (!CanMove(sender))
        {
            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(sender))
        {
            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(object sender)
    {
        AxisSts sts = HCBoardManager.GetAxisSts(SlvAddr);
        if (sts.ServoOn < 0)
        {
            showToolTip("伺服尚未使能", (Control)sender);
            return false;
        }
        if (sts.ALM != 0 || sts.WARN != 0 || sts.EMG != 0)
        {
            showToolTip("伺服警报状态中", (Control)sender);
            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();
    }

    private void AxisTipControl_Load(object sender, EventArgs e)
    {

    }

    private void comjSpeed_SelectedIndexChanged(object sender, EventArgs e)
    {
        SetRelList((int)comjSpeed.SelectedItem);
    }
}