using CommonDevHostApp.Devices; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.IO; using System.Threading.Tasks; using Tps_LQ_Transmitter.com; using System.Drawing; namespace Tps_LQ_Transmitter.models { class VoltAndCurrent: BaseModel { public VoltAndCurrent() { TemplateName = "电压及电流测试"; } /// /// 电压电流测试 /// public override bool Run(TestNode parameters) { object[] TableCell; ShowMessage(MsgType.Info, string.Format("第{0}个频点电压及电流测试开始", parameters.PointIndex)); TestParameters result = new TestParameters(); Random random = new Random(); //获取仪器 CommonVisaResource DCPower = new CommonVisaResource(); DCPower.Open(tps.DCPowerAddress); // TransmitterSerialPort SerialClient = new TransmitterSerialPort(); OutData Data = new OutData(); DataType VoltDataPrint = new DataType(); DataType CurrentDataPrint = new DataType(); if (DCPower == null) { ShowMessage(MsgType.Error, string.Format("仪器不齐全,{0}/{1}无法运行", parameters.Channel, parameters.Name)); return false; } OpenExcel("电压及电流", out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet); if (sheet == null) { ShowMessage(MsgType.Error, "找不到" + tps.TestProject + "模板.xlsx"); return false; } ConfigParameter PowerPara = new ConfigParameter(); //PowerPara.ComPort = parameters.Parameters.GetParameter("串口"); //PowerPara.StartFrequency = parameters.Parameters.GetParameter("起始频率"); //PowerPara.FrequencyNumber = parameters.Parameters.GetParameter("频点数量"); //PowerPara.StopFrequency = parameters.Parameters.GetParameter("终止频率"); //PowerPara.ControlDelay = parameters.Parameters.GetParameter("控制延时"); PowerPara.VoltLower = parameters.Parameters.GetParameter("电压下限"); PowerPara.VoltUpper= parameters.Parameters.GetParameter("电压上限"); PowerPara.CurrentLower = parameters.Parameters.GetParameter("电流下限"); PowerPara.CurrentUpper = parameters.Parameters.GetParameter("电流上限"); if ((PowerPara.VoltLower==0) || (PowerPara.VoltUpper == 0) ||(PowerPara.CurrentLower==0) ||(PowerPara.CurrentUpper==0)) { ShowMessage(MsgType.Error, string.Format("配置文件中频率参数为空,{0}/{1}无法运行", parameters.Channel, parameters.Name)); return false; } //if (PowerPara.ControlDelay == 0) //{ // PowerPara.ControlDelay = 10; //} //if ((PowerPara.FrequencyNumber != 0) && (PowerPara.FrequencyNumber != 1) && (PowerPara.StepFrequency == 0)) //{ // PowerPara.StepFrequency = ((int)(((PowerPara.StopFrequency - PowerPara.StartFrequency) / (PowerPara.FrequencyNumber - 1)) * 100)) / 100; //} //if (PowerPara.StepFrequency != 0) //{ // PowerPara.FrequencyNumber = ((int)((PowerPara.StopFrequency - PowerPara.StartFrequency) / PowerPara.StepFrequency)) + 1; //} //double CenterFreq; Data.VoltVal = new string[parameters.PointTotal]; Data.CurrentVal = new string[parameters.PointTotal]; // for (int point = 0; ; point++) { //CenterFreq = PowerPara.StartFrequency + PowerPara.StepFrequency * point; //if (CenterFreq > PowerPara.StopFrequency || (PowerPara.FrequencyNumber == 1 && point == 1)) //{ // break; //} Thread.Sleep(1000); //控制 // SerialClient.DUT_Transmitter_Ctrol(PowerPara.ComPort, Convert.ToByte(point + 1)); Data.VoltVal[parameters.PointIndex] = DCPower.Query("MEASure:VOLTage?\n"); Data.CurrentVal[parameters.PointIndex] = DCPower.Query("MEASure:CURRent?\n"); VoltDataPrint.Test_name = parameters.Channel + "-电压测试-" + parameters.CenterFreq.ToString()+"MHz"; VoltDataPrint.Lower = PowerPara.VoltLower; VoltDataPrint.Upper = PowerPara.VoltUpper; VoltDataPrint.TestVal = Math.Round(double.Parse(Data.VoltVal[parameters.PointIndex]),2); //VoltDataPrint.TestVal = random.Next(2500, 3000) / 100.0;//随机数 if ((VoltDataPrint.TestVal >= VoltDataPrint.Lower) && (VoltDataPrint.TestVal <= VoltDataPrint.Upper)) { VoltDataPrint.Result = "是"; } else { VoltDataPrint.Result = "否"; } CurrentDataPrint.Test_name = parameters.Channel + "-电流测试-" + parameters.CenterFreq.ToString() + "MHz"; CurrentDataPrint.Lower = PowerPara.CurrentLower; CurrentDataPrint.Upper = PowerPara.CurrentUpper; CurrentDataPrint.TestVal = Math.Round(double.Parse(Data.CurrentVal[parameters.PointIndex]),2); //CurrentDataPrint.TestVal = random.Next(90, 160) / 100.0; if ((CurrentDataPrint.TestVal >= CurrentDataPrint.Lower) && (CurrentDataPrint.TestVal <= CurrentDataPrint.Upper)) { CurrentDataPrint.Result = "是"; } else { CurrentDataPrint.Result = "否"; } tps.TestTableAddCell(CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result); tps.TestTableAddCell(VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result); if (parameters.Channel == "通道1") { WriteExcelData(sheet, parameters.PointIndex, 3, CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result); WriteExcelData(sheet, parameters.PointIndex, 1, VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result); //tps.SetTestTableCellValue(point, 5, VoltDataPrint.Result, VoltDataPrint.TestVal); //tps.SetTestTableCellValue(point, 6, CurrentDataPrint.Result, CurrentDataPrint.TestVal); } else if (parameters.Channel == "通道2") { WriteExcelData(sheet, parameters.PointIndex, 4, CurrentDataPrint.Test_name, CurrentDataPrint.Lower.ToString(), CurrentDataPrint.Upper.ToString(), CurrentDataPrint.TestVal.ToString(), CurrentDataPrint.Result); WriteExcelData(sheet, parameters.PointIndex, 2, VoltDataPrint.Test_name, VoltDataPrint.Lower.ToString(), VoltDataPrint.Upper.ToString(), VoltDataPrint.TestVal.ToString(), VoltDataPrint.Result); //tps.SetTestTableCellValue(point + 15, 5, VoltDataPrint.Result, VoltDataPrint.TestVal); //tps.SetTestTableCellValue(point + 15, 6, CurrentDataPrint.Result, CurrentDataPrint.TestVal); } } SaveExcel(workbook); ShowMessage(MsgType.Info, string.Format("第{0}个频点电压及电流测试结束", parameters.PointIndex)); return true; } //public void OpenExcel(string sheetname, out Spire.Xls.Workbook workbook,out Spire.Xls.Worksheet sheet ) //{ // string TestFilePath = "F:"; // string ModelFile = "F:/Transmitter_model.xlsx"; // string subPath = "F:/发射机测试数据/常温测试/"; // if (false == System.IO.Directory.Exists(subPath)) // { // System.IO.Directory.CreateDirectory(subPath); // } // workbook = new Spire.Xls.Workbook(); // string FileName = subPath + tps.Serial + ".xlsx"; // if (File.Exists(FileName)) // { // workbook.LoadFromFile(FileName); // //sheet = workbook.Worksheets[sheetname]; // } // else if (File.Exists(ModelFile)) // { // workbook.LoadFromFile(ModelFile); // //sheet = workbook.Worksheets[sheetname]; // } // sheet = workbook.Worksheets[sheetname]; // if (!File.Exists(ModelFile)) // { // sheet = null; // } //} //public void WriteExcelData(Spire.Xls.Worksheet sheet, int row,int channel,string name,double lower,double upper,double val,string result) //{ // int column = (channel - 1) * 6; // sheet.Range[row+2, 1 + column].Value2 = name; // sheet.Range[row+2, 2 + column].Value2 = lower.ToString(); // sheet.Range[row+2, 3 + column].Value2 = upper.ToString(); // sheet.Range[row+2, 4 + column].Value2 = val.ToString(); // sheet.Range[row+2, 5 + column].Value2 = result; //} //public void SaveExcel(Spire.Xls.Workbook workbook) //{ // string subPath = "F:/发射机测试数据/常温测试/"; // string FileName = subPath + tps.Serial + ".xlsx"; // workbook.SaveToFile(FileName); //} public class ConfigParameter { /// /// 串口 /// public string ComPort { set; get; } /// /// 产品测试的起始频率 /// public double StartFrequency { set; get; } /// /// 产品测试的频率步进 /// public double StepFrequency { set; get; } /// /// 产品测试的频点数量 /// public int FrequencyNumber { set; get; } /// /// 产品的工作频带上限(终止频率) /// 功能:用于判断从起始频率按一定的步进测试是否超出产品工作频段上限 /// public double StopFrequency { set; get; } /// ///设置频谱仪的SPAN /// public string SPAN { set; get; } /// /// 设置参考电平 /// public string REF { set; get; } /// /// 设置RBW /// public string RBW { set; get; } /// /// 设置VBW /// public string VBW { set; get; } /// /// 控制延时 /// public int ControlDelay { set; get; } /// /// 电压下限 /// public double VoltLower {set;get;} /// /// 电压上限 /// public double VoltUpper { set; get; } /// /// 电流下限 /// public double CurrentLower { set; get; } /// /// 电流上限 /// public double CurrentUpper { set; get; } } public class OutData { /// /// 读电压值 /// public string[] VoltVal { set; get; } /// /// 读电流值 /// public string[] CurrentVal { set; get; } } //public class DataType //{ // /// // /// 测试名称 // /// // public string Test_name { set; get; } // /// // /// 指标下限 // /// // public double Lower { set; get; } // /// // /// 指标上限 // /// // public double Upper { set; get; } // /// // /// 测试值 // /// // public double TestVal { set; get; } // /// // /// 判断结果 // /// // public string Result { set; get; } //} } }