Segnetics

Вернуться   Segnetics > Общий > Вопросы о программировании

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2017, 13:31   #61
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Ответ: Обмениваемся своими макросами

Натурные испытания показали следующее.

Исходная позиция - стандартный проект приточки с водяным нагревом, голый 25-й пиксель без датчиков.

1. Вставлен макрос без циклов. Опрос 32 входа.
Тик без макроса 77-80мс, с макросом 88-90.
Время реакции выходов макроса на изменение входов около 6 секунд.

2. Вставлен макрос с циклами, те же 32 входа
Тик 115-117мс. Время реакции около 2 секунд.

Время засекал "на глазок", считая про себя примерно по секунде Тем не менее, разница слишком заметна.

В итоге получается, что с циклами вся программа отрабатывает в 3 раза быстрее. Причем получаем актуальные данные на выходе в том же цикле работы всей программы, в котором меняются входы, что может оказаться востребованным в некоторых ситуациях.

Буду весьма признателен, если кто-то предложит более быструю и не сильно более многоблочную реализацию.
ViS вне форума   Ответить с цитированием
Старый 20.08.2017, 15:13   #62
alex.vas
Senior Member
 
Аватара для alex.vas
 
Регистрация: Jul 2009
Сообщения: 134
По умолчанию Ответ: Обмениваемся своими макросами

Решил поделиться макросом "Соотношение топливо-воздух" работает по алгоритму минитерма 400.00 производство МЗТА. В данном макросе один корректирующий коэффициент.
Может кто делал с 4 точками как в Минитерм 400.04 поделитесь.
Вложения
Тип файла: msl Топливо-Воздух МЗТА.msl (18.0 Кбайт, 28 просмотров)
alex.vas вне форума   Ответить с цитированием
Старый 30.08.2017, 07:00   #63
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 531
По умолчанию Ответ: Обмениваемся своими макросами

Универсальный PID-регулятор v4


Код:
Init start    - всегда равен 1, начальный сброс регулятора
Invers        - вход для инверсии регулятора. 0 = прямой регулятор, 1 = обратный.
In            - вход
Set           - Уставка
Dead Zone     - нейтральная зона, в которой ошибка всегда равно нулю или, что тоже самое, 
                уставка Set всегда равна значению входа In.
                При выходе In из этой зоны вверх, к значению уставки Set прибавляется значение DeadZone
                и, тоже самое, вниз, от значения уставки Set отнимается значение DeadZone

Pb[0...1000]  - коэффициент пропорциональности / 1000, множитель только перед пропорциональной 
                составляющей регулятора, кое-где в литературе его называют коэфф-м байпаса.

Pr[0...1000]  - коэффициент робастностсти / 1000, множитель перед всем ПИД-регулятором, 
                как в конструторском регуляторе, если задать Pb=1000, то Pr будет в точности выполнять 
                ту же самую функцию. Если Pr = 1000, то регулятор станет классической формы с несвязанными коэффициентами.
Pd[0...1000]  - коэффициент интегрирования дифференциала / 1000, множитель перед слагаемым что интегрируется вместе с ошибкой.
                при Pd = 0 регулятор имеет классическую форму. при Pd = 1000 интегрируется сумма ошибки и дифференциала
                в некоторых случаях применение этого  коэффициента позволяет улучшить переходную характеристику

I, сек        - интегральный коэффициент, постоянная времени интегрирования. 
                I=0 отключает и сбрасывает на SetCentr интеграл
D, сек        - дифференциальный коэффициент, постоянная времени дифференцирования

Out min       - минимум выхода PID регулятора, изменение сбрасывает интеграл к SetCentr[%PID]
Out max       - максимум выхода PID регулятора, изменение сбрасывает интеграл к SetCentr[%PID]

Reset         - вход центрирования интеграла, сброс интеграла к значению на входе SetCentr[%PID]
SetCentr[%PID]- значение центра регулятора в процентах от изменения выхода

Load          - вход загрузки в интеграл значения со входа PreSet[%PID]
PreSet[%PID]  - вход предустановки выхода PID регулятора в процентах от изменения выхода

