using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Reflection;
using System.Diagnostics;
using System.Windows.Media;
using FLY.OBJComponents.IService;
using Misc;

namespace FLY.Weight.Common
{
    public class WeighterC:INotifyPropertyChanged,IPropertyOpt
    {
        public WeighterC(string number, int binCnt)
        {
            Number = number;
            BinCnt = binCnt;
            BinsBinding();
        }

        public event PropertyChangedEventHandler PropertyChanged;

        #region IWeighterC实现
        /// <summary>
        /// 名称:A,B,C,D,E
        /// </summary>
        public string Number { get; set; }
        /// <summary>
        /// 颜色
        /// </summary>
        public Brush Color { get; set; }
        /// <summary>
        /// 料仓数
        /// </summary>
        public int BinCnt { get; protected set; }

        #endregion


        #region 辅助代码生成
        /// <summary>
        /// 报警开关
        /// </summary>
        [Description("报警开关")]
        public bool AlarmIsOn{ get; set; }

        /// <summary>
        /// 报警复位
        /// </summary>
        [Description("报警复位")]
        public bool IsAlarmReseted{ get; set; }

        /// <summary>
        /// 累计产量
        /// </summary>
        [Description("累计产量")]
        public float CumulativeProduction{ get; set; }

        /// <summary>
        /// 配料斗重量显示
        /// </summary>
        [Description("配料斗重量显示")]
        public float MixBucketWeight{ get; set; }

        /// <summary>
        /// 配料斗阀门
        /// </summary>
        [Description("配料斗阀门")]
        public bool BucketValveIsOpen{ get; set; }

        /// <summary>
        /// 配料操作
        /// </summary>
        [Description("配料操作")]
        public bool MixIsOn{ get; set; }

        /// <summary>
        /// 失重仓重量
        /// </summary>
        [Description("失重仓重量")]
        public float BinWeight{ get; set; }

        /// <summary>
        /// 当前产量
        /// </summary>
        [Description("当前产量")]
        public float CurrentFlow{ get; set; }

        /// <summary>
        /// 设定产量
        /// </summary>
        [Description("设定产量")]
        public float FlowSetting{ get; set; }

        /// <summary>
        /// 运行比例
        /// </summary>
        [Description("运行比例")]
        public float ScrewPDisp{ get; set; }

        /// <summary>
        /// 设定比例
        /// </summary>
        [Description("设定比例")]
        public float ScrewPSet{ get; set; }

        /// <summary>
        /// 运行频率
        /// </summary>
        [Description("运行频率")]
        public float ScrewMotorFreq{ get; set; }

        /// <summary>
        /// 设定频率
        /// </summary>
        [Description("设定频率")]
        public float ScrewManualFreq{ get; set; }

        /// <summary>
        /// 设定频率确定
        /// </summary>
        [Description("设定频率确定")]
        public bool ScrewManualFreqIsSet{ get; set; }

        /// <summary>
        /// 螺杆模式
        /// </summary>
        [Description("螺杆模式")]
        public bool ScrewIsAutoMode{ get; set; }

        /// <summary>
        /// 螺杆操作
        /// </summary>
        [Description("螺杆操作")]
        public bool ScrewMotorIsOn{ get; set; }

        /// <summary>
        /// 配料数据保存
        /// </summary>
        [Description("配料数据保存")]
        public bool IsMixSave{ get; set; }

        /// <summary>
        /// 1#比例设定
        /// </summary>
        [Description("1#比例设定")]
        public float MixPSet_1{ get; set; }

        /// <summary>
        /// 2#比例设定
        /// </summary>
        [Description("2#比例设定")]
        public float MixPSet_2{ get; set; }

        /// <summary>
        /// 3#比例设定
        /// </summary>
        [Description("3#比例设定")]
        public float MixPSet_3{ get; set; }

        /// <summary>
        /// 4#比例设定
        /// </summary>
        [Description("4#比例设定")]
        public float MixPSet_4{ get; set; }

        /// <summary>
        /// 5#比例设定
        /// </summary>
        [Description("5#比例设定")]
        public float MixPSet_5{ get; set; }

        /// <summary>
        /// 6#比例设定
        /// </summary>
        [Description("6#比例设定")]
        public float MixPSet_6{ get; set; }

        /// <summary>
        /// 1#比例显示
        /// </summary>
        [Description("1#比例显示")]
        public float MixPDisp_1{ get; set; }

        /// <summary>
        /// 2#比例显示
        /// </summary>
        [Description("2#比例显示")]
        public float MixPDisp_2{ get; set; }

        /// <summary>
        /// 3#比例显示
        /// </summary>
        [Description("3#比例显示")]
        public float MixPDisp_3{ get; set; }

        /// <summary>
        /// 4#比例显示
        /// </summary>
        [Description("4#比例显示")]
        public float MixPDisp_4{ get; set; }

        /// <summary>
        /// 5#比例显示
        /// </summary>
        [Description("5#比例显示")]
        public float MixPDisp_5{ get; set; }

        /// <summary>
        /// 6#比例显示
        /// </summary>
        [Description("6#比例显示")]
        public float MixPDisp_6{ get; set; }

        /// <summary>
        /// 1#重量设定
        /// </summary>
        [Description("1#重量设定")]
        public float MixSet_1{ get; set; }

        /// <summary>
        /// 2#重量设定
        /// </summary>
        [Description("2#重量设定")]
        public float MixSet_2{ get; set; }

        /// <summary>
        /// 3#重量设定
        /// </summary>
        [Description("3#重量设定")]
        public float MixSet_3{ get; set; }

        /// <summary>
        /// 4#重量设定
        /// </summary>
        [Description("4#重量设定")]
        public float MixSet_4{ get; set; }

        /// <summary>
        /// 5#重量设定
        /// </summary>
        [Description("5#重量设定")]
        public float MixSet_5{ get; set; }

        /// <summary>
        /// 6#重量设定
        /// </summary>
        [Description("6#重量设定")]
        public float MixSet_6{ get; set; }

        /// <summary>
        /// 1#重量显示
        /// </summary>
        [Description("1#重量显示")]
        public float MixDisp_1{ get; set; }

        /// <summary>
        /// 2#重量显示
        /// </summary>
        [Description("2#重量显示")]
        public float MixDisp_2{ get; set; }

        /// <summary>
        /// 3#重量显示
        /// </summary>
        [Description("3#重量显示")]
        public float MixDisp_3{ get; set; }

        /// <summary>
        /// 4#重量显示
        /// </summary>
        [Description("4#重量显示")]
        public float MixDisp_4{ get; set; }

        /// <summary>
        /// 5#重量显示
        /// </summary>
        [Description("5#重量显示")]
        public float MixDisp_5{ get; set; }

        /// <summary>
        /// 6#重量显示
        /// </summary>
        [Description("6#重量显示")]
        public float MixDisp_6{ get; set; }

        /// <summary>
        /// 1#放料
        /// </summary>
        [Description("1#放料")]
        public bool MixLight_1{ get; set; }

        /// <summary>
        /// 2#放料
        /// </summary>
        [Description("2#放料")]
        public bool MixLight_2{ get; set; }

        /// <summary>
        /// 3#放料
        /// </summary>
        [Description("3#放料")]
        public bool MixLight_3{ get; set; }

        /// <summary>
        /// 4#放料
        /// </summary>
        [Description("4#放料")]
        public bool MixLight_4{ get; set; }

        /// <summary>
        /// 5#放料
        /// </summary>
        [Description("5#放料")]
        public bool MixLight_5{ get; set; }

        /// <summary>
        /// 6#放料
        /// </summary>
        [Description("6#放料")]
        public bool MixLight_6{ get; set; }

        /// <summary>
        /// 配料斗卸载
        /// </summary>
        [Description("配料斗卸载")]
        public bool MixUnload{ get; set; }

