![]() |
![]() ![]() |
|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
![]() |
#61 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]()
Натурные испытания показали следующее.
Исходная позиция - стандартный проект приточки с водяным нагревом, голый 25-й пиксель без датчиков. 1. Вставлен макрос без циклов. Опрос 32 входа. Тик без макроса 77-80мс, с макросом 88-90. Время реакции выходов макроса на изменение входов около 6 секунд. 2. Вставлен макрос с циклами, те же 32 входа Тик 115-117мс. Время реакции около 2 секунд. Время засекал "на глазок", считая про себя примерно по секунде ![]() В итоге получается, что с циклами вся программа отрабатывает в 3 раза быстрее. Причем получаем актуальные данные на выходе в том же цикле работы всей программы, в котором меняются входы, что может оказаться востребованным в некоторых ситуациях. Буду весьма признателен, если кто-то предложит более быструю и не сильно более многоблочную реализацию. |
![]() |
![]() |
![]() |
#62 |
Senior Member
Регистрация: Jul 2009
Сообщения: 246
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]()
Решил поделиться макросом "Соотношение топливо-воздух" работает по алгоритму минитерма 400.00 производство МЗТА. В данном макросе один корректирующий коэффициент.
Может кто делал с 4 точками как в Минитерм 400.04 поделитесь. |
![]() |
![]() |
![]() |
#63 |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 3 847
Благодарил(а): 224 раз(а)
Поблагодарили:
141 раз(а) в 133 сообщениях
|
![]()
Универсальный 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 некорректно работала мертвая зона при включенной инверсии по входу добавлена инверсия выхода Последний раз редактировалось Arsie, 02.12.2021 в 16:23 |
![]() |
![]() |
![]() |
#64 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]()
Что-то надоело каждый раз по макросам шариться и биты искать-смотреть, когда при допиле конструкторской программы приходится код CPU менять. А по сему вот - простенький макрос дешифратор-шифратор кода, и экселевский листик для оффлайна. Авось сгодится кому.
Команда CPU.msl Код CPU.zip P.S. Добавьте ж уже в разрешенные для зарузки расширения фйлов .xlsX, .docX и т.д. |
![]() |
![]() |
![]() |
#65 |
Новичок
Регистрация: Oct 2013
Сообщения: 5
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
![]()
может быть кому-то пригодится, от-30 до +30, точность около 0.1%
|
![]() |
![]() |
![]() |
#66 |
Senior Member
Регистрация: Nov 2017
Сообщения: 556
Благодарил(а): 2 раз(а)
Поблагодарили:
35 раз(а) в 28 сообщениях
|
![]()
Набор макросов для типов BOOL, INT, LONG и REAL для задания константных значений.
Вторая версия макросов имеет защиту от дурака и дополнительную функциональность. Каждый макрос имеет простейшее содержимое, на основе блока MUX следующего вида: На входе V задается значение, которое потом транслируется потребителям. Вход "dumb" (пустышка) может использоваться для закольцовывания выхода, что бы сохранить название именованной связи, пока она не подключена к нужному входу или входам. Так же, закользовывание позволяет гарантировать сохранение названия связи, если она удаляется где-то в схеме. Так же, добавлен файл для тестирования макросов (const-test 2.0.0.psl) с содержимым: |
![]() |
![]() |
Благодарность от: |
![]() |
#67 |
Senior Member
Регистрация: Nov 2017
Сообщения: 556
Благодарил(а): 2 раз(а)
Поблагодарили:
35 раз(а) в 28 сообщениях
|
![]()
Макросы для организации битовых сдвигов для 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 крайне не рекомендуется. Последний раз редактировалось Arsie, 17.08.2018 в 18:22 |
![]() |
![]() |
![]() |
#68 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]()
Селектор на 6 стабильных положений. Избавлен от недостатков триггера из библиотеки.
Имеет предустановку выходов, сброс, режим "зависания". |
![]() |
![]() |
![]() |
#69 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Оправдание, что вы написали для уровней, не подходит, т.к. входы обозначены как "фронтальные". Понятия "уровень" для них отсуствует. Также хотелось бы от вас получить информацию о недостатках, которые присущи стандартному 6-стабильному триггеру. Причём это должны быть не недостатки вида "не стирает носки и не носит пива", т.е. он должен плохо работать именно в расчётных для себя режимах. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#70 |
Senior Member
Регистрация: Nov 2017
Сообщения: 556
Благодарил(а): 2 раз(а)
Поблагодарили:
35 раз(а) в 28 сообщениях
|
![]()
Макрос 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 циклов (переходов между циклами) без изменения. |
![]() |
![]() |
![]() |
#71 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]() ![]() Одновременно активны и одновременно перешли из 0 в 1 - суть вещи разные. Перейти могут в разное время и оставаться активными сколь угодно долго. Так как входы именно, что "фронтальные", то вход, единожды став активными и оставаясь таковым, не влияет на работу остальных входов. При одновременном переходе из 0 в 1 - папой будет вход с меньшим или с большим номером, на выбор. Вот тут мой косяк - выложил не ту версию, в которой это еще было упущено. Недостатком библиотечного является то, что у него как раз входы работают как "уровневые", а не "фронтальные" - если на одном уже висит 1 и приходит еще одна на другой, то все выходы обнуляются и селектор становится не работающим, пока не обнулишь все входы. Соответственно те же нули на выходах получим, если произойдет одновременный переход из 0 в 1 на 2+ входах. То есть, при данном развитии событий селектор просто не рабочий. (Вроде не пиво с носками ![]() Позже сегодня выложу обновленную версию V2, в которой можно будет задавать приоритетность каждого входа при одновременном переходе из 0 в 1. Постараюсь в описании быть поточнее. ![]() |
![]() |
![]() |
![]() |
#72 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#73 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]()
ОК.
![]() Сформулируем так - активна 1 на входе, а не сам вход ![]() ![]() |
![]() |
![]() |
![]() |
#74 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Активных форм для логического сигнала четыре: фронт, единица, спад и ноль. В любом сочетании. У вашего сигнала активное состояние - фронт. Все остальные формы игнорируются, т.е. пассивны. Повторю ещё раз: понятие "единица" и "активен" - не тождественны. Активным может быть и ноль. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#75 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
![]() Активность сигнала и активность входа - суть разные вещи. И никто меня не переубедит в обратном. Да, активным сигналом может быть и единица, и ноль. Кто б спорил. ![]() ![]() ![]() [Конец лирического отступления] *** Две версии селектора. 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 - остается. |
![]() |
![]() |
![]() |
#76 |
Senior Member
Регистрация: Aug 2018
Адрес: Екатеринбург
Сообщения: 106
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
![]()
В теме уже выкладывали макрос управления подсветкой 2Gi. Но в ответе на пост было написано что подсветка включится и не будет выключаться.
Написал свой простенький макрос. После загрузки контроллера подсветка выключена. Включается нажатием любой клавиши. По умолчанию таймаут 30 сек. |
![]() |
![]() |
![]() |
#77 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() ![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#78 |
Senior Member
Регистрация: Aug 2018
Адрес: Екатеринбург
Сообщения: 106
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
![]() |
![]() |
![]() |
![]() |
#79 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Сброс счётчика рекомендую делать по нажатиям и по событиям, которые отображаются на экране. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#80 |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#81 |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
![]()
Данный макрос позволяет использовать векторный привод (трехпозиционный, 3х-позиционный, 3-points) вместо аналогового. Векторный обретает все преимущества аналогового привода.
При каждом запуске программы привод однократно калибруется в минимальное или максимальное положение (направление выбирается внутри макроса). Когда входной сигнал <3% или >97%, то привод доворачивается в крайнее положение по 3 секунды раз в 5 минут. Для исключения дергания привода вперед-назад введен гистерезис 1%. |
![]() |
![]() |
![]() |
#82 |
Senior Member
Регистрация: May 2014
Адрес: S-Pb
Сообщения: 274
Благодарил(а): 3 раз(а)
Поблагодарили:
14 раз(а) в 13 сообщениях
|
![]()
Макрос измеряет расход в круглом или прямоугольном (квадратном) воздуховоде.
|
![]() |
![]() |
![]() |
#83 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Быть может, вы поделитесь долговременными испытаниями, показывающими хорошие результаты? __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#84 |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
![]() Когда пройдут долговременные испытания - поделюсь. Пока неделю полёт нормальный) |
![]() |
![]() |
![]() |
#86 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
Благодарность от: |
![]() |
#88 |
Senior Member
Регистрация: Apr 2017
Адрес: MSK
Сообщения: 123
Благодарил(а): 0 раз(а)
Поблагодарили:
5 раз(а) в 5 сообщениях
|
![]()
Макрос для ТРИМа. Подбор цветовой гаммы.
Длинное нажатие на ячейке забирает цвет с образца, двойное возвращает. Последний раз редактировалось Ilya J., 24.05.2019 в 16:41 Причина: Макрос создан в версии 3.30.0176, в более ранних версиях он не откроется. |
![]() |
![]() |
![]() |
#89 |
Senior Member
Регистрация: Dec 2018
Адрес: Tomsk
Сообщения: 429
Благодарил(а): 10 раз(а)
Поблагодарили:
4 раз(а) в 4 сообщениях
|
![]()
Макрос предназначен для управления элементом "текст"
в SMArt. Осуществляет отображение и управление до 34 заранее предустановленных строк. При этом при появлении от 2-х до 6-и сигналов ошибок, происходит поочередное их отображение (по порядку от младшего бита к старшему) с заранее определенной паузой. |
![]() |
![]() |
![]() |
#90 |
Senior Member
Регистрация: Apr 2017
Адрес: MSK
Сообщения: 123
Благодарил(а): 0 раз(а)
Поблагодарили:
5 раз(а) в 5 сообщениях
|
![]() Кстати объем почему то уменьшился почти вдвое. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли применять пустые макросы (нельзя) | Gel | Вопросы о программировании | 35 | 08.04.2020 10:42 |
Размышления на тему групповых триггеров | boxmen77 | Вопросы о программировании | 19 | 15.01.2020 17:39 |
Фильтрация аналогового сигнала | СВМ | Вопросы о программировании | 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 |