/// <summary> /// Generate arguments and call matlab function to merge row data /// </summary> /// <param name="Dr"></param> /// <param name="Dest"></param> /// <param name="Output"></param> private void Merge(DataRow Dr, string Dest) { Dest = Dest.OriginPath(); string Path = Dr["Path"].ToString(); string Filename = Dr["Filename"].ToString(); string BgFilename = Dr["Bg_Filename"].ToString(); int Width = Int32.Parse(MWParameter.GetField("width").ToString()); int Height = Int32.Parse(MWParameter.GetField("height").ToString()); int Distance = Int32.Parse(Dr["Distance"].ToString()); string ExportName = Dr.GetName(); string FgExportName = ExportName + '_' + "Foreground"; string BgExportName = ExportName + '_' + "Background"; int Start_No = Int32.Parse(Dr["Start_No"].ToString()); int End_No = Int32.Parse(Dr["End_No"].ToString()); int Bg_Start_No = Int32.Parse(Dr["Bg_Start_No"].ToString()); int Bg_End_No = Int32.Parse(Dr["Bg_End_No"].ToString()); Mf.MergeXlsData(Path, Filename, Dest, FgExportName, Width, Height, "whole", Start_No, End_No); // Output(MLLogSb.ToString()); // MLLogSb.Clear(); Mf.MergeXlsData(Path, BgFilename, Dest, BgExportName, Width, Height, "whole", Bg_Start_No, Bg_End_No); // Output(MLLogSb.ToString()); // MLLogSb.Clear(); Mf.SubtractBackground(Dest, ExportName); // Output(MLLogSb.ToString()); // MLLogSb.Clear(); File.Delete(Dest + '\\' + FgExportName + ".mat"); File.Delete(Dest + '\\' + FgExportName + ".png"); File.Delete(Dest + '\\' + BgExportName + ".mat"); File.Delete(Dest + '\\' + BgExportName + ".png"); }
private double ParseIndex(MWStructArray array) { if (array.IsField(fieldName: "index")) { var tmpIndex = (double[, ])array.GetField(fieldName: "index"); return(tmpIndex[0, 0]); } return(double.NaN); }
static void Main(string[] args) { CropAnalyzer crop_analyzer = new CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize required input: temp_c_in, rh_in MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Load crop data String path = "C:\\Program Files\\NareTrends\\BandiCropAnalyzer\\application\\bandicrop_data.ini"; MWCharArray crop_inifile = path; MWStructArray crops = (MWStructArray)crop_analyzer.load_crop_data(crop_inifile); // Create struct for output MWStructArray result = new MWStructArray(); MWNumericArray result_code = null; try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = "STRAWBERRY"; temp_c_in = 3; // deg Celsius rh_in = 40; // % result = (MWStructArray)crop_analyzer.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list); result_code = (MWNumericArray)result.GetField("code"); Console.WriteLine("RESULT CODE: " + result_code); Console.Write("\nPress any key to exit."); Console.ReadKey(); } catch { throw; } }
private double ParseVarianceThreshold(MWStructArray array) { if (array.IsField(fieldName: "var_thr")) { var tmpVarThr = (double[, ])array.GetField(fieldName: "var_thr"); return(tmpVarThr[0, 0]); } return(double.NaN); }
private double ParseAmplitudeThreshold(MWStructArray array) { if (array.IsField(fieldName: "amp_thr")) { var tmpAmpThr = (double[, ])array.GetField(fieldName: "amp_thr"); return(tmpAmpThr[0, 0]); } return(double.NaN); }
// METHOD IMPLEMENTING THE ENVIRONMENT CHECK ROUTINES public static MWStructArray crop_env_checker(MWStructArray crops_db, double temp, double hum, string crop) { Console.WriteLine("\n======================= ENVIRONMENT ANALYSIS ======================="); CropAnalyzer crop_analyzer = new CropAnalyzer(); // Initialize checkers String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; MWStructArray checker_list = new MWStructArray(1, 1, checker_names); // Initialize required input: temp_c_in, rh_in MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; // Initialize optional inputs (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val, dewtemp_offset, dewtemp_offset_val //MWCharArray vpd = "vpd", dewpoint = "dewpoint"; MWCharArray checkers = "checkers", verbose = "verbose", crop_name = "crop_name", crop_name_select = ""; MWCharArray vpd_min = "vpd_min", vpd_max = "vpd_max", dewtemp_offset = "dewtemp_offset"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2, dewtemp_offset_val = 1.0; // initialize output struct fields - FOR REFERENCE String[] vpd_check_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; String[] dewpoint_check_fields = { "type", "code", "state", "temp", "temp_dew", "dewtemp_offset", "adjust", "adjust_unit" }; String[] crop_temp_check_fields = { "type", "code", "state", "temp", "temp_min", "temp_max", "adjust", "adjust_unit" }; // Set checker options checker_list.SetField("vpd_check", TRUE); checker_list.SetField("dewpoint_check", TRUE); checker_list.SetField("crop_temp_check", TRUE); // Create struct for output MWStructArray result = new MWStructArray(); MWNumericArray result_code = null; try { // Full usage: crop.env_check(crops, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list, vpd_min, vpd_min_val, vpd_max, vpd_max_val, verbose, FALSE); crop_name_select = crop; temp_c_in = temp; // deg Celsius rh_in = hum; // % result = (MWStructArray)crop_analyzer.env_check(crops_db, temp_c_in, rh_in, crop_name, crop_name_select, checkers, checker_list); result_code = (MWNumericArray)result.GetField("code"); Console.WriteLine("RESULT CODE: " + result_code); //Console.WriteLine("Press any key to exit."); //Console.ReadKey(); return(result); } catch { throw; } }
private int[] ParseMerged(MWStructArray array) { if (array.IsField(fieldName: "merged")) { var tmpMerged = (double[, ])array.GetField(fieldName: "merged"); var merged = new int[tmpMerged.Length]; for (var i = 0; i < tmpMerged.Length; ++i) { merged[i] = (int)tmpMerged[0, i]; } return(merged); } return(null); }
private bool[] ParseVarianceFilter(MWStructArray array) { if (array.IsField(fieldName: "var_filter")) { var tmpVarFilter = (bool[, ])array.GetField(fieldName: "var_filter"); var varFilter = new bool[tmpVarFilter.Length]; for (var i = 0; i < tmpVarFilter.Length; ++i) { varFilter[i] = tmpVarFilter[i, 0]; } return(varFilter); } return(null); }
private bool[] ParseAmplitudeFilter(MWStructArray array) { if (array.IsField(fieldName: "amp_filter")) { var tmpAmpFilter = (bool[, ])array.GetField(fieldName: "amp_filter"); var ampFilter = new bool[tmpAmpFilter.Length]; for (var i = 0; i < tmpAmpFilter.Length; ++i) { ampFilter[i] = tmpAmpFilter[i, 0]; } return(ampFilter); } return(null); }
private int[] ParsePartition(MWStructArray array) { if (array.IsField(fieldName: "partition")) { var tmpPartition = (double[, ])array.GetField(fieldName: "partition"); var partition = new int[tmpPartition.Length]; for (var i = 0; i < tmpPartition.Length; ++i) { // -1 for indexing purposes (label should allow to check centroid) partition[i] = (int)tmpPartition[0, i] - 1; } return(partition); } return(null); }
private DivikResult[] ParseSubregions(MWStructArray array) { if (array.IsField(fieldName: "subregions")) { var tmpSubregions = (MWCellArray)array.GetField(fieldName: "subregions"); var subregions = new DivikResult[tmpSubregions.NumberOfElements]; for (var i = 0; i < tmpSubregions.NumberOfElements; ++i) { if (tmpSubregions[i + 1] is MWStructArray) { subregions[i] = new DivikResult(matlabResult: tmpSubregions[i + 1]); } } return(subregions); } return(null); }
private double[,] ParseCentroids(MWStructArray array) { if (array.IsField(fieldName: "centroids")) { var transposed = (double[, ])array.GetField(fieldName: "centroids"); var straight = new double[transposed.GetLength(dimension: 1), transposed.GetLength(dimension: 0)]; for (var i = 0; i < transposed.GetLength(dimension: 1); ++i) { for (var j = 0; j < transposed.GetLength(dimension: 0); ++j) { straight[i, j] = transposed[j, i]; } } return(straight); } return(null); }
static void Main(string[] args) { CropAnalyzer crop = new CropAnalyzer(); // Initialize required input: temp_c_in, rh_in MWNumericArray temp_c_in = null; MWNumericArray rh_in = null; // Initialize optional input (by pair): verbose, TRUE/FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val MWCharArray verbose = "verbose", vpd_min = "vpd_min", vpd_max = "vpd_max"; MWLogicalArray TRUE = new MWLogicalArray(true), FALSE = new MWLogicalArray(false); MWNumericArray vpd_min_val = 0.5, vpd_max_val = 1.2; // initialize output struct fields String[] result_fields = { "type", "code", "state", "vpd", "vpd_min", "vpd_max", "hum_adj", "adjust_unit" }; MWStructArray result = new MWStructArray(1, result_fields.Count(), result_fields); //MWStructArray result = new MWStructArray(); //MWNumericArray result_code = null; try { // Full usage: moisture.vpd_check(temp_c_in, rh_in, verbose, FALSE, vpd_min, vpd_min_val, vpd_max, vpd_max_val); temp_c_in = 25; // deg Celsius rh_in = 70; // % vpd_min_val = 0.5; // kPa vpd_max_val = 1.2; // kPa result = (MWStructArray)crop.vpd_check(temp_c_in, rh_in, verbose, TRUE, vpd_min, vpd_min_val, vpd_max, vpd_max_val); result_code = (MWNumericArray)result.GetField("code"); Console.WriteLine("RESULT CODE: " + result_code); Console.Write("\nPress any key to exit."); Console.ReadKey(); } catch { throw; } }
// INTERFACETO HARDWARE-LEVEL COMMANDS public void execute_control(MWStructArray control_action, DongConfig dong) { Console.WriteLine("\n======================= SENDING CONTROL SIGNALS ======================="); Form1 eyesen = new Form1(); // PARSE DONG INFORMATION Console.WriteLine("\nACTIVATING CONTROLS FOR DONG #{0} ...", dong.GetType().GetProperty("id").GetValue(dong, null)); Console.WriteLine("NAME : " + dong.GetType().GetProperty("name").GetValue(dong, null)); int nFields = control_action.NumberOfFields; string[] field_names = control_action.FieldNames; for (int ix = 0; ix < nFields; ix++) { string control_target = field_names[ix]; string command = control_action.GetField(control_target).ToString(); // string command = "on"; // switch -> stop, open, close / (2) fan -> on, off / (3) on, off) Console.WriteLine(control_target + " : " + command); // GET IO POINTS FROM DONG OBJECT string iotype = "fan"; // EYESEN ACTUATORS: switch, fan, relay 입력 가능 int dongNumber = dong.id; // HEATER if (control_target == "heater") { int[] channels = dong.ch_heaters; for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "vent") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "fan") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "irrigation") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; } }
// PARSE ENV_CHECK OUTPUT public string parse_results(MWStructArray result, int print_level) { Console.WriteLine("\n======================= ENVIRONMENT CHECK RESULT ======================="); String[] checker_names = { "vpd_check", "dewpoint_check", "crop_temp_check" }; // READ OUTPUT DETAILS MWStructArray result_checker = new MWStructArray(); MWNumericArray result_code = null; MWNumericArray checker_code = null; MWCharArray result_type = null; MWCharArray result_state = null; MWCharArray result_checkvar_name = null; MWNumericArray result_checkvar_value = null; MWCharArray result_checkvar_unit = null; MWNumericArray result_adjust = null; MWCharArray result_adjust_unit = null; result_code = (MWNumericArray)result.GetField("code"); int nFields = result.NumberOfFields - 1; string result_out = null; for (int ifield = 1; ifield <= nFields; ifield++) { result_checker = (MWStructArray)result.GetField(checker_names[ifield - 1]); checker_code = (MWNumericArray)result_checker.GetField("code"); switch (print_level) { case 0: // PRINT ABNORMAL RESULTS if ((int)checker_code > 0) { result_type = (MWCharArray)result_checker.GetField("type"); result_state = (MWCharArray)result_checker.GetField("state"); result_out = "\n" + result_type.ToString() + " STATUS : " + result_state.ToString(); Console.WriteLine(result_out); } break; case 1: // PRINT ABNORMAL RESULTS + DETAILS if ((int)checker_code > 0) { result_type = (MWCharArray)result_checker.GetField("type"); result_state = (MWCharArray)result_checker.GetField("state"); result_checkvar_name = (MWCharArray)result_checker.GetField("checkvar_name"); result_checkvar_value = (MWNumericArray)result_checker.GetField("checkvar_value"); result_checkvar_unit = (MWCharArray)result_checker.GetField("checkvar_unit"); result_adjust = (MWNumericArray)result_checker.GetField("adjust"); result_adjust_unit = (MWCharArray)result_checker.GetField("adjust_unit"); result_out = "\n" + result_type.ToString() + " STATUS : " + result_state.ToString(); result_out += "\n" + result_checkvar_name.ToString() + " : " + result_checkvar_value.ToString() + " " + result_checkvar_unit.ToString(); result_out += "\n" + "ADJUST : " + result_adjust.ToString() + " " + result_adjust_unit.ToString(); Console.WriteLine(result_out); } break; case 2: // PRINT ALL RESULTS + DETAILS result_type = (MWCharArray)result_checker.GetField("type"); result_state = (MWCharArray)result_checker.GetField("state"); result_checkvar_name = (MWCharArray)result_checker.GetField("checkvar_name"); result_checkvar_value = (MWNumericArray)result_checker.GetField("checkvar_value"); result_checkvar_unit = (MWCharArray)result_checker.GetField("checkvar_unit"); result_adjust = (MWNumericArray)result_checker.GetField("adjust"); result_adjust_unit = (MWCharArray)result_checker.GetField("adjust_unit"); result_out = "\n" + result_type.ToString() + " STATUS : " + result_state.ToString(); result_out += "\n" + result_checkvar_name.ToString() + " : " + result_checkvar_value.ToString() + " " + result_checkvar_unit.ToString(); result_out += "\n" + "ADJUST : " + result_adjust.ToString() + " " + result_adjust_unit.ToString(); Console.WriteLine(result_out); break; } // end of switch statement } return(result_out); }
//泛能机 public double[] ueMachine(MWStructArray product) { //MWStructArray product = ctrlopt_Struct(); MWStructArray[] data_ueMachine_pack = ueMachine_pack(); MWStructArray variableInStruct = (MWStructArray)data_ueMachine_pack[0].GetField("uemachine"); MWStructArray equipmentParameterInStruct = (MWStructArray)data_ueMachine_pack[1].GetField("uemachine"); MWStructArray gear_uemachine_product = (MWStructArray)product.GetField("uemachine"); string[] gear_uemachine_product_fieldNames = gear_uemachine_product.FieldNames; variableInStruct.SetField(gear_uemachine_product_fieldNames[0], (MWNumericArray)gear_uemachine_product.GetField(gear_uemachine_product_fieldNames[0])); //uemachine函数调用 object[] dataOut = uec.uemachine(1, variableInStruct, equipmentParameterInStruct); MWStructArray dataOutStruct = (MWStructArray)dataOut[0]; //consume数组 MWStructArray consume = (MWStructArray)dataOutStruct.GetField("consume"); string[] fieldName_Consume = consume.FieldNames; MWNumericArray consumeG = (MWNumericArray)consume.GetField("G"); double[,] consumeG_Output = (double[,])consumeG.ToArray(MWArrayComponent.Real); //prdct数组 MWStructArray prdct = (MWStructArray)dataOutStruct.GetField("prdct"); string[] fieldName_prdct = prdct.FieldNames; MWNumericArray prdctE = (MWNumericArray)prdct.GetField("E"); MWNumericArray prdctH = (MWNumericArray)prdct.GetField("H"); double[,] prdctE_Output = (double[,])prdctE.ToArray(MWArrayComponent.Real); double[,] prdctH_Output = (double[,])prdctH.ToArray(MWArrayComponent.Real); //返回数据 double[] ueMachine_Output = new double[3]; ueMachine_Output[0] = consumeG_Output[0, 0]; ueMachine_Output[1] = prdctE_Output[0, 0]; ueMachine_Output[2] = prdctH_Output[0, 0]; return ueMachine_Output; }
//优化函数 public ArrayList ctrlopt_Array(MWStructArray dataOutStruct) { //MWStructArray dataOutStruct = ctrlopt_Struct(); //输出结构体的内层结构体 MWStructArray savee = (MWStructArray)dataOutStruct.GetField("savee"); MWStructArray saveh = (MWStructArray)dataOutStruct.GetField("saveh"); MWStructArray pv = (MWStructArray)dataOutStruct.GetField("pv"); MWStructArray pt = (MWStructArray)dataOutStruct.GetField("pt"); //输出结构体的其他非嵌套成员 MWNumericArray outsideE_dataOut = (MWNumericArray)dataOutStruct.GetField("outsideE"); MWNumericArray outsideH_dataOut = (MWNumericArray)dataOutStruct.GetField("outsideH"); MWStructArray uemachine_gear_dataOut = (MWStructArray)dataOutStruct.GetField("uemachine"); MWStructArray gasboiler_gear_dataOut = (MWStructArray)dataOutStruct.GetField("gasboiler"); string[] fieldName_savee = savee.FieldNames; string[] fieldName_saveh = saveh.FieldNames; string[] fieldName_pv = pv.FieldNames; string[] fieldName_pt = pt.FieldNames; //内层结构体Savee MWNumericArray charge_Savee = (MWNumericArray)savee.GetField("charge"); MWNumericArray savedE_Savee = (MWNumericArray)savee.GetField("savedE"); MWNumericArray deltaE_Savee = (MWNumericArray)savee.GetField("IOE"); //内层结构体Saveh MWNumericArray charge_Saveh = (MWNumericArray)saveh.GetField("charge"); MWNumericArray savedH_Saveh = (MWNumericArray)saveh.GetField("savedH"); MWNumericArray deltaH_Saveh = (MWNumericArray)saveh.GetField("IOH"); //内层结构体Pv MWNumericArray consume_Pv = (MWNumericArray)pv.GetField("consume"); MWNumericArray save_Pv = (MWNumericArray)pv.GetField("save"); //内层结构体Pt MWNumericArray consume_Pt = (MWNumericArray)pt.GetField("consume"); MWNumericArray save_Pt = (MWNumericArray)pt.GetField("save"); //非嵌套部分 MWNumericArray uemachine_gear = (MWNumericArray)uemachine_gear_dataOut.GetField("gear"); MWNumericArray gasboiler_gear = (MWNumericArray)gasboiler_gear_dataOut.GetField("gear"); //数据类型转换 double[,] charge_Savee_Output = (double[,])charge_Savee.ToArray(MWArrayComponent.Real); double[,] savedE_Savee_Output = (double[,])savedE_Savee.ToArray(MWArrayComponent.Real); double[,] deltaE_Savee_Output = (double[,])deltaE_Savee.ToArray(MWArrayComponent.Real); double[,] charge_Saveh_Output = (double[,])charge_Saveh.ToArray(MWArrayComponent.Real); double[,] savedH_Saveh_Output = (double[,])savedH_Saveh.ToArray(MWArrayComponent.Real); double[,] deltaH_Saveh_Output = (double[,])deltaH_Saveh.ToArray(MWArrayComponent.Real); double[,] consume_Pv_Output = (double[,])consume_Pv.ToArray(MWArrayComponent.Real); double[,] save_Pv_Output = (double[,])save_Pv.ToArray(MWArrayComponent.Real); double[,] consume_Pt_Output = (double[,])consume_Pt.ToArray(MWArrayComponent.Real); double[,] save_Pt_Output = (double[,])save_Pt.ToArray(MWArrayComponent.Real); double[,] outsideE_Output = (double[,])outsideE_dataOut.ToArray(MWArrayComponent.Real); double[,] outsideH_Output = (double[,])outsideH_dataOut.ToArray(MWArrayComponent.Real); double[,] uemachine_gear_Output = (double[,])uemachine_gear.ToArray(MWArrayComponent.Real); double[,] gasboiler_gear_Output = (double[,])gasboiler_gear.ToArray(MWArrayComponent.Real); //返回数据 ArrayList ctrlopt_Output = new ArrayList(); ctrlopt_Output.Add(charge_Savee_Output[0, 0]); ctrlopt_Output.Add(savedE_Savee_Output[0, 0]); ctrlopt_Output.Add(deltaE_Savee_Output[0, 0]); ctrlopt_Output.Add(charge_Saveh_Output[0, 0]); ctrlopt_Output.Add(savedH_Saveh_Output[0, 0]); ctrlopt_Output.Add(deltaH_Saveh_Output[0, 0]); ctrlopt_Output.Add(consume_Pv_Output[0, 0]); ctrlopt_Output.Add(save_Pv_Output[0, 0]); ctrlopt_Output.Add(consume_Pt_Output[0, 0]); ctrlopt_Output.Add(save_Pt_Output[0, 0]); ctrlopt_Output.Add(outsideE_Output[0, 0]); ctrlopt_Output.Add(outsideH_Output[0, 0]); ctrlopt_Output.Add(uemachine_gear_Output[0, 0]); ctrlopt_Output.Add(gasboiler_gear_Output[0, 0]); return ctrlopt_Output; }
//设备效率 public double[] etacal(MWStructArray product) { //MWStructArray product = ctrlopt_Struct(); //能源需求参数 string[] need = new string[3]; need[0] = "E"; need[1] = "H"; need[2] = "mode"; MWStructArray needStruct = new MWStructArray(1, 1, need); needStruct.SetField(need[0], energyNeed.Electricity_Need); needStruct.SetField(need[1], energyNeed.Heat_Need); needStruct.SetField(need[2], energyNeed.Mode); //参数封装格式定义 MWStructArray[] data_pv_pack = pv_pack(); MWStructArray[] data_pt_pack = pt_pack(); MWStructArray[] data_saveE_pack = saveE_pack(); MWStructArray[] data_saveH_pack = saveH_pack(); MWStructArray[] data_ueMachine = ueMachine_pack(); MWStructArray[] data_gasBoiler = gasBoiler_pack(); string[] variable = new string[7]; variable[0] = "pv"; variable[1] = "pt"; variable[2] = "savee"; variable[3] = "saveh"; variable[4] = "uemachine"; variable[5] = "gasboiler"; variable[6] = "price"; //输入变量提取 MWStructArray variable_uemachine = (MWStructArray)data_ueMachine[0].GetField(variable[4]); MWStructArray variable_gasboiler = (MWStructArray)data_gasBoiler[0].GetField(variable[5]); //档位重新赋值 MWStructArray gear_uemachine_product = (MWStructArray)product.GetField("uemachine"); string[] gear_uemachine_product_fieldNames = gear_uemachine_product.FieldNames; variable_uemachine.SetField(gear_uemachine_product_fieldNames[0], (MWNumericArray)gear_uemachine_product.GetField(gear_uemachine_product_fieldNames[0])); MWStructArray gear_gasboiler_product = (MWStructArray)product.GetField("gasboiler"); string[] gear_gasboiler_product_fieldNames = gear_gasboiler_product.FieldNames; variable_gasboiler.SetField(gear_gasboiler_product_fieldNames[0], (MWNumericArray)gear_gasboiler_product.GetField(gear_gasboiler_product_fieldNames[0])); //内层结构数组gas定义 与档位对应的数组 double[] gas_gear_Boiler = new double[3]; gas_gear_Boiler[0] = equipmentParameter.Gas_gear_Boiler_1; gas_gear_Boiler[1] = equipmentParameter.Gas_gear_Boiler_2; gas_gear_Boiler[2] = equipmentParameter.Gas_gear_Boiler_3; string[] equipmentParameter_Gas = new string[1]; equipmentParameter_Gas[0] = "gear"; MWStructArray gas = new MWStructArray(1, 1, equipmentParameter_Gas); gas.SetField(equipmentParameter_Gas[0], (MWNumericArray)gas_gear_Boiler); //设备参数提取 MWStructArray equipmentParameterInStruct = new MWStructArray(1, 1, variable); equipmentParameterInStruct.SetField(variable[0], data_pv_pack[1].GetField(variable[0])); equipmentParameterInStruct.SetField(variable[1], data_pt_pack[1].GetField(variable[1])); equipmentParameterInStruct.SetField(variable[2], data_saveE_pack[1].GetField(variable[2])); equipmentParameterInStruct.SetField(variable[3], data_saveH_pack[1].GetField(variable[3])); equipmentParameterInStruct.SetField(variable[4], data_ueMachine[1].GetField(variable[4])); equipmentParameterInStruct.SetField(variable[5], data_gasBoiler[1].GetField(variable[5])); //函数调用 MWNumericArray dataOut = (MWNumericArray)uec.etacal(product, needStruct, variable_uemachine, variable_gasboiler, equipmentParameterInStruct); double[,] dataOutArray = (double[,])dataOut.ToArray(MWArrayComponent.Real); double[] etacal_Output = new double[3]; etacal_Output[0] = dataOutArray[0, 0]; etacal_Output[1] = dataOutArray[1, 0]; etacal_Output[2] = dataOutArray[2, 0]; return etacal_Output; }
//补燃锅炉 public double[] gasBoiler(MWStructArray product) { //MWStructArray product = ctrlopt_Struct(); MWStructArray[] data_gasBoiler_pack = gasBoiler_pack(); MWStructArray variableInStruct = (MWStructArray)data_gasBoiler_pack[0].GetField("gasboiler"); MWStructArray equipmentParameterInStruct = (MWStructArray)data_gasBoiler_pack[1].GetField("gasboiler"); //档位赋值 MWStructArray gear_gasboiler_product = (MWStructArray)product.GetField("gasboiler"); string[] gear_gasboiler_product_fieldNames = gear_gasboiler_product.FieldNames; variableInStruct.SetField(gear_gasboiler_product_fieldNames[0], (MWNumericArray)gear_gasboiler_product.GetField(gear_gasboiler_product_fieldNames[0])); //函数调用 object[] dataOut = uec.gasboiler(1, variableInStruct, equipmentParameterInStruct); MWStructArray dataOutStruct = (MWStructArray)dataOut[0]; string[] fieldName = dataOutStruct.FieldNames; //将输出由MWStructArray类型转化为MWNumericArray类型 MWStructArray prdct = (MWStructArray)dataOutStruct.GetField("prdct"); MWStructArray consume = (MWStructArray)dataOutStruct.GetField("consume"); string[] prdctFieldName = prdct.FieldNames; string[] consumeFieldName = consume.FieldNames; //将输出由MWNumericArray类型转化为double类型(中间需要转化为Array类型) MWNumericArray prdctH = (MWNumericArray)prdct.GetField("H"); MWNumericArray consumeG = (MWNumericArray)consume.GetField("G"); double[,] prdctH_Output = (double[,])prdctH.ToArray(MWArrayComponent.Real); double[,] consumeG_Output = (double[,])consumeG.ToArray(MWArrayComponent.Real); //返回数据 double[] gasBoiler_Output = new double[2]; gasBoiler_Output[0] = prdctH_Output[0, 0]; gasBoiler_Output[1] = consumeG_Output[0, 0]; return gasBoiler_Output; }