        /// <summary>
        /// 配料斗重量设置
        /// </summary>
        [Description("配料斗重量设置")]
        public float MixSet{ get; set; }

        /// <summary>
        /// 配料斗重量显示
        /// </summary>
        [Description("配料斗重量显示")]
        public float MixDisp{ get; set; }

        /// <summary>
        /// 1#累计重量
        /// </summary>
        [Description("1#累计重量")]
        public float MixCum_1{ get; set; }

        /// <summary>
        /// 2#累计重量
        /// </summary>
        [Description("2#累计重量")]
        public float MixCum_2{ get; set; }

        /// <summary>
        /// 3#累计重量
        /// </summary>
        [Description("3#累计重量")]
        public float MixCum_3{ get; set; }

        /// <summary>
        /// 4#累计重量
        /// </summary>
        [Description("4#累计重量")]
        public float MixCum_4{ get; set; }

        /// <summary>
        /// 5#累计重量
        /// </summary>
        [Description("5#累计重量")]
        public float MixCum_5{ get; set; }

        /// <summary>
        /// 6#累计重量
        /// </summary>
        [Description("6#累计重量")]
        public float MixCum_6{ get; set; }

        /// <summary>
        /// 1#累计百分比
        /// </summary>
        [Description("1#累计百分比")]
        public float MixCumPercent_1{ get; set; }

        /// <summary>
        /// 2#累计百分比
        /// </summary>
        [Description("2#累计百分比")]
        public float MixCumPercent_2{ get; set; }

        /// <summary>
        /// 3#累计百分比
        /// </summary>
        [Description("3#累计百分比")]
        public float MixCumPercent_3{ get; set; }

        /// <summary>
        /// 4#累计百分比
        /// </summary>
        [Description("4#累计百分比")]
        public float MixCumPercent_4{ get; set; }

        /// <summary>
        /// 5#累计百分比
        /// </summary>
        [Description("5#累计百分比")]
        public float MixCumPercent_5{ get; set; }

        /// <summary>
        /// 6#累计百分比
        /// </summary>
        [Description("6#累计百分比")]
        public float MixCumPercent_6{ get; set; }

        /// <summary>
        /// 产量清零
        /// </summary>
        [Description("产量清零")]
        public bool ClearProduction{ get; set; }

        /// <summary>
        /// 流量方式
        /// </summary>
        [Description("流量方式")]
        public bool FlowCalMethodIsA{ get; set; }

        /// <summary>
        /// 流量反馈
        /// </summary>
        [Description("流量反馈")]
        public float FlowDisp{ get; set; }

        /// <summary>
        /// 滤波系数设定
        /// </summary>
        [Description("滤波系数设定")]
        public float FilterParam{ get; set; }

        /// <summary>
        /// 切换级别设定
        /// </summary>
        [Description("切换级别设定")]
        public float SwitchLv{ get; set; }

        /// <summary>
        /// 升降增益设定
        /// </summary>
        [Description("升降增益设定")]
        public float UpDownGain{ get; set; }

        /// <summary>
        /// 比例增益设定
        /// </summary>
        [Description("比例增益设定")]
        public float PGain{ get; set; }

        /// <summary>
        /// 积分时间设定
        /// </summary>
        [Description("积分时间设定")]
        public float ITime{ get; set; }

        /// <summary>
        /// 调节系数设定
        /// </summary>
        [Description("调节系数设定")]
        public float AdjustFactor{ get; set; }

        /// <summary>
        /// 调节上限设定
        /// </summary>
        [Description("调节上限设定")]
        public float AdjustUpper{ get; set; }

        /// <summary>
        /// 调节下限设定
        /// </summary>
        [Description("调节下限设定")]
        public float AdjustLower{ get; set; }

        /// <summary>
        /// 稳定级别切换
        /// </summary>
        [Description("稳定级别切换")]
        public float StableLvSwitch{ get; set; }

