Среда, 24 Апреля 2024, 12:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » SSS22 [14]
Результаты поиска
SSS22Дата: Воскресенье, 05 Апреля 2020, 17:16 | Сообщение # 1 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата drcrack ()
создай отдельную строковую переменную перед циклом и в нее добавляй значения вместо SetValue


От души благодарю за помощь! respect
Немного сдвинулся процесс. Сумматор работает.
Надо было с архива точные минутные значения извлекать. (а остальные секундные ненужны). а потом сложить их и дальнейшие манипуляции!

Часть скрипта победил! Суммируются значения и записываются в новый архив как нужно.
SSS22Дата: Воскресенье, 05 Апреля 2020, 14:32 | Сообщение # 2 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата drcrack ()
все значения сложить в один ключ


точно...вот как можно это сделать...?

Добавлено (05 Апреля 2020, 15:02)
---------------------------------------------

Цитата SSS22 ()
точно...вот как можно это сделать...?

Val_2 - новая переменная сумматор после цикла
Val_2=Val_2+Val
?
SSS22Дата: Воскресенье, 05 Апреля 2020, 14:12 | Сообщение # 3 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата drcrack ()
SetValue("Out_param"+i,new PinValue(Val,TIMER2));


В этом случае, если кол-во записей будет например 96.......то будет 96 ключей?! т.е. новую запись в новую переменную?
SSS22Дата: Воскресенье, 05 Апреля 2020, 13:50 | Сообщение # 4 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата drcrack ()
Так а кто мешает отладчиком проверить на каком этапе возникает проблема? Зачем гадать?

нет отладчика в компиляторе и в ПО.
Приходится кодом псевдоотладчик изобретать)

После перегрузки немного все поменялось.

Теперь записывается только последнее значение с последней меткой времени) какой бы период не ставил.

Добавлено (05 Апреля 2020, 13:51)
---------------------------------------------
Может есть другие идеи как сделать?

SSS22Дата: Воскресенье, 05 Апреля 2020, 11:40 | Сообщение # 5 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата drcrack ()
было ведь правильно (TIMER2=TIMER2.AddMinutes(1)), зачем поменял?


сори....проверял вариант и оставил в коде.

Добавлено (05 Апреля 2020, 11:41)
---------------------------------------------

Код

for (int i=1;i<=3;i++)   //цикл n раза   1 цикл метка времени и поиск +1минута
     {
     foreach (var element in mas) // перебор и поиск в архиве
        {      
          if (element.Time>TIMER2.AddSeconds(-1) && element.Time<TIMER2.AddSeconds(1)) //условие +/- 1секунда в указанное время
           {
             Val=Convert.ToDouble(element.Value); // конвертируем в переменную
             SetValue("Out_param1",new PinValue(Val,TIMER2)); //запись в архивную переменную Out_param1
             TIMER2=TIMER2.AddMinutes(1); // в конце цикла прибавляем 1 минуту к условию
            }
          }
        Tim2=TIMER2; // так для проверки конечного времени
      }

Добавлено (05 Апреля 2020, 11:44)
---------------------------------------------

Цитата drcrack ()
с чего ты это решил?


