Предложенный способ достаточно простой.
Вид для печати
Предложенный способ достаточно простой.
Программист сейчас в отпуске, когда вернется, мы передадим ему ваше предложение.
Это удалось сделать в автоматическом режиме, без использования кнопки. При входе диспетчера, на его компьютере исполняется скрипт с командой "public override void Start()".
А как теперь сделать, чтобы при выходе диспетчера оператор восстановился? Строка в скрипте диспетчера "public override void Stop()" не работает (не изменяется значение параметра в коде)
Строка работает, просто поскольку происходит выход значение не успевает записаться на выход.
Можно при помощи скрипта отслеживать состояние связи с компьютером - и если связь пропадает, выполнять смену оператора. Вот пример скрипта:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;
public partial class ФБ : ScriptBase
{
public override void Execute()
{
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Компьютер 2");
Связь_есть=comp.RTItemState == ERTItemState.rtisNormal;
}
}
насколько я понимаю, Связь_есть - переменная?
Компилятор ругается: "The name 'ERTItemState' does not exist in the current context в строке"
И куда эти три строки нужно вписать: в скрипт АРМа по месту, или в скрипт удаленного АРМа?
скрипт АРМа по месту выглядит так:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
}
M=Параметр1;
}
}
скрипт удаленного АРМа:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
public partial class ФБ : ScriptBase
{
public override void Start()
{
Параметр1=true;
}
}
уже не ругается. не было строки "using MasterSCADALib;". Версия 3.6.0.43228 3.6(DemoReleaseMin)_13_11_04_20_19.
Сделал, но обратный переход не выполняется:
Цитата:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;
public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
}
M=Параметр1;
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.АРМ диспетчера");
Связь_есть=comp.RTItemState == ERTItemState.rtisNormal;
}
}
Так где у вас реализация обратного перехода?
Что-то такое:
public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;
public override void Execute()
{
if (Параметр1==true)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Просмотр","1"); // Просмотр - имя оператора, 1 - пароль.
Change=true;
}
M=Параметр1;
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.АРМ диспетчера");
if (Change==true && comp.RTItemState != ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Оператор","1"); // Просмотр - имя оператора, 1 - пароль.
Change=false;
}
}
}
Что значит не выполняется?
У вас Change переходит в состояние True? Скорее всего вы его где то сразу сбрасываете в false.
Переходит.
Если написать код:
при входе Диспетчера переход на "Оператор" не происходит.Цитата:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;
public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;
public override void Execute()
{
Change=Параметр1;
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Диспетчер ");
if (Change==true && comp.RTItemState != ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Оператор",""); // Оператор - имя оператора.
Change=false;
}
}
}
если же написать
при входе Диспетчера переход на "Оператор" происходит.Цитата:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
using MasterSCADALib;
public partial class ФБ : ScriptBase
{
bool? M=false;
bool? Change=false;
public override void Execute()
{
Change=Параметр1;
var project = this.HostFB.TreeItemHlp.Project;
var comp=(ITreeItemHlp)project.Item("Система.Диспетчер ");
if (Change==true && comp.RTItemState == ERTItemState.rtisNormal)
{
HostFB.TreeItemHlp.Project.RTPermissions.ReLogon(" Оператор",""); // Оператор - имя оператора.
Change=false;
}
}
}
В варианте кода, который мы приложили переход на режим "Просмотр", происходит по команде от сетевого компьютера, а выход - если с компьютером пропадает связь.
Если вы хотите чтобы переход выполнялся при подключении сетевого компьютера, то код будет другим.
Нужно чтобы именно при выходе диспетчера из проекта происходила обратная смена оператора.
Если диспетчер выходит из проекта (режима исполнения), это означает что связь с компьютером пропадает?
Да, выложенный скрипт и решает эту задачу.
Добрый день.
При разработке своего ВФБ возникла задача блокировать его работу в зависимости от имени оператора и наличия связи с контроллером. Завел для этого отдельную входную переменную типа boolean, в визуальную часть ВФБ она не передается. При размещении моего ВФБ на мнемосхеме, у него есть стандартный вход "Заблокирован", который создает сама MasterScada. Как понимаю, если поместить в него расчет с проверкой связи и именем оператора, он выполняет аналогичные действия, т.е. блокирует мой элемент? Хотел бы узнать подробнее как именно блокируется, запрещается выполнение контрола в ВФБ?
И еще вопрос не в тему, для общего понимания, возможно ли использовать для оформления средства WPF?
По этому свойству система делает окно контрола заблокированным (в окнах .Net это свойство Enabled). То есть можно в самом контроле установить Enable=false без использования этого свойства в скаде.
Добрый день, подскажите пожалуйста можно ли сменить стартовое изображение при загрузке Masterscada на свое личное?
Система - Режим исполнения - Настройки - Стартовая заставка.
Вначале будет отображаться заставка MasterSCADA, а когда загружается ваш проект - ваша заставка.
Добрый день.
Как я понял, нельзя интегрировать элементы WPF в ВФБ, но можно их использовать в ActiveX?
Прочитал руководство "Создание ActiveX на C#", где в самом конце описывается как создать WPF контрол.
Можно ли более подробно объяснить, как это сделать?
Пустой ActiveX сделал, работает. Обработчик событий Load добавить в контрол моего ActiveX?
ВФБ на мнемосхеме представляется как ActiveX.
Вот ссылка Microsoft по созданию WPF на Windows Forms
http://msdn.microsoft.com/ru-ru/libr...vs.110%29.aspx. Логика создания проекта одинаковая
Вот видео где видна работа ВФБ с WPF:
http://screencast.com/t/wgODtaLMl
Здравствуйте!
Можно ли произвести автоматический экспорт в файл *.csv, а не через тренд.
Если можно, то как?
Спасибо.
Можно средствами тренда - через ФБ "Управление документом".
Назначаете в настройках этого ФБ тренд, задаете начало и конец и путь сохранения файла - с расширением csv.
А можно ли вести дозапись в данный файл? Как это лучше сделать?
Спасибо
Нет, через тренд дозапись делать нельзя - пишите в новые файлы.
Дозапись можно сделать только через ФБ "Скрипт C#"
Объект имеет вкладку "Архив" с опцией удаления архивов во вложенных объектах.
Как удалить эти архивы автоматически?
Спасибо.
Архивы удаляются автоматически - скада контролирует время и объем хранения, и удаляет старые данные.
Можно только через скрипт.
Пример скрипта в приложении.
Здравствуйте. У меня следующий вопрос. Мне необходимо опросить модуль двоичных входов и выходов, а так же модуль релейных выходов. Тип данных у них написано bit field 32 и bite соответственно. Подскажите что мне нежно указать в OPC сервере, в поле тип данных.
bit Field 32 - скорее всего имеется ввиду тип Int32. Попробуйте установить данный тип в сервере и устройстве. Чередование байт нужно будут попробовать разное (обычно у четырехбайтовых чисел оно "старшим словом вперед").
Исправьте строчку:
((MasterSCADALib.IArchiveCommon)HostFB.TreeItemHlp .Parent.DataArchive).ClearArchiveContent(0);
на:
((MasterSCADALib.IArchiveCommon)((ITreeItemHlp)Hos tFB.TreeItemHlp.Project.Item("полное имя")).DataArchive).ClearArchiveContent(0);
вместо "Полное имя" нужно указать путь к элементу чей архив вы хотите удалить
Скорее всего это половина Modbus регистра, тип нужно ставить Int16.
Какой вас прибор? Приложите ссылку на документацию.