**** изменение тика системы сбрасывает интеграл к SetCentr[%PID]

Out min и Out max можно задавать и положительными и отрицательными
например, 
Out min = -1000
Out max = +1000
SetCentr = 0
выход ПИД-регулятора начнёт работу с нуля и в зависимости от ошибки будет стремиться либо к +1000 либо к -1000
Вложения
Тип файла: msl PID v4.msl (83.7 Кбайт, 57 просмотров)


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 01.11.2017, 21:49   #64
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 1 531
По умолчанию Ответ: Обмениваемся своими макросами

исправления
некорректно работала мертвая зона при включенной инверсии по входу
добавлена инверсия выхода
Вложения
Тип файла: msl PID v4-1.msl (96.7 Кбайт, 63 просмотров)


__________________
C уважением, LordN
LordN вне форума   Ответить с цитированием
Старый 22.06.2018, 17:21   #65
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Ответ: Обмениваемся своими макросами

Что-то надоело каждый раз по макросам шариться и биты искать-смотреть, когда при допиле конструкторской программы приходится код CPU менять. А по сему вот - простенький макрос дешифратор-шифратор кода, и экселевский листик для оффлайна. Авось сгодится кому.

Команда CPU.msl
Код CPU.zip

P.S. Добавьте ж уже в разрешенные для зарузки расширения фйлов .xlsX, .docX и т.д.
ViS вне форума   Ответить с цитированием
Старый 14.08.2018, 00:13   #66
vitkursk
Новичок
 
Регистрация: Oct 2013
Сообщения: 5
По умолчанию относительная влажность в абсолютную

может быть кому-то пригодится, от-30 до +30, точность около 0.1%
Вложения
Тип файла: msl пересчет влажности.msl (5.0 Кбайт, 9 просмотров)
vitkursk вне форума   Ответить с цитированием
Старый 15.08.2018, 17:37   #67
Gel
Member
 
Регистрация: Nov 2017
Сообщения: 79
По умолчанию Ответ: Обмениваемся своими макросами

Набор макросов для типов BOOL, INT, LONG и REAL для задания константных значений.

Вторая версия макросов имеет защиту от дурака и дополнительную функциональность.

Каждый макрос имеет простейшее содержимое, на основе блока MUX следующего вида:



На входе V задается значение, которое потом транслируется
потребителям.

Вход "dumb" (пустышка) может использоваться для
закольцовывания выхода, что бы сохранить
название именованной связи, пока она
не подключена к нужному входу или входам.

Так же, закользовывание позволяет гарантировать
сохранение названия связи, если она удаляется где-то
в схеме.


Так же, добавлен файл для тестирования макросов (const-test 2.0.0.psl) с содержимым:

Миниатюры
Нажмите на картинку для увеличения

Название:  const.png
Просмотров: 227
Размер:  16.0 Кбайт   Нажмите на картинку для увеличения

Название:  const-test.png
Просмотров: 225
Размер:  17.0 Кбайт  
Вложения
Тип файла: msl BOOLCONST 2.0.0.msl (3.1 Кбайт, 2 просмотров)
Тип файла: msl INTCONST 2.0.0.msl (3.1 Кбайт, 2 просмотров)
Тип файла: msl LONGCONST 2.0.0.msl (3.1 Кбайт, 2 просмотров)
Тип файла: msl REALCONST 2.0.0.msl (3.1 Кбайт, 2 просмотров)
Тип файла: psl const-test 2.0.0.psl (629.9 Кбайт, 3 просмотров)
Gel вне форума   Ответить с цитированием
Старый 17.08.2018, 16:57   #68
Gel
Member
 
Регистрация: Nov 2017
Сообщения: 79
По умолчанию Ответ: Обмениваемся своими макросами

Макросы для организации битовых сдвигов для 32-битных значений на основе блоков MUX:

"SHLN (32)" -- cдвиг на N бит влево;
"SHRN (32)" -- cдвиг на N бит вправо;

"SHL (32)" -- cдвиг на 1 бит влево;
"SHR (32)" -- cдвиг на 1 бит вправо.

