Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 14

Тема: C# - как отобразить параметр из своего ВФБ на тренде?

  1. #1
    Пользователь
    Регистрация
    05.06.2019
    Адрес
    Где-то в этой стране
    Сообщений
    27

    Unhappy C# - как отобразить параметр из своего ВФБ на тренде?

    День добрый!
    Написал на C# свой визуальный ФБ: отображает параметр, получаемый на входе.
    Из контекстного меню на ВФБ вызываются его настройки и, планировался - график!
    Не нашёл в документации, как на C# вызвать окно тренда и заставить его отображать параметр?
    Как в этом случае тренд будет обращаться к архиву?
    MasterSCADA 3.10

    Единственное, что накопал:

    Код:
    using MasterSCADA.Trend;
    //.......
    TrendViews MyTrend;
    //.......
    MyTrend = new TrendViews(); // конструктор выполняется, но ничего не происходит.
    ВФБ наследован от класса VisualControlBase.
    Последний раз редактировалось Андрей_Б.; 26.06.2019 в 09:06.

  2. #2

    По умолчанию

    Можно воспользоваться ControlContextMenuService.ShowTrend(IProjectHlp project, ITreePinHlp item, bool isTable, bool isJournal, IntPtr owner)
    Для получения к нему доступа можно попробовать:
    var ccms = project.Services.GetService(typeof(ControlContextM enuService)) as ControlContextMenuService;
    ccms.ShowTrend(.....);


    вот код этого метода внутри:
    public void ShowTrend(IProjectHlp project, ITreePinHlp item, bool isTable, bool isJournal, IntPtr owner)
    {
    Type serviceType = ObjectFactoryService.Instance.GetType("MasterSCADA .Trend.Services.TrendService", false);
    var fac = project.Services.GetService(serviceType) as ITrendService;
    if (fac == null)
    throw new InvalidOperationException("Нет доступа к сервису TrendService");


    var param = new OpenTrendParameters
    {
    Item = item.GetParent(EParentType.ptFolder),
    Parameters = new List<ITreePinHlp> {item},
    Owner = owner,
    AutoScroll = true,
    DocType = EDocType.dtTrend,
    Title = item.DisplayName
    };
    if (isTable)
    param.View = "6F665323-E320-477B-94A3-440010AF0943";

    if (isJournal)
    {
    param.DocType = EDocType.dtJournal;
    param.View = "9E720E6A-5823-48B2-8EC3-DFC912E71761";
    param.EventsEnabled = true;
    param.EventFilters = new FilterCollection
    {
    new EventFilterData
    {
    SourceList = new List<string> {"#" + item.ID},
    AlwaysIncludeCurrentObject = false,
    Checked = true
    }
    };
    }

    var window = fac.Open(param);
    if (window != null)
    {
    List<Window> list;
    if (!_openedWindows.TryGetValue(owner, out list))
    {
    list = new List<Window>();
    _openedWindows.Add(owner, list);
    }
    list.Add(window);
    window.Closed += (sender, args) => list.Remove(window);
    }
    }
    Спасибо.

  3. #3
    Пользователь
    Регистрация
    05.06.2019
    Адрес
    Где-то в этой стране
    Сообщений
    27

    По умолчанию

    Судя по определению "var" этот код должен исполняться непосредственно в блоке "C# Скрипт" МастерСКАДА.
    Вообще-то я блок писал в Visual Studio, и не хотел бы дополнительные ФБ прикручивать...
    ВФБ наследован от класса VisualControlBase.

    Раз на то пошло, в каком пространстве имен находятся ControlContextMenuService и ControlContextM?
    Последний раз редактировалось Андрей_Б.; 26.06.2019 в 09:06.

  4. #4

    По умолчанию

    MasterSCADA.RT.Windows.ControlContextMenu
    Спасибо.

  5. #5
    Пользователь
    Регистрация
    05.06.2019
    Адрес
    Где-то в этой стране
    Сообщений
    27

    По умолчанию

    Не нашёл компилятор:

    (CS0234) Имя типа или пространства имен "Windows" отсутствует в пространстве имен "MasterSCADA.RT" (пропущена ссылка на сборку?)

    MasterSCADA 3.10

  6. #6

    По умолчанию

    Попробуйте у скрипта, на вкладке Настройки прописать ссылку на сборку:
    MasterSCADA.RT.dll
    Спасибо.

  7. #7
    Пользователь
    Регистрация
    05.06.2019
    Адрес
    Где-то в этой стране
    Сообщений
    27

    По умолчанию

    Помогло. Ругается дальше на строчку:

    var ccms = project.Services.GetService(typeof(ControlContextM enuService)) as ControlContextMenuService;

    Ругательства:

    Строка 186 - Котельные.Контроль значений.hint.Скрипт : (CS1026) ожидалась )
    Строка 186 - Котельные.Контроль значений.hint.Скрипт : (CS1002) ожидалась ;
    Строка 186 - Котельные.Контроль значений.hint.Скрипт : (CS1525) Недопустимый терм ")" в выражении
    Строка 186 - Котельные.Контроль значений.hint.Скрипт : (CS1002) ожидалась ;
    Строка 186 - Котельные.Контроль значений.hint.Скрипт : (CS1525) Недопустимый терм ")" в выражении


    Исправил так:

    ControlContextM enuService;
    var ccms = (ControlContextMenuService)HostFB.TreeItemHlp.Proj ect.Services.GetService(typeof(enuService));


    Всё одно ругается:

    Строка 190 - Котельные.Контроль значений.hint.Скрипт : (CS0246) Не удалось найти имя типа или пространства имен "ControlContextM" (пропущена директива using или ссылка на сборку?)
    Строка 191 - Котельные.Контроль значений.hint.Скрипт : (CS0246) Не удалось найти имя типа или пространства имен "enuService" (пропущена директива using или ссылка на сборку?)


    Типа ControlContextM в MasterSCADA.RT.Windows.ControlContextMenu видимо нет..

  8. #8
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    6,519

    По умолчанию

    насколько помню, using может применяться так же и при вызове внутри кода. Но не копал эту тему, просто видел в примерах такое.

  9. #9
    Пользователь
    Регистрация
    05.06.2019
    Адрес
    Где-то в этой стране
    Сообщений
    27

    По умолчанию

    Ещё вопрос:

    ControlContextMenuService.ShowTrend(IProjectHlp project, ITreePinHlp item, bool isTable, bool isJournal, IntPtr owner)

    owner - это я так понимаю указатель на родительское окно.. Нужен, чтобы при закрытии родительского окна закрылся и тренд.. Это указатель тот же, что используется в WinAPI? Или какой-то свой? Как мне его заполучить?

  10. #10

    По умолчанию

    Цитата Сообщение от Андрей_Б. Посмотреть сообщение
    Типа ControlContextM в MasterSCADA.RT.Windows.ControlContextMenu видимо нет..
    Так вы using добавили?
    MasterSCADA.RT.Windows.ControlContextMenu
    Спасибо.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Отобразить/Спрятать контрол ВФБ
    от Vinsen в разделе Master SCADA 3
    Ответов: 9
    Последнее сообщение: 21.12.2017, 10:36
  2. Создание своего ФБ
    от Александр N в разделе Master SCADA 3
    Ответов: 11
    Последнее сообщение: 13.11.2016, 20:43
  3. Ответов: 6
    Последнее сообщение: 05.10.2016, 10:57
  4. Отобразить название устройства
    от ALEXSP в разделе Master SCADA 3
    Ответов: 8
    Последнее сообщение: 27.11.2015, 16:58
  5. как отобразить состояние мдвв
    от bob_grin в разделе OWEN Proces Manager
    Ответов: 3
    Последнее сообщение: 20.12.2010, 21:55

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •