| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- namespace Ips.Library.Entity
 
- {
 
-     public class AdcOptionsBuilder
 
-     {
 
-         public AdcOptionsBuilder()
 
-         {
 
-             _options = new AdcOptions();
 
-         }
 
-         protected AdcOptions _options;
 
-         public virtual void SetStart(DateTime startTime, int timeLen)
 
-         {
 
-             _options.StartTime = startTime;
 
-             _options.TimeLen = timeLen;
 
-         }
 
-         public virtual void SetCard(AdCardType cardType, AdClockType clockType, AdTriggerMode triggerMode, int ddcFreq, long clockFreq, int mutil, string storePath)
 
-         {
 
-             _options.CardType = cardType;
 
-             _options.ClockType = clockType;
 
-             _options.TriggerMode = triggerMode;
 
-             _options.DdcFreq = ddcFreq;
 
-             _options.ClockFreq = clockFreq;
 
-             _options.Mutil = mutil;
 
-             _options.StorePath = storePath;
 
-         }
 
-         public virtual void SetChannel(string siteCode, string adcCode, int chNum, long centerFreq)
 
-         {
 
-             _options.SetChannel(siteCode, adcCode, chNum, centerFreq);
 
-         }
 
-         public virtual void AddSignal(string siteCode, string adcCode, int chNum, long freqAd, int bandWidth, string satNum, long freqUp)
 
-         {
 
-             _options.AddSingal(siteCode, adcCode, chNum, freqAd, bandWidth, satNum, freqUp);
 
-         }
 
-         public virtual void AddDXSignal(string siteCode, string adcCode, int chNum, long freqAd, int bandWidth, int mod, long freqUp)
 
-         {
 
-             _options.AddDXSingal(siteCode, adcCode, chNum, freqAd, bandWidth, mod, freqUp);
 
-         }
 
-         public virtual AdcOptions Build()
 
-         {
 
-             _options.ChCount = _options.Channels.Max(m => m.ChNum);
 
-             foreach (var ch in _options.Channels)
 
-             {
 
-                 if (ch.Signals.Count == 0) continue;
 
-                 CalcChannelCenter(ch);
 
-             }
 
-             if (ValidAdcSignals(out string errMsg) == false)
 
-             {
 
-                 throw new Exception(errMsg);
 
-             }
 
-             return _options;
 
-         }
 
-         protected virtual void CalcChannelCenter(AdcChOptions ch)
 
-         {
 
-             if (ch.Signals.Count == 0 || ch.CenterFreq > 0) return;
 
-             if (ch.Signals.Count == 1)
 
-             {
 
-                 ch.CenterFreq = ch.Signals[0].FreqPoint;
 
-             }
 
-             else
 
-             {
 
-                 var sigDetails = ch.Signals.Select(m => new { m.FreqPoint, m.BandWidth, startFreq = m.FreqPoint - m.BandWidth / 2, endFreq = m.FreqPoint + m.BandWidth / 2 });
 
-                 var minFreq = sigDetails.Min(m => m.startFreq);
 
-                 var maxFreq = sigDetails.Max(m => m.endFreq);
 
-                 ch.CenterFreq = (minFreq + maxFreq) / 2;
 
-             }
 
-         }
 
-         protected virtual bool ValidAdcSignals(out string errMsg)
 
-         {
 
-             var maxBandWidth = (long)(_options.ClockFreq / _options.Mutil);
 
-             bool isValid = true;
 
-             StringBuilder sb = new StringBuilder();
 
-             foreach (var ch in _options.Channels)
 
-             {
 
-                 if (ch.Signals.Count < 2) continue;
 
-                 var minFreq = ch.CenterFreq - maxBandWidth / 2;
 
-                 var maxFreq = ch.CenterFreq + maxBandWidth / 2;
 
-                 foreach (var sig in ch.Signals)
 
-                 {
 
-                     if (sig.FreqPoint - sig.BandWidth / 2 < minFreq || sig.FreqPoint + sig.BandWidth / 2 > maxFreq)
 
-                     {
 
-                         sb.AppendLine($"频点:{sig.FreqPoint},带宽:{sig.BandWidth}不在通道{ch.ChNum}的采集范围内!");
 
-                         isValid = false;
 
-                     }
 
-                 }
 
-             }
 
-             errMsg = sb.ToString();
 
-             return isValid;
 
-         }
 
-     }
 
- }
 
 
  |