public static void UnpackFromFlex(FlexEvent mainFlex, ref CSVTableParser inittbl, ref List<CSVTableParser> tables, ref string name) { inittbl.Rows = new List<Row>(); for (int i = 0; i < tables.Count; i++) tables[i].Rows = new List<Row>(); try { var inittblFlex = (FlexEvent) mainFlex.Arguments[InitTblFlexName]; name = mainFlex.Operation.Split('.').Last(); foreach (var initTblPath in inittblFlex.Arguments) { var tbIndex = Int32.Parse(initTblPath.Key); var tbName = (string) initTblPath.Value; var tableFlex = (FlexEvent) mainFlex.Arguments[tbName]; var inittblRow = new Row(); inittblRow.Cell.Add(inittbl.Description[0].ColumnName, tbIndex); inittblRow.Cell.Add(inittbl.Description[1].ColumnName, tbName); inittbl.Rows.Add(inittblRow); foreach (var trfObj in tableFlex.Arguments) { var tableRowFlex = (FlexEvent) trfObj.Value; var tableRow = new Row(); foreach (var columnPath in tables[tbIndex].Description) tableRow.Cell.Add(columnPath.ColumnName, tableRowFlex.Arguments[columnPath.ColumnName]); tables[tbIndex].Rows.Add(tableRow); } } } catch (Exception e) { InstantLogger.err("CSVTP_FlexEventConverter.UnpackFromFlex:\n{0}", e.ToString()); } }
public static FlexEvent PackToFlex(string name, CSVTableParser inittbl, List<CSVTableParser> tables) { var mainFlex = new FlexEvent(AppName + ".Tables." + name); var inittblFlex = new FlexEvent(InitTblFlexName); var tablesFlexList = new List<FlexEvent>(); for (int i = 0; i < tables.Count; i++) tablesFlexList.Add(new FlexEvent()); foreach (var row in inittbl.Rows) { var keyIndex = inittbl.Description[0].ColumnName; var keyName = inittbl.Description[1].ColumnName; var tbIndex = (int) row.Cell[keyIndex]; inittblFlex.Arguments.Add(tbIndex.ToString(), row.Cell[keyName]); var tableFlex = new FlexEvent((string) row.Cell[keyName]); for (int index = 0; index < tables[tbIndex].Rows.Count; index++) { var tableRow = tables[tbIndex].Rows[index]; var tableRowFlex = new FlexEvent(index.ToString()); foreach (var columnPath in tables[tbIndex].Description) { var keyCollumn = columnPath.ColumnName; tableRowFlex.Arguments.Add(keyCollumn, tableRow.Cell[keyCollumn]); } tableFlex.Arguments.Add(index.ToString(), tableRowFlex); } mainFlex.Arguments.Add(tableFlex.Operation, tableFlex); } mainFlex.Arguments.Add(inittblFlex.Operation, inittblFlex); return mainFlex; }
public static int CalcC(CSVTableParser matrixC, Estimates data) { using (var l = new Logger("CalcC")) { if ( (data.CurrentC == 0) && (data.TargetC == 0) ) return 0; foreach (var row in matrixC.Rows) { if ((double) (row.Cell["CMin"]) <= data.CurrentC && data.CurrentC < (double) (row.Cell["CMax"])) { l.msg("C item found --- CMin {0}; CMax {1}", row.Cell["CMin"], row.Cell["CMax"]); var differenceC = data.TargetC - data.CurrentC; if (differenceC < 0) { differenceC = Math.Abs(differenceC); var oxygenOnCarbon = (int) (row.Cell["OxygenOnCarbon"]); const double carbonConsumption = 0.01; double correctionOxy = (oxygenOnCarbon/carbonConsumption)*differenceC; l.msg("Correction Oxygen C = {0}", correctionOxy); return (int) Math.Round(correctionOxy); } else return 0; } } } return 0; }
public void Init() { Requester.ReqPatternNames(Requester.MainGate); ResetTables(); InitTbl = new CSVTableParser(); Charge5Classes.Descriptions.SetDescriptionPI(ref InitTbl); Tables = new List<CSVTableParser>(); for (int i = 0; i < CountTables; i++) { var t = new CSVTableParser(); Charge5Classes.Descriptions.SetDescriptionTBL(ref t); Tables.Add(t); } }
public static void SaveTables(string name, CSVTableParser inittbl, List<CSVTableParser> tables) { var currentPathName = StorePath + "\\" + name; Directory.CreateDirectory(currentPathName); foreach (var row in inittbl.Rows) { tables[(int) row.Cell["Index"]].FileName = String.Format("{0}\\{1}.csv", currentPathName, (row.Cell["TableName"])); tables[(int) row.Cell["Index"]].Separator = Separator; tables[(int) row.Cell["Index"]].Save(); } inittbl.FileName = currentPathName + "\\" + PIName; inittbl.Separator = Separator; inittbl.Save(); }
public static void SetDescriptionTBL(ref CSVTableParser table) { table.Description.Add(new ColumnPath() {ColumnName = "MinSiHotIron", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MaxSiHotIron", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MinTHotIron", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MaxTHotIron", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassHotIron", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassScrap", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassLime", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassDolom", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "UVSMassDolom", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassFOM", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "UVSMassFOM", ColumnType = typeof (double)}); table.Description.Add(new ColumnPath() {ColumnName = "MassDolomS", ColumnType = typeof (double)}); }
public void LoadFromCSV(string file) { m_table = new Dictionary<string, Dictionary<string, double>>(); var loader = new CSVTableParser(); loader.Description = GetDescription(); loader.FileName = file; loader.Separator = ';'; loader.Load(); foreach (var row in loader.Rows) { var himDic = new Dictionary<string, double>(); foreach (var o in row.Cell) { if (o.Key != "MaterialName") himDic.Add((string) o.Key, (double) o.Value); } m_table.Add((string) row.Cell["MaterialName"], himDic); } }
private static void Init() { MainConf = System.Configuration.ConfigurationManager.OpenExeConfiguration(""); var o = new HeatChangeEvent(); MainGate = new Client(new Listener()); MainGate.Subscribe(); Separator = MainConf.AppSettings.Settings["separator"].Value.ToArray()[0]; StorePath = MainConf.AppSettings.Settings["StorePath"].Value; ConverterNumber = Int32.Parse(MainConf.AppSettings.Settings["converterNumber"].Value); DefaultPattern = MainConf.AppSettings.Settings["DefPattrn"].Value; InitTbl = new CSVTableParser(); TablePaths = ScanStore(StorePath); try { Tables = LoadTables(DefaultPattern, ref InitTbl); InstantLogger.msg("default pattern \"{0}\" loaded", DefaultPattern); } catch (Exception) { InstantLogger.err("can't load pattern \"{0}\",\nTry load pattern \"default\"", DefaultPattern); Tables = LoadTables("default", ref InitTbl); } if (Tables == null) InstantLogger.err("default pattern not loaded"); CalcModeIsAutomatic = false; Saver = new DataSaver(); IterateTimer.Elapsed += new ElapsedEventHandler(IterateTimeOut); IterateTimer.Enabled = true; Reset(); //SaveTables("new", InitTbl, Tables); ////////////////////////////////// //CSVTP_FlexEventConverter.AppName = "Charge5"; //var tableFlex = CSVTP_FlexEventConverter.PackToFlex("newToFlex", InitTbl, Tables); //var name = ""; //CSVTP_FlexEventConverter.UnpackFromFlex(tableFlex, ref InitTbl, ref Tables, ref name); //Console.WriteLine("Pare: {0}", name); //SaveTables("newFromFlex", InitTbl, Tables); }
public static List<CSVTableParser> LoadTables(string name, ref CSVTableParser initbl) { var tables = new List<CSVTableParser>(); //var initbl = new CSVTableParser(); for (int i = 0; i < MaxTables; i++) tables.Add(new CSVTableParser()); var isFound = false; foreach (var tablePath in TablePaths) { var tpsplt = tablePath.Split('\\'); foreach (var s in tpsplt) { if (s == name) { var pathInit = String.Format("{0}\\{1}", tablePath, PIName); if (File.Exists(pathInit)) { isFound = true; initbl.FileName = pathInit; initbl.Separator = Separator; Charge5Classes.Descriptions.SetDescriptionPI(ref initbl); initbl.Load(); } } } if (isFound) { foreach (var row in initbl.Rows) { var tb = new CSVTableParser { FileName = String.Format("{0}\\{1}.csv", tablePath, row.Cell["TableName"]), Separator = Separator }; Charge5Classes.Descriptions.SetDescriptionTBL(ref tb); tb.Load(); tables[(int) row.Cell["Index"]] = tb; } } } if (isFound) return tables; else return null; }
public static void SetDescriptionPI(ref CSVTableParser table) { table.Description.Add(new ColumnPath() {ColumnName = "Index", ColumnType = typeof (int)}); table.Description.Add(new ColumnPath() {ColumnName = "TableName", ColumnType = typeof (string)}); }
private CSVTableParser UpdateCsvtpFromTd(TableData tableData, CSVTableParser tableParser) { tableParser.Rows.RemoveRange(0, tableParser.Rows.Count); for (int index = 0; index < tableData.Rows.Count; index++) { var row = tableData.Rows[index]; tableParser.Rows.Add(new Row()); tableParser.Rows[index].Cell["MassDolom"] = row.MassDolom; tableParser.Rows[index].Cell["MassDolomS"] = row.MassDolomS; tableParser.Rows[index].Cell["MassFOM"] = row.MassFOM; tableParser.Rows[index].Cell["MassHotIron"] = row.MassHotIron; tableParser.Rows[index].Cell["MassLime"] = row.MassLime; tableParser.Rows[index].Cell["MassScrap"] = row.MassScrap; tableParser.Rows[index].Cell["MaxSiHotIron"] = row.MaxSiHotIron; tableParser.Rows[index].Cell["MaxTHotIron"] = row.MaxTHotIron; tableParser.Rows[index].Cell["MinSiHotIron"] = row.MinSiHotIron; tableParser.Rows[index].Cell["MinTHotIron"] = row.MinTHotIron; tableParser.Rows[index].Cell["UVSMassDolom"] = row.UVSMassDolom; tableParser.Rows[index].Cell["UVSMassFOM"] = row.UVSMassFOM; } return tableParser; }
private TableData CsvtpToTD(CSVTableParser table) { var tableOut = new TableData(); foreach (var row in table.Rows) { tableOut.Rows.Add(new TableRow() { MassDolom = (double) row.Cell["MassDolom"], MassDolomS = (double) row.Cell["MassDolomS"], MassFOM = (double) row.Cell["MassFOM"], MassHotIron = (double) row.Cell["MassHotIron"], MassLime = (double) row.Cell["MassLime"], MassScrap = (double) row.Cell["MassScrap"], MaxSiHotIron = (double) row.Cell["MaxSiHotIron"], MaxTHotIron = (double) row.Cell["MaxTHotIron"], MinSiHotIron = (double) row.Cell["MinSiHotIron"], MinTHotIron = (double) row.Cell["MinTHotIron"], UVSMassDolom = (double) row.Cell["UVSMassDolom"], UVSMassFOM = (double) row.Cell["UVSMassFOM"] }); } return tableOut; }
public static void Alg(CSVTableParser table, InData inData, out OutData outData) { outData = new OutData(); //const double maxSiHi = 0.8; // максимальный кремний после которого считаем не по таблице foreach (var row in table.Rows) { var hitDownSiHiRange = (double) (row.Cell["MinSiHotIron"]) <= inData.SiHi; var hitUpSiHiRange = (double) (row.Cell["MaxSiHotIron"]) >= inData.SiHi; var hitDownTHiRange = (double) (row.Cell["MinTHotIron"]) <= inData.THi; var hitUpTHiRange = (double) (row.Cell["MaxTHotIron"]) >= inData.THi; outData.IsFound = false; if (hitDownSiHiRange && hitUpSiHiRange && hitDownTHiRange && hitUpTHiRange) { outData.IsFound = true; #region новый расчет outData.MHi = (int) Math.Round((double) row.Cell["MassHotIron"]); outData.MSc = (int) Math.Round((double) row.Cell["MassScrap"]); outData.MLi = (int) Math.Round((double) row.Cell["MassLime"]); outData.MDlms = (int) Math.Round((double) row.Cell["MassDolomS"]); outData.MDlm = inData.IsProcessingUVS ? (int) Math.Round((double) row.Cell["UVSMassDolom"]) : (int) Math.Round((double) row.Cell["MassDolom"]); outData.MFom = inData.IsProcessingUVS ? (int) Math.Round((double) row.Cell["UVSMassFOM"]) : (int) Math.Round((double) row.Cell["MassFOM"]); #endregion #region старый расчет //double knownTableVal = 1; //double unknownTableVal = 1; //double knownVal = 1; //if (inData.MHi > 0) //{ // outData.MHi = inData.MHi; // knownVal = inData.MHi; // knownTableVal = (double) row.Cell["MassHotIron"]; // if (inData.MSc > 0) // { // outData.MSc = inData.MSc; // } // else // { // unknownTableVal = (double)row.Cell["MassScrap"]; // outData.MSc = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); // } //} //else if (inData.MSc > 0) //{ // outData.MSc = inData.MSc; // knownVal = inData.MSc; // knownTableVal = (double)row.Cell["MassScrap"]; // unknownTableVal = (double)row.Cell["MassHotIron"]; // outData.MHi = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); //} //else //{ // return; //} //unknownTableVal = (double)row.Cell["MassLime"]; //outData.MLi = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); //unknownTableVal = inData.IsProcessingUVS // ? (double)row.Cell["UVSMassDolom"] // : (double)row.Cell["MassDolom"]; //outData.MDlm = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); //unknownTableVal = inData.IsProcessingUVS // ? (double)row.Cell["UVSMassFOM"] // : (double)row.Cell["MassFOM"]; //outData.MFom = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); //unknownTableVal = (double)row.Cell["MassDolomS"]; //outData.MDlms = (int)Math.Round(CalcUnknownVal(knownVal, knownTableVal, unknownTableVal)); #endregion // досчитываем по замечаниям //###################################################################### //Если, при шихтовке, металлолома берётся больше заданного значения, //то убирается «долом С», из расчёта на 1т металлолома – 0,5 т «долом С» if ((inData.MSc > 0) && (inData.MHi > 0)) { var knownTableVal = (double) row.Cell["MassHotIron"]; var unknownTableVal = (double) row.Cell["MassScrap"]; var calcScrap = (int) Math.Round(CalcUnknownVal(inData.MHi, knownTableVal, unknownTableVal)); var scrapDifference = inData.MSc - calcScrap; if (scrapDifference > 0) { var k = 0.5; outData.MDlms -= (int) Math.Round(scrapDifference*k); if (outData.MDlms < 0) outData.MDlms = 0; } } //###################################################################### break; } } }
public static double CalcNewCarbon(CSVTableParser matrixC, Estimates data, int OxyAfterMetering) { using (var l = new Logger("CalcC")) { if (data.CurrentC == 0) return 0; foreach (var row in matrixC.Rows) { if ((double) (row.Cell["CMin"]) <= data.CurrentC && data.CurrentC < (double) (row.Cell["CMax"])) { l.msg("C item found --- CMin {0}; CMax {1}", row.Cell["CMin"], row.Cell["CMax"]); var oxygenOnCarbon = (int) (row.Cell["OxygenOnCarbon"]); return data.CurrentC - ((OxyAfterMetering/oxygenOnCarbon)*0.01); } } } return 0; }
public static int CalcT(CSVTableParser matrixT, Estimates data) { if (matrixT.Rows == null) { InstantLogger.err("matrixT.Rows == null"); return 0; } using (var l = new Logger("CalcT")) { if ((data.CurrentT == 0) || (data.TargetT == 0) || (data.TargetTuMin == 0) || (data.TargetTuMax == 0) || (data.CurrentC == 0) ) return 0; foreach (var row in matrixT.Rows) { if ((double) (row.Cell["CMin"]) <= data.CurrentC && data.CurrentC < (double) (row.Cell["CMax"])) { l.msg("T item found --- CMin {0}; CMax {1}", row.Cell["CMin"], row.Cell["CMax"]); //var differenceT = data.TargetT - data.CurrentT; double differenceT = (double)(((data.TargetT + (data.TargetT - data.TargetTuMin)) * 0.5) - data.CurrentT); // до середины между целевым и минимальным целевым if (differenceT > 0) { var oxygenOnHeating = (int)(row.Cell["OxygenOnHeating"]); var heating = (int)(row.Cell["Heating"]); double correctionOxy = (double)((((double)oxygenOnHeating) / ((double)heating)) * differenceT); l.msg("Correction Oxygen T = {0}", correctionOxy); return (int)Math.Round(correctionOxy); } else { l.msg("recomend end blow? code:-3"); return -3; // рекомендуется закончить продувку } } } } return 0; }
private static void Init() { MatrixT = new CSVTableParser(); MatrixC = new CSVTableParser(); MainConf = System.Configuration.ConfigurationManager.OpenExeConfiguration(""); CurrentScheme = Int32.Parse(MainConf.AppSettings.Settings["Scheme"].Value); Separator = MainConf.AppSettings.Settings["separator"].Value.ToArray()[0]; MatrixT.FileName = MainConf.AppSettings.Settings["matrixT"].Value; MatrixT.Separator = Separator; var o = new FlexEvent(); MainGate = new ConnectionProvider.Client(new Listener()); MainGate.Subscribe(); MatrixTDescription = new List<ColumnPath>(); MatrixTDescription.Add(new ColumnPath() { ColumnName = "CMin", ColumnType = typeof(double) }); MatrixTDescription.Add(new ColumnPath() { ColumnName = "CMax", ColumnType = typeof(double) }); MatrixTDescription.Add(new ColumnPath() { ColumnName = "OxygenOnHeating", ColumnType = typeof(int) }); MatrixTDescription.Add(new ColumnPath() { ColumnName = "Heating", ColumnType = typeof(int) }); #if IS_DBFLEX ReqScheme(CurrentScheme); #else MatrixT.Description = MatrixTDescription; MatrixT.Load(); #endif MatrixC.FileName = MainConf.AppSettings.Settings["matrixC"].Value; MatrixC.Separator = Separator; MatrixC.Description.Add(new ColumnPath() {ColumnName = "CMin", ColumnType = typeof (double)}); MatrixC.Description.Add(new ColumnPath() {ColumnName = "CMax", ColumnType = typeof (double)}); MatrixC.Description.Add(new ColumnPath() {ColumnName = "OxygenOnCarbon", ColumnType = typeof (int)}); MatrixC.Load(); WaitSublanceData = new Timer(); WaitSublanceData.Elapsed += new ElapsedEventHandler(SublanceDataLost); CarbonIterateTimer.Elapsed += new ElapsedEventHandler(CarbonIterator); CarbonIterateTimer.Enabled = true; Reset(); }
public static CSVTableParser LoadMatrixTFromFlex(List<ColumnPath> description, FlexHelper fex) { var matrixT = new CSVTableParser(); matrixT.Description = description; var cminLst = (List<double>)fex.GetComplexArg("CMIN", typeof(List<double>)); var cmaxLst = (List<double>)fex.GetComplexArg("CMAX", typeof(List<double>)); var oxygenLst = (List<double>)fex.GetComplexArg("OXYGEN", typeof(List<double>)); var heatinLst = (List<double>)fex.GetComplexArg("HEATING", typeof(List<double>)); for (int i = 0; i < fex.GetInt(Implements.DBFlex.ArgCountName); i++) { var row = matrixT.ColumnCreator(); row.Cell["CMin"] = cminLst[i]; row.Cell["CMax"] = cmaxLst[i]; row.Cell["OxygenOnHeating"] = oxygenLst[i]; row.Cell["Heating"] = heatinLst[i]; matrixT.Rows.Add(row); } return matrixT; }