        /// <summary>
        /// PID调节限幅
        /// </summary>
        [Description("PID调节限幅")]
        public float PIDLimit{ get; set; }

        /// <summary>
        /// 采样时间
        /// </summary>
        [Description("采样时间")]
        public float SampleTime{ get; set; }

        /// <summary>
        /// PID结果
        /// </summary>
        [Description("PID结果")]
        public float PIDResult{ get; set; }

        /// <summary>
        /// PID调节
        /// </summary>
        [Description("PID调节")]
        public float PIDAdjust{ get; set; }

        /// <summary>
        /// 实际速度
        /// </summary>
        [Description("实际速度")]
        public float ScrewCurrentSpeed{ get; set; }

        /// <summary>
        /// 比例增益
        /// </summary>
        [Description("比例增益")]
        public float PGainDisp{ get; set; }

        /// <summary>
        /// 卸料时间
        /// </summary>
        [Description("卸料时间")]
        public float UnloadingTime{ get; set; }

        /// <summary>
        /// 零位稳定时间
        /// </summary>
        [Description("零位稳定时间")]
        public float ZeroStableTime{ get; set; }

        /// <summary>
        /// 流量切换允许
        /// </summary>
        [Description("流量切换允许")]
        public float FlowSwitchEnable{ get; set; }

        /// <summary>
        /// 取样时间设定(s)
        /// </summary>
        [Description("取样时间设定(s)")]
        public float SampleTimeSet{ get; set; }

        /// <summary>
        /// 额定频率(Hz)
        /// </summary>
        [Description("额定频率(Hz)")]
        public float ScrewMotorRatedFreq{ get; set; }

        /// <summary>
        /// 重量稳定时间(s)
        /// </summary>
        [Description("重量稳定时间(s)")]
        public float WeightStableTime{ get; set; }

        /// <summary>
        /// 料位下限设定(kg)
        /// </summary>
        [Description("料位下限设定(kg)")]
        public float MaterialLowLimitSet{ get; set; }

        /// <summary>
        /// 报警偏差设定(%)
        /// </summary>
        [Description("报警偏差设定(%)")]
        public float AlarmDeviationSet{ get; set; }

        /// <summary>
        /// 重量校正系数
        /// </summary>
        [Description("重量校正系数")]
        public float WeightCorrectFactor{ get; set; }

        /// <summary>
        /// 缺料报警设定(kg)
        /// </summary>
        [Description("缺料报警设定(kg)")]
        public float LackErrorSet{ get; set; }

        /// <summary>
        /// 搅拌时间设定(s)
        /// </summary>
        [Description("搅拌时间设定(s)")]
        public float MixingTimeSet{ get; set; }

        /// <summary>
        /// 1次补料偏差
        /// </summary>
        [Description("1次补料偏差")]
        public float FeedingDeviation_1{ get; set; }

        /// <summary>
        /// 2次补料偏差
        /// </summary>
        [Description("2次补料偏差")]
        public float FeedingDeviation_2{ get; set; }

        /// <summary>
        /// 3次补料偏差
        /// </summary>
        [Description("3次补料偏差")]
        public float FeedingDeviation_3{ get; set; }

        /// <summary>
        /// 4次补料偏差
        /// </summary>
        [Description("4次补料偏差")]
        public float FeedingDeviation_4{ get; set; }

        /// <summary>
        /// 5次补料偏差
        /// </summary>
        [Description("5次补料偏差")]
        public float FeedingDeviation_5{ get; set; }

        /// <summary>
        /// 6次补料偏差
        /// </summary>
        [Description("6次补料偏差")]
        public float FeedingDeviation_6{ get; set; }

        /// <summary>
        /// 1次加料设定
        /// </summary>
        [Description("1次加料设定")]
        public float FeedSet_1{ get; set; }

        /// <summary>
        /// 2次加料设定
        /// </summary>
        [Description("2次加料设定")]
        public float FeedSet_2{ get; set; }

