private static void Main(string[] args) { InstantLogger.writeLogConsole = false; using (Logger l = new Logger("Fledged")) { try { var o = new HeatChangeEvent(); /// нужно чтобы сборка загрузилась m_pushGate = new ConnectionProvider.Client(); var mainConf = System.Configuration.ConfigurationManager.OpenExeConfiguration(""); var progId = mainConf.AppSettings.Settings["OPCServerProgID"].Value; var addrFmt = mainConf.AppSettings.Settings["OPCAddressFormat"].Value; var dest = mainConf.AppSettings.Settings["OPCDestination"].Value; var convSchema = Convert.ToInt32(mainConf.AppSettings.Settings["OPCConvSchema"].Value); var reqUpdateRateMs = Convert.ToInt32(mainConf.AppSettings.Settings["OPCCReqUpdateRate_ms"].Value); l.msg("OPC Fledged started with ProgID=[{0}] for {1} aids conv schema {2}", progId, dest, convSchema); OPCCon = new OpcConnector(progId, dest, addrFmt, convSchema, reqUpdateRateMs); var receiverThread = new Thread(Receiver); receiverThread.Start(); Console.WriteLine("Нажмите <ENTER> для выхода."); Console.ReadLine(); OPCCon.CloseConnection(); l.msg("OPC Fledged exit"); } catch (Exception e) { l.err("Exception <{0}> -- execution terminated", e.ToString()); } catch { l.err("Unknown exception -- execution terminated"); } } }
public static void Main(string[] args) { using (Logger l = new Logger("Bazooka")) { try { for (int i = 0; i < args.Count(); i++) { l.msg("Command line argument {0} is <{1}>", i, args[i]); if (i > 0) { string[] res = args[i].Split(new[] {'='}, 2); ArgList.Add(res[0], res[1]); l.msg("\tRecognized as <{0}>=<{1}> key-value pair", res[0], res[1]); } } var o = new HeatChangeEvent(); /// нужно чтобы сборка загрузилась EventsList = BaseEvent.GetEvents(); bool found = false; for (int index = 0; index < EventsList.Length; index++) { if (EventsList[index].Name == args[0]) { l.msg("Event {0} found -- preparing parameters:", args[0]); EventToPush = (CommonTypes.BaseEvent) Activator.CreateInstance(EventsList[index]); // Enum all the properties foreach (var prop in EventsList[index].GetProperties()) { l.msg("\tProperty {0} {1} == {2}", prop.PropertyType.ToString(), prop.Name, prop.GetValue(EventToPush, null)); } // real processing found = true; break; } } if (found) { m_pushGate = new ConnectionProvider.Client(); m_pushGate.PushEvent(EventToPush); System.Threading.Thread.Sleep(1000); l.msg("Event fired>\n{0}", EventToPush.ToString()); } else { l.err("Unknown event {0}", args[0]); } } catch (Exception e) { l.err("Exception caught:\n{0}", e.ToString()); } } }
//public static Type[] EventsList; public static void ProcessEvent(OPCDirectReadEvent ev) { using (Logger l = new Logger("OPCDirectReader")) { bool foundEvent = false; bool foundToAddedEvent = false; List<int> readHsrv = new List<int>(); for (int index = 0; index < EventsList.Length; index++) { if (EventsList[index].Name == ev.EventName) { for (int i = 0; i < m_Item_props.Count; i++) { //InstantLogger.log(m_Item_props[i].eventId.ToString() + " " + m_Item_props[i].eventPlcpId.ToString() + " " + m_Item_props[i].eventPropId.ToString()); if (index == m_Item_props[i].eventId) { //l.msg("OPC Related event found: {0}", evt.EventName); foundToAddedEvent = true; //processing //m_Item_defs[0] //InstantLogger.log(m_Item_props[i].eventId.ToString() + " " + m_Item_props[i].eventPlcpId.ToString() + " " + m_Item_props[i].eventPropId.ToString() + " -- " + m_Handles_srv[m_Item_props[i].eventPropId]); /*for (int j = 0; j < m_Handles_srv.Length; j++) { InstantLogger.log(m_Handles_srv[j].ToString()); }*/ //!!! readHsrv.Add(m_Handles_srv[m_Item_props[i].eventPropId]); //int[] m_readHsrv; //m_readHsrv. /*int[] aE; int cancelId; int[] m_readHsrv = new int[]; m_The_grp.Read(m_readHsrv, 55667788, out cancelId, out aE);*/ //break; } } foundEvent = true; Program.m_pushGate.PushEvent(EventStore[index]); l.msg(EventStore[index].ToString()); break; } } int[] aE; int cancelId; if (!foundEvent) l.err("Unknown event {0}", ev.EventName); else if (!foundToAddedEvent) l.err("OPC group have no event {0}", ev.EventName); else { l.msg("OPC Related event found and read"); m_The_grp.Read(readHsrv.ToArray(), 55667788, out cancelId, out aE); } } }
private static void Main(string[] argv) { using (var l = new Logger("PipeCatcher")) { try { var o = new FlexEvent("dummy"); /// нужно чтобы сборка загрузилась CoreGate = new ConnectionProvider.Client(); var conf = ConfigurationManager.OpenExeConfiguration(""); var settings = conf.AppSettings.Settings; var dbrlist = new List<DBReader>(); foreach (KeyValueConfigurationElement pipe in settings) { if (!pipe.Key.StartsWith("pipe")) continue; foreach (KeyValueConfigurationElement kvel in settings) { if (kvel.Key.StartsWith("connectionString")) { dbrlist.Add(new DBReader(kvel.Value, pipe.Value)); } } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Catcher(dbrlist, Application.ExecutablePath)); } catch (Exception e) { l.err("PipeCatcher.Main exception {0}", e); } } }
public static void Load() { using (Logger l = new Logger("LoadMatrix")) { CapturedEvents = new List<CEDataFormat>(); string[] strings; try { strings = File.ReadAllLines(Patch); } catch { strings = new string[0]; l.err("Cannot read the file: {0}", Patch); return; } try { for (int strCnt = 1; strCnt < strings.Count(); strCnt++) { string[] values = strings[strCnt].Split(Separator); if (values.Any()) { if (values[0] != "") { var capturedEvent = new CEDataFormat(); capturedEvent.Operation = values[0]; capturedEvent.CountTotal = Convertion.StrToInt64(values[1]); capturedEvent.CountDayAverage = Convertion.StrToInt64(values[2]); capturedEvent.CaptureTime = Convertion.StrToDateTime(values[3]); capturedEvent.Comment = values[7]; CapturedEvents.Add(capturedEvent); } else { var att = new AttDataFormat(); att.Key = values[4]; att.Type = values[5]; att.ExampleValue = values[6]; att.Comment = values[7]; CapturedEvents[CapturedEvents.Count - 1].AttList.Add(att); } } } } catch (Exception e) { l.err("Cannot read the file: {0}, bad format call exeption: {1}", Patch, e.ToString()); return; //throw e; } } }
private static void Main() { using (var l = new Logger("TransferModelOutput")) { try { var pointStyle = new NumberFormatInfo(); pointStyle.NumberDecimalSeparator = "."; CoreGate = new ConnectionProvider.Client(); var conf = ConfigurationManager.OpenExeConfiguration(""); var settings = conf.AppSettings.Settings; var fex = new ConnectionProvider.FlexHelper(Convert.ToString(settings["?"].Value)); do { foreach (KeyValueConfigurationElement kvel in settings) { if (!kvel.Key.StartsWith("?")) { if (kvel.Value.StartsWith("i", true, null)) { string[] imarg = kvel.Value.Substring(1).Split(':'); fex.AddInt(kvel.Key, rnd.Next(Convert.ToInt32(imarg[0]), Convert.ToInt32(imarg[1]))); } else if (kvel.Value.StartsWith("#")) { fex.AddStr(kvel.Key, kvel.Value.Substring(1)); } else { string[] marg = kvel.Value.Split(':'); fex.AddDbl(kvel.Key, randomFromTo(Convert.ToDouble(marg[0], pointStyle), Convert.ToDouble(marg[1], pointStyle))); } } } fex.Fire(CoreGate); l.msg("Event fired>\n{0}", fex.evt); for (int i = 0; i < 3; i++) { Console.Write("."); System.Threading.Thread.Sleep(300); } fex.ClearArgs(); Console.Write(">"); } while ("q" != Console.ReadLine()); Console.WriteLine("Done"); } catch (Exception e) { l.err("TransferModelOutput.Main exception {0}", e); } } }
public static void LoadMatrix(string path, char separator, out List<MFCMDataFull> matrixStateData) { using (Logger l = new Logger("LoadMatrix")) { matrixStateData = new List<MFCMDataFull>(); string[] strings; try { strings = File.ReadAllLines(path); } catch { strings = new string[0]; l.err("Cannot read the file: {0}", path); return; } try { for (int strCnt = 0; strCnt < strings.Count(); strCnt++) { string[] values = strings[strCnt].Split(separator); matrixStateData.Add(new MFCMDataFull() { IdHeat = Convertion.StrToInt32(values[0]), NumberHeat = Convertion.StrToInt64(values[1]), CarbonMonoxideVolumePercent = Convertion.StrToDouble(values[2]), CarbonOxideVolumePercent = Convertion.StrToDouble(values[3]), HeightLanceCentimeters = Convertion.StrToInt32(values[4]), OxygenVolumeRate = Convertion.StrToDouble(values[5]), SteelCarbonPercent = Convertion.StrToDouble(values[6]), SteelCarbonCalculationPercent = Convertion.StrToDouble(values[7]) }); } } catch (Exception e) { l.err("Cannot read the file: {0}, bad format call exeption: {1}", path, e.ToString()); //return; throw e; } } }
public static void LoadMatrix(string path, out List<MFCPData> matrixStateData) { using (Logger l = new Logger("LoadMatrix")) { matrixStateData = new List<MFCPData>(); string[] strings; try { strings = File.ReadAllLines(path); } catch { strings = new string[0]; l.err("Cannot read the file: {0}", path); return; } try { for (int strCnt = 0; strCnt < strings.Count(); strCnt++) { string[] values = strings[strCnt].Split(Separator); matrixStateData.Add(new MFCPData() { HeatNumber = Convertion.StrToInt64(values[0]), TimeFromX = Convertion.StrToInt32(values[1]), CarbonOxideIVP = Convertion.StrToDouble(values[2]), CarbonMonoxideVP = Convertion.StrToDouble(values[3]), CarbonOxideVP = Convertion.StrToDouble(values[4]), SteelCarbonPercent = Convertion.StrToDouble(values[5]), SteelCarbonPercentCalculated = Convertion.StrToDouble(values[6]), HightQualityHeat = Convertion.StrToBool(values[7]) }); } } catch (Exception e) { l.err("Cannot read the file: {0}, bad format call exeption: {1}", path, e.ToString()); //return; throw e; } } }
public void CustomOnEvent(BaseEvent newEvent) { using (var l = new Logger("ConnectionProvider.PrimaryListener.EventProc")) { if (Client.protectedMode) { try { m_EventListener.OnEvent(newEvent); } catch (Exception e) { l.err("Event {0} exception {1}::{2} returned:\n{3} ", newEvent.ToString(), e.Source, e.TargetSite, e.Message); } } else m_EventListener.OnEvent(newEvent); } }
public void OnEvent(BaseEvent evt) { using (var l = new Logger("Listener")) { if (evt is HeatChangeEvent) { var hce = evt as HeatChangeEvent; if (hce.HeatNumber != CurrentHeatNumber) { CurrentHeatNumber = hce.HeatNumber; Program.Reset(); } } if (evt is LanceEvent) { var le = evt as LanceEvent; Program.LancePosition = le.LanceHeight; } if (evt is SublanceTemperatureEvent) { var ste = evt as SublanceTemperatureEvent; //Program.WaitSublanceData.Enabled = false; const int maxT = 1770; const int minT = 1550; if ((ste.SublanceTemperature < maxT) && (ste.SublanceTemperature > minT)) { Program.WaitSublanceData.Enabled = false; Program.Data.CurrentT = ste.SublanceTemperature; Program.Data.CurrentC = Program.FixedCalcCarbone; l.msg("Calc carbone = {0}", Program.FixedCalcCarbone); l.msg("SublanceTemperature = " + ste.SublanceTemperature); Program.IsUncorrectMetering = false; Program.Iterator(); } else { if (ste.SublanceTemperature == 1111) Program.IsUncorrectMetering = false; else { Program.IsUncorrectMetering = true; l.err("Uncorrect temperature data = " + ste.SublanceTemperature); } } } if (evt is SublanceCEvent) { var sce = evt as SublanceCEvent; //Program.WaitSublanceData.Enabled = false; //Program.Data.CurrentC = sce.C; //l.msg("sce.C = " + sce.C); Program.Iterator(); } if (evt is BlowingEvent) { var be = evt as BlowingEvent; Program.CurrentOxygen = be.O2TotalVol; CurrentOxigen = be.O2TotalVol; Program.Iterator(); } if (evt is SublanceStartEvent) { var sse = evt as SublanceStartEvent; if (sse.SublanceStartFlag == 1) { l.msg("Sublance begin metering"); const int uvm = 3; if (Program.LanceMode == uvm) { Program.WaitSublanceData.Interval = Program.MeteringWaitTimeUVM*1000; Program.WaitSublanceData.Enabled = true; } else { Program.WaitSublanceData.Interval = Program.MeteringWaitTimeManual*1000; Program.WaitSublanceData.Enabled = true; } } if (sse.SublanceStartFlag == 0) // sublance end metering { if (!Program.IsAfterMetering) { Program.IsAfterMetering = true; Program.MeteringOxygen = CurrentOxigen; } } } if (evt is ModeLanceEvent) { var mle = evt as ModeLanceEvent; Program.LanceMode = mle.LanceMode; } if (evt is CalculatedCarboneEvent) { var cce = evt as CalculatedCarboneEvent; //Program.CurrentCalcCarbone = cce.CarbonePercent; } if (evt is FixDataMfactorModelEvent) { //Program.FixedCalcCarbone = Program.CurrentCalcCarbone; } if (evt is FlexEvent) { var fxe = evt as FlexEvent; if (fxe.Operation.StartsWith("ConverterUI.TargetValues")) { var key = "C"; l.msg(fxe.ToString()); try { Program.Data.TargetC = (double) fxe.Arguments[key]; //Program.Data.CurrentC = (double)fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } key = "T"; try { Program.Data.TargetT = (int) fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } key = "TuMin"; try { Program.Data.TargetTuMin = (int)fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } key = "TuMax"; try { Program.Data.TargetTuMax = (int)fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("ConverterUI.RBBAccept")) { var key = "SId"; l.msg(fxe.ToString()); try { //if (Program.SidB == (Guid)fxe.Arguments[key]) //{ key = "AutomaticStop"; Program.AutomaticStop = (bool) fxe.Arguments[key]; if (!Program.IsActualOxygen) { Program.EndBlowingOxygen = Program.CorrectionOxyT + Program.CurrentOxygen; Program.IsActualOxygen = true; } key = "EndNow"; if ((bool) fxe.Arguments[key]) Program.EndNowHandler(); else Program.EndMeteringAccept(); //key = "EndBlowingOxygen"; //Program.EndBlowingOxygen = (int) fxe.Arguments[key]; //} } catch (Exception e) { l.err("ConverterUI.RBBAccept - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("CarbonSwitcher.Result")) { var key = "C"; //InstantLogger.msg(fxe.ToString()); try { //Carbon = (double)fxe.Arguments[key]; Program.CurrentCalcCarbone = (double) fxe.Arguments[key]; } catch (Exception e) { InstantLogger.err("CarbonSwitcher.Result - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("CarbonSwitcher.DataFix")) { l.msg(fxe.ToString()); Program.FixedCalcCarbone = Program.CurrentCalcCarbone; } if (fxe.Operation.StartsWith("SQL.Corrections")) { var fex = new FlexHelper(fxe); if (fex.GetStr(Implements.DBFlex.ArgCommandName) == "GetScheme") { if (fex.GetStr(Implements.DBFlex.ArgErrorCodeName) == "S_OK") { Program.MatrixT = Program.LoadMatrixTFromFlex(Program.MatrixTDescription, fex); } } } } } }
public void OnEvent(BaseEvent evt) { using (var l = new Logger("Listener")) { if (evt is FlexEvent) { var fxe = evt as FlexEvent; if (fxe.Operation.StartsWith("Charge5.PatternNames")) { l.msg(fxe.ToString()); var patternList = new List<string>(); try { foreach (var argument in fxe.Arguments) patternList.Add((string) argument.Value); Pointer.PMainWindow.Dispatcher.Invoke( new Action(delegate() { Pointer.PMainWindow.cbPattern.ItemsSource = patternList; })); if (Pointer.PPatternEditor != null) { Pointer.PPatternEditor.Dispatcher.Invoke(new Action(delegate() { Pointer.PPatternEditor. lstPatterns.ItemsSource = patternList; Pointer.PPatternEditor. ConsolePush(fxe.ToString()); })); } } catch (Exception e) { l.err("Charge5.PatternNames: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("Charge5.RespLoadPattern")) { l.msg(fxe.ToString()); try { if ((bool) fxe.Arguments["Loaded"]) { Pointer.PMainWindow.Dispatcher.Invoke(new Action(delegate() { Pointer.PMainWindow.lblPattern. Content = "паттерн успешно загружен"; Pointer.PMainWindow.lblPattern. Background = new SolidColorBrush( Color.FromArgb(0, 0, 0, 0)); })); } else { Pointer.PMainWindow.Dispatcher.Invoke(new Action(delegate() { Pointer.PMainWindow.lblPattern. Content = "Ошибка загрузки паттерна"; Pointer.PMainWindow.lblPattern. Background = new SolidColorBrush( Color.FromArgb(127, 255, 0, 0)); })); } } catch (Exception e) { l.err("Charge5.RespLoadPattern: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("Charge5.ResultCalc")) { l.msg(fxe.ToString()); try { Pointer.PMainWindow.Dispatcher.Invoke(new Action(delegate() { if ((bool) fxe.Arguments["IsFound"]) { Pointer.PMainWindow.lblMDlm.Content = fxe.Arguments["MDlm"].ToString(); Pointer.PMainWindow.lblMDlms. Content = fxe.Arguments["MDlms"].ToString (); Pointer.PMainWindow.lblMFom.Content = fxe.Arguments["MFom"].ToString(); Pointer.PMainWindow.lblMHi.Content = fxe.Arguments["MHi"].ToString(); Pointer.PMainWindow.lblMLi.Content = fxe.Arguments["MLi"].ToString(); Pointer.PMainWindow.lblMSc.Content = fxe.Arguments["MSc"].ToString(); Pointer.PMainWindow.lblStatus. Content = "Расчет выполнен ..."; Pointer.PMainWindow.lblStatus. Background = new SolidColorBrush( Color.FromArgb(127, 0, 100, 0)); } else { Pointer.PMainWindow.lblStatus. Content = "Входные значения в таблицах не найдены"; Pointer.PMainWindow.lblStatus. Background = new SolidColorBrush( Color.FromArgb(127, 255, 0, 0)); } })); } catch (Exception e) { l.err("Charge5.ResultCalc: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("Charge5.Tables")) { l.msg(fxe.ToString()); var patternList = new List<string>(); try { if (Pointer.PPatternEditor != null) { Pointer.PPatternEditor.Dispatcher.Invoke(new Action(delegate() { Pointer.PPatternEditor. ConsolePush(fxe.ToString()); Pointer.PPatternEditor. StatusChange( "Получен паттерн " + fxe.Operation.Split('.') .Last()); Charge5Classes. CSVTP_FlexEventConverter. UnpackFromFlex( fxe, ref Pointer. PPatternEditor. InitTbl, ref Pointer. PPatternEditor. Tables, ref Pointer. PPatternEditor. PatternLoadedName ); Pointer.PPatternEditor. ConsolePush( "Паттерн распакован"); Pointer.PPatternEditor. DisplayPattern(); Pointer.PPatternEditor. ConsolePush( "Паттерн визуализирован"); Pointer.PPatternEditor.btnSave. IsEnabled = true; })); } } catch (Exception e) { l.err("Charge5.PatternNames: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("Charge5.SavePatternResp")) { l.msg(fxe.ToString()); var patternList = new List<string>(); try { if (Pointer.PPatternEditor != null) { Pointer.PPatternEditor.Dispatcher.Invoke(new Action(delegate() { Pointer.PPatternEditor. ConsolePush(fxe.ToString()); if ( (bool) fxe.Arguments["Saved"]) { Pointer.PPatternEditor. StatusChange( "Паттер успешно сохранен"); Requester.ReqPatternNames( Requester.MainGate); Pointer.PPatternEditor. ConsolePush( "Обновление списка паттернов..."); } else { Pointer.PPatternEditor. StatusChange( "Ошбка сохранения паттерна"); Requester.ReqPatternNames( Requester.MainGate); Pointer.PPatternEditor. ConsolePush( "Обновление списка паттернов..."); } })); } } catch (Exception e) { l.err("Charge5.PatternNames: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("Charge5.RemoovePatternResp")) { l.msg(fxe.ToString()); var patternList = new List<string>(); try { if (Pointer.PPatternEditor != null) { Pointer.PPatternEditor.Dispatcher.Invoke(new Action(delegate() { Pointer.PPatternEditor. ConsolePush(fxe.ToString()); if ( (bool) fxe.Arguments["Remooved"]) { Pointer.PPatternEditor. StatusChange( "Паттер успешно удален"); Requester.ReqPatternNames( Requester.MainGate); Pointer.PPatternEditor. ConsolePush( "Обновление списка паттернов..."); } else { Pointer.PPatternEditor. StatusChange( "Ошбка удаления паттерна"); Requester.ReqPatternNames( Requester.MainGate); Pointer.PPatternEditor. ConsolePush( "Обновление списка паттернов..."); } })); } } catch (Exception e) { l.err("Charge5.PatternNames: \n{0}", e.ToString()); } } } } }
public static void Iterate(HeatData heatData) { using (var l = new Logger("Iterate")) { var calculatedCarboneEvent = new CalculatedCarboneEvent(); if (!TotalCarbonMassCalculated) { if ( (heatData.IronMass > 0) && (heatData.IronCarbonPercent > 0) && (heatData.ScrapMass > 0) && (heatData.ScrapCarbonPercent > 0) && (heatData.SteelCarbonPercent > 0) ) { TotalCarbonMass = Decarbonater.HeatCarbonMass( heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent, heatData.SteelCarbonPercent ); RemainCarbonMass = TotalCarbonMass; RemainCarbonPercent = GetCarbonPercent(RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent); if ((TotalCarbonMass > 0) && (heatData.OxygenVolumeRate > 0) && HeatIsStarted) { // start heat TotalCarbonMassCalculated = true; l.msg("##### [TotalCarbonMassCalculated: {0}][RemainCarbonPercent]", TotalCarbonMass, RemainCarbonPercent); } else l.msg("HeatCarbonMass returned bad result: {0}", TotalCarbonMass); } else { l.err( "bad data for HeatCarbonMass [IronMass: {0}][IronCarbonPercent: {1}][ScrapMass: {2}][ScrapCarbonPercent: {3}][SteelCarbonPercent: {4}]", heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent, heatData.SteelCarbonPercent ); } } else // if (!GasCarbonMassFinished) { heatData.DeltaT = m_sw.ElapsedMilliseconds*0.001; m_sw.Restart(); if ( (heatData.CarbonMonoxideVolumePercent > 0) && (heatData.OffgasVolumeRate > 0) && (heatData.DeltaT > 0) && (heatData.Kgasan > 0) ) { double GCMResult = Decarbonater.GasanCarbonMass( heatData.CarbonMonoxideVolumePercent, heatData.OffgasVolumeRate, heatData.DeltaT, heatData.Kgasan ); if (GCMResult >= 0) { if (heatData.OxygenVolumeRate > 0) RemainCarbonMass -= GCMResult; ////////////////////////////// } else l.err("GasanCarbonMass return bad result: {0}", GCMResult); if ( (RemainCarbonMass > 0) && (heatData.IronMass > 0) && (heatData.IronCarbonPercent > 0) && (heatData.ScrapMass > 0) && (heatData.ScrapCarbonPercent > 0) ) { RemainCarbonPercent = GetCarbonPercent( RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent ); } else { l.err( "bad data for GetCarbonPercent [RemainCarbonMass: {0}][IronMass: {1}][IronCarbonPercent: {2}][ScrapMass: {3}][ScrapCarbonPercent: {4}]", RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent ); } } else { l.err( "bad data for GasanCarbonMass [CarbonMonoxideVolumePercent: {0}][OffgasVolumeRate: {1}][DeltaT: {2}][Kgasan: {3}]", heatData.CarbonMonoxideVolumePercent, heatData.OffgasVolumeRate, heatData.DeltaT, heatData.Kgasan ); } } const double carbonTreshold = 0.095; RemainCarbonPercent = RemainCarbonPercent < carbonTreshold ? carbonTreshold : RemainCarbonPercent; // ограничение углерода var fex2 = new ConnectionProvider.FlexHelper("OffGasDecarbonater.Result"); fex2.AddArg("C", RemainCarbonPercent); fex2.Fire(Program.PushGate); ////////////////////////////////////////////////////////////////////// } }
public static void SaveMatrix(string path) { using (var l = new Logger("SaveMatrix")) { string[] strings = new string[ResultList.Count + 1]; strings[0] = String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}", Separator, "BeginTime", "FieredEvents", "ReceivedEvents", "LostEvents", "MaxDelayMs", "AverageDelayMs", "TotalDelayMs" ); for (int dataCnt = 0; dataCnt < ResultList.Count; dataCnt++) { strings[dataCnt + 1] = String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}", Separator, ResultList[dataCnt].Time, ResultList[dataCnt].FieredEvents, ResultList[dataCnt].ReceivedEvents, ResultList[dataCnt].LostEvents, ResultList[dataCnt].MaxDelayMs, ResultList[dataCnt].AverageDelayMs, ResultList[dataCnt].TotalDelayMs ); } try { File.WriteAllLines(path, strings); } catch (Exception e) { l.err("Cannot write the file: {0}, call exeption: {1}", path, e.ToString()); return; //throw; } } }
public OpcConnector(string progId, string opcDestination, string opcAddressFmt, int opcConvSchema = 0, int reqUpdateRate_ms = 500) { using (Logger l = new Logger("OpcConnector")) { string plcName = "NO-PLC"; m_The_srv = new OpcServer(); m_The_srv.Connect(progId); Thread.Sleep(500); // we are faster then some servers! // add our only working group m_The_grp = m_The_srv.AddGroup(opcDestination + "-items", false, reqUpdateRate_ms); // add all the items and save server handles int itemCounter = 0; EventsList = BaseEvent.GetEvents(); for (int eventCounter = 0; eventCounter < EventsList.Length; eventCounter++) { var heatEvent = EventsList[eventCounter]; l.msg(heatEvent.Name); // название события EventStore.Add((CommonTypes.BaseEvent) Activator.CreateInstance(heatEvent)); // создаем экземпляр события int plcpIndex = -1; bool opcRelated = false; for (int i = 0; i < heatEvent.GetCustomAttributes(false).Length; i++) { object x = heatEvent.GetCustomAttributes(false)[i]; if (x.GetType().Name == "PLCGroup") { PLCGroup p = (PLCGroup) x; if (p.Destination == opcDestination) { plcName = p.Location; l.msg(" {0} ==>> {1}", p.Location, p.Destination); opcRelated = true; break; } } } if (!opcRelated) continue; for (int propertyCounter = 0; propertyCounter < heatEvent.GetProperties().Length; propertyCounter++) { var prop = heatEvent.GetProperties()[propertyCounter]; object first = null; for (int index = 0; index < prop.GetCustomAttributes(false).Length; index++) { object x = prop.GetCustomAttributes(false)[index]; if (x.GetType().Name == "PLCPoint") { plcpIndex = index; first = x; break; } } var plcp = (PLCPoint) first; if (plcp == null) continue; string s = string.Format(opcAddressFmt, plcName, cnv(plcp.Location, opcConvSchema)); // add new OPC Item using itemCounter as client handle m_Item_defs.Add(new OPCItemDef(s, true, itemCounter, VarEnum.VT_EMPTY)); m_Item_props.Add(new FledgedItemDef(eventCounter, propertyCounter, plcpIndex)); l.msg("{0}: {1}", itemCounter, s); itemCounter++; } if (itemCounter >= maxItemCount) break; } l.msg("Counter is {0}", itemCounter); if (itemCounter == 0) throw new Exception("No items found"); // Validate Items (ignoring BLOBs OPCItemResult[] rItm; m_The_grp.ValidateItems(m_Item_defs.ToArray(), false, out rItm); if (rItm == null) throw new Exception("OPC ValidateItems: -- system error: arrRes is null"); List<int> itemExclude = new List<int>(); for (int i = 0; i < itemCounter; i++) { if (HRESULTS.Failed(rItm[i].Error)) { l.err( "Error 0x{1:x} while adding item {0} -- item EXCLUDED from monitoring", i, rItm[i].Error); itemExclude.Add(i); } } if (itemCounter == itemExclude.Count) throw new Exception("No items passed validation"); // Exclude invalid items // Add Items m_The_grp.AddItems(m_Item_defs.ToArray(), out rItm); if (rItm == null) return; for (int i = 0; i < itemCounter; i++) { if (HRESULTS.Failed(rItm[i].Error)) rItm[i].HandleServer = -1; } m_Handles_srv = new int[itemCounter]; for (int i = 0; i < itemCounter; i++) m_Handles_srv[i] = rItm[i].HandleServer; //m_The_grp.WriteCompleted += TheGrpWriteComplete; int cancelId; int[] aE; // l.msg("start read"); m_The_grp.SetEnable(true); m_The_grp.Active = true; m_The_grp.DataChanged += new DataChangeEventHandler(this.TheGrpDataChange); m_The_grp.ReadCompleted += new ReadCompleteEventHandler(this.TheGrpReadComplete); //m_The_grp.Read(m_Handles_srv, 55667788, out cancelId, out aE); //Thread.Sleep(500); // l.msg("end read"); } }
public void OnEvent(BaseEvent newEvent) { // InstantLogger.log(newEvent.ToString(), "Received", InstantLogger.TypeMessage.error); using (var l = new Logger("Listener")) { if (newEvent is FlexEvent) { var fxe = newEvent as FlexEvent; if (fxe.Operation.StartsWith("PipeCatcher.Call.PCK_DATA.PGET_WGHIRON1")) { if ((string) fxe.Arguments["SHEATNO"] == Convert.ToString(HeatNumberToLong(CIterator.CurrentHeatResult.NumberHeat))) { l.msg("Iron Correction from Pipe: {0}\n", fxe.Arguments["NWGH_NETTO"]); m_lastHotIronMass = Convert.ToDouble(fxe.Arguments["NWGH_NETTO"])*1000; } else { l.msg( "Iron Correction from Pipe: wrong heat number - expected {0} found {1}\n", CIterator.CurrentHeatResult.NumberHeat, fxe.Arguments["SHEATNO"] ); } } } if (newEvent is HeatChangeEvent) { var heatChangeEvent = newEvent as HeatChangeEvent; if (CIterator.FirstHeating) { CIterator.Reset(); l.msg("Start First Heating\n"); } else { CIterator.Reset(); l.msg("Reset Heating\n"); } CIterator.CurrentHeatResult.NumberHeat = heatChangeEvent.HeatNumber; l.msg("Number Heat: {0}\n", CIterator.CurrentHeatResult.NumberHeat); } if (newEvent is visSpectrluksEvent) // углерод со спектролюкса { var vse = newEvent as visSpectrluksEvent; CIterator.AddCarbonToQueue(HeatNumberToShort(vse.HeatNumber), vse.C); } if (newEvent is ScrapEvent) { var scrapEvent = newEvent as ScrapEvent; if (scrapEvent.ConverterNumber == Program.ConverterNumber) { CIterator.DataCurrentHeat.ScrapMass = scrapEvent.TotalWeight; m_lastScrapMass = scrapEvent.TotalWeight; l.msg("Scrap mass: {0}\n", CIterator.DataCurrentHeat.ScrapMass); } } if (newEvent is MixerAnalysisEvent) { var mixerAnalysisEvent = newEvent as MixerAnalysisEvent; CIterator.DataCurrentHeat.IronCarbonPercent = mixerAnalysisEvent.C; l.msg("Iron carbon Percent: {0}\n", CIterator.DataCurrentHeat.IronCarbonPercent); if (CIterator.DataCurrentHeat.IronCarbonPercent <= 0) { CIterator.DataCurrentHeat.IronCarbonPercent = 4.1133; l.err("Iron carbon Percent is bad, default value: {0}\n", CIterator.DataCurrentHeat.IronCarbonPercent); } } if (newEvent is HotMetalLadleEvent) { var hotMetalLadleEvent = newEvent as HotMetalLadleEvent; if (hotMetalLadleEvent.ConverterNumber == Program.ConverterNumber) { CIterator.DataCurrentHeat.IronMass = hotMetalLadleEvent.HotMetalTotalWeight; l.msg("Iron mass: {0}\n", CIterator.DataCurrentHeat.IronMass); if (CIterator.DataCurrentHeat.IronMass <= 0) { CIterator.DataCurrentHeat.IronMass = 300000.1133; l.err("Iron mass is bad, default value: {0}\n", CIterator.DataCurrentHeat.IronMass); } } } if (newEvent is LanceEvent) { var lanceEvent = newEvent as LanceEvent; CIterator.DataSmoothCurrent.OxygenVolumeRate.Add(lanceEvent.O2Flow); //l.msg("Oxygen volume rate: {0}", lanceEvent.O2Flow); CIterator.DataSmoothCurrent.OxygenVolumeCurrent.Add(lanceEvent.O2TotalVol); //l.msg("Oxygen volume current: {0}", lanceEvent.O2TotalVol); CIterator.DataSmoothCurrent.HeightLanceCentimeters.Add((double) lanceEvent.LanceHeight); CIterator.CalculateLanceSpeed(lanceEvent.LanceHeight); // фиксация данных по скорости и положению фурмы для старта многофакторной модели //l.msg("Height lance: {0}", lanceEvent.LanceHeight); if (m_lanceHeigth != lanceEvent.LanceHeight) { CIterator.Iterate(CIterator.DataCurrentHeat); m_lanceHeigth = lanceEvent.LanceHeight; } } if (newEvent is OffGasAnalysisEvent) { var offGasAnalysisEvent = newEvent as OffGasAnalysisEvent; CIterator.DataSmoothCurrent.CarbonMonoxideVolumePercentPrevious.Add( m_carbonMonoxideVolumePercentPrevious); m_carbonMonoxideVolumePercentPrevious = offGasAnalysisEvent.CO; CIterator.DataSmoothCurrent.CarbonOxideVolumePercentPrevious.Add(m_carbonOxideVolumePercentPrevious); m_carbonOxideVolumePercentPrevious = offGasAnalysisEvent.CO2; CIterator.DataSmoothCurrent.CarbonMonoxideVolumePercent.Add(offGasAnalysisEvent.CO); CIterator.DataSmoothCurrent.CarbonOxideVolumePercent.Add(offGasAnalysisEvent.CO2); } if (newEvent is OffGasEvent) { var offGasEvent = newEvent as OffGasEvent; CIterator.DataSmoothCurrent.OffgasVolumeRate.Add(offGasEvent.OffGasFlow); CIterator.DataCurrentHeat = CIterator.DataSmoothCurrent.GetHeatData(CIterator.DataCurrentHeat, CIterator.PeriodSec); CIterator.DataCurrentHeat.IronMass = m_lastHotIronMass; CIterator.DataCurrentHeat.ScrapMass = m_lastScrapMass; //CIterator.Iterate(CIterator.DataCurrentHeat); //l.msg("Iterate"); /*l.msg("[Heat number: {0}][Carbone calculation percent: {1}][Carbone calculation mass: {2}]", CIterator.CurrentHeatResult.NumberHeat, CIterator.RemainCarbonPercent, CIterator.RemainCarbonMass );*/ } if (newEvent is BlowingEvent) { //var blowingEvent = newEvent as BlowingEvent; //CIterator.Iterate(CIterator.DataCurrentHeat); //l.msg("Iterate"); //l.msg("[Heat number: {0}][Carbone calculation percent: {1}][Carbone calculation mass: {2}]", // CIterator.CurrentHeatResult.NumberHeat, // CIterator.RemainCarbonPercent, // CIterator.RemainCarbonMass // ); } } }
public void OnEvent(BaseEvent evt) { using (var l = new Logger("SublanceGenerator Listener")) { if (evt is LanceEvent) { var le = evt as LanceEvent; Iterator.Oxigen.Add(le.O2TotalVol); Iterator.Iterate(); } if (evt is OffGasAnalysisEvent) { var ogae = evt as OffGasAnalysisEvent; Iterator.CarbonMonoxide.Add(ogae.CO); Iterator.Iterate(); } if (evt is HeatChangeEvent) { var hce = evt as HeatChangeEvent; if (Iterator.HeatNumber != hce.HeatNumber) { l.msg("Heat Changed. New Heat ID: {0}", hce.HeatNumber); Iterator.Renit(); Iterator.HeatNumber = hce.HeatNumber; } else l.msg("Heat No Changed. Heat ID: {0}", hce.HeatNumber); } if (evt is CalculatedCarboneEvent) { var cce = evt as CalculatedCarboneEvent; //if (Iterator.Ck != cce.CarbonePercent) //{ // //Console.WriteLine("Ck = " + Iterator.Ck); // Iterator.Ck = cce.CarbonePercent; // Iterator.Iterate(); ///!!! //} } if (evt is ModeLanceEvent) { var mle = evt as ModeLanceEvent; l.msg("Lance mode changed {0}, O2 mode {1}", mle.LanceMode, mle.O2FlowMode); if (mle.LanceMode == mle.O2FlowMode) Iterator.LanceMod = mle.LanceMode; else Iterator.LanceMod = -1; } if (evt is SublanceStartEvent) { var sse = evt as SublanceStartEvent; if (sse.SublanceStartFlag == 1) l.msg("Sublance begin metering"); if (sse.SublanceStartFlag == 0) { var str = String.Format("Receive end metering signal\n"); if (Iterator.IsBeganMetering) { //Iterator.EndMetering(); //Iterator.BlowingEndRequest(); Iterator.EndMeteringAlow = true; if (Iterator.EndMeteringAccept) { Iterator.EndMetering(); str += String.Format("Sublance end metering"); } } l.msg(str); } } //if (evt is MeteringCounterEvent) //{ // var mce = evt as MeteringCounterEvent; // if (mce.Cnt != Iterator.MeteringCounter) // { // Iterator.MeteringCounter = mce.Cnt; // var str = String.Format("Metering counter changed"); // if (Iterator.IsBeganMetering) // { // Iterator.EndMetering(); // str += String.Format("Sublance end metering of Metering counter"); // } // l.msg(str); // } //} if (evt is FlexEvent) { var fxe = evt as FlexEvent; if (fxe.Operation.StartsWith("PipeCatcher.Call.PCK_DATA.PGET_WGHIRON1")) { if ((string) fxe.Arguments["SHEATNO"] == Convert.ToString(HeatNumberToLong(Iterator.HeatNumber))) { l.msg(fxe.ToString()); //l.msg("Iron Correction from Pipe: {0}\n", fxe.Arguments["NWGH_NETTO"]); Iterator.HotMetallMass = Convert.ToDouble(fxe.Arguments["NWGH_NETTO"]); } else { l.msg( "Iron Correction from Pipe: wrong heat number - expected {0} found {1}", HeatNumberToLong(Iterator.HeatNumber), fxe.Arguments["SHEATNO"] ); } } if (fxe.Operation.StartsWith("PipeCatcher.Call.PCK_DATA.PGET_XIMIRON")) { if ((string) fxe.Arguments["HEAT_NO"] == Convert.ToString(HeatNumberToLong(Iterator.HeatNumber))) { l.msg(fxe.ToString()); Iterator.HotMetallMass = Convert.ToDouble(fxe.Arguments["HM_WEIGHT"])*0.001; } else { l.msg( "Iron Correction from Pipe: wrong heat number - expected {0} found {1}", HeatNumberToLong(Iterator.HeatNumber), fxe.Arguments["HEAT_NO"] ); } } if (fxe.Operation.StartsWith("ConverterUI.TargetValues")) { var key = "C"; l.msg(fxe.ToString()); if (fxe.Arguments.ContainsKey(key)) { try { Iterator.TargetCk = (double) fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } } key = "Cu"; if (fxe.Arguments.ContainsKey(key)) { try { Iterator.TargetCku = (double) fxe.Arguments[key]; } catch (Exception e) { l.err("ConverterUI.TargetValues - {1} : \n{0}", e.ToString(), key); } } } if (fxe.Operation.StartsWith("ConverterUI.ZondAccept")) { //var key = "SId"; l.msg(fxe.ToString()); try { //if (Iterator.SIdK == (Guid)fxe.Arguments[key]) //{ Iterator.BeginMetering(); //} } catch (Exception e) { l.err("ConverterUI.ZondAccept - {0}", e.ToString()); } } if (fxe.Operation.StartsWith("CorrectionCT.EndMeteringAccept")) { l.msg(fxe.ToString()); Iterator.EndMeteringAccept = true; } if (fxe.Operation.StartsWith("OPC.SublanceHeigth")) { var key = "Heigth"; //l.msg(fxe.ToString()); try { var sublanceHeigthNow = (Int16) fxe.Arguments[key]; var derivative = sublanceHeigthNow - Iterator.SublanceHeigth; Iterator.SublanceHeigth = (Int16) fxe.Arguments[key]; var sublanceRaised = Iterator.SublanceRaised(derivative, sublanceHeigthNow, Iterator.SublanceTreshold); l.msg( "derivative = {0}; sublanceHeigthNow = {1}; SublanceTreshold = {2}; sublanceRaised = {3}; EndMeteringAccept = {4}", derivative, sublanceHeigthNow, Iterator.SublanceTreshold, sublanceRaised, Iterator.EndMeteringAccept); if (sublanceRaised) { Iterator.EndMeteringAlow = true; if (Iterator.EndMeteringAccept) { Iterator.EndMetering(); l.msg("Sublance end metering"); } } } catch (Exception e) { l.err("OPC.SublanceHeigth - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("CarbonSwitcher.Result")) { var key = "C"; //InstantLogger.msg(fxe.ToString()); try { //Carbon = (double)fxe.Arguments[key]; if (Iterator.Ck != (double) fxe.Arguments[key]) { //Console.WriteLine("Ck = " + Iterator.Ck); Iterator.Ck = (double) fxe.Arguments[key]; key = "PeriodlNumber"; Iterator.PeriodNumber = (int) fxe.Arguments[key]; Iterator.Iterate(); ///!!! } } catch (Exception e) { InstantLogger.err("CarbonSwitcher.Result - {1} : \n{0}", e.ToString(), key); } } //if (fxe.Operation.StartsWith("ConverterUI.BlowingEndResponce")) //{ // var key = "SId"; // l.msg(fxe.ToString()); // try // { // if (Iterator.SIdK == (Guid)fxe.Arguments[key]) // { // //Iterator.BeginMetering(); // key = "EndNow"; // if ((bool)fxe.Arguments[key]) // { // Iterator.DoStopBlow(); // Iterator.EndMetering(); // } // else // { // Iterator.EndMetering(); // } // } // } // catch (Exception e) // { // l.err("ConverterUI.BlowingEndResponce - {1} : \n{0}", e.ToString(), key); // } //} } } }
public void OnEvent(BaseEvent newEvent) { using (var l = new Logger("FlexEventSaver")) { if (newEvent is LanceEvent) { var lanceEvent = newEvent as LanceEvent; Program.SDS.LanceHeigth.Add(lanceEvent.LanceHeight); Program.SDS.OxygenRate.Add(lanceEvent.O2Flow); Program.OxygenRate.Add(lanceEvent.O2Flow); } //if (newEvent is OffGasAnalysisEvent) //{ // var offGasAnalysisEvent = newEvent as OffGasAnalysisEvent; // Program.SDS.H2Perc.Add(offGasAnalysisEvent.H2); // Program.SDS.O2Perc.Add(offGasAnalysisEvent.O2); // Program.SDS.COPerc.Add(offGasAnalysisEvent.CO); // Program.SDS.CO2Perc.Add(offGasAnalysisEvent.CO2); // Program.SDS.N2Perc.Add(offGasAnalysisEvent.N2); // Program.SDS.ArPerc.Add(offGasAnalysisEvent.Ar); //} if (newEvent is OffGasEvent) { var offGasEvent = newEvent as OffGasEvent; Program.SDS.VGas.Add(offGasEvent.OffGasFlow); Program.SDS.TGas.Add(offGasEvent.OffGasTemp); } if (newEvent is CalculatedCarboneEvent) { var cCarbon = newEvent as CalculatedCarboneEvent; //Program.SDS.CCalc.Add(cCarbon.CarbonePercent); } if (newEvent is SublanceCEvent) { var sublanceCEvent = newEvent as SublanceCEvent; Program.SDS.CSubLance = sublanceCEvent.C; } if (newEvent is IgnitionEvent) { var ign = newEvent as IgnitionEvent; Program.SDS.Ignition = ign.FusionIgnition; } if (newEvent is DecompressionOffGasEvent) { var doge = newEvent as DecompressionOffGasEvent; Program.SDS.Decompression.Add(doge.Decompression); } if (newEvent is O2Event) { var o2e = newEvent as O2Event; if (o2e.RightLanceIsSelected && !o2e.LeftLanceIsSelected) { Program.SDS.QOxygenCL.Add(o2e.QOxygenRight); Program.SDS.POxygenCL.Add(o2e.POxygenRight); Program.SDS.TOxygenCL.Add(o2e.TOxygenRight); Program.SDS.DPOxygenCL.Add(o2e.DPOxygenRight); } else { Program.SDS.QOxygenCL.Add(o2e.QOxygenLeft); Program.SDS.POxygenCL.Add(o2e.POxygenLeft); Program.SDS.TOxygenCL.Add(o2e.TOxygenLeft); Program.SDS.DPOxygenCL.Add(o2e.DPOxygenLeft); } } if (newEvent is N2Event) { var n2e = newEvent as N2Event; Program.SDS.QNitrogenLanceWindow.Add(n2e.QNitrogenLanceWindow); Program.SDS.QNitrogenBoiler.Add(n2e.QNitrogenBoiler); } if (newEvent is visAdditionTotalEvent) { var vate = newEvent as visAdditionTotalEvent; Program.SDS.RB5 = vate.RB5TotalWeight; Program.SDS.RB6 = vate.RB6TotalWeight; Program.SDS.RB7 = vate.RB7TotalWeight; Program.SDS.RB8 = vate.RB8TotalWeight; Program.SDS.RB9 = vate.RB9TotalWeight; Program.SDS.RB10 = vate.RB10TotalWeight; Program.SDS.RB11 = vate.RB11TotalWeight; Program.SDS.RB12 = vate.RB12TotalWeight; } if (newEvent is HeatChangeEvent) { var heatChangeEvent = newEvent as HeatChangeEvent; if (m_lasIdHeat != heatChangeEvent.HeatNumber) { Program.SaverData(Program.SDList, m_lasIdHeat); m_lasIdHeat = heatChangeEvent.HeatNumber; Program.Init(); } } if (newEvent is FlexEvent) { var fxe = newEvent as FlexEvent; if (fxe.Operation.StartsWith("NeuralProcessorC.Calc")) { var key = "C"; //l.msg(fxe.ToString()); if (fxe.Arguments.ContainsKey(key)) { try { Program.SDS.NeuralC.Add((double) fxe.Arguments[key]); } catch (Exception e) { l.err("NeuralProcessorC.Calc - {1} : \n{0}", e.ToString(), key); } } } if (fxe.Operation.StartsWith("CarbonSwitcher.Result")) { var key = "C"; //InstantLogger.msg(fxe.ToString()); try { //Carbon = (double)fxe.Arguments[key]; //Program.CurrentCalcCarbone = (double)fxe.Arguments[key]; Program.SDS.CCalc.Add((double) fxe.Arguments[key]); } catch (Exception e) { InstantLogger.err("CarbonSwitcher.Result - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("UDP.OffGasAnalysisEvent")) { var key = "H2"; try { Program.SDS.H2Perc.Add((double) fxe.Arguments[key]); key = "O2"; Program.SDS.O2Perc.Add((double) fxe.Arguments[key]); key = "CO"; Program.SDS.COPerc.Add((double) fxe.Arguments[key]); key = "CO2"; Program.SDS.CO2Perc.Add((double) fxe.Arguments[key]); key = "N2"; Program.SDS.N2Perc.Add((double) fxe.Arguments[key]); key = "Ar"; Program.SDS.ArPerc.Add((double) fxe.Arguments[key]); } catch (Exception e) { InstantLogger.err("UDP.OffGasAnalysisEvent - {1} : \n{0}", e.ToString(), key); } } if (fxe.Operation.StartsWith("UniversalCPlus.Result")) { var fex = new FlexHelper(fxe); Program.SDS.UniversalC = fex.GetDbl("C"); } } } }
private void SendingThread() { using (var l = new Logger("ConnectionProvider.SendingThread")) { BaseEvent evt = null; var prevState = m_MainGateClient.State; var currState = prevState; while (true) { bool doSleep = true; if (prevState != currState) { l.msg("Connection state is \"{0}\"", currState); prevState = currState; doSleep = false; } if (currState <= CommunicationState.Opened) { try { lock (eventsQueue) { evt = eventsQueue.Count > 0 ? eventsQueue.Dequeue() : null; } if (evt != null) { m_MainGateClient.PushEvent(evt); doSleep = false; } } catch (Exception e) { l.err("proc {2} event fail\n{0}\n while processing event\n{1}", e.Message, evt, e.TargetSite.Name); } } if (doSleep) Thread.Sleep(THREAD_SLEEP); currState = m_MainGateClient.State; } } }
public void OnEvent(BaseEvent newEvent) { // InstantLogger.log(newEvent.ToString(), "Received", InstantLogger.TypeMessage.error); using (var l = new Logger("Listener")) { if (newEvent is HeatChangeEvent) { var heatChangeEvent = newEvent as HeatChangeEvent; if (CIterator.FirstHeating) { CIterator.Reset(); l.msg("Start First Heating"); } else { //CIterator.ResetHeating(CIterator.CurrentHeatResult); // y CIterator.Reset(); l.msg("Reset Heating"); } CIterator.CurrentHeatResult.NumberHeat = heatChangeEvent.HeatNumber; l.msg("Number Heat: {0}", CIterator.CurrentHeatResult.NumberHeat); } //if (newEvent is SublanceCEvent) // на будущее из другого места брать углерод //{ // var sublanceCEvent = newEvent as SublanceCEvent; // CIterator.CurrentHeatResult.SteelCarbonPercent = sublanceCEvent.C; // l.msg("Steel carbone percent: {0}", CIterator.CurrentHeatResult.SteelCarbonPercent); //} if (newEvent is visSpectrluksEvent) // углерод со спектролюкса { var vse = newEvent as visSpectrluksEvent; CIterator.AddCarbonToQueue(HeatNumberRemooveAxcess(vse.HeatNumber), vse.C); } if (newEvent is ScrapEvent) { var scrapEvent = newEvent as ScrapEvent; if (scrapEvent.ConverterNumber == Program.ConverterNumber) { CIterator.DataCurrentHeat.ScrapMass = scrapEvent.TotalWeight; l.msg("Scrap mass: {0}", CIterator.DataCurrentHeat.ScrapMass); } } if (newEvent is MixerAnalysisEvent) { var mixerAnalysisEvent = newEvent as MixerAnalysisEvent; CIterator.DataCurrentHeat.IronCarbonPercent = mixerAnalysisEvent.C; l.msg("Iron carbon Percent: {0}", CIterator.DataCurrentHeat.IronCarbonPercent); if (CIterator.DataCurrentHeat.IronCarbonPercent <= 0) { CIterator.DataCurrentHeat.IronCarbonPercent = 5.1133; l.err("Iron carbon Percent is bad, default value: {0}", CIterator.DataCurrentHeat.IronCarbonPercent); } } if (newEvent is HotMetalLadleEvent) { var hotMetalLadleEvent = newEvent as HotMetalLadleEvent; if (hotMetalLadleEvent.ConverterNumber == Program.ConverterNumber) { CIterator.DataCurrentHeat.IronMass = hotMetalLadleEvent.HotMetalTotalWeight; l.msg("Iron mass: {0}", CIterator.DataCurrentHeat.IronMass); if (CIterator.DataCurrentHeat.IronMass <= 0) { CIterator.DataCurrentHeat.IronMass = 300000.1133; l.err("Iron mass is bad, default value: {0}", CIterator.DataCurrentHeat.IronMass); } } } if (newEvent is LanceEvent) { var lanceEvent = newEvent as LanceEvent; //CIterator.DataCurrentHeat.OxygenVolumeRate = lanceEvent.O2Flow; CIterator.DataSmoothCurrent.OxygenVolumeRate.Add(lanceEvent.O2Flow); l.msg("Oxygen volume rate: {0}", lanceEvent.O2Flow); //CIterator.DataCurrentHeat.OxygenVolumeCurrent = lanceEvent.O2TotalVol; CIterator.DataSmoothCurrent.OxygenVolumeCurrent.Add(lanceEvent.O2TotalVol); l.msg("Oxygen volume current: {0}", lanceEvent.O2TotalVol); //CIterator.DataCurrentHeat.HeightLanceCentimeters = lanceEvent.LanceHeight; CIterator.DataSmoothCurrent.HeightLanceCentimeters.Add((double) lanceEvent.LanceHeight); //CIterator.SetMaxDownLancePosition(lanceEvent.LanceHeight); // самое низкое положение за плавку для старта многофакторной модели //CIterator.SmoothSecondLancePosition.Add((double)lanceEvent.LanceHeight); CIterator.CalculateLanceSpeed(lanceEvent.LanceHeight); // фиксация данных по скорости и положению фурмы для старта многофакторной модели l.msg("Height lance: {0}", lanceEvent.LanceHeight); //CIterator.MomentFixDataForMFactorModel(); } if (newEvent is OffGasAnalysisEvent) { var offGasAnalysisEvent = newEvent as OffGasAnalysisEvent; //CIterator.DataCurrentHeat.CarbonMonoxideVolumePercentPrevious = // CIterator.DataCurrentHeat.CarbonMonoxideVolumePercent; CIterator.DataSmoothCurrent.CarbonMonoxideVolumePercentPrevious.Add( m_carbonMonoxideVolumePercentPrevious); m_carbonMonoxideVolumePercentPrevious = offGasAnalysisEvent.CO; //CIterator.DataCurrentHeat.CarbonOxideVolumePercentPrevious = // CIterator.DataCurrentHeat.CarbonOxideVolumePercent; CIterator.DataSmoothCurrent.CarbonOxideVolumePercentPrevious.Add(m_carbonOxideVolumePercentPrevious); m_carbonOxideVolumePercentPrevious = offGasAnalysisEvent.CO2; //CIterator.DataCurrentHeat.CarbonMonoxideVolumePercent = offGasAnalysisEvent.CO; CIterator.DataSmoothCurrent.CarbonMonoxideVolumePercent.Add(offGasAnalysisEvent.CO); //CIterator.DataCurrentHeat.CarbonOxideVolumePercent = offGasAnalysisEvent.CO2; CIterator.DataSmoothCurrent.CarbonOxideVolumePercent.Add(offGasAnalysisEvent.CO2); } if (newEvent is OffGasEvent) { var offGasEvent = newEvent as OffGasEvent; //CIterator.DataCurrentHeat.OffgasVolumeRate = offGasEvent.OffGasFlow; CIterator.DataSmoothCurrent.OffgasVolumeRate.Add(offGasEvent.OffGasFlow); CIterator.DataCurrentHeat = CIterator.DataSmoothCurrent.GetHeatData(CIterator.DataCurrentHeat, CIterator.PeriodSec); CIterator.Iterate(CIterator.DataCurrentHeat); l.msg("Iterate"); l.msg("[Heat number: {0}][Carbone calculation percent: {1}][Carbone calculation mass: {2}]", CIterator.CurrentHeatResult.NumberHeat, CIterator.RemainCarbonPercent, CIterator.RemainCarbonMass ); } if (newEvent is BlowingEvent) { //var blowingEvent = newEvent as BlowingEvent; //CIterator.Iterate(CIterator.DataCurrentHeat); //l.msg("Iterate"); //l.msg("[Heat number: {0}][Carbone calculation percent: {1}][Carbone calculation mass: {2}]", // CIterator.CurrentHeatResult.NumberHeat, // CIterator.RemainCarbonPercent, // CIterator.RemainCarbonMass // ); } } }
public void CoreEventGenerator(object sender, EventArgs oEvent) { using (Logger l = new Logger("OnDataChange", ref locker)) { int transactionID; int groupHandleClient; int masterQuality; int masterError; OPCItemState[] sts; if (oEvent is DataChangeEventArgs) { var dataE = oEvent as DataChangeEventArgs; transactionID = dataE.transactionID; groupHandleClient = dataE.groupHandleClient; masterQuality = dataE.masterQuality; masterError = dataE.masterError; sts = dataE.sts; } else if (oEvent is ReadCompleteEventArgs) { var dataE = oEvent as ReadCompleteEventArgs; transactionID = dataE.transactionID; groupHandleClient = dataE.groupHandleClient; masterQuality = dataE.masterQuality; masterError = dataE.masterError; sts = dataE.sts; } else { l.err("oEvent is neither DataChangeEventArgs nor ReadCompleteEventArgs"); return; } l.msg("gh={0} id={1} me={2} mq={3}", groupHandleClient, transactionID, masterError, masterQuality); List<int> relatedEventsIdList = new List<int>(); foreach (OPCItemState s in sts) { if (HRESULTS.Succeeded(s.Error)) { l.msg(" ih={0} ItemID={2} >> value={1}", s.HandleClient, s.DataValue, m_Item_defs.ElementAt(s.HandleClient).ItemID); var _p_ = EventsList[m_Item_props[s.HandleClient].eventId].GetProperties()[ m_Item_props[s.HandleClient].eventPropId]; bool presenceFlag = false; foreach (int evid in relatedEventsIdList) { if (evid == m_Item_props[s.HandleClient].eventId) presenceFlag = true; } if (!presenceFlag) relatedEventsIdList.Add(m_Item_props[s.HandleClient].eventId); //l.msg(_p_.PropertyType.ToString() + " --- " + s.DataValue.GetType().ToString()); if (_p_.PropertyType == (typeof (System.Boolean))) { l.msg("boolean type"); var _nb_ = ((PLCPoint) _p_.GetCustomAttributes(false)[m_Item_props[s.HandleClient].eventPlcpId]). BitNumber; _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], BoolExpressions.GetBit(Convert.ToByte(s.DataValue), _nb_), null); var itemID = m_Item_defs.ElementAt(s.HandleClient).ItemID; if (FlagStore.ContainsKey(itemID)) FlagStore[itemID] = Convert.ToByte(s.DataValue); else FlagStore.Add(itemID, Convert.ToByte(s.DataValue)); } else if (_p_.PropertyType == (typeof (System.Int32))) { l.msg("int32 type {0}", s.DataValue.GetType().ToString()); if (s.DataValue.GetType() == (typeof (System.Int16))) _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], Convert.ToInt32(s.DataValue), null); else { Int64 itmp = Convert.ToInt64(s.DataValue); UInt64 tmp = (UInt64) itmp; if (itmp != -1) { if (tmp > 0xffffffff) tmp = 32000; if (tmp >= 0x7ffffff) tmp = 31999; _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], Convert.ToInt32(tmp), null); } else _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], -1, null); } } else if (_p_.PropertyType == (typeof (System.Double))) { l.msg("double type"); _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], Convert.ToDouble(s.DataValue), null); } else if (_p_.PropertyType == (typeof (System.Char[]))) { l.msg("char[]"); _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], conv(s.DataValue), null); } else if (_p_.PropertyType == (typeof (System.String))) { l.msg("string"); try { _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], convBack((byte[]) s.DataValue), null); } catch (Exception) { _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], "err", null); //throw; } } else { l.msg("any type"); try { _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], s.DataValue, null); } catch (Exception) { l.msg("receive data type not support", "OPCConnector function TheGrpDataChange", InstantLogger.TypeMessage.death); _p_.SetValue(EventStore[m_Item_props[s.HandleClient].eventId], 0, null); throw; } } } else l.msg(String.Format(" ih={0} ERROR=0x{1:x} !", s.HandleClient, s.Error)); } foreach (var idReceiveEvent in relatedEventsIdList) { bool isWriteble = false; foreach (var prop in EventStore[idReceiveEvent].GetType().GetProperties()) { foreach (object x in prop.GetCustomAttributes(false)) { if (x.GetType().Name == "PLCPoint") { // InstantLogger.log(prop.GetCustomAttributesData()[1].ToString()); if (((PLCPoint) x).IsWritable) isWriteble = true; } } } if (isWriteble) { l.msg("Event: " + EventStore[idReceiveEvent].GetType().Name + "isWriteble", "OPCConnectore function TheGrpDataChange", InstantLogger.TypeMessage.unimportant); } else { l.msg(EventStore[idReceiveEvent].ToString(), "OPCConnectore function TheGrpDataChange", InstantLogger.TypeMessage.unimportant); Program.m_pushGate.PushEvent(EventStore[idReceiveEvent]); } } } }
public static void Save() { Directory.CreateDirectory(Dir); using (Logger l = new Logger("Save")) { var strings = new List<string>(); strings.Add(String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", Separator, "Operation", "Count", "CountDayAverage", "LastCaptureTime", "ArgumentKey", "ArgumentType", "ExampleValue", "Comment" )); foreach (var capturedEvent in CapturedEvents) { strings.Add(String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", Separator, capturedEvent.Operation, capturedEvent.CountTotal, capturedEvent.CountDayAverage, capturedEvent.CaptureTime, "", "", "", capturedEvent.Comment )); foreach (var att in capturedEvent.AttList) { strings.Add(String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", Separator, "", "", "", "", att.Key, att.Type, att.ExampleValue, att.Comment )); } } try { File.WriteAllLines(Patch, strings); //l.msg("Data saved"); } catch (Exception e) { l.err("Cannot write the file: {0}, call exeption: {1}", Patch, e.ToString()); return; //throw; } } }
public void OnEvent(BaseEvent newEvent) { using (var log = new Logger("DBWriterTT")) { try { var evtFlex = newEvent as FlexEvent; if (evtFlex != null) { try { if (DbLayerTrends.Instance.Insert(evtFlex, _unitNumber)) { log.msg(string.Format("{0}: inserted trends for {1} from {2}", newEvent.Time, newEvent.GetType().Name, _unitNumber)); } } catch (OracleException exception) { log.msg(string.Format("{0}: Can't inserted trends for {1} from {2}", newEvent.Time, newEvent.GetType().Name, _unitNumber)); log.err(exception.ToString()); } } else { var evt = (ConverterBaseEvent) newEvent; evt.iCnvNr = _unitNumber; if ((evt is LanceEvent) || (evt is OffGasAnalysisEvent) || (evt is OffGasEvent) || (evt is BoilerWaterCoolingEvent) || (evt is SlagOutburstEvent) || (evt is IgnitionEvent) || (evt is ModeLanceEvent) || (evt is ModeVerticalPathEvent) || (evt is CalculatedCarboneEvent) || (evt is ConverterAngleEvent)) { try { if (DbLayerTrends.Instance.Insert(evt)) { log.msg(string.Format("{0}: inserted trends for {1} from {2}", evt.Time, evt.GetType().Name, evt.iCnvNr)); } } catch (OracleException exception) { log.msg(string.Format("{0}: Can't inserted trends for {1} from {2}", evt.Time, evt.GetType().Name, evt.iCnvNr)); log.err(exception.ToString()); } } if ((evt is AdditionsEvent) || (evt is BlowingEvent) || (evt is ReBlowingEvent) || (evt is DeslaggingEvent) || (evt is HeatChangeEvent) || (evt is HeatingScrapEvent) || (evt is HotMetalLadleEvent) || (evt is HotMetalPouringEvent) || (evt is IgnitionEvent) || (evt is ResetO2TotalVolEvent) || (evt is ScrapChargingEvent) || (evt is ScrapEvent) || (evt is SlagBlowingEvent) || (evt is SublanceStartEvent) || (evt is SublanceCEvent) || (evt is SublanceOxidationEvent) || (evt is SublanceTemperatureEvent) || (evt is TappingEvent)) { try { if (DbLayerTelegrams.Instance.Insert(evt)) { log.msg(string.Format("{0}: inserted telergams for {1} from {2}", evt.Time, evt.GetType().Name, evt.iCnvNr)); } } catch (OracleException exception) { log.msg(string.Format("{0}: Can't inserted telergams trends for {1} from {2}", evt.Time, evt.GetType().Name, evt.iCnvNr)); log.err(exception.ToString()); } } } } catch(Exception ex) { log.err(ex.ToString()); } } }
public void OnEvent(BaseEvent newEvent) { using (Logger l = new Logger("OnEvent")) { if (cTime.Day != DateTime.Now.Day) { cTime = DateTime.Now; InstantLogger.log("", "To be continued...", InstantLogger.TypeMessage.important); InstantLogger.LogFileInit(); InstantLogger.log("", "...Continuing", InstantLogger.TypeMessage.important); } l.msg(newEvent.GetType().FullName); if (newEvent is OPCDirectReadEvent) { OpcConnector.ProcessEvent(newEvent as OPCDirectReadEvent); return; } var plcg = new PLCGroup(); bool found = false; foreach (object x in newEvent.GetType().GetCustomAttributes(false)) { if (x.GetType().Name == "PLCGroup") { plcg = (PLCGroup) x; if (plcg.Destination == opcDestination_) { l.msg(" " + plcg.Location + " -- " + plcg.Destination); found = true; break; } } } if (!found) return; List<int> arrSrvH = new List<int>(); List<object> arrItmV = new List<object>(); var plcp = new PLCPoint(); foreach (var prop in newEvent.GetType().GetProperties()) { foreach (object x in prop.GetCustomAttributes(false)) { if (x.GetType().Name == "PLCPoint") { // InstantLogger.log(prop.GetCustomAttributesData()[1].ToString()); if (((PLCPoint) x).IsWritable) { plcp = (PLCPoint) x; var s = string.Format(opcAddressFmt_, plcg.Location, OPCFledged.OpcConnector.cnv(plcp.Location)); var sb = new StringBuilder(); sb.AppendFormat(" " + prop.Name + " = " + prop.GetValue(newEvent, null).ToString()); sb.AppendFormat("\n IsWritable = " + plcp.IsWritable.ToString()); sb.AppendFormat("\n " + plcp.Location + " % " + s); sb.AppendFormat("\n " + newEvent.GetType()); l.msg(sb.ToString()); int index = 0; bool eureka = false; while (index < OpcConnector.m_Item_defs.Count) { OPCItemDef v = OpcConnector.m_Item_defs[index]; //InstantLogger.msg("comparing <{0}> == <{1}>", v.ItemID, s); if (v.ItemID == s) { if (!v.Active) l.err("Item <{0}> is excluded from monitoring", v.ItemID); else { arrSrvH.Add(OpcConnector.m_Handles_srv[index]); l.msg("+++++ {0}", prop.PropertyType.ToString()); if (prop.PropertyType == (typeof (System.String))) { string w = prop.GetValue(newEvent, null).ToString(); List<byte> wb = new List<byte>(); for (int i = 0; i < w.Length; i++) { UInt16 b = (UInt16) w.ElementAt(i); if (b > 900) b -= 848; wb.Add((byte) b); } arrItmV.Add(wb.ToArray()); } else if (prop.PropertyType == (typeof (System.Boolean))) { if (!OpcConnector.FlagStore.ContainsKey(v.ItemID)) { l.err("First reference to <{0}> found on writing!!!", v.ItemID); OpcConnector.FlagStore.Add(v.ItemID, 0); } arrItmV.Add(BoolExpressions.SetBit(OpcConnector.FlagStore[v.ItemID], plcp.BitNumber, Convert.ToBoolean( prop.GetValue(newEvent, null)))); } else arrItmV.Add(prop.GetValue(newEvent, null)); } eureka = true; break; } index++; } if (!eureka) l.err("Item <{0}> is unknown to OPC Fledged", s); } } } } int count = arrItmV.Count; if (count > 0) { int[] aE; if (OpcConnector.m_The_grp.Write(arrSrvH.ToArray(), arrItmV.ToArray(), out aE)) l.msg("Done processing event -- true"); else { for (int i = 0; i < aE.Length; i++) { if (HRESULTS.Failed(aE[i])) { l.err("Item srvH={0} failed with HRESULT=0x{1:x} -- value {2}", arrSrvH[i], aE[i], arrItmV[i] ); } else l.msg("Item srvH={0} succseeded -- value {1}", arrSrvH[i], arrItmV[i]); } } } l.msg("Done processing event"); } }
public static void SaveMatrix(string path, List<MFCPData> matrixStateDataFull) { using (Logger l = new Logger("SaveMatrix")) { string[] strings = new string[matrixStateDataFull.Count]; for (int dataCnt = 0; dataCnt < matrixStateDataFull.Count; dataCnt++) { strings[dataCnt] = String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", Separator, matrixStateDataFull[dataCnt].HeatNumber, matrixStateDataFull[dataCnt].TimeFromX, matrixStateDataFull[dataCnt].CarbonOxideIVP, matrixStateDataFull[dataCnt].CarbonMonoxideVP, matrixStateDataFull[dataCnt].CarbonOxideVP, matrixStateDataFull[dataCnt].SteelCarbonPercent, matrixStateDataFull[dataCnt].SteelCarbonPercentCalculated, matrixStateDataFull[dataCnt].HightQualityHeat ); } try { File.WriteAllLines(path, strings); } catch (Exception e) { l.err("Cannot write the file: {0}, call exeption: {1}", path, e.ToString()); return; //throw; } } }
public static void Iterate(HeatData heatData) { using (var l = new Logger("Iterate")) { var calculatedCarboneEvent = new CalculatedCarboneEvent(); if (!TotalCarbonMassCalculated) { if ( (heatData.IronMass > 0) && (heatData.IronCarbonPercent > 0) && (heatData.ScrapMass > 0) && (heatData.ScrapCarbonPercent > 0) && (heatData.SteelCarbonPercent > 0) ) { TotalCarbonMass = Decarbonater.HeatCarbonMass( heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent, heatData.SteelCarbonPercent ); RemainCarbonMass = TotalCarbonMass; RemainCarbonPercent = GetCarbonPercent(RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent); if (TotalCarbonMass > 0 && heatData.OxygenVolumeRate > 0) { TotalCarbonMassCalculated = true; l.msg("##### [TotalCarbonMassCalculated: {0}][RemainCarbonPercent]", TotalCarbonMass, RemainCarbonPercent); } else l.msg("HeatCarbonMass returned bad result: {0}", TotalCarbonMass); } else { l.err( "bad data for HeatCarbonMass [IronMass: {0}][IronCarbonPercent: {1}][ScrapMass: {2}][ScrapCarbonPercent: {3}][SteelCarbonPercent: {4}]", heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent, heatData.SteelCarbonPercent ); } } else if (!GasCarbonMassFinished) { heatData.DeltaT = m_sw.ElapsedMilliseconds*0.001; m_sw.Restart(); if ( (heatData.CarbonMonoxideVolumePercent > 0) && (heatData.OffgasVolumeRate > 0) && (heatData.DeltaT > 0) && (heatData.Kgasan > 0) ) { double GCMResult = Decarbonater.GasanCarbonMass( heatData.CarbonMonoxideVolumePercent, heatData.OffgasVolumeRate, heatData.DeltaT, heatData.Kgasan ); if (GCMResult >= 0) { if (heatData.OxygenVolumeRate > 0) RemainCarbonMass -= GCMResult; ////////////////////////////// } else l.err("GasanCarbonMass return bad result: {0}", GCMResult); if ( (RemainCarbonMass > 0) && (heatData.IronMass > 0) && (heatData.IronCarbonPercent > 0) && (heatData.ScrapMass > 0) && (heatData.ScrapCarbonPercent > 0) ) { RemainCarbonPercent = GetCarbonPercent( RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent ); } else { l.err( "bad data for GetCarbonPercent [RemainCarbonMass: {0}][IronMass: {1}][IronCarbonPercent: {2}][ScrapMass: {3}][ScrapCarbonPercent: {4}]", RemainCarbonMass, heatData.IronMass, heatData.IronCarbonPercent, heatData.ScrapMass, heatData.ScrapCarbonPercent ); } GasCarbonMassFinished = VerifyGasCarbonFinished( heatData.OxygenVolumeTotal, heatData.OxygenVolumeCurrent, TotalCarbonMass, RemainCarbonMass, heatData.CarbonMonoxideVolumePercent, heatData.CarbonMonoxideVolumePercentPrevious, heatData.CarbonOxideVolumePercent, heatData.CarbonOxideVolumePercentPrevious ); } else { l.err( "bad data for GasanCarbonMass [CarbonMonoxideVolumePercent: {0}][OffgasVolumeRate: {1}][DeltaT: {2}][Kgasan: {3}]", heatData.CarbonMonoxideVolumePercent, heatData.OffgasVolumeRate, heatData.DeltaT, heatData.Kgasan ); } } else { var currentStateData = new MFCMData { CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent, CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent, HeightLanceCentimeters = heatData.HeightLanceCentimeters, OxygenVolumeRate = heatData.OxygenVolumeRate }; //MFMChooser //var CMCarbon = Decarbonater.MultiFactorCarbonMass(heatData.MatrixStateData, currentStateData); m_currentMatrix = MFMChooser(heatData); var matrixStateData = Program.MFCMDataGenerate(Program.MatrixStateDataFull[m_currentMatrix].MatrixList); var CMCarbon = Decarbonater.MultiFactorCarbonMass(matrixStateData, currentStateData); //if (CMCarbon < RemainCarbonPercent) RemainCarbonPercent = CMCarbon; RemainCarbonPercent = CMCarbon; if (MomentFixDataForMFactorModel(heatData.CarbonMonoxideVolumePercent, heatData.CarbonOxideVolumePercent)) // фиксируем для обучения { if (m_noFixData) { CurrentHeatResult.OxygenVolumeRate = heatData.OxygenVolumeRate; CurrentHeatResult.SteelCarbonCalculationPercent = RemainCarbonPercent; CurrentHeatResult.CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent; CurrentHeatResult.CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent; CurrentHeatResult.HeightLanceCentimeters = heatData.HeightLanceCentimeters; CurrentHeatResult.MFMEquationId = m_currentMatrix; // фиксируем матрицу по которой учим EnqueueWaitC(CurrentHeatResult); // ставим в очередь ожидания углерода Program.PushGate.PushEvent(new FixDataMfactorModelEvent()); // временная мера для перехода на старый углерод var fex = new ConnectionProvider.FlexHelper("CPlusProcessor.DataFix"); fex.Fire(Program.PushGate); Console.WriteLine(fex.evt + "\n"); ////////////////////////////////////////////////////////////////////// m_noFixData = false; } } } DataArchSec.SD.Add(new SecondData()); // заполняем для статистики во время плавки DataArchSec.SD[DataArchSec.SD.Count - 1].CarboneCalc = RemainCarbonPercent; DataArchSec.SD[DataArchSec.SD.Count - 1].Time = DateTime.Now.ToString(); DataArchSec.SD[DataArchSec.SD.Count - 1].CarboneMonoxide = heatData.CarbonMonoxideVolumePercent; DataArchSec.SD[DataArchSec.SD.Count - 1].CarboneOxide = heatData.CarbonOxideVolumePercent; DataArchSec.SD[DataArchSec.SD.Count - 1].HeightLance = heatData.HeightLanceCentimeters; DataArchSec.SD[DataArchSec.SD.Count - 1].OxygenVolumeCurrent = heatData.OxygenVolumeCurrent; // if (!GasCarbonMassFinished) { DataArchSec.SD[DataArchSec.SD.Count - 1].Model = "Gas Analise Mono factor Model"; l.msg("Gas Analise Mono factor Model"); } else { DataArchSec.SD[DataArchSec.SD.Count - 1].Model = "Multi Factor Model"; l.msg("Multi Factor Model № {0}", m_currentMatrix); } calculatedCarboneEvent.CarbonePercent = RemainCarbonPercent; calculatedCarboneEvent.CarboneMass = RemainCarbonMass; calculatedCarboneEvent.model = DataArchSec.SD[DataArchSec.SD.Count - 1].Model; Program.PushGate.PushEvent(calculatedCarboneEvent); //Program.PushGate.PushEvent(new CalculatedCarboneEvent()); // временная мера для перехода на старый углерод var fex2 = new ConnectionProvider.FlexHelper("CPlusProcessor.Result"); fex2.AddArg("C", RemainCarbonPercent); fex2.Fire(Program.PushGate); ////////////////////////////////////////////////////////////////////// } }
public static void SaveMatrix(string path, char separator, List<MFCMDataFull> matrixStateDataFull) { using (Logger l = new Logger("SaveMatrix")) { string[] strings = new string[matrixStateDataFull.Count]; for (int dataCnt = 0; dataCnt < matrixStateDataFull.Count; dataCnt++) { strings[dataCnt] = String.Format("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}{0}{9}", separator, matrixStateDataFull[dataCnt].IdHeat, matrixStateDataFull[dataCnt].NumberHeat, matrixStateDataFull[dataCnt].CarbonMonoxideVolumePercent, matrixStateDataFull[dataCnt].CarbonOxideVolumePercent, matrixStateDataFull[dataCnt].HeightLanceCentimeters, matrixStateDataFull[dataCnt].OxygenVolumeRate, matrixStateDataFull[dataCnt].SteelCarbonPercent, matrixStateDataFull[dataCnt].SteelCarbonCalculationPercent, matrixStateDataFull[dataCnt].MFMEquationId ); } try { File.WriteAllLines(path, strings); } catch (Exception e) { l.err("Cannot write the file: {0}, call exeption: {1}", path, e.ToString()); return; //throw; } } }
public void OnEvent(BaseEvent evt) { using (var l = new Logger("Listener")) { #region сбор данных для автоматического режима не FlexEvent if (evt is HeatChangeEvent) { var hce = evt as HeatChangeEvent; if (CHeatNumber != hce.HeatNumber) { CHeatNumber = hce.HeatNumber; Program.Reset(); l.msg("Heat Changed. New Heat ID: {0}\n", CHeatNumber); Program.Saver.HeatNumber = CHeatNumber; } else l.msg("Heat No Changed. Heat ID: {0}\n", hce.HeatNumber); } if (evt is ScrapEvent) { var scrapEvent = evt as ScrapEvent; if (scrapEvent.ConverterNumber == Program.ConverterNumber) { Program.AutoInData.MSc = scrapEvent.TotalWeight; l.msg("Scrap mass: {0}", Program.AutoInData.MSc); Program.IsRefrashData = true; } } #endregion if (evt is FlexEvent) { #region интерфейс для визухи var fxe = evt as FlexEvent; if (fxe.Operation.StartsWith("UI.GetNamePatterns")) { l.msg(fxe.ToString()); Program.TablePaths = Program.ScanStore(Program.StorePath); var names = Program.GetNamesFromAddress(Program.TablePaths); var fex = new FlexHelper("Charge5.PatternNames"); for (int i = 0; i < names.Count; i++) fex.AddArg(i.ToString(), names[i]); fex.Fire(Program.MainGate); } if (fxe.Operation.StartsWith("UI.LoadPattern")) { l.msg(fxe.ToString()); try { Program.Tables = Program.LoadTables((string) fxe.Arguments["Name"], ref Program.InitTbl); } catch (Exception e) { l.err("UI.LoadPattern: \n{0}", e.ToString()); } var fex = new FlexHelper("Charge5.RespLoadPattern"); if (Program.Tables == null) { l.err("pattern not loaded"); fex.AddArg("Loaded", false); } else fex.AddArg("Loaded", true); fex.Fire(Program.MainGate); } if (fxe.Operation.StartsWith("UI.Calc")) { var inData = new InData(); var outData = new OutData(); l.msg(fxe.ToString()); try { inData.SteelType = (int) fxe.Arguments["SteelType"]; // inData.MHi = (int) fxe.Arguments["MHi"]; inData.MSc = (int) fxe.Arguments["MSc"]; inData.SiHi = (double) fxe.Arguments["SiHi"]; inData.THi = (int) fxe.Arguments["THi"]; inData.IsProcessingUVS = (bool) fxe.Arguments["IsProcessingUVS"]; // var table = Program.Tables[inData.SteelType]; Program.Alg(table, inData, out outData); Program.SendResultCalc(outData); } catch (Exception e) { l.err("UI.Calc: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("UI.GetPattern")) { l.msg(fxe.ToString()); try { var name = (string) fxe.Arguments["Name"]; Program.LoadTables(name, ref Program.InitTbl); CSVTP_FlexEventConverter.AppName = "Charge5"; var flex = CSVTP_FlexEventConverter.PackToFlex(name, Program.InitTbl, Program.Tables); var fex = new FlexHelper(flex.Operation); fex.evt.Arguments = flex.Arguments; fex.Fire(Program.MainGate); } catch (Exception e) { l.err("UI.GetPattern: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("UI.Tables")) { var fex = new FlexHelper("Charge5.SavePatternResp"); l.msg(fxe.ToString()); try { var patternName = ""; Charge5Classes.CSVTP_FlexEventConverter.UnpackFromFlex( fxe, ref Program.InitTbl, ref Program.Tables, ref patternName ); Program.SaveTables(patternName, Program.InitTbl, Program.Tables); fex.AddArg("Saved", true); } catch (Exception e) { l.err("UI.GetPattern: \n{0}", e.ToString()); fex.AddArg("Saved", false); } fex.Fire(Program.MainGate); } if (fxe.Operation.StartsWith("UI.RemoovePattern")) { var fex = new FlexHelper("Charge5.RemoovePatternResp"); l.msg(fxe.ToString()); try { Program.RemooveTables((string) fxe.Arguments["Name"]); fex.AddArg("Remooved", true); } catch (Exception e) { l.err("UI.RemoovePattern: \n{0}", e.ToString()); fex.AddArg("Remooved", false); } fex.Fire(Program.MainGate); } #endregion #region интерфейс для визухи в автоматическом режиме if (fxe.Operation.StartsWith("UI.ModeCalc")) { l.msg(fxe.ToString()); try { Program.CalcModeIsAutomatic = (bool) fxe.Arguments["IsAutomatic"]; Program.IsRefrashData = true; } catch (Exception e) { l.err("UI.CalcMode: \n{0}", e.ToString()); } } if (fxe.Operation.StartsWith("UI.DataCalc")) { l.msg(fxe.ToString()); try { var steelType = (int) fxe.Arguments["SteelType"]; if ((steelType >= 0) && (steelType <= 6)) // имеем только 7 типов стали { Program.AutoInData.SteelType = steelType; Program.IsRefrashData = true; } else throw new Exception("Не верное значение типа стали, >7 или <0"); Program.AutoInData.IsProcessingUVS = (bool) fxe.Arguments["IsProcessingUVS"]; } catch (Exception e) { l.err("UI.CalcData: \n{0}", e.ToString()); } } #endregion #region сбор данных для автоматического режима FlexEvent if (fxe.Operation.StartsWith("PipeCatcher.Call.PCK_DATA.PGET_WGHIRON1")) { if ((string) fxe.Arguments["SHEATNO"] == Convert.ToString(HeatNumberToLong(CHeatNumber))) { l.msg("Iron Correction from Pipe: {0}\n", fxe.Arguments["NWGH_NETTO"]); Program.AutoInData.MHi = (int) Math.Round(Convert.ToDouble(fxe.Arguments["NWGH_NETTO"])*1000); Program.IsRefrashData = true; } else { l.msg( "Iron Correction from Pipe: wrong heat number - expected {0} found {1}", CHeatNumber, fxe.Arguments["SHEATNO"] ); } } if (fxe.Operation.StartsWith("PipeCatcher.Call.PCK_DATA.PGET_XIMIRON")) { if ((string) fxe.Arguments["HEAT_NO"] == Convert.ToString(HeatNumberToLong(CHeatNumber))) { l.msg("Xim Iron from Pipe: T = {0}, Si = {1}\n", fxe.Arguments["HM_TEMP"], fxe.Arguments["ANA_SI"]); Program.AutoInData.SiHi = Convert.ToDouble(fxe.Arguments["ANA_SI"]); Program.AutoInData.THi = Convert.ToInt32(fxe.Arguments["HM_TEMP"]); Program.IsRefrashData = true; } else { l.msg( "Xim Iron from Pipe: wrong heat number - expected {0} found {1}", CHeatNumber, fxe.Arguments["HEAT_NO"] ); } } #endregion } } }