Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Ваши вопросы / Re: Чтение архивных данных с устройства.
« Последний ответ от Simple_Scada Сегодня в 10:48:53 »
Здравствуйте.

Обычно, архивные данные с приборов доступны для чтения по OPC-HDA. Но в Simple-Scada нет поддержки OPC-HDA, поэтому считать архивные данные не получится. В Simple-Scada можно работать только с текущими данными, поступающими от OPC-сервера.
 
Если каким-то способом у Вас получится передать нужные данные в Simple-Scada, то записать эти данные в штатные таблицы БД будет невозможно. В штатные таблицы архивируются только текущие данные, поступающие в скада-систему (если у переменной включена архивация).
2
Ваши вопросы / Re: Связь с переменными
« Последний ответ от ART63 Сегодня в 10:29:44 »
Проблема решена. В названии переменной был задан макро с большой буквы Fider_%Fider%_U1, а в экземпляре почему-то макро был с маленькой 'fider'.
Заменил макро в переменной Fider_%fider%_U1 и все заработало. Вопрос почему макро в экземпляре с маленькой...
3
Ваши вопросы / Re: Чтение архивных данных с устройства.
« Последний ответ от pan2000 Сегодня в 06:35:30 »
   Здравствуйте.

Во вложении карта памяти [Modbus] устройства РС83-В1 с журналом аварий на 100 событий. Структура ошибки очень похожа, но способ чтения совершенно другой.
1. Для начала нужно получить доступ к данным. Вам необходимо построить (пытая китайское устройство) или подсмотреть в китайском руководстве (цифры-то арабские) аналогичную карту.
2. Определить критерий, когда приняты все данные ошибки, особенно если линии связи с прибором медленные.
3. Из Вашего сообщения и документа на РС83-В1 можно предположить:
 - чтение журнала ведется из очереди аварий по одной аварии через буфер, который заполняется при записи в регистр (4000) смещения относительно начала очереди;
 - аварии последовательно заполняют очередь, и при её переполнении новая авария вытесняет первую аварию из очереди. Скорее всего для контроля этой ситуации используется возвращаемое значение "номер аварии" - порядковое число 0..65535;
 - в незаполненной очереди признаком конца очереди является авария с нулевыми данными;
 - полностью заполненная очередь создаёт еще одну ошибку: если между чтением двух аварий вклинится новая запись аварии-события, то произойдет сдвиг аварий в очереди, что нарушит всю последовательность чтения по номеру аварии.
4. Что ещё следует поискать в китайском устройстве и что, по моему мнению, крайне необходимо. так это удаление прочитанной ошибки из очереди, что даёт возможность (если не зевать с удалением ошибок) исключить переполнение очереди.
5. Самое простое китайское решение - НЕ ДЕЛАТЬ НИЧЕГО ВООБЩЕ, т.е. считать что есть только кольцевой буфер аварий, с началом индексации от самой старой сохранившейся аварии.  В этом случае алгоритм на основе анализа возвращаемого значения "номер аварии" пытается упорядочить прочитанные аварии в порядке последовательного возрастания номеров аварий.
  Пример из вложения содержит модель "Китайского устройства" (генерация ошибки/серии, очистка очереди) и окно получения данных (чтение ошибки по смещению, чтение списка аварий, очистка окна). Пример только для иллюстрации алгоритма, тщательно проверять его нет смысла пока не будут решены вопрос п.1 и п.2.
Для ввода повторного значения используйте лидирующий 0.
4
Ваши вопросы / Чтение архивных данных с устройства.
« Последний ответ от Hello_Arduino 18 Сентября 2026, 10:26:22 »
Доброго времени всем!
Возможно эту тему уже поднимали.
Есть устройство работающие по протоколу Modbus
в нем есть архив аварий. 100 записей.
есть соотведствующие регистры.
- год события
- месяц события
- день.
 - час.
- минута
- секунда
- номер события.
- показания 1
- -//-
- показания 10

Устройство находится далеко, гдето в поле на сквадине.
собирает данные по
воде, там расхо, температура, давление.
электро энергия, перекосы фаз, напряжения токи и другое.
Связь организована модемами.
Вот бывает обрывы связи. Чаще всего забывают оплатить тарифы оператора. Совет не забывать прошу не давать. Это не вариант. Это не побороть.

Вот прошу помощи, как мне с помощью скада читать эти архивные данные?

Как происходит чтение из устройства.
Устройство полностью Китай, настолько Китай что инструкция на китайском.
Пореводчик мне помог понять следующие.
Для чтения архива создаем теги.
который соотведствует параметру или дате.
отправляем команду на регистр 4000 с номером события из архива. Соотведственно от 1 до 100
то есть, когда связь возобновилась мне нужно перебрать массив событий, получить все новые события и их сохранить.
Естественно мне нужен массив в который я обновлю события.
Было бы хорошо получить готове решение. думаю раньше уже были похожие проблемы у других
5
Ваши вопросы / Re: Связь с переменными
« Последний ответ от Simple Scada 17 Сентября 2026, 13:51:39 »
Здравствуйте.

1. В любых непонятных ситуациях нужно в первую очередь проверять журнал сервера Simple-Scada. С большой вероятностью в нем будут содержаться ошибки или предупреждения, которые укажут, в чем именно проблема. 
2. Скорее всего, проблема связана с тем, что переменных, указанных для нижних таблиц, не существует в проекте, либо указаны некорректные подстановки. В этом случае в журнал сервера скады выведутся соответствующие ошибки.
3. Если самостоятельно разобраться не получится, то пришлите нам для проверки на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\". Если в проекте имеются конфиденциальные данные, то создайте копию проекта, удалите всё лишнее, проверьте, что проблема повторяется и пришлите нам полученный проект. Также пришлите целиком папку с логами "..\Simple-Scada 2\Logs".
6
Ваши вопросы / Связь с переменными
« Последний ответ от ART63 17 Сентября 2026, 13:16:34 »
Добрый день!

Почему-то в режиме эмуляции в некоторых таблицах есть данные, а в некоторых нет.
Есть ощущение, что нет связи с переменными, привязанными к таблице.
Это шаблоны. Все экземпляры верхнего шаблона заполнены данными, а у нижнего нет. Хотя привязка есть. Подстановка в шаблоне тоже сделана.
В чем может быть проблема?
7
Ваши вопросы / Re: Индикация в таблице шаблона
« Последний ответ от pan2000 14 Сентября 2026, 21:59:17 »
  Здравствуйте.

Возник вопрос: А если обработку поставить на скрипт "Изменилась переменная" и сделать флаги bool, которые завести как доппеременную и по ней менять цвет. Обработка будет быстрее или без разницы?
В данном случае это вопрос из серии "кто кого поборет: слон или кит?".
В первом приближении сравнивать времена обработки можно по количеству отдельных временных интервалов выполнения действия: как то вызов события, доступ к переменной (прямо, функция, метод), вычисления.
Скрипт "Изменилась переменная" (далее Скрипт, а вариант с событиями ячеек таблицы - Таблица):
- дополнительный вызов события при изменении флага (хотя ожидается, что это событие достаточно редкое), дополнительные переменные-паразиты под флаги, зависимость объема Скрипта/Скриптов от количества переменных;
- потенциальная возможность ошибок из-за необходимости явного перечисления имён в Скрипте. При соответствующим выборе имен переменных для Таблицы-шаблона достаточно только номера набора;
- выбор буриданова осла: один Скрипт со всем "легионом" входных переменных (а при большом количестве "массовки" незаметно подкрадётся ... ошибка) или множество индивидуальных Скриптов только со своими переменными. В первом случае, переменные по очереди пролазят через "бутылочное горлышко" параметра Скрипта и его выполнение начнется с селекции переменной (либо пачка операторов IF, либо CASE, причем следует ожидать, что с увеличением числа переменных пропорционально увеличится и среднее время выполнения Скрипта. Во втором - копирование и нудная правка скриптов. Вторая неприятность заключается в выборе всех необходимых для вычисления переменных (три тока), и тут начнётся шаманство с формированием имён для GetVariableByName(). В Таблице переменная скрыта за номером столбца и строки (своеобразный массив), в имени переменной нет необходимости, доступ к ней посредством метода GetCell(,).

ИТОГ: Таблица и Скрипт по количеству соизмеримых временных интервалов практически идут "ноздря в ноздрю", но ресурсов Скрипту/Скриптам потребуется больше: флаг-переменные и объём скрипта пропорциональный количеству переменных. И вишенка на торте - сравнение затрат и простоты при увеличении количества переменных.
8
Ваши вопросы / Re: Отчет по нагрузкам
« Последний ответ от Simple Scada 14 Сентября 2026, 11:44:17 »
Здравствуйте.

Цитировать
Данные считаются один раз. В какой бэнд их надо выводить - в "данные" или "итог отчета".
Можно просто разместить компонент "Текст" в отчете и выводить данные в него. Использовать бэнды "Данные", "Итог данных" или какие-либо другие, в данном случае, не требуется.

Цитировать
Проблема в том, что на текущий момент данных нет и посмотреть как выглядит отчет сложно.
Для тестирования проекта/отчета можно использовать запуск проекта в режиме отладки с эмуляцией работы OPC-сервера.
9
Ваши вопросы / Re: Многомониторный режим
« Последний ответ от Simple-Scada 14 Сентября 2026, 11:25:11 »
Если успеем, то добавим в ближайшее обновление.
10
Ваши вопросы / Re: Индикация в таблице шаблона
« Последний ответ от Simple-Scada 14 Сентября 2026, 11:20:57 »
Здравствуйте.

Цитировать
Что является Sender в событии OnCellDatachange?
В событиях OnCellDatachange, OnCellDatachangeEx и OnCellClick нет параметра Sender (см. объявление процедуры в самой верхней строке скрипта). В них используется параметр Cell, который хранит прямую ссылку на ячейку таблицы типа TM_TableCell. Подробное описание события есть в руководстве по ссылке. Полный список всех свойств ячейки также есть в руководстве по этой ссылке.

В итоге:
1. Если Вам нужно получить номер строки, обращайтесь напрямую Cell.Row;
2. Если нужно получить значение основной переменной ячейки, то используйте Cell.Variable.AsInt. Для доп. переменной используйте Cell.VariableEx.AsInt;
3. Чтобы получить ссылку на саму таблицу, которой принадлежит ячейка используйте Cell.OwnerTable (это может пригодиться, если нужно сделать универсальный скрипт для множества таблиц);
4. Чтобы обратиться к какой либо ячейке таблицы используйте "Cell.OwnerTable.GetCell(col, row)", или напрямую "myTable.GetCell(col, row)", как выше описал pan2000.

Цитировать
Однако выдается ошибка про TM_Control
Верно, т.к. ячейка таблицы (TM_TableCell) никак не связана с TM_Control. TM_TableCell это отдельный класс со своим набором свойств.

Цитировать
А если обработку поставить на скрипт "Изменилась переменная" и сделать флаги bool, которые завести как доп.переменную и по ней менять цвет. Обработка будет быстрее или без разницы?
Нет, не будет быстрее. Если есть возможность обойтись без скриптов, например, настроив границы у переменных, то используйте её. Если нет, то используйте вариант со скриптами.
Страницы: [1] 2 3 ... 10