BorderSearchServiceClient.cs 6.59 KB
Newer Older
潘栩锋's avatar
1  
潘栩锋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Misc;
using FObjBase;
using FLY.Thick.Base.IService;
using FLY.Thick.Base.OBJ_INTERFACE;
using FLY.Thick.Base.Common;

namespace FLY.Thick.Base.Client
{
14 15 16 17
    /// <summary>
    /// 边界查找服务 客户代理
    /// </summary>
    public class BorderSearchServiceClient: FObjServiceClient, IBorderSearchService
潘栩锋's avatar
1  
潘栩锋 committed
18
    {
19 20 21 22 23
        /// <summary>
        /// 边界查找服务 构造
        /// </summary>
        /// <param name="id"></param>
        public BorderSearchServiceClient(UInt32 id) : base(id) { }
潘栩锋's avatar
1  
潘栩锋 committed
24

25 26 27 28 29 30
        /// <summary>
        /// 边界查找服务 构造
        /// </summary>
        /// <param name="serviceId">服务id</param>
        /// <param name="connName">连接器</param>
        public BorderSearchServiceClient(UInt32 serviceId, string connName) : base(serviceId, connName) { }
潘栩锋's avatar
1  
潘栩锋 committed
31 32

        #region IBorderSearchService 成员
33 34 35 36

        public bool Enable { get; set; }


潘栩锋's avatar
1  
潘栩锋 committed
37 38 39
        /// <summary>
        /// 边界拐点检测,找到的边界更加精确
        /// </summary>
40 41
        public bool IsBreakDetect { get; set; } = true;

潘栩锋's avatar
潘栩锋 committed
42 43 44 45 46 47 48 49
        [PropertyChanged.DoNotCheckEquality]
        public Range Valid { get; set; } = new Range();
        [PropertyChanged.DoNotCheckEquality]
        public Range Border_Backw { get; private set; } = new Range();
        [PropertyChanged.DoNotCheckEquality]
        public Range Border_Forw { get; private set; } = new Range();
        [PropertyChanged.DoNotCheckEquality]
        public Range Border { get; private set; } = new Range();
50 51


潘栩锋's avatar
1  
潘栩锋 committed
52 53 54
        /// <summary>
        /// 当前膜宽,测量出来的,单位是 脉冲
        /// </summary>
55 56 57
        public int Width { get; protected set; }


潘栩锋's avatar
1  
潘栩锋 committed
58 59 60
        /// <summary>
        /// 膜中间位置 单位 脉冲
        /// </summary>
61 62
        public int Mid { get; protected set; }

潘栩锋's avatar
1  
潘栩锋 committed
63 64 65 66

        /// <summary>
        /// 手动设置温修AD值
        /// </summary>
67
        public bool TempADBySet { get; set; }
潘栩锋's avatar
1  
潘栩锋 committed
68

69
        public int TempAD { get; set; }
潘栩锋's avatar
1  
潘栩锋 committed
70

71 72 73 74 75 76 77 78 79 80 81 82 83 84
        public int TempRange { get; set; }

        /// <summary>
        /// 温修范围是温修的百分比
        /// </summary>
        public bool IsTempRangeByPercent { get; set; } = true;

        /// <summary>
        ///  温修范围百分比
        /// </summary>
        public double TempRangePercent { get; set; } = 0.02;


        public int N { get; set; }
潘栩锋's avatar
1  
潘栩锋 committed
85 86 87 88

        /// <summary>
        /// 探头直径,单位脉冲, 膜宽 = 边界范围 - 探头直径
        /// </summary>
89 90 91 92 93 94
        public int SensorWidth { get; set; }

        public int N2 { get; set; }


        public int N3 { get; set; }
潘栩锋's avatar
1  
潘栩锋 committed
95 96 97 98

        /// <summary>
        /// 用于调试, 进入到边界查找的数据
        /// </summary>
99 100 101
        [PropertyChanged.DoNotCheckEquality]
        public int[] Datas { get; protected set; } = null;

潘栩锋's avatar
1  
潘栩锋 committed
102 103 104 105 106
        #endregion


        public void Apply() 
        {
潘栩锋's avatar
潘栩锋 committed
107
            var p = new BORDERSEARCH_OBJ_INTERFACE.Pack_Params();
潘栩锋's avatar
1  
潘栩锋 committed
108 109 110 111 112 113 114 115 116 117
            p.enable = Enable;
            p.tempADBySet = TempADBySet;
            p.tempad = TempAD;
            p.temprange = TempRange;
            p.n = N;
            p.n2 = N2;
            p.n3 = N3;
            p.valid = Valid;
            p.sensorwidth = SensorWidth;
            p.isBreakDetect = IsBreakDetect;
118 119 120
            p.isTempRangeByPercent = IsTempRangeByPercent;
            p.tempRangePercent = TempRangePercent;
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
潘栩锋's avatar
1  
潘栩锋 committed
121 122 123 124 125

            //获取所有数据,设置推送
            CurrObjSys.SetValueEx(
                mConn, mServerID, ID, 
                BORDERSEARCH_OBJ_INTERFACE.SET_PARAMS,
126
                Misc.Converter.StringToBytes(json));
潘栩锋's avatar
1  
潘栩锋 committed
127
        }
128

潘栩锋's avatar
1  
潘栩锋 committed
129 130
        public override void ConnectNotify(IFConn from)
        {
131
            base.ConnectNotify(from);
潘栩锋's avatar
1  
潘栩锋 committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
            if (from.IsConnected)
            {
                //获取所有数据,设置推送
                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID, 
                    BORDERSEARCH_OBJ_INTERFACE.GET_PARAMS);
                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID, 
                    BORDERSEARCH_OBJ_INTERFACE.GET_RESULT);
                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BORDERSEARCH_OBJ_INTERFACE.GET_DATAS);
                CurrObjSys.SenseConfigEx(
                    mConn, mServerID, ID, 0xffffffff, SENSE_CONFIG.ADD);
            }
        }
        public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
        {
            switch (memid)
            {
                case BORDERSEARCH_OBJ_INTERFACE.GET_PARAMS:
                    {
154
                        string json = Misc.Converter.BytesToString(infodata);
潘栩锋's avatar
1  
潘栩锋 committed
155

156 157
                        var p = Newtonsoft.Json.JsonConvert.DeserializeObject<BORDERSEARCH_OBJ_INTERFACE.Pack_Params>(json);
                        
潘栩锋's avatar
1  
潘栩锋 committed
158
                        Enable = p.enable;
潘栩锋's avatar
潘栩锋 committed
159
                        Valid = p.valid;
潘栩锋's avatar
1  
潘栩锋 committed
160 161 162 163 164 165 166 167
                        TempADBySet = p.tempADBySet;
                        TempAD = p.tempad;
                        TempRange = p.temprange;
                        N=p.n;
                        SensorWidth = p.sensorwidth;
                        N2=p.n2;
                        N3=p.n3;
                        IsBreakDetect = p.isBreakDetect;
168 169
                        IsTempRangeByPercent = p.isTempRangeByPercent;
                        TempRangePercent = p.tempRangePercent;
潘栩锋's avatar
1  
潘栩锋 committed
170 171 172
                    } break;
                case BORDERSEARCH_OBJ_INTERFACE.GET_RESULT:
                    {
173 174 175 176

                        string json = Misc.Converter.BytesToString(infodata);

                        var p = Newtonsoft.Json.JsonConvert.DeserializeObject<BORDERSEARCH_OBJ_INTERFACE.Pack_Result>(json);
潘栩锋's avatar
潘栩锋 committed
177 178 179
                        Border_Forw = p.borderForw;
                        Border_Backw = p.borderBackw;
                        Border = p.border;
潘栩锋's avatar
1  
潘栩锋 committed
180 181 182 183 184
                        Width = p.width;
                        Mid = p.mid;
                    } break;
                case BORDERSEARCH_OBJ_INTERFACE.GET_DATAS:
                    {
185 186 187 188 189

                        string json = Misc.Converter.BytesToString(infodata);

                        var p = Newtonsoft.Json.JsonConvert.DeserializeObject<BORDERSEARCH_OBJ_INTERFACE.Pack_Data>(json);

潘栩锋's avatar
1  
潘栩锋 committed
190 191 192 193 194 195 196 197 198 199 200 201 202
                        Datas = p.data;
                    }
                    break;
            }
        }
        public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
        {
            PushGetValue(from, srcid, infoid, infodata);
        }


    }
}