private void TicTimerSQL(object state) { //??????вопрос с dispatcher???????? string numberTable; try { //Console.WriteLine(string.Format("\t\t {0} ({1}) {2}", "SQL 101mc", DateTime.Now - dtSQL, Thread.CurrentThread.ManagedThreadId)); dtSQL = DateTime.Now; //Из критичной секции получаем значения из PLC Thread tSQL = new Thread(BufferSQLToBufferPLC); tSQL.Start(); if (bufferSQL == null) { Console.WriteLine("Кол-во элементтов - 0 "); } else { if (blRulonSaveData101ms) { //Формируем строку для таблицы и ее записываем при условии что начата прокатка рулона DataRow dr101ms = dt101ms.NewRow(); dr101ms["dtStan"] = DateTime.Now; foreach (var item in dic101ms) { if (item.Value.floatdata) { //Console.WriteLine(item.Key + " = " + item.Value.startbit + " - " + item.Value.coefficient); float a = (float)(BitConverter.ToInt16(bufferSQL, item.Value.startbit)) / item.Value.coefficient; //Console.WriteLine(a); dr101ms[item.Key] = a; } else { //Console.WriteLine(item.Key + " = " + item.Value.startbit + " - " + item.Value.coefficient); dr101ms[item.Key] = (BitConverter.ToInt16(bufferSQL, item.Value.startbit)) / item.Value.coefficient; } } dt101ms.Rows.Add(dr101ms); // Console.WriteLine(" Кол-во строк в таблице=" + dt101ms.Rows.Count); } //Console.WriteLine("В массиве строчек "+dt101ms.Rows.Count); if (PasportRulona) { D_tek_mot = (float)(BitConverter.ToInt16(bufferSQL, 20)) / 1000; h5w = (float)(BitConverter.ToInt16(bufferSQL, 12)) / 1000; speed4kl = (float)(BitConverter.ToInt16(bufferSQL, 6)) / 100; Bw = BitConverter.ToInt16(bufferSQL, 14); #region Формирование признака окончания прокатки рулона if (D_tek_mot > D_pred_mot) { if (D_tek_mot < 0.615) { Time_Start = DateTime.Now; blRulonSaveData101ms = true; //включаем сбор данных по прокатке рулона } } //Console.WriteLine("Time_Start=" + Time_Start + " H5_work=" + H5_work + " D_tek_mot=" + D_tek_mot + " D_pred_mot=" + D_pred_mot + " speed4kl=" + speed4kl); if ((Time_Start != new DateTime()) && (H5_work == 0) && (D_tek_mot > 0.7) && (speed4kl > 2)) { H5_work = h5w; B_Work = Bw; } #endregion #region Окончание прокатки рулона //Console.WriteLine("Time_Start="+ Time_Start+ " H5_work="+ H5_work+ " D_tek_mot=" + D_tek_mot+ " D_pred_mot=" + D_pred_mot); if ((Time_Start != new DateTime()) && (H5_work != 0) && (D_tek_mot < 0.610) && (D_tek_mot < D_pred_mot)) { #region Формируем шифр таблицы (yyyyMMddсмена) if (Convert.ToInt32(DateTime.Now.ToString("HH")) >= 7 && Convert.ToInt32(DateTime.Now.ToString("HH")) < 19) { numberTable = DateTime.Now.ToString("yyyyMMdd") + "2"; } else if (Convert.ToInt32(DateTime.Now.ToString("HH")) < 7) { numberTable = DateTime.Now.ToString("yyyyMMdd") + "1"; } else if (Convert.ToInt32(DateTime.Now.ToString("HH")) >= 19) { numberTable = DateTime.Now.AddDays(1).ToString("yyyyMMdd") + "1"; } #endregion //Time_Stop = DateTime.Now; Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Время начала записи SQL=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); Ves_Work = (((((D_pred_mot * D_pred_mot) - 0.36F) * 3.141593F) / 4) * (B_Work / 1000)) * 7.85F; Time_Stop = DateTime.Now; Dlina_Work = ((Ves_Work / 7.85F) / (B_Work / 1000)) / (H5_work / 1000); //Ellipse101ms.Fill = onOK; #region Формируем данные для передачи в Базу Данных //yyyy - MM - dd HH: mm: ss.fff string strTimeStart = Time_Start.ToString("yyyy-MM-dd HH:mm:ss.fff"); string strTimeStop = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TimeSpan tp = Time_Stop.Subtract(Time_Start); double dbltp = tp.TotalMilliseconds; Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Время сбора информации (ms):" + dbltp.ToString()); Console.WriteLine("Кол-во строк полученных в системе:" + dt101ms.Rows.Count.ToString()); Console.WriteLine("Среднее время цикла обновления данных:" + (dbltp / (dt101ms.Rows.Count)).ToString()); Console.ResetColor(); string strNumberRulon = DateTime.Now.ToString("yyyyMMdd") + Time_Start.ToString("HHmm") + DateTime.Now.ToString("HHmm"); #endregion //TODO после записи удаляем таблицу и заново создаем dt101ms.Clear(); Console.WriteLine("Очистка таблицы"); //CreateTable(); Console.WriteLine("Кол-во строк в таблице после очистки - " + dt101ms.Rows.Count.ToString()); } D_pred_mot = D_tek_mot; #endregion } } } catch (NullReferenceException e) { Console.WriteLine("ytne"); } catch (Exception ex) { LogSystem.Write("Stan(101ms)-" + ex.Source, Direction.ERROR, "Stan(101ms) Error-" + ex.Message); } }