        /// <summary>
        /// 3次加料设定
        /// </summary>
        [Description("3次加料设定")]
        public float FeedSet_3{ get; set; }

        /// <summary>
        /// 4次加料设定
        /// </summary>
        [Description("4次加料设定")]
        public float FeedSet_4{ get; set; }

        /// <summary>
        /// 5次加料设定
        /// </summary>
        [Description("5次加料设定")]
        public float FeedSet_5{ get; set; }

        /// <summary>
        /// 6次加料设定
        /// </summary>
        [Description("6次加料设定")]
        public float FeedSet_6{ get; set; }

        /// <summary>
        /// 1#初始时间
        /// </summary>
        [Description("1#初始时间")]
        public float InitTime_1{ get; set; }

        /// <summary>
        /// 2#初始时间
        /// </summary>
        [Description("2#初始时间")]
        public float InitTime_2{ get; set; }

        /// <summary>
        /// 3#初始时间
        /// </summary>
        [Description("3#初始时间")]
        public float InitTime_3{ get; set; }

        /// <summary>
        /// 4#初始时间
        /// </summary>
        [Description("4#初始时间")]
        public float InitTime_4{ get; set; }

        /// <summary>
        /// 5#初始时间
        /// </summary>
        [Description("5#初始时间")]
        public float InitTime_5{ get; set; }

        /// <summary>
        /// 6#初始时间
        /// </summary>
        [Description("6#初始时间")]
        public float InitTime_6{ get; set; }

        /// <summary>
        /// 1#最小时间
        /// </summary>
        [Description("1#最小时间")]
        public float MinTime_1{ get; set; }

        /// <summary>
        /// 2#最小时间
        /// </summary>
        [Description("2#最小时间")]
        public float MinTime_2{ get; set; }

        /// <summary>
        /// 3#最小时间
        /// </summary>
        [Description("3#最小时间")]
        public float MinTime_3{ get; set; }

        /// <summary>
        /// 4#最小时间
        /// </summary>
        [Description("4#最小时间")]
        public float MinTime_4{ get; set; }

        /// <summary>
        /// 5#最小时间
        /// </summary>
        [Description("5#最小时间")]
        public float MinTime_5{ get; set; }

        /// <summary>
        /// 6#最小时间
        /// </summary>
        [Description("6#最小时间")]
        public float MinTime_6{ get; set; }

        /// <summary>
        /// 1#稳重时间
        /// </summary>
        [Description("1#稳重时间")]
        public float StableTime_1{ get; set; }

        /// <summary>
        /// 2#稳重时间
        /// </summary>
        [Description("2#稳重时间")]
        public float StableTime_2{ get; set; }

        /// <summary>
        /// 3#稳重时间
        /// </summary>
        [Description("3#稳重时间")]
        public float StableTime_3{ get; set; }

        /// <summary>
        /// 4#稳重时间
        /// </summary>
        [Description("4#稳重时间")]
        public float StableTime_4{ get; set; }

        /// <summary>
        /// 5#稳重时间
        /// </summary>
        [Description("5#稳重时间")]
        public float StableTime_5{ get; set; }

        /// <summary>
        /// 6#稳重时间
        /// </summary>
        [Description("6#稳重时间")]
        public float StableTime_6{ get; set; }

        /// <summary>
        /// 1次料仓报警设定
        /// </summary>
        [Description("1次料仓报警设定")]
        public float BinAlarmSet_1{ get; set; }

        /// <summary>
        /// 2次料仓报警设定
        /// </summary>
        [Description("2次料仓报警设定")]
        public float BinAlarmSet_2{ get; set; }

        /// <summary>
        /// 3次料仓报警设定
        /// </summary>
        [Description("3次料仓报警设定")]
        public float BinAlarmSet_3{ get; set; }

        /// <summary>
        /// 4次料仓报警设定
        /// </summary>
        [Description("4次料仓报警设定")]
        public float BinAlarmSet_4{ get; set; }

