MainMachine _LedRGBProcess.cs 8.8 KB
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Web.UI;
using static System.Windows.Forms.AxHost;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        private Flyelectronic_485_RGB_Controller rGB_Controller = null;

        private bool rgbLedInitOk = false;
        public string lastColor = "";
        public string lastS = "";
        System.Threading.Timer ledRgbTimer;

        public bool CloseRgbLed()
        {
            if (rgbLedInitOk)
            {
                rGB_Controller.Dispose();
            }
            return true;
        }

        public bool InitRgbLed(out string msg)
        {
            msg = "";
            string port = Setting_Init.Device_LedLight_PortName;
            if (port == "")
            {
                LogUtil.info("未配置LED灯端口号");
                return false;
            }
            rGB_Controller = new Flyelectronic_485_RGB_Controller("LED");
            bool result = rGB_Controller.OpenPort(port, out msg);
            if (result)
            {
                LogUtil.error("LED灯初始化成功");
                rgbLedInitOk = true;
                ledRgbTimer = new System.Threading.Timer(new TimerCallback(RgbLedProcess), null, 0, 500);
                GC.KeepAlive(ledRgbTimer);
                msg = "";
                return true;
            }
            else
            {
                LogUtil.error("LED灯初始化失败:" + msg);
            }
            return false;
        }
        public void CloseColor()
        {
            rGB_Controller.CloseLed();
            lastColor = "";
            lastS = "";
        }
        public void ShowColor(Color color, string lastState)
        {
            try
            {
                if (rGB_Controller == null || (!rgbLedInitOk))
                {
                    return;
                }
                if (lastColor != "" && lastColor.Equals(color.Name.ToString()))
                {
                    //return;
                }
                else
                {
                    LogUtil.info(Name + " oldColor :" + lastS + "=" + lastColor + " , ShowColor " + lastState + "=" + color.Name.ToString());
                }
                //if (lastColor.Equals("yellowL")||lastColor.Equals("greenL"))
                //{
                //    rGB_Controller.CloseLed();
                //    Thread.Sleep(50);
                //}
                lastS = lastState;
                //rGB_Controller.CloseLed();
                rGB_Controller.ShowColor(color);
                lastColor = color.Name.ToString();

            }
            catch (Exception ex) { LogUtil.error("ShowColror " + color + ", " + lastState + "出错:" + ex.ToString()); }

        }
        public void ShowBlink(Color color, string lastState)
        {
            try
            {
                if (rGB_Controller == null || (!rgbLedInitOk))
                {
                    return;
                }
                if (string.IsNullOrEmpty(lastS))
                {
                    lastS = "show";
                    rGB_Controller.ShowColor(color);
                }
                else
                {
                    lastS = "";
                    rGB_Controller.CloseLed();
                }

                lastColor = color.Name.ToString();

            }
            catch (Exception ex) { LogUtil.error("ShowColror " + color + ", " + lastState + "出错:" + ex.ToString()); }

        }

        public void ShowYellowLight(string s= "storeOut")
        {
            if (!lastColor.Equals("yellowL"))
            {
                LogUtil.info(Name + " oldColor :" + lastS + "=" + lastColor + " , ShowColor " + s + "=yellowL"  ); 
            }
            lastS = s;
            lastColor = "yellowL";
            //rGB_Controller.CloseLed();
            rGB_Controller.ShowYellowLight();
        }
        public void ShowGreenLight(string s= "storeIn")
        {
            if (!lastColor.Equals("greenL"))
            {
                LogUtil.info(Name + " oldColor :" + lastS + "=" + lastColor + " , ShowColor " + s + "=yellowL"); 
            }
            lastColor = "greenL";
            lastS = s;
            //rGB_Controller.CloseLed();
            rGB_Controller.ShowGreenLight();
        }
        private void RgbLedProcess(object o)
        {
            if (rGB_Controller == null || (!rgbLedInitOk))
            {
                return;
            }

            //红色: 急停,
            //紫色: 异常, 
            //蓝绿: 待机
            //流动绿: 入库
            //流动黄: 出库,
            //白色: 等待用户响应(等待取走盘等), 
            //蓝色: 扫码检测

            bool inPut = false;
            bool scanCode = false;
            bool inOut = false;
            bool waitTake = false;
            if (runStatus == RunStatus.Running)
            {
                //var h = NGDoor_Tray_Test_Reel;

                //出入库 绿闪 黄闪
                if (StoreMoveInfo.MoveStep >= MoveStep.StoreOut10)
                {
                    inOut = true; 
                }
                else if (StringMoveInfo.MoveStep >= MoveStep.StringReelPut && StringMoveInfo.MoveStep <= MoveStep.StringReelPut_05)
                {
                    inOut = true;
                }
                else if (StoreMoveInfo.MoveStep >= MoveStep.StoreIn01)
                {
                    inPut = true;
                }
                else if (StringMoveInfo.MoveStep >= MoveStep.StringReadyGet && StringMoveInfo.MoveStep <= MoveStep.StringReelGetFail)
                {

                    inPut = true;
                }else if (!ClampMoveInfo.IsStep(MoveStep.Wait))
                { 
                    inPut = true;
                }

                if (ClampMoveInfo.IsStep(MoveStep.ReelClamp_10) && (!RobotManage.InoutDebugMode) && (!ClampMoveInfo.MoveParam.IsNg))
                {
                    scanCode = true;
                } 

                if (ResetMoveInfo.IsStep(MoveStep.H14_HomeReset))
                {
                    waitTake = true;
                }
                else if (ClampMoveInfo.IsStep(MoveStep.NGOUT_03))
                {
                    waitTake = true;
                }
            }

            if (IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.LOW) || isInSuddenDown)
            {
                //红色: 急停,
                ShowColor(Color.Red, "suddenStop");
            }
            else if (runStatus == RunStatus.Stop)
            {
                if (Setting_Init.Enable_HideColorTestBtn)
                {

                    //未启动 黑色
                    ShowColor(Color.Black, "stop");
                }
                else
                {

                }
            }
            else if (scanCode)
            {
                //蓝色: 扫码检测 
                //ShowColor(Color.Blue, "scanCode");
                ShowBlink(Color.Yellow, "scanCode");
            }
            else if (waitTake)
            {
                //暂停等待料盘拿走
                //白色: 等待用户响应(等待取走盘等), 
                //蓝色: 扫码检测 
                //ShowColor(Color.White, "waitTask");
                ShowBlink(Color.Yellow, "waitTask");
            }
            //出入库 绿闪 黄闪
            else if (inOut)
            {
                ////流动黄: 出库,  
                //ShowYellowLight();
                ShowBlink(Color.Yellow, "inOut");
                //lastS = "storeOut";
                //LogUtil.info(Name + " ShowColor " + lastS + "=" + lastColor);
            }
            else if (inPut)
            {
                //ShowGreenLight();
                ShowBlink(Color.Yellow, "InPut");
                //lastS = "storeIn";
                //LogUtil.info(Name + " ShowColor " + lastS + "=" + lastColor);
            }
            else if (hasAlarm)
            {
                //紫色: 异常,
                ShowColor(Color.Red, "hasAlarm");

            } //温度超限  
            //else if (IsTHoutRange())
            //{
            //    //紫色: 异常,
            //    ShowColor(Color.Purple);
            //    lastS = "IsTHoutRange";
            //}
            ////温度超限30分钟 
            //else if (IsTHoutRangeOver30m())
            //{
            //    //紫色: 异常,
            //    ShowColor(Color.Purple);
            //    lastS = "IsTHoutRangeOver30m";
            //}
            else
            {
                //待机 蓝绿
                //ShowColor(Color.FromArgb(0, 255, 64), "waiting");
                ShowColor(Color.Green, "waiting");
            }
        }
    }
}