public Model(Protocol prt, double pCCH, double pCFeH, double pCMnH, double pCSiH, double pCOH, double pCFeOH, double pCMnOH, double pCSiO2H, double pCCaOH) { _calc = new Calculation(); _cur = new Currents(); _cur.CC = pCCH; _cur.CMn = pCMnH; _cur.CSi = pCSiH; _cur.CO = pCOH; _cur.CFeO = pCFeOH; _cur.CMnO = pCMnOH; _cur.CSiO2 = pCSiO2H; _cur.CCaO = pCCaOH; _cur.mC = _cur.CC * prt.mStH / 100; _cur.mFe = pCFeH * prt.mStH / 100; _cur.mMn = _cur.CMn * prt.mStH / 100; _cur.mSi = _cur.CSi * prt.mStH / 100; _cur.mO = _cur.CO * prt.mStH / 100; _cur.mFeO = _cur.CFeO * prt.mSlH / 100; _cur.mMnO = _cur.CMnO * prt.mSlH / 100; _cur.mSiO2 = _cur.CSiO2 * prt.mSlH / 100; _cur.mCaO = _cur.CCaO * prt.mSlH / 100; _cur.mSt = prt.mStH; _cur.mSl = prt.mSlH; _cur.Tav = prt.TH; _cur.EScrS = prt.WCh1SP; _cur.ECPh = _calc.ECPh_0(prt); _cur.mStL = 0; _cur.mStLPrev = 0; }
/// <summary> /// Масса металла в печи,кг /// mSt(i)=mSt(0)+mC(i)+mMn(i)+mSi(i)+mO(i)+mFe(i) /// Масса металла в печи перед началом плавки,кг /// mSt(0)=mStH /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mSt(Protocol prt, Currents cur) { return prt.mStH + cur.mC + cur.mMn + cur.mSi + cur.mO + cur.mFe; }
/// <summary> /// Изменение энергии Гиббса реакции растворения кислорода в металле, Дж/моль /// GOxO(i)=-R*Tav(i)*ln(KeOxO(i)/KfOxO(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double GOxO(Currents cur) { return -Constants.R * cur.Tav * Math.Log(KeOxO(cur) / KfOxO(cur)); }
/// <summary> /// Коэффициент активности марганца в металле /// fMn(i)=10^() /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double fMn(Currents cur) { return Math.Pow(10, Constants.eMnC*cur.CC + Constants.eMnMn*cur.CMn + Constants.eMnSi*cur.CSi + Constants.eMnO*cur.CO); }
/// <summary> /// Коэффициент активности кремния в металле /// fSi(i)=10^(eSiC(i)*CC(i)+eSiMn*CMn(i)+eSiSi(i)*Csi(i)+eSiO*CO(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double fSi(Currents cur) { return Math.Pow(10, eSiC(cur)*cur.CC + Constants.eSiMn*cur.CMn + eSiSi(cur)*cur.CSi + Constants.eSiO*cur.CO); }
/// <summary> /// Параметр взаимодействия O по O /// eOO(i)=-1750/Tav(i)+0,734 /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double eOO(Currents cur) { return -1750 / cur.Tav + 0.734; }
/// <summary> /// Параметр взаимодействия Si по Si /// eSiSi(i)=-34,5/Tav(i)+0,089 /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double eSiSi(Currents cur) { return -34.5 / cur.Tav + 0.089; }
/// <summary> /// Активность марганца в металле /// aMn(i)=fMn(i)*CMn(i) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aMn(Currents cur) { return fMn(cur) * cur.CMn; }
/// <summary> /// Концентрация MnO в шлаке, % масс /// CMnO(i)=mMnO(i)/mSl(i)*100 /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CMnO(Protocol prt, Currents cur) { return cur.mMnO / cur.mSl * 100; }
/// <summary> /// Активность углерода в металле /// aC(i)=fC(i)*CC(i) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aC(Currents cur) { return fC(cur) * cur.CC; }
/// <summary> /// Активность FeO в шлаке /// aFeO(i)=xFe(i)*xO /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aFeO(Currents cur) { return xFe(cur) * Constants.xO; }
/// <summary> /// Физическое тепло завалки, МДж /// WCh1=mCh1*cStS*TScr(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> ///<returns></returns> public double WCh1(Protocol prt, Currents cur) { return prt.mCh1 * Constants.cStS * TScr(prt, cur); }
/// <summary> /// Средняя температура системы металл-шлак, К /// при средней температуре металла менее температуры ликвидус /// при ECPh(i)-cSl*Tav(i-1)*mSl(i) меньше или = (EStL*mSt(i)-lmbdSt*mSt(i)) /// Tav(i)=(ECPh(i)+cStS*mSt(i)*Tenv(i))/(cStS*mSt(i)+cSl*mSl(i)) /// при средней температуре металла равной температуре ликвидус /// при ECPh(i)-cSl*Tav(i)*mSl(i) меньше или = EStL*mSt(i) /// Tav(i)=TStL /// при средней температуре металла более температуры ликвидус /// в остальных случаях: /// Tav(i)=(ECPh(i)-mSt(i)*(cStS*TStL-cStS*Tenv(i)-cStL*TStL+lmbdSt))/(cStL*mSt(i)+cSl*mSl(i)) /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double Tav(Protocol prt, Currents cur) { var ttemp1 = cur.ECPh - Constants.cSl * cur.Tav * cur.mSt; var ttemp2 = (Constants.EStL * cur.mSt - Constants.lmbdSt * cur.mSt); var ttemp3 = Constants.EStL * cur.mSt; if (ttemp1 <= ttemp2) { return (cur.ECPh + Constants.cStS * cur.mSt * prt.Tenv) / (Constants.cStS * cur.mSt + Constants.cSl * cur.mSl); } if (ttemp1 <= ttemp3) { return Constants.TStL; } return (cur.ECPh - cur.mSt * (Constants.cStS*Constants.TStL - Constants.cStS*prt.Tenv - Constants.cStL*Constants.TStL + Constants.lmbdSt)) / (Constants.cStL * cur.mSt + Constants.cSl * cur.mSl); }
/// <summary> /// Масса жидкой ванны в печи, кг /// при Tav(i)>TStL: mStL(i)=mSt(i) /// при Tav(i)>TStL: mStL(i)=(ECPh(i)-cSl*mSl(i)*Tav(i))/EStL /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mStL(Currents cur) { return cur.Tav > Constants.TStL ? cur.mSt : (cur.ECPh - Constants.cSl * cur.mSl * cur.Tav) / Constants.EStL; }
/// <summary> /// Параметр взаимодействия C по С /// eCC(i)=158/Tav(i)+0,0581 /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double eCC(Currents cur) { return 158 / cur.Tav + 0.0581; }
/// <summary> /// Активность MnO в шлаке /// aMnO(i)=xMn(i)*xO /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aMnO(Currents cur) { return xMn(cur) * Constants.xO; }
/// <summary> /// Параметр взаимодействия C по Si /// eCSi(i)=162/Tav(i)+0,008 /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double eCSi(Currents cur) { return 162 / cur.Tav + 0.008; }
/// <summary> /// Активность кислорода в металле /// aO(i)=fO(i)*CO(i) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aO(Currents cur) { return fO(cur) * cur.CO; }
/// <summary> /// Параметр взаимодействия Si по С /// eSiC(i)=380/Tav(i)-0,023 /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double eSiC(Currents cur) { return 380 / cur.Tav - 0.023; }
/// <summary> /// Активность кремния в металле /// aSi(i)=fSi(i)*CSi(i) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aSi(Currents cur) { return fSi(cur) * cur.CSi; }
/// <summary> /// Коэффициент активности углерода в металле /// fC(i)=10^(eCC(i)*CC(i)+eCMn*CMn(i)+eCSi(i)*Csi(i)+eCO*CO(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double fC(Currents cur) { return Math.Pow(10, eCC(cur)*cur.CC + Constants.eCMn*cur.CMn + eCSi(cur)*cur.CSi + Constants.eCO*cur.CO); }
/// <summary> /// Активность SiO2 в шлаке /// aSiO2(i)=xSi(i)*xO /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double aSiO2(Currents cur) { return xSi(cur) * Constants.xO; }
/// <summary> /// Коэффициент активности кислорода в металле /// fO(i)=10^(eOC*CC(i)+eOMn*CMn(i)+eOSi*CSi(i)+eOO(i)*CO(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double fO( Currents cur) { return Math.Pow(10, Constants.eOC*cur.CC + Constants.eOMn*cur.CMn + Constants.eOSi*cur.CSi + eOO(cur)*cur.CO); }
/// <summary> /// Коэффициент распределения кислорода на окисление кремния /// DOxSi(i)=GOxSiO2(i)/(GOxFeO(i)+GOxCO(i)+GOxMnO(i)+GOxSiO2(i)+GOxO(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double DOxSi(Currents cur) { return GOxSiO2(cur) / (GOxFeO(cur) + GOxCO(cur) + GOxMnO(cur) + GOxSiO2(cur) + GOxO(cur)); }
/// <summary> /// Расход кокса, кг /// CnsCk(i)=CnsCk(i-1)+mCk(i)*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CnsCk(Protocol prt, Currents cur) { return cur.CnsCk + mCk(prt) * prt.dt; }
/// <summary> /// Суммарный расход природного газа, м3 /// CnsCH4(i)=CnsCH4(i-1)+(UCH4B(i)+UCH4RB(i))*dt/3600 /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CnsCH4(Protocol prt, Currents cur) { return cur.CnsCH4 + (prt.UCH4B + prt.UCH4RB) * prt.dt / 3600; }
/// <summary> /// Изменение энергии Гиббса реакции восстановления SiO2 из шлака при вдувании порошка углерода, Дж/моль /// GRedSiO2(i)=-R*Tav(i)*ln(KeRedSiO2(i)/KfRedSiO2(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double GRedSiO2(Currents cur) { return -Constants.R * cur.Tav * Math.Log(KeRedSiO2(cur) / KfRedSiO2(cur)); }
/// <summary> /// Коэффициент расходования порошка углерода на восстановление SiO2 из шлака /// DRedSiO2(i)=GRedSiO2(i)/(GRedFeO(i)+GRedMnO(i)+GRedSiO2(i)+GRedC(i)) /// </summary> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> private static double DRedSiO2(Currents cur) { return GRedSiO2(cur) / (GRedFeO(cur) + GRedMnO(cur) + GRedSiO2(cur) + GRedC(cur)); }
private void FilldvgMailParams(Currents res) { var row = _dtProtocol.Rows[_rowNum]; dgvMainParams.Rows.Add(new[] { row[1].ToString(), row[2].ToString(), res.CnsEE.ToString(), res.CnsO2L.ToString(), res.CnsO2B.ToString(), res.CnsCH4.ToString(), res.CnsScr.ToString(), res.CnsHI.ToString(), res.CnsCP.ToString(), res.CnsLm.ToString(), res.CnsDlmt.ToString(), res.CnsCk.ToString(), res.mSt.ToString(), res.CC.ToString(), res.CSi.ToString(), res.CMn.ToString(), res.CO.ToString(), res.mSl.ToString(), res.CCaO.ToString(), res.CSiO2.ToString(), res.CMnO.ToString(), res.CFeO.ToString(), res.Tav.ToString() }); }
/// <summary> /// Концентрация марганца в металле, % масс /// CMn(i)=mMn(i)/mSt(i)*100 /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CMn(Protocol prt, Currents cur) { return cur.mMn / cur.mSt * 100; }