using NationalInstruments.TestStand.Interop.API; using System; using System.Collections.Generic; using System.IO; namespace HMI.Simple.Util { public class ProductUtil { private static void WriteParameterData(object instance, ParameterData data) { SequenceContext context = (SequenceContext)instance; string name = $"DUTSetting.{data.Name}"; if (data.IsArray) { PropertyValueTypes type; if (data.Type == "Bool") { type = PropertyValueTypes.PropValType_Boolean; } else if (data.Type == "Int") { type = PropertyValueTypes.PropValType_Number; } else if (data.Type == "Double") { type = PropertyValueTypes.PropValType_Number; } else { type = PropertyValueTypes.PropValType_String; } string[] arr = data.Value?.Split(',') ?? new string[0]; if (arr.Length > 0) { context.FileGlobals.DeleteSubProperty(name, 2); context.FileGlobals.NewSubProperty(name, type, true, null, 1); context.FileGlobals.GetPropertyObject(name, 0).SetNumElements(arr.Length); for (int i = 0; i < arr.Length; i++) { if (type == PropertyValueTypes.PropValType_String) { context.FileGlobals.SetValString($"{name}[{i}]", 0, arr[i]); } if (data.Type == "Int") { context.FileGlobals.SetValNumber($"{name}[{i}]", 0, int.Parse(arr[i])); } if (data.Type == "Double") { context.FileGlobals.SetValNumber($"{name}[{i}]", 0, double.Parse(arr[i])); } if (data.Type == "Bool") { context.FileGlobals.SetValBoolean($"{name}[{i}]", 0, bool.Parse(arr[i])); } } } } else { if (data.Type == "Bool") { context.FileGlobals.SetValBoolean(name, 1, bool.Parse(data.Value)); } else if (data.Type == "Int") { context.FileGlobals.SetValNumber(name, 1, int.Parse(data.Value)); } else if (data.Type == "Double") { context.FileGlobals.SetValNumber(name, 1, double.Parse(data.Value)); } else { context.FileGlobals.SetValString(name, 1, data.Value); } } } private static string GetDataFilePath() { string path = ParameterUtil.GetCommonParameterValue("ShareConfig", out _); if (path == null) { path = Path.Combine(RegUtil.GetLocaltion(), "Config"); } return path; } /// /// 根据产品型号写配置 /// /// 产品型号 /// TestStand上下文 /// 异常信息 /// 是否成功 public static bool WriteConfigToContextByModel(string model, object instance, out string errMsg) { errMsg = string.Empty; try { string path = Path.Combine(GetDataFilePath(), "Product", "Parameter", $"Parameter_{model}.data"); return WriteConfigToContextByPath(path, instance, out errMsg); } catch (Exception ex) { errMsg = ex.Message; return false; } } /// /// 根据路径写配置 /// /// 绝对路径 /// TestStand上下文 /// 异常信息 /// 是否成功 public static bool WriteConfigToContextByPath(string path, object instance, out string errMsg) { errMsg = string.Empty; try { if (!File.Exists(path)) { throw new Exception($"未找到该配置[{path}],请检查"); } List datas = XmlHelper.DeserializeFromXml>(path); foreach (var data in datas) { WriteParameterData(instance, data); } return true; } catch (Exception ex) { errMsg = ex.Message; return false; } } } }