MainMachine _IOMonitor.cs 4.1 KB
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        bool midinrun = false;
        DateTime lastBtnUpPressTime = DateTime.MaxValue;
        BtnActionE BtnAction = BtnActionE.None;
        void ioMonitor()
        {
            var btnUP_L = IOValue(IO_Type.Mid_Up_Btn1).Equals(IO_VALUE.HIGH);
            var btnUP_R = IOValue(IO_Type.Mid_Up_Btn2).Equals(IO_VALUE.HIGH);
            var btnDown_L = IOValue(IO_Type.Mid_Down_Btn1).Equals(IO_VALUE.HIGH);
            var btnDown_R = IOValue(IO_Type.Mid_Down_Btn2).Equals(IO_VALUE.HIGH);
            var trueCount = 0;
            trueCount += btnUP_L ? 1 : 0;
            trueCount += btnUP_R ? 1 : 0;
            trueCount += btnDown_L ? 1 : 0;
            trueCount += btnDown_R ? 1 : 0;

            if (lastBtnUpPressTime == DateTime.MaxValue && trueCount > 0)
            {
                lastBtnUpPressTime = DateTime.Now;
                BtnAction = BtnActionE.None;
            }
            else if (lastBtnUpPressTime != DateTime.MaxValue && trueCount == 0)
            {
                lastBtnUpPressTime = DateTime.MaxValue;
                BtnAction = BtnActionE.None;
            }
            else
            {
                var timediff = DateTime.Now - lastBtnUpPressTime;
                if (timediff.TotalSeconds < 1 && trueCount == 2) {
                    if (btnUP_L && btnUP_R)
                    {
                        BtnAction = BtnActionE.Mid_Up;
                    }
                    else if (btnDown_L && btnDown_R)
                    {
                        BtnAction = BtnActionE.Mid_Down;
                    }
                } else if (timediff.TotalSeconds > 3 && trueCount == 1) {
                    if (BtnAction == BtnActionE.None) {
                        if (btnUP_L)
                        {
                            BtnAction = BtnActionE.Left_IN;
                        } else if (btnUP_R)
                        {
                            BtnAction = BtnActionE.Right_IN;
                        }
                    }
                }
            }
            if (!midinrun && BtnAction == BtnActionE.Mid_Up
                && IOValue(IO_Type.Left_Side_SafetyGrating).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Right_Side_SafetyGrating).Equals(IO_VALUE.HIGH)
                )
            {
                midinrun = true;
                IOMove(IO_Type.Mid_Up, IO_VALUE.HIGH);
                IOMove(IO_Type.Mid_Down, IO_VALUE.LOW);
            }
            else if (!midinrun && BtnAction == BtnActionE.Mid_Down
                && IOValue(IO_Type.Left_Side_SafetyGrating).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Right_Side_SafetyGrating).Equals(IO_VALUE.HIGH))
            {
                midinrun = true;
                IOMove(IO_Type.Mid_Up, IO_VALUE.LOW);
                IOMove(IO_Type.Mid_Down, IO_VALUE.HIGH);
            }
            else if (midinrun && BtnAction == BtnActionE.None)
            {
                midinrun = false;
                IOMove(IO_Type.Mid_Up, IO_VALUE.LOW);
                IOMove(IO_Type.Mid_Down, IO_VALUE.LOW);

            }

            if (BtnAction == BtnActionE.Left_IN || BtnAction == BtnActionE.Right_IN) {

                var side = BtnAction == BtnActionE.Left_IN ? InOutSideE.Left : InOutSideE.Right;
                var ld = InOutDevice.InOutDeviceList[side];
                if (ld.CanIn(out string msg))
                {
                    ld.MoveInfo.NewMove(MoveStep.In01);
                    ld.MoveInfo.log("检测到手动按钮信号,开始入库流程");
                    ld.CurrnetDirection = InOutDirectionE.IN;
                    return;
                }
                else {
                    Msg.add(ld.Name + msg, MsgLevel.info);
                }
            }            


        }
        enum BtnActionE
        {
            None,
            Mid_Up,
            Mid_Down,
            Left_IN,
            Right_IN
        }

    }
}