смотрю запись архива "INPUT" ...знаю какое значение лежит в 19:06:00.....19:07:00.....19:08:00...и т.д.
а "Out_param1"....пишет значение с 19:06:00 и его метку времени(((

сейчас прогружу весь компилятор всех скриптов...перезаргружусь....может глюк все же.
Отпишусь потом.
SSS22Дата: Воскресенье, 05 Апреля 2020, 10:51 | Сообщение # 6 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Цитата DivES ()
Ты его даже не удосужился к подобающему виду привести

В моем редакторе он конечно с отступами. скорей всего при копировании в форум так установилось.

Не придавал значение кириллическим обозначениям...дело привычки может...в простых реализациях они работают также как и не кириллические. Подправил на латиницу.

Код

if (Var_Input==true && M==false && StartTime.HasValue && EndTime.HasValue && StartTime>EndTime) // условие начала
      {    
            var elem = HostFB.InputGroup.GetPin("INPUT").TreePinHlp;    
     var k=elem.DataArchiveItem; // переменная архива
     DateTime TIMER1=Время.Value;    // время указанное
        DateTime TIMER2=TIMER1.ToUniversalTime();
        DateTime EndTime1=EndTime.Value.ToUniversalTime(); //время конец
     DateTime StartTime1=StartTime.Value.ToUniversalTime(); //время начало
     var mas=k.Read(StartTime, EndTime, false); // чтение массива mas из переменной архива
     
        double? Val=null;
     DateTime? TimeStamp=null;
     
    for (int i=1;i<=3;i++)   //цикл n раза   1 цикл метка времени и поиск +1минута
     {
           foreach (var element in mas) // перебор и поиск в архиве
        {      
      if (element.Time>TIMER2.AddSeconds(-1) && element.Time<TIMER2.AddSeconds(1)) //условие +/- 1секунда в указанное время
      {
       Val=Convert.ToDouble(element.Value); // конвертируем в переменную
          SetValue("Out_param1",new PinValue(Val,TIMER2)); //запись в архивную переменную Out_param1
          TIMER2.AddMinutes(1); // в конце цикла прибавляем 1 минуту к условию
      }
       }
        
  Tim2=TIMER2; // так для проверки конечного времени
  }
    }    
    M=Var_Input;    
  }
} :crazy:


Добавлено (05 Апреля 2020, 10:56)
---------------------------------------------
Интересует больше эта часть кода:

for (int i=1;i<=3;i++)   //цикл n раза   1 цикл метка времени и поиск +1минута
     {
     foreach (var element in mas) // перебор и поиск в архиве
        {      
          if (element.Time>TIMER2.AddSeconds(-1) && element.Time<TIMER2.AddSeconds(1)) //условие +/- 1секунда в указанное время
           {
             Val=Convert.ToDouble(element.Value); // конвертируем в переменную
             SetValue("Out_param1",new PinValue(Val,TIMER2)); //запись в архивную переменную Out_param1
             TIMER2.AddMinutes(1); // в конце цикла прибавляем 1 минуту к условию
            }
          }
        Tim2=TIMER2; // так для проверки конечного времени
      }

что то здесь нетак или что добавить? работает только 1 цикл почему-то...что пропустил незнаю.

Добавлено (05 Апреля 2020, 11:04)
---------------------------------------------
Цитата drcrack ()
DateTime это иммутабельная структура, методы вроде AddMinutes возвращают новую копию


TIMER2.AddMinutes(1); //...не работает так))) начальное время 19:06:00 после цикла 19:06:00

TIMER2=TIMER2.AddMinutes(1); //а так работает deal начальное время 19:06:00 после цикла 19:07:00


Сообщение отредактировал SSS22 - Воскресенье, 05 Апреля 2020, 11:11
SSS22Дата: Суббота, 04 Апреля 2020, 21:09 | Сообщение # 7 | Тема: Чтение и Запись в Цикле
был не раз
Сейчас нет на сайте
Форумчане приветствую!
Недавно изучаю С# поэтому возникают различные вопросы и проблемы. Прошу не ругать сильно!

Задача следующая:
Необходимо за указанный промежуток времени (начало, конец) обрабатывать архивную переменную (запись в архиве рандом примерно +-1 каждую сек).
В цикле необходимо: с архивной переменной считать значение за указанную метку времени. (Вход)
Записать значение и текущую метку времени в другую архивную переменную. (Out_param1)

PS за промежуток времени (начало, конец) и с периодичностью (1 мин) может быть считаны и записаны данные.

В настоящее время имеется проблема что считывается и записывается только 1 раз. с первой меткой времени.

Начальные данные:
Начало - 04/04/2020 19.00.00
Конец- 04/04/2020 19.10.00
Время - 04/04/2020 19.06.00 - время указанное пользователем

Результат после работы скрипта:

Tim2=время конечное 04/04/2020 19.07.00 (как-будто не увеличивает больше 1 раза) должно быть 04/04/2020 19.08.00
Out_param1=29.752 (значение с архива соответствует времени 19.06.00).....а метка времени тоже 04/04/2020 19.06.00

___В переменной Out_param1 в идеале должны быть значения за 19.06.00 / 19.07.00 /19.08.00 если указал 3 раза в цикле

Прилагаю ниже код скрипта:

Код

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;

public partial class ФБ : ScriptBase
{
bool? M=false; //для переднего фронта
public override void Execute()
{
if (Найти==true && M==false && Начало.HasValue && Конец.HasValue && Конец>Начало) // условие начала // "Найти" (bool флаг начала)
{
var elem = HostFB.InputGroup.GetPin("Вход").TreePinHlp; //elem архивная переменная "Вход"
var k=elem.DataArchiveItem; // переменная архива k
DateTime TIMER1=Время.Value; // время указанное
DateTime TIMER2=TIMER1.ToUniversalTime();
DateTime EndTime=Конец.Value.ToUniversalTime(); //время конец
DateTime StartTime=Начало.Value.ToUniversalTime(); //время начало
var mas=k.Read(StartTime, EndTime, false); // чтение массива mas из переменной архива
double? Val=null;
DateTime? TimeStamp=null;

for (int i=1;i<=3;i++) //цикл n раза 1 цикл метка времени и поиск +1минута
{
TIMER2=TIMER2; // текущее заданное время
foreach (var element in mas) // перебор и поиск в архиве
{
if (element.Time>TIMER2.AddSeconds(-1) && element.Time<TIMER2.AddSeconds(1)) //условие +/- 1секунда в указанное время
{
Val=Convert.ToDouble(element.Value); // конвертируем в переменную
SetValue("Out_param1",new PinValue(Val,TIMER2)); //запись в архивную переменную Out_param1
TIMER2=TIMER2.AddMinutes(1); // в конце цикла прибавляем 1 минуту к условию
}
}

Tim2=TIMER2; // так для проверки конечного времени
}
}
M=Найти;
}
}

Подскажите где может быть ошибка пожалуйста или что добавить!? lovegcup


Сообщение отредактировал SSS22 - Суббота, 04 Апреля 2020, 21:11
SSS22Дата: Воскресенье, 02 Февраля 2020, 19:02 | Сообщение # 8 | Тема: Импульс + if условие С#
был не раз
Сейчас нет на сайте
Доброе время суток!
Недавно стал изучать С# поэтому прошу вашей помощи в одном вопросе:
Задача: нужно чтобы скрипт по входному импульсу (логический вход) считывал входную переменную DATA_now (?DateTime).
а также по определенным условиям прибавлял к данной переменной 15 минут, после каждого нового входного импульса.
Все это организовано в коде С#. Частично работает. Время считывается и прибавляет 15 минут.....НО....делает это автоматически, а не по условию! (то есть.... что я if употребляю в коде или нет...одинаково )

Вот код: (не ругайте строго)))

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;

