123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using CliWrap.Buffered;
- using Ips.DevAlgorithm;
- using Ips.Library.Basic;
- using Ips.Library.DxpLib;
- using Ips.Library.Entity;
- using Ips.Library.LocLib;
- using Ips.Sps.Cfqs;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Ips.Sps.Scheduling.SigAds
- {
- public class AdSigUtil
- {
- public static AdcAndCfgOptions GetAdcAndCfqOptions(RunAdCard adCard, RunSig sig, bool sp4m = false)
- {
- var adcOpt = new AdcOptions()
- {
- CardType = adCard.CardType,
- ClockType = adCard.ClockType,
- TriggerMode = adCard.TriggerMode,
- DdcFreq = adCard.DdcFreq,
- ClockFreq = adCard.ClockFreq,
- Mutil = SigCalcUtil.CalcMutil(adCard.ClockFreq, sig.BandWidth, sp4m),
- TimeLen = sig.SigLen,
- StorePath = adCard.StorePath,
- CardCode = adCard.CardCode,
- };
- var cfqList = new List<CfqOptions>();
- FreqPointInfo mainSatFreq = null;
- if (sig.MainSatId > 0)
- {
- var ch = adCard.Channels.Find(m => m.Sats.Any(sat => sat.SatId == sig.MainSatId));
- if (ch != null)
- {
- var sat = ch.Sats.Find(m => m.SatId == sig.MainSatId);
- mainSatFreq = SigCalcUtil.GetFreqPointBySigFreq(sig.SigFreq, sat.SatType, sat.SatTurn, ch.FrqTurn);
- long centerFreq = ch.CenterFreq;
- if (ch.CanSetFrq())
- {
- cfqList.Add(new CfqOptions(ch.FrqAddr, mainSatFreq.DownFreq));
- centerFreq = mainSatFreq.DownFreq;
- }
- var chOpt = adcOpt.SetChannel(ch.AntCode, ch.AdcCode, ch.ChNum, centerFreq);
- if (chOpt != null)
- chOpt.AddSignal(mainSatFreq.DownFreq, sig.BandWidth, sat.SatNum.ToString(), mainSatFreq.UpFreq);
- }
- }
- //if (mainSatFreq == 0) upFreq = sig.SigFreq;
- foreach (var adjaSatId in sig.AdjaSatIds)
- {
- var ch = adCard.Channels.Find(m => m.Sats.Any(sat => sat.SatId == adjaSatId));
- if (ch != null)
- {
- var sat = ch.Sats.Find(m => m.SatId == adjaSatId);
- var adjaSatFreq = SigCalcUtil.GetFreqPointBySigFreq(mainSatFreq?.UpFreq ?? sig.SigFreq, sat.SatType, sat.SatTurn, ch.FrqTurn);
- long centerFreq = ch.CenterFreq;
- if (ch.CanSetFrq())
- {
- cfqList.Add(new CfqOptions(ch.FrqAddr, adjaSatFreq.DownFreq));
- centerFreq = adjaSatFreq.DownFreq;
- }
- var chOpt = adcOpt.SetChannel(ch.AntCode, ch.AdcCode, ch.ChNum, centerFreq);
- if (chOpt != null)
- chOpt.AddSignal(adjaSatFreq.DownFreq, sig.BandWidth, sat.SatNum.ToString(), adjaSatFreq.UpFreq);
- }
- }
- var result = new AdcAndCfgOptions()
- {
- AdOptions = adcOpt,
- CfOptions = cfqList
- };
- return result;
- }
- public static void SetAdCardFreq(RunAdCard adCard, AdcOptions adcOptions, CancellationToken token)
- {
- List<CfqOptions> setCfgs = new List<CfqOptions>();
- foreach (var ch in adcOptions.Channels)
- {
- if (ch.CenterFreq == 0) continue;
- var adCh = adCard.Channels.Find(m => m.ChNum == ch.ChNum);
- if (adCh.CanSetFrq())
- {
- setCfgs.Add(new CfqOptions(adCh.FrqAddr, ch.CenterFreq));
- }
- }
- SetCfqList(setCfgs, token);
- }
- public static void SetCfqList(List<CfqOptions> setCfgs, CancellationToken token)
- {
- if (setCfgs.IsNullOrEmpty()) return;
- #warning wyq注释变频器
- // CfqManager.Default.SetCfqList(setCfgs.Select(m => new SetCfqItem(m.CfqAddr, m.FreqPoint)), out string errMsg, token);
- #region 原注释
- //if (cliPath.IsNotNullOrWhitespace())
- //{
- // if (!CfqUtil.SetFreqByCli(cliPath, setCfgs.Select(m => new SetCfqItem(m.CfqAddr, m.FreqPoint)), out string errMsg))
- // {
- // IpsLogger.Warn(errMsg);
- // }
- // else
- // {
- // IpsLogger.Info($"设置变频器成功,频点:{setCfgs.OrderBy(m => m.CfqAddr).Select(m => m.FreqPoint.E6m()).JoinAsString(",")}");
- // }
- // return;
- //}
- //var freqGroup = setCfgs.GroupBy(m => m.Addr);
- //Parallel.ForEach(freqGroup, fg =>
- //{
- //bool isFirst = true;
- //foreach (var frqCh in fg)
- //{
- // if (token.IsCancellationRequested) return;
- // if (!isFirst) Task.Delay(800, token).Wait();
- // isFirst = false;
- // double downFreq = frqCh.FreqPoint;
- // SetFreq(frqCh.CfqAddr, downFreq, token);
- //}
- // try
- // {
- // var chCount = fg.Max(m => m.ChNum);
- // double[] freqs;
- // if (chCount == 0)
- // {
- // freqs = fg.OrderBy(m => m.CfqAddr).Select(m => m.FreqPoint.E6m()).ToArray();
- // }
- // else
- // {
- // freqs = new double[chCount];
- // foreach (var item in fg)
- // {
- // freqs[item.ChNum - 1] = item.FreqPoint.E6m();
- // }
- // }
- // if (!CfqUtil.SetFreq(fg.Key, freqs, out string errMsg))
- // {
- // IpsLogger.Error($"设置变频器【{fg.Key}】失败,错误消息:{errMsg},频点:{freqs.JoinAsString(",")}");
- // }
- // else
- // {
- // IpsLogger.Info($"设置变频器【{fg.Key}】成功,频点:{freqs.JoinAsString(",")}");
- // }
- // }
- // catch (Exception ex)
- // {
- // IpsLogger.Warn($"设置变频器失败,错误消息:{ex.Message}");
- // }
- //});
- #endregion
- }
- public static void SetCfqByCli(List<CfqOptions> setCfgs, CancellationToken token)
- {
- if (setCfgs.IsNullOrEmpty()) return;
- string cliPath = Path.Combine(IpsPath.CliRootDir, "bpq", "bpq.exe");
- var cmd = CliWrap.Cli.Wrap(cliPath)
- .WithArguments(args =>
- {
- foreach (var item in setCfgs)
- {
- args.Add(item.CfqAddr, true).Add(item.FreqPoint);
- }
- });
- var res = cmd.ExecuteBufferedAsync(token.LinkTimeout(20)).GetAwaiter().GetResult();
- if (res.StandardError.IsNotNullOrWhitespace())
- {
- IpsLogger.Warn($"{res.StandardError},{cmd.Arguments}");
- }
- else
- {
- IpsLogger.Info($"设置变频器成功,频点:{setCfgs.OrderBy(m => m.CfqAddr).Select(m => m.FreqPoint.E6m()).JoinAsString(",")}");
- }
- }
- public static void SetFreq(string cfqAddr, double freqPoint, CancellationToken token)
- {
- try
- {
- //#warning 添加设置变频器编码
- }
- catch (Exception ex)
- {
- IpsLogger.Error($"设置变频器[{cfqAddr}]频点[{freqPoint}]失败", ex);
- }
- }
- }
- }
|