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; }
public Currents GetMainParamsHeat(Protocol prt) { _cur.mStLPrev = _cur.mStL; GetConsumption(prt); GetMasses(prt); _cur.EScrS = _calc.EScrS(prt, _cur); _cur.ECPh = _calc.ECPh(prt, _cur); var TavAUX = _cur.Tav; while (TavAUX - _cur.Tav > 0 && TavAUX - _cur.Tav < 2) { TavAUX = _calc.Tav(prt, _cur); GetMasses(prt); _cur.EScrS = _calc.EScrS(prt, _cur); _cur.ECPh = _calc.ECPh(prt, _cur); _cur.mStLPrev = _cur.mStL; _cur.mStL = _calc.mStL(_cur); _cur.CC = _calc.CC(prt, _cur); _cur.CMn = _calc.CMn(prt, _cur); _cur.CSi = _calc.CSi(prt, _cur); _cur.CO = _calc.CO(prt, _cur); _cur.CFeO = _calc.CFeO(prt, _cur); _cur.CMnO = _calc.CMnO(prt, _cur); _cur.CSiO2 = _calc.CSiO2(prt, _cur); _cur.CCaO = _calc.CCaO(prt, _cur); _cur.Tav = _calc.Tav(prt, _cur); } return _cur; }
/// <summary> /// Масса углерода в металле, кг /// mC(i)=mC(i-1)+(nRedPC(i)-nOxRC(i)-nOxLC(i))*muC*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mC(Protocol prt, Currents cur) { return cur.mC + (nRedPC(prt, cur) - nOxRC(prt, cur) - nOxLC(prt, cur)) * Constants.muC * prt.dt; }
//расчитываем текущие расходы private void GetConsumption(Protocol prt) { _cur.CnsEE = prt.We > 0 ? _calc.CnsEE(prt, _cur) : _cur.CnsEE; _cur.CnsCH4 = prt.UCH4B + prt.UCH4RB > 0 ? _calc.CnsCH4(prt, _cur) : _cur.CnsCH4; _cur.CnsO2B = prt.UO2B + prt.UO2RB > 0 ? _calc.CnsO2B(prt, _cur) : _cur.CnsO2B; _cur.CnsO2L = prt.UO2L + prt.UO2RL > 0 ? _calc.CnsO2L(prt, _cur) : _cur.CnsO2L; _cur.CnsCP = prt.mCP > 0 ? _calc.CnsCP(prt, _cur) : _cur.CnsCP; _cur.CnsCk = prt.mCkAdd > 0 ? _calc.CnsCk(prt, _cur) : _cur.CnsCk; _cur.CnsDlmt = prt.mDlmtAdd > 0 ? _calc.CnsDlmt(prt, _cur) : _cur.CnsDlmt; _cur.CnsLm = prt.mLmAdd > 0 ? _calc.CnsLm(prt, _cur) : _cur.CnsLm; _cur.CnsHI = prt.mHI > 0 ? _calc.CnsHI(prt, _cur) : _cur.CnsHI; _cur.CnsScr = prt.mCh1 + prt.mCh2S > 0 ? _calc.CnsScr(prt, _cur) : _cur.CnsScr; }
/// <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> /// Концентрация 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> /// Средняя температура системы металл-шлак, К /// при средней температуре металла менее температуры ликвидус /// при 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> /// Масса разовой порции шлакообразующих материалов в загрузочном бункере, кг /// mSlAdd=mLmAdd+mDlmtAdd /// </summary> /// <param name="prt">Протокол плавки</param> /// <returns></returns> public double mSlAdd(Protocol prt) { return prt.mLmAdd + prt.mDlmtAdd; }
/// <summary> /// Интенсивность образования отходящих газов при работе горелки, кг/с /// mOffGB(i)=mOffCO2B(i)+mOffH2OB(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <returns></returns> public double mOffGB(Protocol prt) { return mOffCO2B(prt) + mOffH2OB(prt); }
/// <summary> /// Масса кислорода в металле, кг /// mO(i)=mO(i-1)+(mSolOR(i)+mSolOL(i))*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mO(Protocol prt, Currents cur) { return cur.mO + (mSolOR(prt, cur) + mSolOL(prt, cur)) * prt.dt; }
/// <summary> /// Масса MnO в шлаке,кг /// mMnO(i)=mMnO(i-1)+(nOxRMn(i)+nOxLMn(i)-nRedPMnO(i))*muMnO*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mMnO(Protocol prt, Currents cur) { return cur.mMnO + (nOxRMn(prt, cur) + nOxLMn(prt, cur) - nRedPMnO(prt, cur)) * Constants.muMnO * prt.dt; }
/// <summary> /// Интенсивность вдувания газов через горелку RCB в режиме горелки кг/с /// mGRB(i)=mO2RB(i)+mCH4RB(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <returns></returns> public double mGRB(Protocol prt) { return mO2RB(prt) + mCH4RB(prt); }
/// <summary> /// Интенсивность вдувания газов через горелку, кг/с /// mGB(i)=mO2B(i)+mCH4B(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <returns></returns> public double mGB(Protocol prt) { return mO2B(prt) + mCH4B(prt); }
/// <summary> /// Масса FeO в шлаке,кг /// mFeO(i)=mFeO(i-1)+(nOxRFe(i)+nOxLFe(i)-nRedPFeO(i))*muFeO*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mFeO(Protocol prt, Currents cur) { return cur.mFeO + (nOxRFe(prt, cur) + nOxLFe(prt, cur) - nRedPFeO(prt, cur)) * Constants.muFeO * prt.dt; }
/// <summary> /// Масса CaO в шлаке,кг /// mCaO(i)=mCaO(i-1) /// присадка извести: mCaO(i)=mCaO(i-1)+mLmAdd+mDlmtAdd /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mCaO(Protocol prt, Currents cur) { return cur.mCaO + prt.mLmAdd + prt.mDlmtAdd; }
/// <summary> /// Масса шлака в печи, кг /// mSl(i)=mSl(0)+mFeO(i)+mMnO(i)+mSiO2(i)+mCaO(i) /// Масса шлака в печи перед началом плавки,кг /// mSl(0)=mSlH /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mSl(Protocol prt, Currents cur) { return prt.mSlH + cur.mFeO + cur.mMnO + cur.mSiO2 + cur.mCaO; }
/// <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; }
/// <summary> /// Концентрация FeO в шлаке, % масс /// CFeO(i)=mFeO(i)/mSl(i)*100 /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CFeO(Protocol prt, Currents cur) { return cur.mFeO / cur.mSl * 100; }
/// <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> /// Интенсивность образования отходящих газов при работе горелки, кг/с /// mOffGRB(i)=mOffCO2RB(i)+mOffH2ORB(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <returns></returns> public double mOffGRB(Protocol prt) { return mOffCO2RB(prt) + mOffH2ORB(prt); }
/// <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> /// Интенсивность образования отходящих газов при работе горелки RCB в режиме фурмы, кг/с /// mOffGRL(i)=mOffCORL(i) /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mOffGRL(Protocol prt, Currents cur) { return mOffCORL(prt, cur); }
/// <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> /// Интенсивность окисления элементов металла при работе сводовой фурмы, кг/с /// mOxL(i)=nOxLFe(i)*muFe+nOxLC(i)*muC+nOxLMn(i)*muMn+nOxLSi(i)*muSi /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mOxL(Protocol prt, Currents cur) { return nOxLFe(prt, cur) * Constants.muFe + nOxLC(prt, cur) * Constants.muC + nOxLMn(prt, cur) * Constants.muMn + nOxLSi(prt, cur) * Constants.muSi; }
private void GetMasses(Protocol prt) { _cur.mC = _calc.mC(prt, _cur) < 0 ? _cur.mC : _calc.mC(prt, _cur); _cur.mFe = _calc.mFe(prt, _cur) < 0 ? _cur.mFe : _calc.mFe(prt, _cur); _cur.mMn = _calc.mMn(prt, _cur) < 0 ? _cur.mMn : _calc.mMn(prt, _cur); _cur.mSi = _calc.mSi(prt, _cur) < 0 ? _cur.mSi : _calc.mSi(prt, _cur); _cur.mO = _calc.mO(prt, _cur) < 0 ? _cur.mO : _calc.mO(prt, _cur); _cur.mCaO = _calc.mCaO(prt, _cur) < 0 ? _cur.mCaO : _calc.mCaO(prt, _cur); _cur.mFeO = _calc.mFeO(prt, _cur) < 0 ? _cur.mFeO : _calc.mFeO(prt, _cur); _cur.mMnO = _calc.mMnO(prt, _cur) < 0 ? _cur.mMnO : _calc.mMnO(prt, _cur); _cur.mSiO2 = _calc.mSiO2(prt, _cur) < 0 ? _cur.mSiO2 : _calc.mSiO2(prt, _cur); _cur.mSt = _calc.mSt(prt, _cur); _cur.mSl = _calc.mSl(prt, _cur); }
/// <summary> /// Интенсивность окисления элементов металла при работе горелки RCB в режиме фурмы, кг/с /// mOxR(i)=nOxRFe(i)*muFe+nOxRC(i)*muC+nOxRMn(i)*muMn+nOxRSi(i)*muSi /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mOxR(Protocol prt, Currents cur) { return nOxRFe(prt, cur) * Constants.muFe + nOxRC(prt, cur) * Constants.muC + nOxRMn(prt, cur) * Constants.muMn + nOxRSi(prt, cur) * Constants.muSi; }
/// <summary> /// Интенсивность восстановления элементов из шлака при работе угольного инжектора, кг/с /// mRedP(i)=nRedPFeO(i)*muFeO+nRedPMnO(i)*muMnO+nRedPSiO2(i)*muSiO2+nRedPC(i)*muC /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mRedP(Protocol prt, Currents cur) { return nRedPFeO(prt, cur) * Constants.muFeO + nRedPMnO(prt, cur) * Constants.muMnO + nRedPSiO2(prt, cur) * Constants.muSiO2 + nRedPC(prt, cur) * Constants.muC; }
/// <summary> /// Масса SiO2 в шлаке,кг /// mSiO2(i)=mSiO2(i-1)+(nOxRSi(i)+nOxLSi(i)-nRedPSiO2(i))*muSiO2*dt /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double mSiO2(Protocol prt, Currents cur) { return cur.mSiO2 + (nOxRSi(prt, cur) + nOxLSi(prt, cur) - nRedPSiO2(prt, cur)) * Constants.muSiO2 * prt.dt; }
private Protocol GetProtocol() { var prt = new Protocol(); prt.dt = CheckValuesToInt(_dtProtocol.Rows[5][2].ToString()) - CheckValuesToInt(_dtProtocol.Rows[4][2].ToString()); prt.i = CheckValuesToInt(_dtProtocol.Rows[_rowNum][1].ToString()); prt.t = CheckValuesToInt(_dtProtocol.Rows[_rowNum][2].ToString()); prt.We = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][3].ToString()); prt.UCH4B = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][4].ToString()); prt.UO2B = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][5].ToString()); prt.UCH4RB = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][6].ToString()); prt.UO2RB = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][7].ToString()); prt.UO2RL = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][8].ToString()); prt.UO2L = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][9].ToString()); prt.mCP = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][10].ToString()); prt.mCh1 = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][11].ToString()); prt.mCh2S = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][12].ToString()); prt.mHI = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][13].ToString()); prt.mHISl = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][14].ToString()); prt.mCh1SN = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][15].ToString()); prt.THI = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][16].ToString()); prt.mCkAdd = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][17].ToString()); prt.mLmAdd = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][18].ToString()); prt.mDlmtAdd = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][19].ToString()); prt.mStTap = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][20].ToString()); prt.mSlTap = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][21].ToString()); prt.mSlTip = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][22].ToString()); prt.Tenv = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][23].ToString()); prt.TWout = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][24].ToString()); prt.TWin = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][25].ToString()); prt.UCWW = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][26].ToString()); prt.TFout = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][27].ToString()); prt.TFin = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][28].ToString()); prt.UCWF = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][29].ToString()); prt.TRout = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][30].ToString()); prt.TRin = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][31].ToString()); prt.UCWR = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][32].ToString()); prt.TSout = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][33].ToString()); prt.TSin = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][34].ToString()); prt.UCWS = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][35].ToString()); prt.TS = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][36].ToString()); prt.mAir = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][37].ToString()); prt.HIB = CheckValuesToInt(_dtProtocol.Rows[_rowNum][38].ToString()); prt.HIE = CheckValuesToInt(_dtProtocol.Rows[_rowNum][38].ToString()); if (_listHib.Count > 0 && _listHie.Count > 0) { if (prt.i >= _listHib[0] && prt.i <= _listHie[0]) { prt.HIB = _listHib[0]; prt.HIE = _listHie[0]; if (prt.i == _listHie[0]) { _listHib.Remove(0); _listHie.Remove(0); } } } prt.Ch1 = CheckValuesToInt(_dtProtocol.Rows[_rowNum][40].ToString()); prt.Ch2S = CheckValuesToInt(_dtProtocol.Rows[_rowNum][41].ToString()); prt.Ch1SN = CheckValuesToInt(_dtProtocol.Rows[_rowNum][42].ToString()); prt.StTapB = CheckValuesToInt(_dtProtocol.Rows[_rowNum][43].ToString()); prt.StTapE = CheckValuesToInt(_dtProtocol.Rows[_rowNum][44].ToString()); if (_listStTapB.Count > 0 && _listStTapE.Count > 0) { if (prt.i >= _listStTapB[0] && prt.i <= _listStTapE[0]) { prt.StTapB = _listStTapB[0]; prt.StTapE = _listStTapE[0]; if (prt.i == _listStTapE[0]) { _listStTapB.Remove(0); _listStTapE.Remove(0); } } } prt.SlAddB = CheckValuesToInt(_dtProtocol.Rows[_rowNum][45].ToString()); prt.SlAddE = CheckValuesToInt(_dtProtocol.Rows[_rowNum][46].ToString()); if (_listSlAddB.Count > 0 && _listSlAddE.Count > 0) { if (prt.i >= _listSlAddB[0] && prt.i <= _listSlAddE[0]) { prt.SlAddB = _listSlAddB[0]; prt.SlAddE = _listSlAddE[0]; if (prt.i == _listSlAddE[0]) { _listSlAddB.Remove(0); _listSlAddE.Remove(0); } } } prt.mStH = CheckValuesToDouble(_dtProtocol.Rows[4][47].ToString()); prt.mSlH = CheckValuesToDouble(_dtProtocol.Rows[4][48].ToString()); prt.TH = CheckValuesToDouble(_dtProtocol.Rows[4][49].ToString()); prt.WCh1SP = CheckValuesToDouble(_dtProtocol.Rows[4][50].ToString()); prt.OCSD = CheckValuesToDouble(_dtProtocol.Rows[_rowNum][51].ToString()); return prt; }
/// <summary> /// Концентрация CaO в шлаке, % масс /// CCaO(i)=mCaO(i)/mSl(i)*100 /// </summary> /// <param name="prt">Протокол плавки</param> /// <param name="cur">Текущие значения параметров</param> /// <returns></returns> public double CCaO(Protocol prt, Currents cur) { return cur.mCaO / cur.mSl * 100; }