Генератор сигналов
Автор |
Сообщение |
Сообщение создано: 22. 03. 2019 [09:49]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
Разработан генератор периодических сигналов. Для каждого сигнала можно задать Амплитуду, смещение(Offset), период или частоту (что задано позднее), фазу (в секундах или градусах). Типы сигналов:
-EValue; констана EVal
-zero; константа 0, которую можно сместить Offset'ом. т.о. любое число.
-sin;
-square; меандр
-triangle; треугольник
-saw; пила
-isaw; убывающая пила
-rand; случайное число
//все вышестоящие имеют выход -Amplitude...+Amplitude
-PWM; шим, коэффициент заполнения в доп переменной Aux [-1...1].
если Aux > 0, то Output = [0...+Amplitude] иначе [0...-Amplitude];
-interpol0;
-interpol1 интерполяторы пользовательских данных. в Aux поместить данные: каждая строка это координаты пространства 0...1,-1...1. нулевой интерполятор просто держит значение до следующей точки, интерполятор первого вида строит прямую до следующей точки. (см рис)
выход реализован связью, что позволяет записывать куда-то значения. например таким образом реализована Амплитудная и частотная модуляция(см рис).
прикладываю библиотеку и проект с примерами. к проекту привязан обзор архивов для удобства. библиотека лежала в домашней папке, возможно надо будет перепривязать.
PS
1)sel string в имени элемента не ожидает число, и неверно реагирует. поэтому тип "zero" а не "0"(вроде EVal тоже не прокатило, поэтому EValue)
2)долго искал проблему в коде интерполяторов, пока не понял что нужно типы явно приводить.
t0 = points[points.length-1].parse(0," ").toReal();
x0 = points[points.length-1].parse(1," ").toReal();
без этого была лажа, и оба интерполятора работали одинаково.
3)для того чтобы архивы писались чаще секунды надо на вкладке Архивы-История->Значения->Период получения данных поставить соответствующее число милисекунд. в документации конечно же написано, но как обычно дошло не сразу.
4) хотел для удобства попривязывать графики в обзоре архивов но привязка сохранялась сама через раз, жестко привязать на этапе проектирования тоже не вышло.
[Сообщение редактировалось 5 раз(а), в последний раз 22.03.2019 в 13:57.]
Вложенный файл
general.jpg (Тип файла: image/jpeg, Размер: 848.21 килобайт) — 1361 загрузок
modulation.png (Тип файла: image/png, Размер: 658.55 килобайт) — 1384 загрузок
SignalGen.db (Тип файла: application/octet-stream, Размер: 84 килобайт) — 1368 загрузок
|
Сообщение создано: 25. 03. 2019 [08:00]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
Разработан генератор периодических сигналов. Для каждого сигнала можно задать Амплитуду, смещение(Offset), период или частоту (что задано позднее), фазу (в секундах или градусах).
И опять не в тему, поскольку это проект в OpenSCADA, место публикации которых тут, если конечно не хотите чтобы оно тут затерялось, как и предыдущее!
"arcsin" wrote:
1)sel string в имени элемента не ожидает число, и неверно реагирует. поэтому тип "zero" а не "0"(вроде EVal тоже не прокатило, поэтому EValue)
Если строка то ему всё-равно что там и оно нормально реагирует на цифры!
"arcsin" wrote:
2)долго искал проблему в коде интерполяторов, пока не понял что нужно типы явно приводить.
t0 = points[points.length-1].parse(0," ").toReal();
x0 = points[points.length-1].parse(1," ").toReal();
без этого была лажа, и оба интерполятора работали одинаково.
Логично.
"arcsin" wrote:
4) хотел для удобства попривязывать графики в обзоре архивов но привязка сохранялась сама через раз, жестко привязать на этапе проектирования тоже не вышло.
Включен пользовательский выбор, который предусматривает и загрузку сохранённого выбора из таблицы сеанса.
Соответственно удалить эту таблицу сеанса или выключить пользовательский выбор, если оно не нужно!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 25. 03. 2019 [10:39]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
"roman" wrote:
И опять не в тему, поскольку это проект в OpenSCADA, место публикации которых тут, если конечно не хотите чтобы оно тут затерялось, как и предыдущее!
там люди разместили готовые проекты. а у это просто подключаемая библиотека (narodmon). не того уровня масштаб.
по поводу данного генератора, публиковал в разработке, так как думал что Вы включите в OscadaLibs, так полезную функцию для тестирования, отладки. В некоторых скадах (TraceMode) такую функцию видел.
"roman" wrote:
Если строка то ему всё-равно что там и оно нормально реагирует на цифры!
вероятно у меня были не обновленные библиотеки, после обновления эта проблема ушла. но какой-то странный баг на таких тестах:
0
0;1;2;3;4;5;6;7;8;10;11
EVal;sin;0;square;triangle;saw;isaw;rand;PWM;interpol0;interpol1
выбираю любой элемент кроме EVal(важно что он нулевой в списке) и 0. потом выбираю EVal. и часто(>50%) список сам перескакивает на "0". если Eval выбираю после "0", то перескоков нет.
0
0;1;2;3;4;5;6;7;8;10;11
squ;sin;1;square;triangle;saw;isaw;rand;PWM;interpol0;interpol1
на этом тесте выбираю любой элемент, кроме "sin"( важно что он первый в списке) и "1". потом выбираю "sin", и опять же в большинстве случаев выбор сам перескочет на "1"
|
Сообщение создано: 25. 03. 2019 [11:25]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
"roman" wrote:
И опять не в тему, поскольку это проект в OpenSCADA, место публикации которых тут, если конечно не хотите чтобы оно тут затерялось, как и предыдущее!
там люди разместили готовые проекты. а у это просто подключаемая библиотека (narodmon). не того уровня масштаб.
по поводу данного генератора, публиковал в разработке, так как думал что Вы включите в OscadaLibs, так полезную функцию для тестирования, отладки. В некоторых скадах (TraceMode) такую функцию видел.
Не знаю под каким соусом-категорией оно предполагалось к размещению в OscadaLibs да и смысла-необходимости в таком никогда не было, в общем-унифицированном во всяком случае: в моделях достаточно было своего специально для него предназначенного, для симуляции в отрыве от объекта есть встроенное.
"arcsin" wrote:
"roman" wrote:
Если строка то ему всё-равно что там и оно нормально реагирует на цифры!
вероятно у меня были не обновленные библиотеки, после обновления эта проблема ушла. но какой-то странный баг на таких тестах:
Второе воспроизвелось.
Оказалось это в QTCfg и из-за полного цикла обхода перечня с общей переменной имени и индекса, где на начале цикла там имя.
Исправлено!
Learn, learn and learn better than work, work and work.
|
|
|