BLOWING_DETECT_OBJ_INTERFACE.cs 7.95 KB
using FLY.Thick.Blowing.IService;
using FObjBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FLY.Thick.Blowing.OBJ_INTERFACE
{
    public class BLOWING_DETECT_OBJ_INTERFACE
    {
        #region Pack
        public class Pack_Params : IPack
        {
            /// <summary>
            /// 旋转架转动角度 °
            /// </summary>
            public double rangle;

            /// <summary>
            /// 人字架周期 设置值
            /// </summary>
            public TimeSpan period;

            /// <summary>
            /// 加减速时间
            /// </summary>
            public TimeSpan accDecTime;


            /// <summary>
            /// 信号0 需要撞2次
            /// </summary>
            public bool isSign0Double;
            /// <summary>
            /// 信号1 需要撞2次
            /// </summary>
            public bool isSign1Double;

            /// <summary>
            /// 信号模式
            /// </summary>
            public BlowingSignType signType;

            /// <summary>
            /// 转向信号时间
            /// </summary>
            public TimeSpan limitSignTime;

            /// <summary>
            /// 人字架到测厚仪长度 m
            /// </summary>
            public double filmLength;

            /// <summary>
            /// 辊周长 mm
            /// </summary>
            public double rollPerimeter;

            /// <summary>
            /// 转向信号100ms 滤波
            /// </summary>
            public bool isSignFilter;
            /// <summary>
            /// 缺少信号模式
            /// </summary>
            public bool isLackSignMode;
            #region IPack 成员

            public byte[] ToBytes()
            {
                List<byte> buf = new List<byte>();
                buf.AddRange(BitConverter.GetBytes(rangle));
                buf.AddRange(BitConverter.GetBytes(period.Ticks));
                buf.AddRange(BitConverter.GetBytes(rollPerimeter));
                buf.AddRange(BitConverter.GetBytes(filmLength));
                buf.AddRange(BitConverter.GetBytes(accDecTime.Ticks));
                buf.AddRange(BitConverter.GetBytes(limitSignTime.Ticks));
                buf.AddRange(BitConverter.GetBytes(isSign0Double));
                buf.AddRange(BitConverter.GetBytes(isSign1Double));
                buf.AddRange(BitConverter.GetBytes((int)signType));
                buf.AddRange(BitConverter.GetBytes(isSignFilter));
                buf.AddRange(BitConverter.GetBytes(isLackSignMode));
                return buf.ToArray();
            }


            public bool TryParse(byte[] value)
            {
                if (value.Length < 8 * 6 + 1 * 2 + 4 + 1+1)
                    return false;
                int idx = 0;
                rangle = BitConverter.ToDouble(value, idx);
                idx += 8;
                period = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;
                rollPerimeter = BitConverter.ToDouble(value, idx);
                idx += 8;

                filmLength = BitConverter.ToDouble(value, idx);
                idx += 8;

                accDecTime = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;

                limitSignTime = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;

                isSign0Double = BitConverter.ToBoolean(value, idx);
                idx++;

                isSign1Double = BitConverter.ToBoolean(value, idx);
                idx++;

                signType = (BlowingSignType)BitConverter.ToInt32(value, idx);
                idx += 4;

                isSignFilter = BitConverter.ToBoolean(value, idx);
                idx++;

                isLackSignMode = BitConverter.ToBoolean(value, idx);
                idx++;
                return true;
            }

            #endregion
        }

        public class Pack_CurrState : IPack
        {
            public int limitno;
            public TimeSpan pasttime;
            public int rotationCnt;
            public double filmvelocity;
            public Misc.DIRECTION direction;
            public double angle;
            /// <summary>
            /// 人字架周期 当前值
            /// </summary>
            public TimeSpan period;
            public TimeSpan swapCoolTime;
            #region IPack 成员

            public byte[] ToBytes()
            {
                List<byte> buf = new List<byte>();
                buf.AddRange(BitConverter.GetBytes(limitno));
                buf.AddRange(BitConverter.GetBytes(pasttime.Ticks));
                buf.AddRange(BitConverter.GetBytes(rotationCnt));
                buf.AddRange(BitConverter.GetBytes(filmvelocity));
                buf.Add((byte)direction);
                buf.AddRange(BitConverter.GetBytes(angle));
                buf.AddRange(BitConverter.GetBytes(period.Ticks));
                buf.AddRange(BitConverter.GetBytes(swapCoolTime.Ticks));
                return buf.ToArray();
            }

            public bool TryParse(byte[] value)
            {
                if (value.Length < 4 + 8 + 4 + 8 + 1 + 8 + 8 + 8)
                    return false;
                int idx = 0;
                limitno = BitConverter.ToInt32(value, idx);
                idx += 4;
                pasttime = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;
                rotationCnt = BitConverter.ToInt32(value, idx);
                idx += 4;
                filmvelocity = BitConverter.ToDouble(value, idx);
                idx += 8;
                direction = (Misc.DIRECTION)value[idx];
                idx += 1;
                angle = BitConverter.ToDouble(value, idx);
                idx += 8;
                period = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;
                swapCoolTime = new TimeSpan(BitConverter.ToInt64(value, idx));
                idx += 8;
                return true;
            }

            #endregion
        }


        public class Pack_BM : IPack
        {
            public int firstbm;
            public int lastbm;

            #region IPack 成员

            public byte[] ToBytes()
            {
                List<byte> buf = new List<byte>();
                buf.AddRange(BitConverter.GetBytes(firstbm));
                buf.AddRange(BitConverter.GetBytes(lastbm));
                return buf.ToArray();
            }

            public bool TryParse(byte[] value)
            {
                if (value.Length < 4 + 4)
                    return false;
                int idx = 0;
                firstbm = BitConverter.ToInt32(value, idx);
                idx += 4;
                lastbm = BitConverter.ToInt32(value, idx);
                idx += 4;
                return true;
            }

            #endregion
        }
        #endregion
        #region GetValue
        /// <summary>
        /// Pack_Params
        /// </summary>
        public const UInt16 GET_PARAMS = 1;

        /// <summary>
        /// Pack_CurrState
        /// </summary>
        public const UInt16 GET_STATE = 5;

        /// <summary>
        /// Pack_BM
        /// </summary>
        public const UInt16 GET_SIGNBM = 9;

        #endregion
        #region SetValue
        /// <summary>
        /// Pack_Params
        /// </summary>
        public const UInt16 SET_PARAMS = 1;

        #endregion
        #region CallFunction

        /// <summary>
        /// request:null
        /// reponse:GetBufListReponse
        /// </summary>
        public const UInt16 CALL_GETSIGNLIST = 4;
        #endregion
        #region PushInfo
        /// <summary>
        /// Pack_Params
        /// </summary>
        public const UInt16 PUSH_PARAMS = 1;

        /// <summary>
        /// Pack_CurrState
        /// </summary>
        public const UInt16 PUSH_STATE = 5;

        /// <summary>
        /// Pack_BM
        /// </summary>
        public const UInt16 PUSH_SIGNBM = 9;
        #endregion
    }
}