[FBRetain]
public partial class ФБ : ScriptBase
{
public override void Execute()
{

bool SIGNAL_DATA1 = Convert.ToBoolean(SIGNAL_DATA); // ?bool
bool Error1 = Convert.ToBoolean(Error); // ?bool
DateTime Dtime_now = Convert.ToDateTime(DATA_NOW); // ?DateTime
DateTime Time4 = new DateTime();
DateTime Time2 = new DateTime();
DateTime Time3 = new DateTime();
DateTime Time1 = new DateTime();

if ((SIGNAL_DATA1==true) & (Error1==false));
{
DateTime Timenow1 = Dtime_now;
Time1 = Timenow1.AddDays(+1);
Time2 = Timenow1.AddDays(+2);
Time3 = Time1;
Time4 = Timenow1;
}

if (SIGNAL_DATA1 & !Error1); //импульс запуска и отсутсвие ошибки
{
if ((Time3 >= Time1) &(Time3<=Time2)); //проверка промежутка времени
{
Time3= Time3.AddMinutes(+15); // /прибавим 15 минут тут все работает но прибавляет только 1 раз
WORK_OUT=true; //готовность

}
}
Dtime11=Time1; // ?DateTime выходная переменная времени
Dtime12=Time2; // ?DateTime выходная переменная времени
Dtime13=Time3; // ?DateTime выходная переменная времени
Dtime14=Time4; // ?DateTime выходная переменная времени
}
}


SSS22Дата: Воскресенье, 02 Февраля 2020, 18:46 | Сообщение # 9 | Тема: Время ToUniversalTime
был не раз
Сейчас нет на сайте
DateTime Time1 = Convert.ToDateTime(DATE_in) //так все работает разобрался сам

DATE_in - ?DateTime //тип условный
SSS22Дата: Пятница, 24 Января 2020, 20:43 | Сообщение # 10 | Тема: Время ToUniversalTime
был не раз
Сейчас нет на сайте
День добрый!
Подскажите начинающему в изучении C#:

имеется Параметр с временем (только чтение) (DATE_in) его нужно переопределить методом ToUniversalTime и записать в параметр DATA_out (только запись)

Код написал а компилятор ругается...подскажите пожалуйста что не так делаю?


using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;

[FBRetain]
public partial class ФБ : ScriptBase
{
public override void Execute()
{
DateTime Time1 = new DateTime(DATE_in);
DATA_out = Time1.ToUniversalTime();

}
}
SSS22Дата: Суббота, 11 Января 2020, 09:14 | Сообщение # 11 | Тема: Как пропустить первую строку
был не раз
Сейчас нет на сайте
Цитата drcrack ()
так у тебя line=file.ReadLine(); внутри for 1-3


)) точно подметили ..исправил все отлично стало deal ! Благодарствую!
SSS22Дата: Пятница, 10 Января 2020, 23:06 | Сообщение # 12 | Тема: Как пропустить первую строку
был не раз
Сейчас нет на сайте
Цитата drcrack ()
можно короче — просто добавить file.ReadLine():


работает!!! Спасибо!
немного модифицировал еще код....нужно чтобы параметр1 обрабатывать...делить на 100000...сделал условие..но както неправильно...записываются в архив не каждая строка, а через две((( т.е. данные за 6:15 а потом сразу 7:00.
а должно быть 6:15...6:30..6:45...7:00....и т.д.
вот модифицированный код:

{
using(var file = new StreamReader(Файл)) //открытие файла для чтения
{
file.ReadLine(); //скрыть первую строку
var line=file.ReadLine();

while (line!=null)
{

String[] substrings = line.Split(';'); //разбор строки на составляющие
var Time = DateTime.Parse(substrings[0]);
var Time1 = Time.ToUniversalTime();
for (int i=1;i<=3;i++)
{
if (i==1)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i])/100000,Time1)); // делим
}
if (i==2)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time1));
}
if (i==3)
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time1));
}

line=file.ReadLine();//считывание строк из файла
}
}
}
}
.......

подскажите пожалуйста что неправильно наделал то? Нужно чтобы первый столбец (parametr1) делился на 100000, а другие 2 и 3 записывались как есть без матем. обработки.
SSS22Дата: Пятница, 10 Января 2020, 12:39 | Сообщение # 13 | Тема: Как пропустить первую строку
был не раз
Сейчас нет на сайте
Цитата Ordan ()
почему бы просто не начать читать сразу со второй? ну или можешь тупо объявить параметр а=0 а каждый цикл делать а++ и если у тебя а==0 то пропускай заход


логично конечно. так тоже думаю делать.
но не силен в С# коде.

поэтому и прошу помочь в написании
SSS22Дата: Четверг, 09 Января 2020, 14:19 | Сообщение # 14 | Тема: Как пропустить первую строку
был не раз
Сейчас нет на сайте
Добрый день форумчане! Недавно начал изучать C# требуется по ходу работы.
Задача следующая:
Считать данные из CSV файла (строки). Данные записать в архивную базу данных с меткой времени. Код который написал - рабочий. В архиве все данные вижу корректно, но есть проблемы корректировки:
Первая строка файла содержит некорректные данные - не числовые, типа заголовок файла. В коде нужно как-то пропускать первую строку в цикле((( в этом собственно проблема. Думаю использовать "continue" если строка == первой, но надо какимто образом считывать номер строки...((?или както подругому.

Вот данные CSV файла
1 строка: DATATIME;Parametr1;Parametr2;Parametr3 //вот эту строку пропускать нужно в цикле
2 строка: 08.01.2020 6:15:00;-1;103561;-1,7
3 строка: 08.01.2020 6:30:00;-1;58664;-1,1
4 строка: 08.01.2020 6:45:00;-4;25622;-1,9
....
96 строка: 08.01.2020 19:45:00;-9;2562;-0,9

Вот сам код С#

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using System.IO;

public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Считать==true && M==false && Файл!=string.Empty && Файл!=null)
{
Ошибка=false;
try
{
using(var file = new StreamReader(Файл)) //открытие файла для чтения
{
var line=file.ReadLine();

while (line!=null)
{

String[] substrings = line.Split(';'); //разбор строки на составляющие
var Time = DateTime.Parse(substrings[0]); // преобразую время
for (int i=1;i<=3;i++) // считаю столбцы
{
SetValue("Параметр"+i.ToString(), new PinValue(Double.Parse(substrings[i]),Time)); // запись параметров
}

line=file.ReadLine();//считывание строк из файла
}

}
}

catch (Exception ex)
{
Ошибка=true;
ReportError (ex.Message); //вызов метода для записи сообщения в лог
}
}
M=Считать;
}

void ReportError (string Error) //данный метод записывает сообщения в лог
{
var ScriptName=HostFB.TreeItemHlp.ToString(); //имя скрипта
HostFB.TreeItemHlp.Project.ErrorTracer.ReportError(string.Format("{0}: {1}",ScriptName,Error));
}

}

подчеркнутым выделил где сам код считывания происходит.
HELP PLEASE!) как пропустить первую строку данных файла
Форум игроделов » Записи участника » SSS22 [14]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг