MainMachine _IOMonitor.cs 7.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()
        {
            airprocess();
            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 < 3 && 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);
                }
            }


        }

        public double Current_Humidity = 0;
        public double Current_Temperate = 0;
        bool airisopen = false;
        DateTime lastAirprocesstime = DateTime.Now;
        void airprocess()
        {
            if (IOManager.IOValue(IO_Type.AirValve_Open).Equals(IO_VALUE.HIGH) || IOManager.IOValue(IO_Type.FrontDoor_Check).Equals(IO_VALUE.LOW) || IOManager.IOValue(IO_Type.BackDoor_Check).Equals(IO_VALUE.LOW))
            {
                IOMove(IO_Type.AirValue, IO_VALUE.HIGH);
                return;
            }
            
            if ((DateTime.Now - lastAirprocesstime).TotalSeconds < 5)
                return;
            lastAirprocesstime = DateTime.Now;

            IOManager.IOMove(IO_Type.SafeDoor_Lock, IO_VALUE.HIGH);
            //var temp = HumitureController.QueryData();
            //var temp = HumitureController.LastData;
            Current_Humidity = RobotManage.humitureControllers.Average(x => x.LastData.Humidity);
            Current_Temperate = RobotManage.humitureControllers.Average(x => x.LastData.Temperate);

            //var tempIsOK = Current_Temperate < ServerCM.Max_Temperature;
            var humiNeedStart = Current_Humidity > ServerCM.Max_Humidity - Setting_Init.Device_HumidityStartOffser;
            var humiNeedStop = Current_Humidity < ServerCM.Max_Humidity - Setting_Init.Device_HumidityEndOffser;
            airisopen = IOValue(IO_Type.AirValue).Equals(IO_VALUE.LOW);
            if (humiNeedStart && !airisopen)
            {
                IOMove(IO_Type.AirValue, IO_VALUE.LOW);
                LogUtil.info($"开始吹气,当前最大湿度:{Current_Humidity} > {ServerCM.Max_Humidity}-{Setting_Init.Device_HumidityStartOffser}.");
            }
            else if (humiNeedStop && airisopen)
            {
                IOMove(IO_Type.AirValue, IO_VALUE.HIGH);
               // airisopen = false;
                LogUtil.info($"关闭吹气,当前最大湿度:{Current_Humidity} < {ServerCM.Max_Humidity}-{Setting_Init.Device_HumidityEndOffser}.");
            }
        }
        bool lastTHoutRangeStatus = false;
        DateTime lastTHoutRangeTime = DateTime.MaxValue;
        bool IsTHoutRange()
        {
            if (RobotManage.humitureControllers.Average(x => x.LastData.Humidity) > ServerCM.Max_Humidity// || HumitureController.LastData.Humidity < ServerCM.Min_Humidity
                || RobotManage.humitureControllers.Average(x => x.LastData.Temperate) > ServerCM.Max_Temperature)
            {
                if (!lastTHoutRangeStatus)
                    lastTHoutRangeTime = DateTime.Now;
                lastTHoutRangeStatus = true;
                return true;
            }
            else
            {
                if (lastTHoutRangeStatus)
                    lastTHoutRangeTime = DateTime.MaxValue;
                lastTHoutRangeStatus = false;
                return false;
            }
        }
        bool IsTHoutRangeOver30m()
        {
            return (DateTime.Now - lastTHoutRangeTime).TotalMinutes > 30;
        }
        enum BtnActionE
        {
            None,
            Mid_Up,
            Mid_Down,
            Left_IN,
            Right_IN
        }

    }
}