А тара у вас предварительно взвешивается отдельно? То есть сохранить ее значение нужно по некоему сигналу?
На верхнем уровне это делается с помощью действий, но в контроллерах они не работают. Можно сделать обходное решение - пример в приложении.
Вид для печати
А тара у вас предварительно взвешивается отдельно? То есть сохранить ее значение нужно по некоему сигналу?
На верхнем уровне это делается с помощью действий, но в контроллерах они не работают. Можно сделать обходное решение - пример в приложении.
Попробовал - получается. Конечно своеобразный метод, да главное чтобы работал. Единственное не совсем понял что значит в "контроллерах они не работают", т.е. мне эту операцию придется производить только на вернем уровне?
Вариант который мы выслали работает и на верхнем уровне и на контроллерах.
На верхнем уровне есть вариант проще - у команды, на вкладке "Действия" добавляете действие типа "Присвоить", которое присвоит значение одной переменной другой.
Спасибо за помощь!
Здравствуйте.
Стоит задача регистрировать действия операторов по изменению параметров настройки. Изменять настройки можно, как дистанционно из MasterSCADA, так и локально с панели оператора. В связи с этим вопросы:
1) В MasterSCADA имеется журнал действий. Однако в нём сохраняются только события входа и выхода пользователей из системы. Можно ли добавить к нему регистрацию других действий оператора?
2) Один из вариантов решения задачи - создать объект по примеру "Запись текста с мнемосхемы в журнал по изменению" из примеров скриптов Библиотеки. По этому способу есть вопросы:
а) Количество параметров настройки - около 500. В случае изменения структуры текста сообщения, каждый раз придётся изменять шаблон сообщения в 500 местах. Есть ли какой-то способ уменьшить объём этой работы?
б) В текст сообщения включается текущее и предыдущее значение параметра. При первом срабатывании события предыдущее значение отсутствует и поэтому в тексте сообщения на его месте пусто. Каким образом можно получить сигнал об отсутствии значения команды, чтобы его использовать в, например, блоке "Переключатель N к 1"?
в) Почему то для вызова события не получается использовать формулу "Текущее значение <> Предыдущее значение". Приходится использовать функциональный блок "A <> B" и его результат использовать в формуле вызова события.
3) Ещё один вариант - формировать текст сообщения в C# скрипте. В таком случае появляется больше возможностей, но остаются вопросы:
а) Проблема с большим объёмом работы при изменениях не исчезает. Можно ли каким-то образом обновить скрипт у всех использующих его объектов (например, поместив его в библиотеку)?
б) Для записи сообщений в журнал приходится использовать выходы скрипта, подключаемые к событию. Это приводит к троекратному увеличению количества лицензируемых связей. Имеется ли возможность добавить сообщение в журнал напрямую из C# скрипта?
Можно. Нужно в правах доступа, у нужного оператора у нужного действия поставить галочку "Журнал".
Можно использовать шаблон-экземпляр.
В конкретно этом примере это связано с тем, что переменные строковые - событие и расчет со строками работать не могут.
В версии 3.7 появилась возможность создавать библиотечные скрипты - у них один код на все скрипты.
Можно генерировать сообщение из скрипта, но от имени события. Так сделано в этом примере:
http://insat.ru/products/?category=1298
Вкратце - здесь:
http://blog.insat.ru/2015/11/masterscada-37.html
Подробнее в справке
В рамках проекта.
Между проектами можно переносить через экспорт скрипта.
Большое спасибо за оперативный ответ.
Всё понятно, единственное, что
для вещественных переменных происходит то же самое.
Выковырял из приведенного Вами примера генерацию сообщения из скрипта. Может кому-нибудь ещё пригодится:
//----------------------------------------------------------------------------------------------------------
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using MasterSCADALib;
using MasterSCADA.Common.Events;
[FBRetain]
public partial class ФБ : ScriptBase
{
const uint OPC_QUALITY_GOOD = 192;
public override void Execute()
{
var alarmId = ((IFBEvents)HostFB.TreeItemHlp.Parent.GetChild("Со бытие").FBObject).AlarmID;
HostFB.TreeItemHlp.Project.AlarmManager.OnFBEventT imed(alarmId, "Текст сообщения", -1, (short)EventStatus.EventOn, OPC_QUALITY_GOOD, new DateTime());
}
}
Вам что в конечном счете нужно получить? Сообщение в момент изменения переменной?