예제 #1
0
        //遍历计算公式并且保存
        private void CalStep()
        {
            //创建表的方法应该每次计算时都调用,而不应该只在程序启动和关闭的时候才调用!add by hlt 2014-12-8
            try { TagInit.initDataBase(); }
            catch { }

            //遍历存放公式的Hashtable
            foreach (DictionaryEntry de in FormulaHs)
            {
                GetValueByFormule(de.Key.ToString().Trim().ToUpper());
            }
            #region 计算完成后,将数据存入数据库中,其中包括原始点和计算点,注意存入时,将时间保持一致
            for (int i = 1; i < CalDataTable.Columns.Count; i++)
            {
                //if (string.IsNullOrEmpty(CalDataTable.Rows[0][i].ToString())) //如果该列是空
                //{
                if (ValueHs.ContainsKey(CalDataTable.Columns[i].ColumnName.ToUpper()))
                {
                    CalDataTable.Rows[0][i] = ValueHs[CalDataTable.Columns[i].ColumnName.ToUpper()].ToString();
                }
                //}
            }
            CalcClass1.calC1();//按压力计算
            if (m_IsFirstRun == false)
            {
                SQLHelper.insertDataTable(CalDataTable, ConstYXYH.CurrentTable);
            }
            #endregion
        }
예제 #2
0
 //计算的对外方法,调用此方法,将会进行公式计算
 public void CalTreeMain()
 {
     try
     {
         #region 初始化sql server
         TagInit.initDataBase();
         dtTagsSet = TagInit.getAllData();
         //dtTagsSet.Columns.Add("currentValue");
         dtTagsData = SQLHelper.ExecuteDt("select * from " + ConstYXYH.CurrentTable + " where 0=1");
         #endregion
         #region 读取公式进行计算
         //StreamReader objReader = new StreamReader("formulate.txt", Encoding.Default);
         //string sLine = "";
         //while (sLine != null)
         //{
         //    sLine = objReader.ReadLine();
         //    if (sLine != null && !sLine.Equals(""))
         //    {
         //        string lineStr = sLine.Split('%')[0].ToString();
         //        string[] formulaHsArr = lineStr.Split('=');
         //        string formulaHaKey = formulaHsArr[0].ToString().Trim().ToUpper();
         //        if (!FormulaHs.ContainsKey(formulaHaKey))
         //        {
         //            string formulaHaValue =  Regex.Replace(formulaHsArr[1].ToString().Trim().ToUpper(), @"\s", "");
         //            FormulaHs.Add(formulaHaKey, formulaHaValue);
         //        }
         //    }
         //}
         //objReader.Close();
         for (int i = 0; i < Formulate.formulateArr.Length; i++)
         {
             string   lineStr      = Formulate.formulateArr[i].Split('%')[0].ToString(); //去掉公示后面%后的注释
             string[] formulaHsArr = lineStr.Split('=');                                 //分开公式的结果和表达式
             string   formulaHaKey = formulaHsArr[0].ToString().Trim().ToUpper();
             if (!FormulaHs.ContainsKey(formulaHaKey))
             {
                 string formulaHaValue = Regex.Replace(formulaHsArr[1].ToString().Trim().ToUpper(), @"\s", "");
                 FormulaHs.Add(formulaHaKey, formulaHaValue);
             }
         }
         #endregion
         //WriteLog.WriteLogs("-------");
         timer1_Tick(null, null);
         //WriteLog.WriteLogs("11111111111111111");
         //定时器要一直运行,它的定义不应该放在方法的内部,否则,运行一段时间可能就被垃圾回收而停止了;已放在了类的开头,改成了类变量,edit by hlt 2014-12-6
         //System.Timers.Timer t = new System.Timers.Timer(ConstYXYH.CalIntvel);   //实例化Timer类,设置间隔时间为20秒;
         t.Elapsed       += new System.Timers.ElapsedEventHandler(timer1_Tick); //到达时间的时候执行事件;
         t.AutoReset      = true;                                               //设置是执行一次(false)还是一直执行(true);
         t.Enabled        = true;                                               //是否执行System.Timers.Timer.Elapsed事件;
         TimeOfTimerStart = DateTime.Now;
     }
     catch (Exception ex) { WriteLog.WriteLogs(ex.ToString()); }
 }