        /// <summary>
        /// 5次料仓报警设定
        /// </summary>
        [Description("5次料仓报警设定")]
        public float BinAlarmSet_5{ get; set; }

        /// <summary>
        /// 6次料仓报警设定
        /// </summary>
        [Description("6次料仓报警设定")]
        public float BinAlarmSet_6{ get; set; }

        /// <summary>
        /// No.1料仓缺料报警
        /// </summary>
        [Description("No.1料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_1{ get; set; }

        /// <summary>
        /// No.2料仓缺料报警
        /// </summary>
        [Description("No.2料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_2{ get; set; }

        /// <summary>
        /// No.3料仓缺料报警
        /// </summary>
        [Description("No.3料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_3{ get; set; }

        /// <summary>
        /// No.4料仓缺料报警
        /// </summary>
        [Description("No.4料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_4{ get; set; }

        /// <summary>
        /// No.5料仓缺料报警
        /// </summary>
        [Description("No.5料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_5{ get; set; }

        /// <summary>
        /// No.6料仓缺料报警
        /// </summary>
        [Description("No.6料仓缺料报警")]
        [IsError()]
        public bool IsErrorOfLack_6{ get; set; }

        /// <summary>
        /// No.1料斗加料异常
        /// </summary>
        [Description("No.1料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_1{ get; set; }

        /// <summary>
        /// No.2料斗加料异常
        /// </summary>
        [Description("No.2料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_2{ get; set; }

        /// <summary>
        /// No.3料斗加料异常
        /// </summary>
        [Description("No.3料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_3{ get; set; }

        /// <summary>
        /// No.4料斗加料异常
        /// </summary>
        [Description("No.4料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_4{ get; set; }

        /// <summary>
        /// No.5料斗加料异常
        /// </summary>
        [Description("No.5料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_5{ get; set; }

        /// <summary>
        /// No.6料斗加料异常
        /// </summary>
        [Description("No.6料斗加料异常")]
        [IsError()]
        public bool IsErrorOfAdd_6{ get; set; }

        /// <summary>
        /// 螺杆缺料报警
        /// </summary>
        [Description("螺杆缺料报警")]
        [IsError()]
        public bool IsErrorOfScrewLack{ get; set; }

        /// <summary>
        /// 螺杆流量超偏差报警
        /// </summary>
        [Description("螺杆流量超偏差报警")]
        [IsError()]
        public bool IsErrorOfScrewFlow{ get; set; }

        /// <summary>
        /// 搅拌电机故障
        /// </summary>
        [Description("搅拌电机故障")]
        [IsError()]
        public bool IsErrorOfBlender{ get; set; }

        /// <summary>
        /// 急停开启
        /// </summary>
        [Description("急停开启")]
        [IsError()]
        public bool IsErrorOfScram{ get; set; }

        /// <summary>
        /// 搅拌电机急停开启
        /// </summary>
        [Description("搅拌电机急停开启")]
        [IsError()]
        public bool IsErrorOfBlender2{ get; set; }

        /// <summary>
        /// 搅拌电机未启动
        /// </summary>
        [Description("搅拌电机未启动")]
        [IsError()]
        public bool IsErrorOfBlender3{ get; set; }

        #endregion


        public void BinsReBinding(int bincnt)
        {
            BinCnt = bincnt;
            BinsBinding();
        }
        /// <summary>
        /// 料仓,混料参数 绑定到 对应的队列
        /// </summary>
        void BinsBinding()
        {
            Ingredients.Clear();

            for (int i = 0; i < BinCnt; i++)
            {
                int no = i + 1;
                IngredientCell ingredient = new IngredientCell();
                ingredient.Number = no.ToString();
                Misc.BindingOperations.SetBinding(this, $"MixLight_{no}", ingredient, "MixLight");
                Misc.BindingOperations.SetBinding(this, $"MixPSet_{no}", ingredient, "MixPSet", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"MixPDisp_{no}", ingredient, "MixPDisp", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"MixCumPercent_{no}", ingredient, "MixCumPercent", Misc.BindingOperations.BindingMode.TwoWay);

                Misc.BindingOperations.SetBinding(this, $"MixSet_{no}", ingredient, "MixSet", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"MixDisp_{no}", ingredient, "MixDisp", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"MixCum_{no}", ingredient, "MixCum", Misc.BindingOperations.BindingMode.TwoWay);

                Ingredients.Add(ingredient);
            }

            IngredientParams.Clear();

            for (int i = 0; i < BinCnt; i++)
            {
                int no = i + 1;
                IngredientParamCell ingredientParam = new IngredientParamCell();
                ingredientParam.Number = no.ToString();
                Misc.BindingOperations.SetBinding(this, $"FeedingDeviation_{no}", ingredientParam, "FeedingDeviation", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"FeedSet_{no}", ingredientParam, "FeedSet", Misc.BindingOperations.BindingMode.TwoWay);

                Misc.BindingOperations.SetBinding(this, $"InitTime_{no}", ingredientParam, "InitTime", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"MinTime_{no}", ingredientParam, "MinTime", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"StableTime_{no}", ingredientParam, "StableTime", Misc.BindingOperations.BindingMode.TwoWay);
                Misc.BindingOperations.SetBinding(this, $"BinAlarmSet_{no}", ingredientParam, "BinAlarmSet", Misc.BindingOperations.BindingMode.TwoWay);

                IngredientParams.Add(ingredientParam);
            }
        }

        public string[] GetSyncPropNames()
        {
            return null;
        }

        public string[] GetNoSyncPropNames()
        {
            return new string[] {
                "Number",
                "Color",
                "BinCnt",
                "Ingredients",
                "IngredientParams"

            };
        }
        #region 混料料仓队列

        public List<IngredientCell> Ingredients { get; } = new List<IngredientCell>();


        #endregion
        #region 混料参数队列

        public List<IngredientParamCell> IngredientParams { get; } = new List<IngredientParamCell>();
        #endregion
    }

    public class IngredientCell : INotifyPropertyChanged
    {
        /// <summary>
        /// 颜色
        /// </summary>
        public Brush Color { get; set; }


        /// <summary>
        /// 序号
        /// </summary>
        public string Number { get; set; }


        /// <summary>
        /// 混料 进行中
        /// </summary>
        public bool MixLight { get; set; }

        /// <summary>
        /// 比例设定
        /// </summary>
        public float MixPSet { get; set; }

        /// <summary>
        /// 比例显示
        /// </summary>
        public float MixPDisp { get; set; }


        /// <summary>
        /// 累计重量比例
        /// </summary>
        public float MixCumPercent { get; set; }

        /// <summary>
        /// 重量设定
        /// </summary>
        public float MixSet { get; set; }


        /// <summary>
        /// 重量显示
        /// </summary>
        public float MixDisp { get; set; }

        /// <summary>
        /// 累计重量
        /// </summary>
        public float MixCum { get; set; }



        public IngredientCell()
        {

        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public class IngredientParamCell : INotifyPropertyChanged
    {
        /// <summary>
        /// 序号
        /// </summary>
        public string Number { get; set; }

        /// <summary>
        /// 补料偏差
        /// </summary>
        public float FeedingDeviation { get; set; }

        /// <summary>
        /// 加料设定
        /// </summary>
        public float FeedSet { get; set; }


        /// <summary>
        /// 初始时间
        /// </summary>
        public float InitTime { get; set; }


        /// <summary>
        /// 最小时间
        /// </summary>
        public float MinTime { get; set; }

        /// <summary>
        /// 稳重时间
        /// </summary>
        public float StableTime { get; set; }


        /// <summary>
        /// 料仓报警设定
        /// </summary>
        public float BinAlarmSet { get; set; }



        public IngredientParamCell()
        {

        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

}