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

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

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

Страницы: [1] 2 3 ... 10
1
Ваши вопросы / Re: Выборка из архива трендов
« Последний ответ от Simple Scada Сегодня в 15:32:14 »
Здравствуйте.

Структура таблиц Simple-Scada описана по ссылке. Обратите внимание, что при выборке трендов нужно обязательно указывать слой из которого нужно получить данные. 0 - основной слой, который содержит все данные тренда. Остальные слои содержат прореженные данные. Вот пример стандартного запроса на выборку из основного слоя через SQL Server Management Studio:
Код: (sql)
SELECT * FROM [demo].[dbo].[trends]
WHERE  id = 156 AND l = 0 AND t BETWEEN
    '2024-04-19T10:00:00.000'
    AND
    '2024-04-19T11:00:00.000';
Данный запрос сделает выборку из БД с именем "demo", из таблицы "trends" по переменной с ID = 156, за интервал времени 1 час, с 2024-04-19 10:00 по 2024-04-19 11:00. Посмотреть ID переменной можно в редакторе переменных - колонка "ID". Также, можно экспортировать переменные в файл и затем смотреть ID переменной в нем.
3
Вопрос скорее из любопытства. Очень давно с такими не сталкивался. Из того что помню похожее поведение может потребоваться для С2000-ПП (Болид). У них, для примера, по протоколу Modbus прежде, чем запросить расширенное состояние зоны, необходимо отправить команду с номером зоны в прибор, и только после этого можно считать данные при условии, что есть готовность. Это пример конечно не совсем подходящий, т.к. в данном случае проще написать отдельный драйвер для обмена. Но очень давно, лет 15 назад сталкивался с приборами, которые воспринимают только ограниченный набор команд и запись в регистры возможно только отдельным запросами.
4
Ваши вопросы / Порядок сообщений, сформированных в скрипте
« Последний ответ от AndreiKov Сегодня в 12:50:29 »
Добрый день.
В скрипте последовательно формируется несколько сообщений.
Код
AddMessageToGroup(Now, mkMessage, 26, 'Отключение рабочего НА', False, False);
//Какой-то код
AddMessageToGroup(Now, mkMessage, 26, 'Переход завершен', False, False);
В базу данных, а соответственно, и в журнал эти сообщения попадают в обратном порядке.
5
Пока такой возможности нет.
Можете подсказать что за устройство?

Айрат.
6
Спасибо.

Цитировать
Например: есть теги с адресами 1,2,3, 8, 9, 15. В этом случае OPC сервер сформирует три команды: 1-2-3, 8-9, 15.
Для специфических устройств есть возможность разбить команду 1-2-3 на отдельные - 1, 2, 3?
7
Здравствуйте.

Отвечу только на вопросы которые касаются arOPC.
По SimpleScada ответят её разработчики.

Цитировать
Другими словами любое изменение значения переменной гарантированно транслируется в отдельные команды, которые отправляются в ПЛК в том же хронологическом порядке, в котором происходили изменения значения?
Хронология соблюдается.

Цитировать
2. Связь оборвалась.
Буфер очищается. Новые команды игнорируются.

Цитировать
3. Общий вопрос.
Для каждого устройства свой буфер. Емкость буфера 32 команды.

Цитировать
Для Modbus TCP работает аналогичным образом? Так работает только для тэгов одного устройства?
Сборка команд в один запрос работает только в пределах одного устройства. Если вы в одном скрипте дадите команду на запись в несколько устройств, в каждом устройстве сформируется своя команда. Так же необходимо понимать, что если в одном скрипте даётся запись в теги одного устройства, но при этом теги разнесены, тоже будут сформировано несколько команд.
Например: есть теги с адресами 1,2,3, 8, 9, 15. В этом случае OPC сервер сформирует три команды: 1-2-3, 8-9, 15.

Айрат

8
Здравствуйте.

Подскажите как происходит передача значений для записи из SCADA в arOPC и далее в ПЛК (Modbus TCP) в следующих ситуациях.
Используем последние версии arOPC и SimpleSCADA.

1. Связь с ПЛК установлена и стабильна.
Допустим есть кнопка без фиксации. При нажатии переменной присваивается значение 1, при отпускании - значение 0.
arOPC сервер при этом в очередь на запись в ПЛК поставит последовательно условно две команды "записать значение 1", "записать значение 0"?
Другими словами любое изменение значения переменной гарантированно транслируется в отдельные команды, которые отправляются в ПЛК в том же хронологическом порядке, в котором происходили изменения значения?

2. Связь оборвалась.
Буфер команд к ПЛК очищается или arOPC хранит команды в буфере до восстановления связи?
Новые команды записи от SCADA в буфер добавляются или игнорируются до восстановления связи?

3. Общий вопрос.
Для разных ПЛК в arOPC, подключенных по одному каналу, буфер команд общий или индивидуальный?

4. Вопрос скорее к Simple SCADA.
Если в скрипте кнопки значение переменной меняем несколько раз в процессе однократного выполнения, то при каждом изменении в переменную будет записываться новое значение каждый раз, или в переменную записывается значение только после завершения скрипта?

5. На форуме был такой ответ по работе arOPC с Modbus - https://simple-scada.com/forum/index.php?topic=1323.msg10225#msg10225
Цитировать
Да, если из Simple Scada, из одного скрипта, последовательно, в эти три тега выполнить  запись, то OPC сервер сформирует единый Modbus пакет.
Для Modbus TCP работает аналогичным образом? Так работает только для тэгов одного устройства? Что делать, если требуется, чтобы не формировался единый пакет, а значения отправлялись отдельными запросами?
9
Ваши вопросы / Re: Вопросы по скриптам в Simple-Scada 2
« Последний ответ от Simple Scada 18 Апреля 2024, 17:46:19 »
Здравствуйте.

В данном случае использовать локальную переменную скрипта нельзя – подробнее см. по ссылке (Изменение 1). В Вашем случае, для хранения значения количества продукции за предыдущую минуту нужно использовать внутреннюю переменную. Также, чтобы избежать ошибок, в правой части скрипта, при выполнении математических операций с переменными нужно использовать значение переменной приведенное к нужному типу. Пример исправленного скрипта для события "Начало минуты" или "Таймер" с интервалом в 60 секунд:

Код: (delphi)
begin
  if Dicount2.AsInt  = 0 then
    Speedbotle_min.Value := 0
  else
    Speedbotle_min.Value := Dicount2.AsInt - Speedbotle_temp.AsInt;
  Speedbotle_temp.Value := Dicount2.AsInt;
end.
10
Ваши вопросы / Выборка из архива трендов
« Последний ответ от mamontovsk 18 Апреля 2024, 16:52:51 »
Добрый день.
Имеем: SQL Express, куда пишутся значения 5 датчиков давления через систему архивации, параллельно отрисовываясь на тренде.
В БД табличка trends c полями id, t,v,q,l.
Все датчики пишутся в одну таблицу.
Вопрос: как сделать запросом выборку по каждому конкретному датчику?
Страницы: [1] 2 3 ... 10