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

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

Комбинированный просмотр

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

    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
    Адрес
    Где-то в этой стране
    Сообщений
    105

    По умолчанию

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

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

  4. #4

    По умолчанию

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

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

    По умолчанию

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

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

    MasterSCADA 3.10

  6. #6

    По умолчанию

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

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

    По умолчанию

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

    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

    По умолчанию

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

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

    По умолчанию

    Да, добавил:
    ссылку на сборку "MasterSCADA.RT.dll",
    и в код добавил "using MasterSCADA.RT.Windows.ControlContextMenu;"


    private void add_log<T>(string name, T x){
    HostFB.TreeItemHlp.Project.ErrorTracer.ReportError (name+"="+x.ToString());
    }
    void Show_Trend(){
    foreach (IDocumentHlp document in HostFB.TreeItemHlp.Project.Documents){
    IAttributeHlp attribute = document.Attribute;
    if (attribute.Opened){

    var mnemoInfo = attribute.CurrentCallInfo;
    var callType = mnemoInfo.CurrentCallType;
    add_log("mnemoInfo",mnemoInfo);
    add_log("callType",callType);

    if (attribute.DocumentInfo.Handle != 0 && callType == MasterSCADA.Interfaces.ECallType.ctWindow ){

    string path="Объект.Котельные.Значение параметра";
    var item=HostFB.TreeItemHlp.Project.Item(path);
    var ccms = (ControlContextMenuService)HostFB.TreeItemHlp.Proj ect.Services.GetService(typeof(ControlContextMenuS ervice));
    ccms.ShowTrend(HostFB.TreeItemHlp.Project, (ITreePinHlp)item, true, false, (System.IntPtr)attribute.DocumentInfo.Handle );
    return;
    }
    }
    }
    }



    1. Всё компилируется, но непонятно, что подставить в качестве "IntPtr owner": выдаёт исключение "Выполнение Котельные.Скрипт | Адресат вызова создал исключение. : 0X80131604"

    2. Как модифицировать строку "HostFB.TreeItemHlp.Project.ErrorTracer.ReportError (name+"="+x.ToString())", чтобы сообщения в лог попадали без статуса "ошибка"?

  10. #10

    По умолчанию

    Цитата Сообщение от Андрей_Б. Посмотреть сообщение

    1. Всё компилируется, но непонятно, что подставить в качестве "IntPtr owner": выдаёт исключение "Выполнение Котельные.Скрипт | Адресат вызова создал исключение. : 0X80131604"
    own = MasterSCADAHlp.Instance.MainWindowHandle;
    Спасибо.

Страница 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

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

Ваши права

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