Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Использование массивов
- В этой теме 8 ответов, 3 участника, последнее обновление 3 года, 11 месяцев назад сделано vg.
-
АвторСообщения
-
19.05.2020 в 20:38 #16105vgУчастник
Здравствуйте.
Пытаюсь использовать массивы для написания формул. Значения высчитываются, но некорректно.
Например, хочу вычислить сумму последних 5 измерений.
Написал следующую формулу:double[] superArray = new double[5];
public double qqqSum (double val)
{
int count = 0;
double superSum = 0;for (int i = 0; i < superArray.Length; i++)
{
if(superArray[i] != 0)
{
count++;
}
}if(count == 5)
{
for (int i = 0; i < superArray.Length — 1; i++)
{
superArray[i] = superArray[i + 1];
}
superArray[4] = val;
}
else
{
superArray[count] = val;
}for (int i = 0; i < superArray.Length; i++)
{
superSum = superSum + superArray[i];
}return superSum;
}Создал «Дорасчётный ТИ» канал, в который записываю выражение — qqqSum(Val(101));
где 101 — номер входного канала «Телеизмерение», который получает данные непосредственно с устройства по Modbus (забирает корректно, проверено).Дело в том, что значение суммы примерно похожее, но не правильное (например сумма должна быть 3.117, а она 3.329 и т.д.). Но и ошибки в своём алгоритме не вижу.
Очевидно, что я делаю что то неверно, но не понимаю что.
Для канала «Минутный ТИ» эта же формула с массивом отрабатывает корректно.
19.05.2020 в 21:14 #16106manjey73УчастникМожет ошибка в том, что не зависимо от пришло значение от устройства или не пришло, у вас каждый цикл Базы срабатывает формула ?
База Scada сама по себе это цикл от 1-ого канала до последнего и так по кругу, независимо, пришло новое значение от Коммуникатора или нет
- Этот ответ был изменен 3 года, 11 месяцев назад от manjey73.
20.05.2020 в 15:21 #16116vgУчастникВ первом сообщении забыл указать важный момент: устройство выдаёт 2 измерения в секунду. А я забыл, что минимальный период обновления данных в веб-приложении — 1 секунда. В результате сумма элементов массива не имела шансов оказаться корректной по некорректному наблюдению. Можно ли настроить цикл отработки Базы SCADA, чтобы синхронизировать его с устройством?
Вы спросили про срабатывание формулы вне зависимости от поступления данных с устройства. Есть возможность такой настройки? У меня просто выставлена галка «Использовать формулу» и других настроек не нашёл.
20.05.2020 в 16:36 #16117manjey73УчастникНет, такой настройки нет. За сколько ПК успеет обработать все каналы, столько и будет длиться цикл.
Надо у Михаила как-то спросить, как можно сделать синхронизацию и возможно ли это вообще.Как вариант, после того, как вы взяли значение из канала, изменить этому каналу статус на нейтральный например. И проверять по статусу. Ваша формула должна быть в дорасчетном канале с большим номером, чем принимаемый из прибора, тогда при получении нового значения, статус станет 1, вы прочтете в массив данные и смените статус канала на другой…
Мне пока только такое на ум приходит… Это если надо всегда именно новые значения заполнять в массив.
Вообще, Scada с каналами работает примерно как ПЛК с LAD языком, строчка за строчкой.
- Этот ответ был изменен 3 года, 11 месяцев назад от manjey73.
20.05.2020 в 17:12 #16119MikhailМодераторДобрый день!
Посмотрите эти формулы, возможно они делают необходимые Вам расчёты.
Формула канала типа ТС/ТИ срабатывает при поступлении данных от Коммуникатора (от устройства). Формулы каналов дорасчётного типа пересчитываются постоянно. Для получения суммы 5 измерений как раз подходит расчёт при поступлении данных.
20.05.2020 в 17:21 #16122vgУчастникБлагодарю за ответы.
20.05.2020 в 17:50 #16123vgУчастникПозвольте ещё один вопрос на эту тему для закрепления понимания:
«Формулы каналов дорасчётного типа пересчитываются постоянно». Имеется ввиду, что после отработки канала, сразу, не дожидаясь поступлений новых данных от устройства или завершения всего цикла, начинается новая отработка дорасчётного канала?21.05.2020 в 13:30 #16144manjey73УчастникСкорее так. Имеем каналы,
ТС, ТИ, ТС, ТИ, Дор, Дор, Дор и та далее — Это и есть цикл от первого до последнего.
Если я правильно понял, формулы в ТС и ТИ срабатывают только когда в них поступили новые данные. А вот формулы Дорасчетных будут выполняться всегда каждый цикл.21.05.2020 в 13:51 #16147vgУчастникЯсно. Спасибо за разъяснение.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.