Данная реализация, в отличие от макросов в теме "Библиотечка разработчика" работают гораздо быстрее.

Например, 10000 блоков старого макроса "SHL (32)" на SMH4 отработали более, чем за 900 мс. А моя версия из 10000 блоков отработала за 5 мс.

В приложенном архиве "shift.zip" так же находится проект для тестирования макросов "long-shift-test 1.0.0.psl".


Предупреждение от Арсения: данные макросы требуют большого количества памяти, их применение на контроллерах SMH2010, Pixel и SMH2G крайне не рекомендуется.
Вложения
Тип файла: zip shift.zip (42.4 Кбайт, 6 просмотров)

Последний раз редактировалось Arsie, 17.08.2018 в 18:22
Gel вне форума   Ответить с цитированием
Старый 04.09.2018, 19:43   #69
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Селектор 6-стабильный.

Селектор на 6 стабильных положений. Избавлен от недостатков триггера из библиотеки.
Имеет предустановку выходов, сброс, режим "зависания".
Нажмите на картинку для увеличения

Название:  Селектор.JPG
Просмотров: 38
Размер:  106.3 Кбайт
Вложения
Тип файла: msl Селектор 6-стабильный.msl (53.2 Кбайт, 12 просмотров)
ViS вне форума   Ответить с цитированием
Старый 05.09.2018, 10:05   #70
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 9 771
По умолчанию Ответ: Селектор 6-стабильный.

Цитата
Сообщение от ViS Посмотреть сообщение
Селектор на 6 стабильных положений. Избавлен от недостатков триггера из библиотеки.
Имеет предустановку выходов, сброс, режим "зависания".
Вложение 5437
Честно говоря, в тексте есть неувязки. Если ^S одновременны, то это подразумевает, что они перешли из 0 в 1 одновременно. Кто главнее?

Оправдание, что вы написали для уровней, не подходит, т.к. входы обозначены как "фронтальные". Понятия "уровень" для них отсуствует.

Также хотелось бы от вас получить информацию о недостатках, которые присущи стандартному 6-стабильному триггеру. Причём это должны быть не недостатки вида "не стирает носки и не носит пива", т.е. он должен плохо работать именно в расчётных для себя режимах.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 06.09.2018, 10:53   #71
Gel
Member
 
Регистрация: Nov 2017
Сообщения: 79
По умолчанию Ответ: Обмениваемся своими макросами

Макрос LAZY: "Ленивое" изменение логического сигнала.

Ленивое изменение логического сигнала с порогом срабатывания Threshold. Для смены значения выходов входные значения должны продержаться без изменений указанное количество циклов.

Выход Z принимает значение 1, если сигнал V держится в 0 достаточно долго. При этом, выход NZ устанавливается в 0.

Выход NZ принимает значение 1, если сигнал V держится в 1 достаточно долго. При этом, выход Z устанавливается в 0.

Оба выхода Z и NZ одновременно принимают значение 0, если сигнал Err держится достаточно долго в 1. Если Err равно 1, то смена значения V не влияет на то, как быстро обнулятся Z и NZ.

Значение Threshold может быть 0, это означает, что реакция выхода будет без задержки, а наличие сигнала Err сразу сбросит Z и NZ в 0.

Значение Threshold, равное N означает, что значение должно продержаться N циклов (переходов между циклами) без изменения.


Вложения
Тип файла: msl LAZY 1.0.0.msl (11.0 Кбайт, 3 просмотров)
Gel вне форума   Ответить с цитированием
Старый 06.09.2018, 13:01   #72
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Ответ: Селектор 6-стабильный.

Цитата:
Сообщение от Arsie Посмотреть сообщение
Честно говоря, в тексте есть неувязки. Если ^S одновременны, то это подразумевает, что они перешли из 0 в 1 одновременно. Кто главнее?

Оправдание, что вы написали для уровней, не подходит, т.к. входы обозначены как "фронтальные". Понятия "уровень" для них отсуствует.

Также хотелось бы от вас получить информацию о недостатках, которые присущи стандартному 6-стабильному триггеру. Причём это должны быть не недостатки вида "не стирает носки и не носит пива", т.е. он должен плохо работать именно в расчётных для себя режимах.
Есть некоторая неопределенность в описании, соглашусь, пожалуй. Смотря как читать

Одновременно активны и одновременно перешли из 0 в 1 - суть вещи разные. Перейти могут в разное время и оставаться активными сколь угодно долго. Так как входы именно, что "фронтальные", то вход, единожды став активными и оставаясь таковым, не влияет на работу остальных входов.

При одновременном переходе из 0 в 1 - папой будет вход с меньшим или с большим номером, на выбор. Вот тут мой косяк - выложил не ту версию, в которой это еще было упущено.

Недостатком библиотечного является то, что у него как раз входы работают как "уровневые", а не "фронтальные" - если на одном уже висит 1 и приходит еще одна на другой, то все выходы обнуляются и селектор становится не работающим, пока не обнулишь все входы. Соответственно те же нули на выходах получим, если произойдет одновременный переход из 0 в 1 на 2+ входах. То есть, при данном развитии событий селектор просто не рабочий. (Вроде не пиво с носками )

Позже сегодня выложу обновленную версию V2, в которой можно будет задавать приоритетность каждого входа при одновременном переходе из 0 в 1. Постараюсь в описании быть поточнее.
ViS вне форума   Ответить с цитированием
Старый 06.09.2018, 13:41   #73
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 9 771
По умолчанию Ответ: Селектор 6-стабильный.

Цитата
Сообщение от ViS Посмотреть сообщение
Одновременно активны и одновременно перешли из 0 в 1 - суть вещи разные.
Для фронтов и спадов активность - это момент перехода. Остальное - пассив.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 06.09.2018, 13:54   #74
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Ответ: Обмениваемся своими макросами

ОК.
Сформулируем так - активна 1 на входе, а не сам вход Так как вход таки фронтальный, то при активной 1 на нем, он после отработки активности по фронту остается в благости и неге переходит в пассивный режим и не влияет на работу остальных.

Нажмите на картинку для увеличения

Название:  1606398_680318708698083_794952526_o.jpg
Просмотров: 26
Размер:  63.2 Кбайт
ViS вне форума   Ответить с цитированием
Старый 06.09.2018, 14:01   #75
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 9 771
По умолчанию Ответ: Обмениваемся своими макросами

Цитата
Сообщение от ViS Посмотреть сообщение
ОК.
Сформулируем так - активна 1 на входе, а не сам вход Так как вход таки фронтальный, то при активной 1 на нем, он после отработки активности по фронту остается в благости и неге переходит в пассивный режим и не влияет на работу остальных.
Можно сколько угодно показывать всякие картинки и за какие угодно уши притягивать объяснения, но активность сигнала - это когда сигнал в активной форме.

Активных форм для логического сигнала четыре: фронт, единица, спад и ноль. В любом сочетании.

У вашего сигнала активное состояние - фронт. Все остальные формы игнорируются, т.е. пассивны.

Повторю ещё раз: понятие "единица" и "активен" - не тождественны. Активным может быть и ноль.


__________________
Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 06.09.2018, 16:06   #76
ViS
Senior Member
 
Регистрация: Aug 2010
Сообщения: 526
По умолчанию Ответ: Обмениваемся своими макросами

Цитата:
Сообщение от Arsie Посмотреть сообщение
Можно сколько угодно показывать всякие картинки и за какие угодно уши притягивать объяснения, но активность сигнала - это когда сигнал в активной форме.

Активных форм для логического сигнала четыре: фронт, единица, спад и ноль. В любом сочетании.

У вашего сигнала активное состояние - фронт. Все остальные формы игнорируются, т.е. пассивны.

Повторю ещё раз: понятие "единица" и "активен" - не тождественны. Активным может быть и ноль.
У входа активное состояние - момент получения фронта сигнала, а не у сигнала активное состояние фронт.

Активность сигнала и активность входа - суть разные вещи. И никто меня не переубедит в обратном.

Да, активным сигналом может быть и единица, и ноль. Кто б спорил. Именно поэтому я стараюсь писать не "активный сигнал", а "активная 1", может где и оговорился, тогда каюсь.

[Конец лирического отступления]
***

Две версии селектора.
v.2 - с настраиваемыми приоритетами входов на случай одновременного получения фронта несколькими входами.(см. описание)
v.1 - облегченная версия. Весит в два раза меньше блоков и работает быстрее. По приоритетности только вход Mode. Определяет, вход с наибольшим или с наименьшим номером будет назначен папой.

Макросы не совместимы с Pixel 12xx!!!

Описание
Код:
                                     
                                    -----------------------------------------------------------
                                    |  ВНИМАНИЕ!!! Макрос не будет работать на Pixel 12xx !!! |
                                    -----------------------------------------------------------
***************************************************************************************************************************


                                            Селектор на 6 стабильных положений V2


 Входы :

    Enable   -           Разрешает работу макроса.

    ^Set     -           Предустановка. Устанавливает активным выход, номер которого указан на входе Set. 

    Set      -           Задает номер выхода для установки по входу ^Set. При задании на входе числа, выходящего
                         из диапазона 0 ~ 6 активируется выход Set_Error.

    Reset    -           Сброс всех выходов в состояние "0".
                 
    ^S1-^S6  -           Информационные входы.
        
    Приоритет ^S1-^S6    Задание приоритетности входов
    
    Mode     -           Режим приоритетности.
    

 Выходы :

    Set_Error-    Активен при ошибочном значении на входе Set. Допустимый диапазон 0 ~ 6

    № 0+     -    Номер активного выхода с нумерацией от 0.

    № 1+     -    Номер активного выхода с нумерацией от 1.

    Q1-Q6    -    Информационные выходы.

-------------------------------------------------------------------------------------------------------------

    При 0 на входе Enable макрос отключается.Внутренние блоки программой не обрабатываются. Значения выходов 
    "замораживаются" в текущем состоянии. 

    Вход ^Set при "0" на входе Set осуществляет сброс всех выходов в "0" в текущем такте программы.
    Со следующего такта обработка входов продолжается независимо от наличия "1" на данном входе.

    Для входа Set подразумевается "человеческая" нумерация для установки выходов. То есть для устанвки активным
    выхода Q1 и надо задавать на этом входе 1, а не 0. 

    Вход Reset "держит" на всех выходах "0", пока активен. 

    Информационные входы ^S1-^S6 работают по фронту сигнала.

    Входы приоритета ^S1-^S6 определяют "старшинство" при одновременном получении фронта на нескольких входах.
    Приоритет задается положительным числом больше 0. Чем больше число, тем выше приоритет входа. Например для входа
    S1 установлен приоритет 3, а для входа 4 - 24, при одновременном получении фронта активируется выход Q4.
    В том случае, если для входов задан одинаковый приоритет, то номер активируемого выхода определяяется входом Mode.
    Если на входе Mode установлен 0, то будет активирован выход с наименьшим номером, при 1 - с наибольшим.
    При задании приоритеа входа равным 0, вход исключается из обработки. Если в этот момент активирорван соответствующий
    ему выход, то он сохранит свое состояние, до активации другого входа. Блокировка работы входа также распространяется
    На вход предустановки Set - выход с номером, соответствующим входу с приоритетом 0, активирован не будет. Возможность
    Сбросить все выходы в 0 через Set -  остается.
Вложения
Тип файла: msl Селектор 6-стабильный С приоритетом(Closed).msl (108.2 Кбайт, 3 просмотров)
Тип файла: msl Селектор 6-стабильный(Closed).msl (57.2 Кбайт, 3 просмотров)
ViS вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация аналогового сигнала СВМ Вопросы о программировании 15 02.12.2015 20:28
Модуль Z-4RTD2 от SENECA serg-el Примеры работы по Modbus 3 04.06.2015 18:11
Ремонт Aout своими силами (решено) alexprophet Вопросы о Pixel 10 31.10.2013 13:23


Часовой пояс GMT +4, время: 11:15.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2018