Показано с 1 по 2 из 2

Тема: Скрипт MasterScada

  1. #1

    По умолчанию Скрипт MasterScada

    Добрый день. Очень нужна ваша помощь. У меня не выполняется скрипт, хотя компиляция пройдена успешно. Не могу понять в чем проблема. Заранее большое спасибо.
    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using System.Linq;
    
    
    public partial class ФБ : ScriptBase
    {
        public override void Execute()
        {
            //температура на тарелках
    
            double[] Temp = new double[57];
              double t1 = 350;double t23 = 320;double t35 = 240;
               double t47 = 140;double t56 = 100;
               double p1 = 95;double p56 = 10;double pTR1 = 100;double pTR2 = 100;double pTLT = 1;double p360 = 100;
                double ro1 = 0.71;double ro2 = 0.76;double ro3 = 0.82;double ro4 = 0.9;double ro5 = 0.99;double roF = 1.1; 
                double TF = 200;double TR1 = 200;double TR2 = 200;double TLI23 = 320;double TLI35 = 220;double TLI47 = 120;
             
                double F = (double)RawTB;
                double eTB = 0.02;
                double Part1TB = 18;
                double Part2TB = 14;
                double Part3TB = 14;
                double Part4TB = 7;
                double Part5TB = 45;
                double ZakTB = 20;
                double Zok1TB = 30;
                double Zok2TB = 40;
                double LTTB = 130;
                double LC1TB = 200;
                double LC2TB = 400;
                double LC3TB = 150;
                double TLTTB = 3;
                double TLC1TB = 2;
                double TLC2TB = 4;
                double TLC3TB = 3;
                double p1TB = 95;
                double p56TB = 10;
                double pTR1TB = 100;
                double pTR2TB = 100;
                double pTLTTB = 1;
                double t1TB = 350;
                double p360TB = 100;
                double t23TB = 320;
                double t35TB = 240;
                double t47TB = 140;
                double t56TB = 100;
                double e1 = eTB;
                //if (e1 <= 0 || F <= 0 || e1 > 1 )
                //{ throw new Exception("Параметры должны быть положительными, а доля отгона не может быть больше 1"); }
                double part1 = Part1TB / 100;
                double part2 = Part2TB / 100;
                double part3 = Part3TB / 100;
                double part4 = Part4TB / 100;
                double part5 = Part5TB / 100;
                //if (part1 <= 0 || part2 <= 0 || part3 <= 0 || part4 <= 0 || part5 <= 0 || part1 + part2 + part3 + part4+part5 > 1)
                //{ throw new Exception("Доли фракций должны быть положительными, а их сумма не должна превышать 100%"); }
                double ro12 = (part1 + part2) / ((part1 / ro1) + (part2 / ro2));           //средняя плотность бензин+дизель
                double ro123 = (part1 + part2 + part3) / ((part1 / ro1) + (part2 / ro2) + (part3 / ro3));  //бензин+нафта+дизель
                double ro1234 = (part1 + part2 + part3 + part4) / ((part1 / ro1) + (part2 / ro2) + (part3 / ro3) + (part4 / ro4));  //бензин+нафта+дизель+газойль
                double Zak = ZakTB;
                double Zok1 = Zok1TB;
                double Zok2 = Zok2TB;
               // if (Zak <= 0 || Zok1 <= 0 || Zok2 <= 0)
               // { throw new Exception("Количество пара должно быть положительным"); }
                double LT = LTTB;
                double LC1 = LC1TB;
                double LC2 = LC2TB;
                double LC3 = LC3TB;
                //if (LT <= 0 || LC1 <= 0 || LC2 <= 0 || LC3 <= 0)
                 //{ throw new Exception("Количество орошения должно быть положительным"); }
                double TLT = TLTTB;
                double TLC1 = TLC1TB;
                double TLC2 = TLC2TB;
                double TLC3 = TLC3TB;
    
                p1 = p1TB;
                p56 = p56TB;
                pTR1 = pTR1TB;
                pTR2 = pTR2TB;
                pTLT = pTLTTB;
                p360 = p360TB;
               // if (p1 <= 0 || p56 <= 0 || pTR1 <= 0 || pTR2 <= 0 || pTLT <= 0 || p360 <= 0)
               // { throw new Exception("Давление должно быть положительным"); }
    
                t1 = t1TB;
                t23 = t23TB;
                t35 = t35TB;
                t47 = t47TB;
                t56 = t56TB;
                
               
                double hz360 = Enth.Enthalpy_OHSteam(360, p360);                //расчет энтальпии ПВП
                double p22 = Enth.Pressure(p1, p56, 22);
                double hzT22 = Enth.Enthalpy_OHSteam(Temp[22], p22);
                double p34 = Enth.Pressure(p1, p56, 34);
                double hzT34 = Enth.Enthalpy_OHSteam(Temp[34], p34);
                double p46 = Enth.Pressure(p1, p56, 46);
                double hzT46 = Enth.Enthalpy_OHSteam(Temp[46], p46);
                
                double hzT56 = Enth.Enthalpy_OHSteam(Temp[56], p56);
                double hzTLT = Enth.Enthalpy_OHSteam(TLT, pTLT);
                double hzTR1 = Enth.Enthalpy_OHSteam(TR1, pTR1);
                double hzTR2 = Enth.Enthalpy_OHSteam(TR2, pTR2);  
    
                double LSfull = e1 * F * (Enth.Enthalpy_Vapors(TF, roF)) + (1 - e1) * F * (Enth.Enthalpy_Liquids(TF, roF)) + (Zak + Zok2 + Zok1) * hz360 - (Zak + Zok2 + Zok1) * hzT56;
                //                      hvTf     пары нефти на входе              hlTf   нефть на входе
                double LS1 = part1 * LSfull / (Enth.Enthalpy_Liquids(Temp[56], ro1));
                //                      hlT56 бензин на выходе
                LS1TB = LS1;
                double LS2 = part2 * LSfull / (Enth.Enthalpy_Liquids(Temp[47], ro2));
                //                      hlT47 нафта на выходе
                LS2TB = LS2;
                double LS3 = part3 * LSfull / (Enth.Enthalpy_Liquids(Temp[35], ro3));
                //                      hlT35 дизель на выходе
                LS3TB = LS3;
                double LS4 = part4 * LSfull / (Enth.Enthalpy_Liquids(Temp[23], ro4));
                //                      hlT23 газойль на выходе
                LS4TB = LS4;
                double LS5 = part5 * LSfull / (Enth.Enthalpy_Liquids(Temp[1], ro5));
                //                      hlT1 мазут на выходе
                LS5TB = LS5;
    
    
    
                    double Z22 = Zak / 38,                        //пар по тарелкам
                    Z34 = Z22,
                    Z46 = (Zak + Zok2) / 12,
                    Z56 = (Zok1 + Zak + Zok2) / 6;
                    double Qlt = LT * ((Enth.Enthalpy_Vapors(Temp[56], ro1)) - (Enth.Enthalpy_Liquids(TLT, ro1)));     //тепло верхнего орошения
                    //             hvT23                                 hlTLT
                    double Qlc3 = LC3 * (Enth.Enthalpy_Liquids(Temp[47], ro12)-Enth.Enthalpy_Liquids(TLC3,ro12));          //тепло промежуточных орошений
                    //              hlT47                                           hlTLC3
                    double Qlc2 = LC2 * (Enth.Enthalpy_Liquids(Temp[35], ro123) - Enth.Enthalpy_Liquids(TLC2, ro123));
                    //              hlT35                                           hlTLC2
                    double Qlc1 = LC1 * (Enth.Enthalpy_Liquids(Temp[23], ro1234) - Enth.Enthalpy_Liquids(TLC1, ro1234));
                    //              hlT23                                           hlTLC1
                    double LI47 = (LS1 * (Enth.Enthalpy_Vapors(Temp[56], ro1) - Enth.Enthalpy_Vapors(Temp[46], ro1)) + LS2 * (Enth.Enthalpy_Liquids(Temp[47], ro2) - Enth.Enthalpy_Vapors(Temp[46], ro2)) + Z56 * hzT56 - Z46 * hzT46 - Zok2 * hz360 + Qlt+Qlc3) / (Enth.Enthalpy_Vapors(Temp[46], ro12) - Enth.Enthalpy_Liquids(Temp[47], ro12));
                     //                 hvT56                                   hvT46                                   hlT47                                       hvT46                                                                                            hvT46                                   hlT47
                    LI47TB = LI47;
                    double LI35 = (LS1 * (Enth.Enthalpy_Vapors(Temp[56], ro1) - Enth.Enthalpy_Vapors(Temp[34], ro1)) + LS2 * (Enth.Enthalpy_Liquids(Temp[47], ro2) - Enth.Enthalpy_Vapors(Temp[34], ro2)) + LS3 * (Enth.Enthalpy_Liquids(Temp[35], ro3) - Enth.Enthalpy_Vapors(Temp[34], ro3)) + Z56 * hzT56 - Z34 * hzT34 - Zok2 * hz360 - Zok1 * hz360 + Qlt + Qlc2 + Qlc3) / (Enth.Enthalpy_Vapors(Temp[34], ro123) - Enth.Enthalpy_Liquids(Temp[35], ro123));
                    //                 hvT56                                   hvT34                                   hlT47                                       hvT34                                            hlT35                                   hvT34                                                                                                                       hvT34                                   hlT47
                    LI35TB = LI35;
                    double LI23 = (LS1 * (Enth.Enthalpy_Vapors(Temp[56], ro1) - Enth.Enthalpy_Vapors(Temp[22], ro1)) + LS2 * (Enth.Enthalpy_Liquids(Temp[47], ro2) - Enth.Enthalpy_Vapors(Temp[22], ro2)) + LS3 * (Enth.Enthalpy_Liquids(Temp[35], ro3) - Enth.Enthalpy_Vapors(Temp[22], ro3)) + LS4 * (Enth.Enthalpy_Liquids(Temp[23], ro4) - Enth.Enthalpy_Vapors(Temp[22], ro4)) + Z56 * hzT56 - Z22 * hzT22 + Qlt + Qlc1 + Qlc2 + Qlc3) / (Enth.Enthalpy_Vapors(Temp[22], ro1234) - Enth.Enthalpy_Liquids(Temp[23], ro1234));
                    LI23TB = LI23;
                    //                 hvT56                                   hvT22                                   hlT47                                       hvT22                                            hlT35                                   hvT22                                           hlT23                                   hvT22                                                                                                        hvT22                                   hlT23
    
                    //количество углеводородных паров из отпарных колонн
                    double LR2 = (LS2 * ((Enth.Enthalpy_Liquids(Temp[47], ro2)) - (Enth.Enthalpy_Liquids(TLI47, ro12))) - Zok2 * (hz360 - hzTR1)) / ((Enth.Enthalpy_Liquids(TLI47, ro12)) - (Enth.Enthalpy_Vapors(TR1, ro1)));
                    //              hlT47                                     hlTLI47 Т флегмы                           T на выходе отп           hlTLI13                       hvTR1      
                    double LR1 = (LS2 * ((Enth.Enthalpy_Liquids(Temp[35], ro3)) - (Enth.Enthalpy_Liquids(TLI35, ro123))) - Zok1 * (hz360 - hzTR2)) / ((Enth.Enthalpy_Liquids(TLI35, ro123)) - (Enth.Enthalpy_Vapors(TR2, ro12)));
                    //              hlT35                                     hlTLI35 Т флегмы                           T на выходе отп           hlTLI13                       hvTR2     
                    LR1TB = LR1;
                    LR2TB = LR2;
                
        }
    }
    public class Enth
        {
            public static double Enthalpy_Vapors(double t, double p420)
            {
               
                double h = 0;
                double p1515 = p420 + (0.035 / p420);                             //Перевод относительной плотности нефтепродукта из Советской системы 4-20 в европейскую 15-15
                h = ((50.2 + 0.109 * t + 0.00014 * t * t) * (4 - p1515) - 73.8) * 4.184;   // Расчет энтальпии по формуле Войнова с переводом из ккал в кдж
    
                return h;
            }
    
            public static double Enthalpy_Liquids(double t, double p420)
            {
               
                double h = 0;
                double p1515 = p420 + (0.035 / p420);                             //Перевод относительной плотности нефтепродукта из Советской системы 4-20 в европейскую 15-15
                h = (1 / (Math.Sqrt(p1515)) * (0.403 * t + 0.000405 * t * t)) * 4.184;   // Расчет энтальпии по формуле c переводом из ккал в кдж
    
                return h;
            }
    
            public static double Pressure(double p1, double p56, double i)   //профиль давления
            {
                double pi;
    
                pi = p1 - i * (p1 - p56) / 56;
               
                return pi;
            }
    
            public static double Enthalpy_OHSteam(double t, double p)
            {
             
                double h = 0, TK=0;
                TK = (1/(0.00397-0.0004455*(Math.Log10(p))))-273;  //расчет температуры конденсации пара
                h = (606.5+0.305*TK+0.5*(t-TK)) * 4.184;   // Расчет энтальпии по формуле c переводом из ккал в кдж
    
                return h;
            }
        }
    Изображения Изображения

  2. #2

    По умолчанию

    Скорее всего он где то падает.
    В правом нижнем углу скады, при ошибке появляется красная кнопка - нажмите на нее, и появится окно лога.
    Лучше всего - просто подцепиться студией и отладить в ней:
    https://insat.ru/blog/fb-skript-c-i-...adka-skriptov/
    Спасибо.

Похожие темы

  1. Скрипт
    от BSA в разделе Master SCADA 3
    Ответов: 26
    Последнее сообщение: 04.04.2019, 13:23
  2. Ответов: 3
    Последнее сообщение: 07.08.2017, 13:27
  3. Аналогия фб C# скрипт в MasterSCADA 4D
    от Igor V в разделе Master SCADA 3
    Ответов: 9
    Последнее сообщение: 28.04.2017, 11:05
  4. Python скрипт
    от @ND в разделе СПК1хх
    Ответов: 0
    Последнее сообщение: 13.08.2015, 07:04
  5. С-скрипт документация
    от Falvik в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 18.03.2014, 11:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •