PDA

Просмотр полной версии : Вызов формы из скрипта



qshelby
26.02.2021, 18:44
Приветствую вас! Помогите с таким вопросом. Хочу из скрипта на шарпе вызвать экран с формой. Такое вообще возможно? Вот текст скрипта. Ошибок нет, но ничего не происходит. Что я делаю не так?

public partial class ChartForm1 : Form
{
public ChartForm1()
{
//InitializeComponent();//???????
Chart myChart = new Chart();
myChart.Parent = this;
myChart.Dock = DockStyle.Fill;
myChart.ChartAreas.Add(new ChartArea("Math functions"));
Series mySeriesOfPoint = new Series("Sinus");
mySeriesOfPoint.ChartType = SeriesChartType.Line;
mySeriesOfPoint.ChartArea = "Math functions";
for (double x = -Math.PI; x <= Math.PI; x += Math.PI / 10.0)
{
mySeriesOfPoint.Points.AddXY(x, Math.Sin(x));
}
myChart.Series.Add(mySeriesOfPoint);
}
}
public override void DoAction()
{
ChartForm1 chrt=new ChartForm1();
}

SCADAMaster
26.02.2021, 21:23
Нет, не возможно.
Делайте ВФБ.

qshelby
28.02.2021, 10:51
Тогда есть другой вопрос. Мне нужно сделать график зависимости XY. У меня есть уже готовые массивы X и Y, и нужно бросить на график все данные сразу. Но если делать как в примере на сайте мастерскады, то данные не обновляются и график не рисуется. Ведь в примере данные постоянно поступают новые, и в этот момент идёт обновление графика, а у меня данные поступают единожды. Не подскажете, что здесь нужно сделать? Или всё таки тот пример должен работать и в моём случае?

SCADAMaster
01.03.2021, 09:43
Что значит единожды?
Вам нужно просто архив сгенерировать:
https://insat.ru/blog/fb-skript-c-i-ego-ispolzovanie-v-masterscada-generatsiya-arkhiva/
Эти переменные кинуть в тренд, и передать начало и конец

qshelby
01.03.2021, 14:44
Большое спасибо за ответы! Но, всё равно конструкция работает как-то неважно. У меня массивы генерируются в DoAction, и я хочу видеть их на графике. Но как-то всё работает через пень-колоду. Так, например, иногда после генерации данных и записи в архив через SetValue("argX", new PinValue( argX, dt_start.AddMilliseconds(mils) )) данные не появляются во вкладке "Данные" по соответствующей переменной. Я так понимаю, это отображение содержимого архива? Соответственно их нет и на графике. А иногда они там появляются. Точно можно сказать, что они там появляются после завершения режима рантайм. Но такой вариант естественно не устраивает. Также заметил, что если на графике повключать-повыключать перья, то нужный график может появиться. Еще уточню, у меня генерируется массив на 4000 точек, это как-то может повлиять? Можно ли их записывать через SetValue с виртуальным интервалом между отсчётами в 1 мс?

SCADAMaster
01.03.2021, 15:07
А вы генерируете их монотонно?
Нельзя записать в архив например сначала за 12:00, а потом за 11:00.
Пример из блога у вас нормально работает?

qshelby
01.03.2021, 15:14
При каждом новом сеансе начальное время берётся через now(). То есть да, монотонно. Примеры из блога работают, но они отличаются тем, что там медленный темп поступления данных, и данные поступают в процессе всего сеанса. У меня же все данные пишутся в архив в быстром цикле, а потом уже я вызываю мнемосхему с трендом.

qshelby
01.03.2021, 15:30
Ещё такой вопрос задам, можно ли на линию тренда нанести маркеры точек, что бы можно было видеть сами точки, из которых составлен тренд. А также, как можно уменьшить толщину линии тренда, так как даже при толщине 1 линия слишком толстая.

SCADAMaster
01.03.2021, 15:31
Попробуйте перенастроить архивацию на Firebird (встроенный), и проверить в таком режиме.

SCADAMaster
01.03.2021, 15:37
Ещё такой вопрос задам, можно ли на линию тренда нанести маркеры точек, что бы можно было видеть сами точки, из которых составлен тренд. А также, как можно уменьшить толщину линии тренда, так как даже при толщине 1 линия слишком толстая.
В продвинутом уровне, выделяете перо. Линия - Ширина - вводите ширину.
Графическая точка - указываете нужный тип, и ниже выключаете Точки равномерно.

qshelby
01.03.2021, 17:18
Переделал на Firebird, но всё равно данные во вкладке "Данные" по параметру появляются только после выхода из рантайма. Может быть в скрипте надо использовать какую-то команду, что бы она принудительно скидывала данные?

SCADAMaster
01.03.2021, 18:32
Откуда вы берете данные?
Сделайте тестовый пример на котором проблема проявляется и пришлите его нам (проект - Экспортировать)

qshelby
02.03.2021, 12:57
Высылаю проект. Заметил, что после запуска рантайма данные отобразятся на графике только после того, как выключить-включить каждое из перьев. Ещё заметил, что в настройке вертикальной оси значений постоянно слетают те настройки, где задаётся argY. Это Связанные свойства: Внешний вид, Окно Y. То есть, задаёшь туда argY, сохраняешь, закрываешь проект, открываешь снова- ячейка пустая. То же самое, если запустить рантайм-ячейка будет пустая, нужно задавать значение при каждом старте рантайма. Иногда то же бывает с горизонтальной осью значений 1, argX исчезает.

SCADAMaster
02.03.2021, 13:35
for (int i = 0; i < 4096; i++)
{
argX=i; argY= 2*Math.Sin((float)i/100);//outSamples[i];
DateTime end1;
end1=DateTime.Now;
end=end1;
SetValue("argX", new PinValue( argX, end1 ));
SetValue("argY", new PinValue( argY, end1 ));

}
Это вы ерунду написали.
Исправленный пример в приложении

qshelby
02.03.2021, 14:04
Извините, но я не вижу принципиальной разницы между вашим вариантом и моим, к тому же такой вариант как у вас (через AddMilliseconds) я тоже использовал. Вот ваш вариант:

for (int i = 0; i < 4096; i++)
{
argX=i; argY= 2*Math.Sin((float)i/100);//outSamples[i];
Start=Start.AddMilliseconds(1);
SetValue("argX", new PinValue( argX, Start ));
SetValue("argY", new PinValue( argY, Start ));

}
Ну называлась переменная end, стала называться start, ну дельта немного другая будет. Функцию то они одинаковую выполняют. А пример как не работал, так и не работает. Почему при вызове мнемосхемы шкала на тренде для горизонтальной оси не 0-4095, а 0-100? Куда исчезли предустановленные настройки шкал? Господа, у кого нибудь работает этот пример из коробки? Там при нажатии DoAction в скрипте на мнемосхеме должна отобразиться синусоида. Но у меня её нет, к сожалению.

SCADAMaster
02.03.2021, 15:28
Да, есть какие то проблемы с формированием архива большого количества значений из скрипта.
Посмотрим что можно сделать

SCADAMaster
09.03.2021, 16:19
Доработанный пример в приложении.
Ошибка была в строке:
argX=i; argY= 2*Math.Sin((float)i/100);//outSamples[i];
Вы этим записывали и текущее значение тоже, что и приводило к тому что более старые значения в архив не писались.