|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
10.08.2017, 13:31 | #61 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Обмениваемся своими макросами
Натурные испытания показали следующее.
Исходная позиция - стандартный проект приточки с водяным нагревом, голый 25-й пиксель без датчиков. 1. Вставлен макрос без циклов. Опрос 32 входа. Тик без макроса 77-80мс, с макросом 88-90. Время реакции выходов макроса на изменение входов около 6 секунд. 2. Вставлен макрос с циклами, те же 32 входа Тик 115-117мс. Время реакции около 2 секунд. Время засекал "на глазок", считая про себя примерно по секунде Тем не менее, разница слишком заметна. В итоге получается, что с циклами вся программа отрабатывает в 3 раза быстрее. Причем получаем актуальные данные на выходе в том же цикле работы всей программы, в котором меняются входы, что может оказаться востребованным в некоторых ситуациях. Буду весьма признателен, если кто-то предложит более быструю и не сильно более многоблочную реализацию. |
20.08.2017, 15:13 | #62 |
Senior Member
Регистрация: Jul 2009
Сообщения: 250
Благодарил(а): 0 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Обмениваемся своими макросами
Решил поделиться макросом "Соотношение топливо-воздух" работает по алгоритму минитерма 400.00 производство МЗТА. В данном макросе один корректирующий коэффициент.
Может кто делал с 4 точками как в Минитерм 400.04 поделитесь. |
30.08.2017, 07:00 | #63 |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 171
Благодарил(а): 241 раз(а)
Поблагодарили:
166 раз(а) в 158 сообщениях
|
Универсальный 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 |
22.06.2018, 17:21 | #64 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Обмениваемся своими макросами
Что-то надоело каждый раз по макросам шариться и биты искать-смотреть, когда при допиле конструкторской программы приходится код CPU менять. А по сему вот - простенький макрос дешифратор-шифратор кода, и экселевский листик для оффлайна. Авось сгодится кому.
Команда CPU.msl Код CPU.zip P.S. Добавьте ж уже в разрешенные для зарузки расширения фйлов .xlsX, .docX и т.д. |
14.08.2018, 00:13 | #65 |
Новичок
Регистрация: Oct 2013
Сообщения: 5
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
относительная влажность в абсолютную
может быть кому-то пригодится, от-30 до +30, точность около 0.1%
|
15.08.2018, 17:37 | #66 |
Senior Member
Регистрация: Nov 2017
Сообщения: 561
Благодарил(а): 3 раз(а)
Поблагодарили:
38 раз(а) в 30 сообщениях
|
Ответ: Обмениваемся своими макросами
Набор макросов для типов BOOL, INT, LONG и REAL для задания константных значений.
Вторая версия макросов имеет защиту от дурака и дополнительную функциональность. Каждый макрос имеет простейшее содержимое, на основе блока MUX следующего вида: На входе V задается значение, которое потом транслируется потребителям. Вход "dumb" (пустышка) может использоваться для закольцовывания выхода, что бы сохранить название именованной связи, пока она не подключена к нужному входу или входам. Так же, закользовывание позволяет гарантировать сохранение названия связи, если она удаляется где-то в схеме. Так же, добавлен файл для тестирования макросов (const-test 2.0.0.psl) с содержимым: |
Благодарность от: |
17.08.2018, 16:57 | #67 |
Senior Member
Регистрация: Nov 2017
Сообщения: 561
Благодарил(а): 3 раз(а)
Поблагодарили:
38 раз(а) в 30 сообщениях
|
Ответ: Обмениваемся своими макросами
Макросы для организации битовых сдвигов для 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 |
04.09.2018, 19:43 | #68 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Селектор 6-стабильный.
Селектор на 6 стабильных положений. Избавлен от недостатков триггера из библиотеки.
Имеет предустановку выходов, сброс, режим "зависания". Селектор.JPG |
05.09.2018, 10:05 | #69 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Селектор 6-стабильный.
Цитата:
Оправдание, что вы написали для уровней, не подходит, т.к. входы обозначены как "фронтальные". Понятия "уровень" для них отсуствует. Также хотелось бы от вас получить информацию о недостатках, которые присущи стандартному 6-стабильному триггеру. Причём это должны быть не недостатки вида "не стирает носки и не носит пива", т.е. он должен плохо работать именно в расчётных для себя режимах. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
06.09.2018, 10:53 | #70 |
Senior Member
Регистрация: Nov 2017
Сообщения: 561
Благодарил(а): 3 раз(а)
Поблагодарили:
38 раз(а) в 30 сообщениях
|
Ответ: Обмениваемся своими макросами
Макрос 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 циклов (переходов между циклами) без изменения. |
06.09.2018, 13:01 | #71 | |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Селектор 6-стабильный.
Цитата:
Одновременно активны и одновременно перешли из 0 в 1 - суть вещи разные. Перейти могут в разное время и оставаться активными сколь угодно долго. Так как входы именно, что "фронтальные", то вход, единожды став активными и оставаясь таковым, не влияет на работу остальных входов. При одновременном переходе из 0 в 1 - папой будет вход с меньшим или с большим номером, на выбор. Вот тут мой косяк - выложил не ту версию, в которой это еще было упущено. Недостатком библиотечного является то, что у него как раз входы работают как "уровневые", а не "фронтальные" - если на одном уже висит 1 и приходит еще одна на другой, то все выходы обнуляются и селектор становится не работающим, пока не обнулишь все входы. Соответственно те же нули на выходах получим, если произойдет одновременный переход из 0 в 1 на 2+ входах. То есть, при данном развитии событий селектор просто не рабочий. (Вроде не пиво с носками ) Позже сегодня выложу обновленную версию V2, в которой можно будет задавать приоритетность каждого входа при одновременном переходе из 0 в 1. Постараюсь в описании быть поточнее. |
|
06.09.2018, 13:41 | #72 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Селектор 6-стабильный.
Для фронтов и спадов активность - это момент перехода. Остальное - пассив.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
06.09.2018, 13:54 | #73 |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Обмениваемся своими макросами
ОК.
Сформулируем так - активна 1 на входе, а не сам вход Так как вход таки фронтальный, то при активной 1 на нем, он после отработки активности по фронту 1606398_680318708698083_794952526_o.jpg |
06.09.2018, 14:01 | #74 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
Активных форм для логического сигнала четыре: фронт, единица, спад и ноль. В любом сочетании. У вашего сигнала активное состояние - фронт. Все остальные формы игнорируются, т.е. пассивны. Повторю ещё раз: понятие "единица" и "активен" - не тождественны. Активным может быть и ноль. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
06.09.2018, 16:06 | #75 | |
Senior Member
Регистрация: Aug 2010
Сообщения: 718
Благодарил(а): 1 раз(а)
Поблагодарили:
15 раз(а) в 12 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
Активность сигнала и активность входа - суть разные вещи. И никто меня не переубедит в обратном. Да, активным сигналом может быть и единица, и ноль. Кто б спорил. Именно поэтому я стараюсь писать не "активный сигнал", а "активная 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 - остается. |
|
21.11.2018, 10:04 | #76 |
Senior Member
Регистрация: Aug 2018
Адрес: Екатеринбург
Сообщения: 106
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Обмениваемся своими макросами
В теме уже выкладывали макрос управления подсветкой 2Gi. Но в ответе на пост было написано что подсветка включится и не будет выключаться.
Написал свой простенький макрос. После загрузки контроллера подсветка выключена. Включается нажатием любой клавиши. По умолчанию таймаут 30 сек. |
21.11.2018, 10:45 | #77 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
21.11.2018, 15:23 | #78 |
Senior Member
Регистрация: Aug 2018
Адрес: Екатеринбург
Сообщения: 106
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Обмениваемся своими макросами
|
21.11.2018, 15:24 | #79 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
Сброс счётчика рекомендую делать по нажатиям и по событиям, которые отображаются на экране. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
13.01.2019, 10:18 | #80 | |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Маленький макрос на МИН-МАКС до 32-х чисел
Цитата:
|
|
13.01.2019, 10:30 | #81 |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Обмениваемся своими макросами
Данный макрос позволяет использовать векторный привод (трехпозиционный, 3х-позиционный, 3-points) вместо аналогового. Векторный обретает все преимущества аналогового привода.
При каждом запуске программы привод однократно калибруется в минимальное или максимальное положение (направление выбирается внутри макроса). Когда входной сигнал <3% или >97%, то привод доворачивается в крайнее положение по 3 секунды раз в 5 минут. Для исключения дергания привода вперед-назад введен гистерезис 1%. |
13.01.2019, 22:01 | #82 |
Senior Member
Регистрация: May 2014
Адрес: S-Pb
Сообщения: 279
Благодарил(а): 4 раз(а)
Поблагодарили:
16 раз(а) в 15 сообщениях
|
Макрос измерения расхода воздуха
Макрос измеряет расход в круглом или прямоугольном (квадратном) воздуховоде.
|
14.01.2019, 10:51 | #83 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
Быть может, вы поделитесь долговременными испытаниями, показывающими хорошие результаты? __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
14.01.2019, 21:49 | #84 | |
Member
Регистрация: Jun 2012
Адрес: СПб
Сообщения: 77
Благодарил(а): 7 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Обмениваемся своими макросами
Цитата:
Когда пройдут долговременные испытания - поделюсь. Пока неделю полёт нормальный) |
|
15.05.2019, 13:52 | #86 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Обмениваемся своими макросами
Соберите на нужный вам тип данных
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
Благодарность от: |
23.05.2019, 13:25 | #88 |
Senior Member
Регистрация: Apr 2017
Адрес: MSK
Сообщения: 125
Благодарил(а): 0 раз(а)
Поблагодарили:
5 раз(а) в 5 сообщениях
|
Ответ: Обмениваемся своими макросами
Макрос для ТРИМа. Подбор цветовой гаммы.
Длинное нажатие на ячейке забирает цвет с образца, двойное возвращает. Последний раз редактировалось Ilya J., 24.05.2019 в 16:41 Причина: Макрос создан в версии 3.30.0176, в более ранних версиях он не откроется. |
26.05.2019, 16:32 | #89 |
Senior Member
Регистрация: Dec 2018
Адрес: Tomsk
Сообщения: 431
Благодарил(а): 10 раз(а)
Поблагодарили:
4 раз(а) в 4 сообщениях
|
Ответ: Обмениваемся своими макросами
Макрос предназначен для управления элементом "текст"
в SMArt. Осуществляет отображение и управление до 34 заранее предустановленных строк. При этом при появлении от 2-х до 6-и сигналов ошибок, происходит поочередное их отображение (по порядку от младшего бита к старшему) с заранее определенной паузой. |
27.05.2019, 12:51 | #90 |
Senior Member
Регистрация: Apr 2017
Адрес: MSK
Сообщения: 125
Благодарил(а): 0 раз(а)
Поблагодарили:
5 раз(а) в 5 сообщениях
|
Ответ: Обмениваемся своими макросами
Откатился на 3.30.168, нормально сохранился. В 3.30.176 висела бесконечно открытие смарт. Может у меня что не так.
Кстати объем почему то уменьшился почти вдвое. |