BlowingFixServiceClient.cs 6.78 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FObjBase;
using FLY.Thick.Blowing.OBJ_INTERFACE;
using FLY.Thick.Blowing.IService;
using Misc;
namespace FLY.Thick.Blowing.Client
{
    public class BlowingFixServiceClient : BlowingServiceClient, IBlowingFixService
    {
        #region IRenZiJiaService 成员
        #region 膜长 计算

        /// <summary>
        /// 膜长查找范围, 以FilmLength为目标值,两边查找,单位m
        /// </summary>
        public double FLRange { get; set; }
        /// <summary>
        /// 计算的状态,因为是一个很漫长的过程!!!
        /// </summary>
        public string CalState { get; set; }
        #region 计算结果
        /// <summary>
        /// 最大相识度
        /// </summary>
        public double MaxR { get; set; }


        
        /// <summary>
        /// 最大相识度对应速度
        /// </summary>
        public double MaxRFilmLength { get; set; }
        #endregion
        #endregion

        #region 温修
        private bool isBtnSelfHold = true;
        /// <summary>
        /// 追边开始按钮自锁
        /// </summary>
        public bool IsBtnSelfHold { get; set; }

        
        public RenZiJiaFixEPCType EPCType { get; set; }
        /// <summary>
        /// 采样时间, 默认2s
        /// </summary>
        public TimeSpan SampleConsume { get; set; } = TimeSpan.FromSeconds(2);


        /// <summary>
        /// 温修间隔,默认45分钟
        /// </summary>
        public TimeSpan SampleInterval { get; set; } = TimeSpan.FromMinutes(45);


        /// <summary>
        /// 当前温修计时,大于温修间隔就会去温修
        /// </summary>
        public TimeSpan SampleTimer { get; protected set; } = TimeSpan.Zero;

        
        /// <summary>
        /// 回到边界后,再等待一段时间,那就肯定找到边界了。 默认5s
        /// </summary>
        public TimeSpan BackEdgeWait { get; set; } = TimeSpan.FromSeconds(5);


        /// <summary>
        /// 采样得到的样品AD
        /// </summary>
        public int SampleAD { get; protected set; } = -1;

 
        /// <summary>
        /// 追边运行中!
        /// </summary>
        public bool EPCIsRunning { get; set; }

        #endregion
        #endregion

        public BlowingFixServiceClient():base()
        {
        }

        #region 功能
        public override void Apply()
        {
            base.Apply();

            CurrObjSys.SetValueEx(
                mConn, mServerID, ID, 
                BLOWINGFIX_OBJ_INTERFACE.SET_PARAMSEXT,
                new BLOWINGFIX_OBJ_INTERFACE.Pack_ParamsExt()
                {
                    filmLenRange = FLRange
                }.ToBytes());


            CurrObjSys.SetValueEx(
                mConn, mServerID, ID,
                BLOWINGFIX_OBJ_INTERFACE.SET_EPC,
                new BLOWINGFIX_OBJ_INTERFACE.Pack_EPC()
                {
                    epctype = EPCType,
                    sampleconsume = SampleConsume,
                    sampleinterval = SampleInterval,
                    backedgewait = BackEdgeWait,
                    isBtnSelfHold = IsBtnSelfHold
                }.ToBytes());
        }
        public void CalFilmLength() 
        {
            BLOWINGFIX_OBJ_INTERFACE.Pack_CalR p = new BLOWINGFIX_OBJ_INTERFACE.Pack_CalR();
            p.filmLenRange = FLRange;
            CurrObjSys.CallFunctionEx(
                mConn, mServerID, ID, 
                BLOWINGFIX_OBJ_INTERFACE.CALL_CALR, p.ToBytes());

        }

        public void EPCStart()
        {
            CurrObjSys.CallFunctionEx(
               mConn, mServerID, ID,
               BLOWINGFIX_OBJ_INTERFACE.CALL_EPCSTART, null);
        }
        public void EPCStop()
        {
            CurrObjSys.CallFunctionEx(
                mConn, mServerID, ID,
                BLOWINGFIX_OBJ_INTERFACE.CALL_EPCSTOP, null);
        }

        #endregion

        public override void ConnectNotify(IFConn from)
        {
            base.ConnectNotify(from);

            if (from.IsConnected) 
            {
                //获取所有数据,设置推送
                CurrObjSys.GetValueEx(
                    mConn,mServerID,ID,
                    BLOWINGFIX_OBJ_INTERFACE.GET_PARAMSEXT);

                CurrObjSys.GetValueEx(
                    mConn,mServerID,ID,
                    BLOWINGFIX_OBJ_INTERFACE.GET_R);

                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BLOWINGFIX_OBJ_INTERFACE.GET_EPC);

                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BLOWINGFIX_OBJ_INTERFACE.GET_EPCSTATE);
            }
        }
        public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
        {
            base.PushGetValue(from, srcid, memid, infodata);

            switch (memid) 
            {
                case BLOWINGFIX_OBJ_INTERFACE.GET_PARAMSEXT:
                    {
                        BLOWINGFIX_OBJ_INTERFACE.Pack_ParamsExt p = new BLOWINGFIX_OBJ_INTERFACE.Pack_ParamsExt();
                        if (!p.TryParse(infodata))
                            break;
                        FLRange = p.filmLenRange;
                    }break;
                case BLOWINGFIX_OBJ_INTERFACE.GET_R:
                    {
                        BLOWINGFIX_OBJ_INTERFACE.Pack_Relevency p = new BLOWINGFIX_OBJ_INTERFACE.Pack_Relevency();
                        if (!p.TryParse(infodata))
                            break;
                        MaxR = p.max_relevency;
                        MaxRFilmLength = p.max_filmLength;
                        CalState = p.calstate;
                    }break;
                case BLOWINGFIX_OBJ_INTERFACE.GET_EPC:
                    {
                        BLOWINGFIX_OBJ_INTERFACE.Pack_EPC p = new BLOWINGFIX_OBJ_INTERFACE.Pack_EPC();
                        if (!p.TryParse(infodata))
                            break;

                        EPCType = p.epctype;
                        SampleConsume = p.sampleconsume;
                        SampleInterval = p.sampleinterval;
                        BackEdgeWait = p.backedgewait;
                        IsBtnSelfHold = p.isBtnSelfHold;
                    }break;
                case BLOWINGFIX_OBJ_INTERFACE.GET_EPCSTATE:
                    {
                        BLOWINGFIX_OBJ_INTERFACE.Pack_EPCState p = new BLOWINGFIX_OBJ_INTERFACE.Pack_EPCState();
                        if (!p.TryParse(infodata))
                            break;

                        SampleTimer = p.sampletimer;
                        EPCIsRunning = p.isrunning;
                        SampleAD = p.samplead;
                    }break;
            }
        }
    }
}