УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Генератор сигналов


Автор Сообщение
Сообщение создано: 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)долго искал проблему в коде интерполяторов, пока не понял что нужно типы явно приводить.
JAVASCRIPT
t0 = points[points.length-1].parse(0," ").toReal();
x0 = points[points.length-1].parse(1," ").toReal();

без этого была лажа, и оба интерполятора работали одинаково.
3)для того чтобы архивы писались чаще секунды надо на вкладке Архивы-История->Значения->Период получения данных поставить соответствующее число милисекунд. в документации конечно же написано, но как обычно дошло не сразу.
4) хотел для удобства попривязывать графики в обзоре архивов но привязка сохранялась сама через раз, жестко привязать на этапе проектирования тоже не вышло.

[Сообщение редактировалось 5 раз(а), в последний раз 22.03.2019 в 13:57.]
Вложенный файл

interpol0and1.JPG (Тип файла: image/jpeg, Размер: 138.57 килобайт) — 1416 загрузок
general.jpg (Тип файла: image/jpeg, Размер: 848.21 килобайт) — 1376 загрузок
modulation.png (Тип файла: image/png, Размер: 658.55 килобайт) — 1395 загрузок
SignalGen.db (Тип файла: application/octet-stream, Размер: 84 килобайт) — 1382 загрузок
testSignalGenerator.tar.gz (Тип файла: application/gzip, Размер: 177.81 килобайт) — 1417 загрузок
Сообщение создано: 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)долго искал проблему в коде интерполяторов, пока не понял что нужно типы явно приводить.
JAVASCRIPT
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:

Если строка то ему всё-равно что там и оно нормально реагирует на цифры!

вероятно у меня были не обновленные библиотеки, после обновления эта проблема ушла. но какой-то странный баг на таких тестах:
JAVASCRIPT
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", то перескоков нет.
JAVASCRIPT
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.



5312