Страница 5 из 6 ПерваяПервая ... 3456 ПоследняяПоследняя
Показано с 41 по 50 из 56

Тема: Создание отчета в Мастер-скада3

  1. #41

    По умолчанию

    var param=list[0];
    В скрипте берется нулевое перо (самое первое в легенде), а вам нужно другое перо.
    Спасибо.

  2. #42

    По умолчанию

    using System;
    using System.Windows;
    using System.Threading;
    using System.Linq;
    using MasterSCADA.GUI;
    using InSAT.Library.Gui.Windowless;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using System.Windows.Forms;
    using MasterSCADA.Trend.Controls;
    using MasterSCADA.Trend.Helpers;
    using MasterSCADA.Trend.Services;
    using MGDesign.MasterSCADA;
    using MGDesign.Hosts;
    using MGDesign.Items;
    using System.Collections.Generic;
    using MasterSCADA.RT;
    using MasterSCADA.Graph.Objects;

    public partial class ФБ : ScriptBase
    {
    bool? M=false;
    string ИМЯ_ТРЕНДА = "Тренд";
    string ИМЯ_ОКНА = "Мнемосхема";
    public override void Execute()
    {

    if (Применить==true && M==false)
    {
    if (!День.HasValue || !X1.HasValue || !X2.HasValue || !X3.HasValue || !X4.HasValue || !X5.HasValue ||
    !Y1.HasValue || !Y2.HasValue || !Y3.HasValue || !Y4.HasValue || !Y5.HasValue)
    {
    Ошибка="Не заданы все параметры";
    return;
    }
    DateTime Start=День.Value.Date;
    Начало=Start;
    Конец=Start.AddDays(1);
    //System.Diagnostics.Debug.Assert(false);
    //Ссылка на текущий проект
    var проект = HostFB.TreeItemHlp.Project;
    //получаем корневой объект
    var объект = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
    //получаем тренд
    RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
    {
    foreach (Trend trend in проект.GetService<TrendService>().Opened)
    {
    var host = trend.Host as System.Windows.Forms.Control;
    if (host!=null)
    {
    Object name = WinFormsControlBase.GetAmbientProperty(host, WindowlessControlBase.DISPID.DISPID_AMBIENT_NAME);
    if (name.ToString()!=ИМЯ_ТРЕНДА || trend.Attribute.TreeItem.ID!=объект.ID || trend.Attribute.DisplayName!=ИМЯ_ОКНА) continue;
    //получаем коллекцию перьев
    var list = trend.Settings.Objects.OfType<MasterSCADA.Graph.Ob jects.UserGraph2D>().ToList();
    //получаем нулевое перо
    var param=list[0];
    param.XMLTableValues = new GraphFigureCollection
    {
    new GraphFigure
    {
    Coords = new CoordCollection
    {
    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X1.Value.TimeO fDay).ToOADate(), Y1.Value)},
    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X2.Value.TimeO fDay).ToOADate(), Y2.Value)},
    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X3.Value.TimeO fDay).ToOADate(), Y3.Value)},
    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X4.Value.TimeO fDay).ToOADate(), Y4.Value)},
    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X5.Value.TimeO fDay).ToOADate(), Y5.Value)},

    }
    }
    };
    }
    }
    }));
    }
    M=Применить;
    }
    }

    .................................................. ..
    Start.Date.ToUniversalTime()+X1.Value.TimeOfDay).T oOADate() — это печатает относительно
    координаты времени
    а если я ставлю ось вещественную , то где осуществляется к ней привязка- в свойствах оси ?
    а если меняю эту запись на
    Point(X1.Value, Y1.Value)
    - почему бьет ошибку?
    где указывается, что первый аргумент у функции
    POINT в этой программе должен быть временным?
    Последний раз редактировалось in37usd; 24.04.2021 в 12:31.

  3. #43

    По умолчанию

    Потому что это график, и точка на графике должна иметь привязку ко времени.
    Поэтому вам в любом случае нужно формировать точку в меткой времени.
    Если нужно выводить значения с привязкой к оси значений X, то просто прибавляйте Start.Date.ToUniversalTime() сколько вам нужно секунд (то ест значение координаты X). Ось времени потом сделаете невидимой.
    Спасибо.

  4. #44

    По умолчанию

    Мне нисколько не нужно ни минут ни секунд- мне надо время исключить СОВЕРШЕННО!
    в программу на C# надо передать один хотя бы массив точек , а лучше два, и построить один , а лучше два графика по точкам
    я брал просто два массива в программе и строил на их основе два графика , не зависящие от времени

    int[] YH = { 45, 50, 52, 57, 58, 59, 60, 61, 62, 63 }, YL = { 5, 6, 8, 9, 7, 1, 2, 3, 4, 5 };
    for (int x = 0; x < 10; x++)
    {
    chart1.Series[0].Points.AddXY(x * 10, YH[x]);
    chart1.Series[0].Points.AddXY(x * 10, YL[x]);
    }

    а потом между ними будет строиться третий график, на основе двух переменных от
    OPC-сервера- все совершенно не должно зависеть от времени!
    то есть первые два графика - допустимый "коридор" для третьего графика
    третий график должен идти между первыми двумя и не касаться их визуально
    третий график мы уже с Вами построили- см выше!
    меня совершенно устроили бы точки на основе массива(массивов) в программе

    int[] YH = { 45, 50, 52, 57, 58, 59, 60, 61, 62, 63 }, YL = { 5, 6, 8, 9, 7, 1, 2, 3, 4, 5 };
    а "передвигаться " по координате X можно с помощью цикла наращивания Х:
    ///////////////////////////////////////////////////////
    for (int x = 0; x < 10; x++)
    {
    chart1.Series[0].Points.AddXY(x * 10, YH[x]);
    chart1.Series[0].Points.AddXY(x * 10, YL[x]);
    }
    Последний раз редактировалось in37usd; 24.04.2021 в 21:31.

  5. #45

    По умолчанию

    Еще раз - это тренд, тренд по определению - это временной ряд.
    Как сделать - мы вам описали, делаете точку с привязкой ко времени - прибавляете пропорциональное количество секунд к Start.Date.ToUniversalTime()
    int[] YH = { 45, 50, 52, 57, 58, 59, 60, 61, 62, 63 }
    Вот и прибавляйте к Start.Date.ToUniversalTime() 45, 50 и т.д. Временную ось потом скроете и добавите горизонательную ось значений
    Спасибо.

  6. #46

    По умолчанию

    Вроде заработало
    По графику, который делали выше пару страниц-
    1)как делать очистку -сброс "RESET" всего графика?
    2)сохранять пробовал во внешний файл типа ACSESS- там пусто!
    и где почитать , как сохраняют график в таблице на форме
    Последний раз редактировалось in37usd; 27.04.2021 в 06:05.

  7. #47

    По умолчанию

    Цитата Сообщение от in37usd Посмотреть сообщение
    1)как делать очистку -сброс "RESET" всего графика?
    Вот так можно сделать:
    param.XMLTableValues=new GraphFigureCollection();


    Цитата Сообщение от in37usd Посмотреть сообщение
    2)сохранять пробовал во внешний файл типа ACSESS- там пусто!
    Сохранять что? Если делать экспорт в Access данных, то в случае с задающим графиком сохранять нечего - так как данные существует только на тренде, а в архиве их нет.
    Если же график зависимости - должен экспортироваться.
    Посмотрите документацию
    https://insat.ru/products/?category=1525
    Архивы MasterSCADA

    Цитата Сообщение от in37usd Посмотреть сообщение
    и где почитать , как сохраняют график в таблице на форме
    В виде таблицы?
    Вкладка Значение.
    Если нужно автоматизированно - с помощью ФБ "Управление документом". В документации Архивы MasterSCADA это описывается
    Спасибо.

  8. #48

    По умолчанию

    смотрю в Visual studio выполнение кода C#
    как посмотреть значение переменных в точке остановки
    для строчки

    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X5.Value.TimeO fDay).ToOADate(), Y5.Value)},???
    точка остановки ниже
    Последний раз редактировалось in37usd; 29.04.2021 в 10:56.

  9. #49

    По умолчанию

    ///////////////
    Последний раз редактировалось in37usd; 29.04.2021 в 10:31.

  10. #50

    По умолчанию

    Цитата Сообщение от in37usd Посмотреть сообщение
    смотрю в Visual studio выполнение кода C#
    как посмотреть значение переменных в точке остановки
    для строчки

    new Coord {Logic = new Point((Start.Date.ToUniversalTime()+X5.Value.TimeO fDay).ToOADate(), Y5.Value)},???
    точка остановки ниже
    Разбиваете на несколько промежуточных переменных и смотрите для них.
    вида
    var startTime=Start.Date.ToUniversalTime();
    var startTimeWithValue=startTime+X5.Value.TimeO fDay;
    и тд
    их же потом и используете в этой переменной
    Logic = new Point((startTimeWithValue).ToOADate(), Y5.Value)
    Спасибо.

Страница 5 из 6 ПерваяПервая ... 3456 ПоследняяПоследняя

Похожие темы

  1. Создание единого отчета (типизация)
    от shamilnizaev@mail.ru в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 13.11.2018, 07:41
  2. Словарь отчета
    от Vitamin в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 26.12.2017, 13:33
  3. Масштаб отчета
    от VVS_123 в разделе Master SCADA 3
    Ответов: 13
    Последнее сообщение: 22.12.2014, 13:19
  4. Удаление отчета
    от klg в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 05.11.2014, 14:29
  5. Ответов: 5
    Последнее сообщение: 07.09.2011, 09:36

Ваши права

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