В меню "Сообщения" на клиентах только отображаются сообщения которые были выданы ранее, либо выдаются сейчас. Функций редактирования и полей ввода нет в этом меню. Но можно организовать добавление новых произвольных сообщений через поля ввода и процедуры AddMessage (https://simple-scada.com/help/script/addmessage.html) и AddMessageToGroup (https://simple-scada.com/help/script/addmessagetogroup.html). Для этого cоздайте в меню "Переменные - Редактировать" (https://simple-scada.com/help/manual/variable-editor.html) новую внутреннюю переменную с типом данных "String" и именем vrUserMessage. Затем разместите на мнемосхеме компонент Поле и привяжите его к переменной vrUserMessage. Добавьте на мнемосхему компонент Кнопка и на событие OnClick напишите следующий код:
begin
{ добавляем введённый текст в список сообщений (группа "Все сообщения"), не
отображая его в неподтверждённых сообщениях }
AddMessage(Now, mkMessage, fldUserMessage.AsStr, FALSE, FALSE);
end.
, где fldUserMessage - это имя Поля в которое осуществляется ввод.
Теперь оператор сможет вводить любое сообщение в поле и по нажатию на кнопку отправлять его в список сообщений. А используя процедуру AddMessageToGroup (https://simple-scada.com/help/script/addmessagetogroup.html) можно реализовать добавление сообщений в какую-то конкретную группу сообщений. Таким образом можно реализовать отдельный журнал произвольных сообщений.
Архивация массивов и переменных типа string (это тоже массив (символов)) невозможна. Кроме того, если вы добавляете сообщения через AddMessage, то они будут автоматически архивироваться в БД, в таблицу сообщений с именем "messages_data". Все сообщения добавленные через процедуры AddMessage и AddMessageToGroup помечаются MessageID в диапазоне от 999967 до 999999. Чтобы вывести их в отчет, нужно использовать отдельный источник данных, как в этой статье (https://simple-scada.com/help/report/rep-user-data.html). Только не нужно создавать свою таблицу как описано в статье, можно сразу добавить источник данных MySQL и брать данные из таблицы "messages_data". А запрос на выборку нужно изменить добавив выборку только тех сообщений у которых MessageID >= 999967, вот так:
select * from messages_data
where (timestamp >= @vrTimeBegin) and (timestamp <= @vrTimeEnd)
and (MessageID >= 999967)
в результате источник данных будет содержать список сообщений добавленных через процедуры AddMessage и AddMessageToGroup за период от vrTimeBegin до vrTimeEnd.
Второй вариант, создать отдельную пустую группу сообщений и добавлять сообщения пользователей конкретно в эту группу, через AddMessageToGroup, а затем брать данные также, как описано выше, только выборку осуществлять по колонке "GroupID":
select * from messages_data
where (timestamp >= @vrTimeBegin) and (timestamp <= @vrTimeEnd)
and (GroupID = 77)
, где 77 - это ID группы в которую добавляются пользовательские сообщения.
Третий вариант, создать в БД отдельную таблицу с какой угодно структурой и добавлять в неё новые записи через пользовательские SQL-запросы (процедура RunSQL (https://simple-scada.com/help/script/workbd.html)). Как создать свою таблицу и как вывести её в отчет также описано в этой статье (https://simple-scada.com/help/report/rep-user-data.html).
Здравствуйте.
Второй день бьюсь над проблемой соединения таблиц trends_data и messages_data и записи полученных данных в пользовательскую таблицу idle_data. Проблема в том, что созданный запрос работает в MySQL Workbench, но ни в какую не хочет в проекте. Ошибок никаких при компиляции и в журнале нет. Вот текст скрипта:
var
aQuery: string; // сам запрос
aFrom, aTo: TDateTime; // интервал времени в формате TDateTime
aFromStr, aToStr: string; // интервал времени в виде строки
begin
RunSQL('TRUNCATE idle_data', nil, 100);
aFrom := vrTimeBegin.Value;
aTo := vrTimeEnd.Value;
aFromStr := MySQLDateTime(aFrom, dttFull);
aToStr := MySQLDateTime(aTo, dttFull);
aQuery := 'REPLACE INTO idle_data (timestamp, value, message) ' +
'SELECT a.timestamp, a.value, b.text FROM trends_data a ' +
'LEFT JOIN messages_data b ' +
'ON DATE_FORMAT(a.timestamp, "%Y %m %d %H %i %S") = ' +
'DATE_FORMAT(b.timestamp, "%Y %m %d %H %i %S") ' +
'WHERE (a.timestamp >= ' + aFromStr + ') AND (a.timestamp <= ' + aToStr + ') ' +
'AND (a.ID = 31);';
RunSQL(aQuery, nil, 30);
end.
Подскажите, плз, в чем моя ошибка?