Таймер песочница
»omron cx-programmer плк plc Traffic Light светофор контроллеры плк длиннопост песочница
Доброго времени суток реактор. Пришёл с крупной проблемой, я тупой. Но надеюсь это временно.
Я студент, для получения зачёта мне дано задание построить схему работы Светофора. Преподавать хочет чтобы я сам пытался узнать как это сделать, в процессе я ему рассказал что спращиваю уже людей на форумах и прошу чтобы они мне подсказали что можно сделать.
Мои мучения в понимании того как собрать правильно схему работы Светофора происходят уже несколько недель, почти каждый день я сажусь и пытаюсь выполнить задание которое мне дали в вузе. Я задавал аналогичные вопросы на 3-ёх разных форумах, мне советовали множество вариантов исправления моей проблемы.
Как работает светофор? По очереди загораются Красный, красный и жёлтый, зелёный, жёлтый.
За всё время в попытках выполнить задание у меня появилось несколько его версий.
Первая версия до того как мне подсказали как он правильно должен работать.
На данный момент светофор функционирует нормально: лампочки загораются в правильном порядке - сначала зелёная, затем жёлтая, и в конце красная, после чего схема повторяется. Однако данное решение не соответствует требованиям, так как лампочки должны загораться в обратном порядке: сначала красная, затем жёлтая, и в конце зелёная. Я перенёс контакт таймера 3 с ранга 1 на ранг 2, и теперь схема застряла в одном месте. Сигнал, идущий с зелёного света, переходит сразу к жёлтому и застревает между ними, не достигая зелёного. Я попробовал десяток комбинаций таймеров, но так и не смог добиться правильной работы программы.
Сколько я только не перепробовал позиций контактов, я ставил из несколько шт в одном месте с разными адресами, смотрел ролики на YouTube которые в большинстве своём записаны узбеками и в малом кол-во другими национальностями. Схемы в каждом видео разные, я пробовал строить эти схемы, некоторые даже не работали у меня. Я не увидел чтобы хоть одна из этих схем выполняла правильный цикл программы. Потом я пытался несколько раз переделать схему по советам с форумов, это мне не помогло. Файл Светофор 3.
Вторая версия. Так же мне подсказали что есть готовый пример Светофора (C:\Program Files (x86)\OMRON\CX-One\CX-Programmer\Examples) я попробовал использовать его, и переделал свой вариант чтобы он был похож на неё, но у меня всё равно не получается заставить схему работать. Файл Traffic Light My. В этой версии программы лампочки не идут сверху схемы как изначально у меня было, они расположены внизу. Я попытался разместить лампочки сверху но из этого мало что получилось.
Третья версия мне показали Руководство по Cx-programmer 5.0 на странице 18 (71) в котором тоже был пример выполненния программы, и угадайте что? После завершения сбора этой схемы с нуля я понял что собрал схему tutorial. Теперь я знаю при сборке схемы можно использовать Локальные символы которые прописываются отдельно и потом с помощью них указываются адреса контактов, катушек, таймеров и т.д. Я снова попытался поставить на те же места лампочки, также создал новые локальные символы подключил к лампочкам. Светофор по методичке Cx-programmer.
В процессе всего поиска информации чего мне только не советовали:
* Переставить выходы, а не таймеры;
* Давали ГОСТ Р 52289-2019, раздел 7.5 "Режимы работы светофоров"
* Добавить контакт в ранг 0 под контакт 1. Сколько контактов я не добавлял и менял их значения это мало чем помогло.
* Советовали использовать ROL-ROR и Set Reset тут я вообще не понял ничего.
* Скидывали ещё видео , схема выполненая в другой программе и ничего похожего в Cx-programmer я не нашёл.
* Так же я сам находил видео и Часть 16 тоже другая программа не похожая на Cx-programmer.
" 1 человек с форума 3 посоветовал. Разбить свою задачу на две подпрограммы которые по условиям не могут работать одновременно. В одной подпрограмме зажигаете зелёный, в другой красный. Скинул так же готовый файл и там схема стала ещё более запутанной.
Буду неизмеримо благодарен за оказаную помощь в этом вопросе.
песочница политоты политика telegram деанон xmpp jabber мессенджеры песочница
немного о telegram
Ребе уже писал о том, что существует инструкция о вычислении человека по телеграмм-аккаунту.У меня была мысль, что фиг с ним, с протоколом телеграмма — он не защищён, это очевидно. Зато распространён. И была у меня мысль повторить трюк синдиката из SpaceStation 13 — приложение телеграмм, которое безопасно досматривать, но если в любой контакт выслать секретное слово, то открывается мессенджер по какому-нибудь другому протоколу, прячущийся при блокировании экрана/встряхивании/по таймеру, благо клиент открытый. Но оказалось, что для компиляции клиента нужно… получить специальный ID через действующий аккаунт. Сделано это якобы для борьбы со спамерами, но как обычно — симки вполне себе продаются в Европе и ничто не мешает заполучить новый ID для спама. Более того, этот самый ID передаётся с клиента постоянно, так что можно ловить подозрительных личностей.
Может Паша и не работает на ФСБ, но он сам ведёт себя как ФСБ, в результате чего товарищ майор получает кучу рычагов отслеживания.
А вот сайт xabber (один из клиентов xmpp под андроид с встроенным шифрованием), например, заблокирован, как я выяснил сегодня.
В итоге телеграмм:
× имеет закрытый сервер за рубежом, который вырубается общим рубильником
× запрещает шифрование
× палит клиент
× намертво привязывает к номеру телефона всё, что только можно (ботов, клиенты, аккаунт)
× запрещает иметь несколько учёток
× позволяет войти в аккаунт, имея на руках отобранный открытый аккаунт
Так что помни, анон — телеграмм — это не более чем вычурное СМИ, писать в нём крайне не рекомендуется.
Вместо него можно использовать более новый протокол Matrix, на который мало клиентов, зато он по умолчанию шифрован по самое немогу, либо же XMPP/Jabber, где шифрование нужно добавлять отдельно, зато полно клиентов.
песочница АСУ ТП программирование geek реактор образовательный длиннопост
Часть 3, каркас архитектуры
Часть 1, введение
Часть 2, приоритеты и базовые сигналы
Мда, я дико извиняюсь за большое количество опечаток в предыдщих постах. Руки не поспевают за мыслью, а при редактировании потеряется часть оформления регулярно. Не зналь(
Имея на руках пример того, с чем предлагается работать, впору поговорить об архитектуре, которая и будет обеспечивать корректное и стабильное исполнение кода, однако, перед этим сделаем ряд важных оговорок:1) концепт ориентирован на работу с жёстким распределением памяти (Siemens, OMRON CP/CJ series)
2) ввиду пункта 1 внутри одной структуры могут быть переменные которые И читаются, И пишутся, что существенно усложняет их проброс в коммуникацию(особенно тех, которые пишутся И с панели оператора, И из программы, например запуск в ручном режиме и сброс аварий в структуре управления)
3) объём памяти оперативность и для хранения кода, а также мощность CPU–считаются достаточно большими, чтобы не обращать на них внимания, в иных случаях требуется оптимизация кода
4) при работе с контроллерами, имеющими «классическое» распределение памяти, для обеспечения корректного управления моим кодом по ModBus RTU/TCP требуется дополнительная прослойка, которая будет пересобирать структуры в WORD и обратно, когда-нибудь я это исправлю, но явно не сейчас
5) вся концепция рассчитана на применение в обще-промышленной области, где потерять 10-20-30 мс роли не сыграет никакой, если вам нужна более высокая точность – добро пожаловать в чудный мир оптимизации и распределения кусков кода по разным циклам
Ещё одно лирическое отступление
Я осознанно не буду вам рассказывать как работает Промышленный Логический Контроллер (ПЛК), распределение его памяти, времени CPU по задачам системным и пользовательским, типы данных и прочую лабуду – это вы можете узнать на любых вводных курсах от любого производителя железа. Моя задача – показать пример прикладной реализации тех или иных задач.
Кстати, на ардуине в своё время использовал Union, который прекрасно решал проблему компоновки памяти, однако подавляющее большинство сред разработки для промышленного оборудования его или не поддерживают, или имеют кастрированную реализацию.
Генерация импульсов
Начнём с терминологии:
- импульс – это нечто, существующее предельно короткое время, в нашем случае сие ровно 1 цикл контроллера.
Большинство контроллеров предлагает свои системные генераторы импульсов в том или ином виде, но выглядят они следующим образом на примере 1 секунды:
Ёбушки воробушки, наш самописный таймер то проверяет когда сигнал = 1, а он равен 1 в течении 50 циклов, а за это время он насчитает 50 секунд, вместо 1! Лажа какая-то. Мы должны получить следующее:
Для этого есть несколько вариантов, и сначала мы отметём в сторону самый очевидный: мы НЕ будем в каждом таймере проверять фронт системного генератора импульсов, потому что каждая проверка фронта это +1 переменная в памяти ПЛК, а мы не хотим засирать его бесполезным хламом.
Итого остаётся:
1) вызывать системный импульс, проверять его передний или задний фронт и закидывать в pulse_1s;
2) вызвать стандартный таймер TON с длительностью 1 секунда и зациклить на самого себя, при срабатывании таймера взводить pulse_1s;
3) читать системное время и по внутренним часам ПЛК и при смене секунды однократно взводить pulse_1s, потребуется буфер для хранения и сравнения предыдущего времени;
4) прочитать из недр контроллера время предыдущего цикла, насуммировать несчастные наносекунды до 1 секунды и тоже записать в pulse_1s единичку, после чего очистить буфер.
5) ещё что-нибудь на ваше усмотрение.
Мне глубоко фиолетово, каким способом вы получаете в итоге pulse_1s, но вам достаточно получить его корректно 1 раз и все таймеры во всей программе сразу же заработают, причём корректно и, вау, синхронно. Т.е. если у вас в двух местах с разбегом менее 1 секунды начался счёт до 5, то закончится он тоже одновременно. В этом и плюс, и минус. Мы теряем точность. Но так ли она нужна?
Хотите точность до 100 мс? Пишем таймер Time_R для дробных значений генерируем pulse_01s.
Хотите точность до 10 мс? Ну… сделайте отдельный цикл ПЛК с такой частотой и там считайте. Или убедитесь, что ваше время цикла менее 10 мс на всю программу.Обратите внимание, что этот таймер сложнее – мы считаем прогресс времени от 0 до 1,который можно использовать для вспомогательных операций (типа на 30% всего времени моргнуть правой пяткой) и красивого прогресс-бара на экране.
Архитектура
Перейдём к тому, ради чего был затеян данный раздел. Следите за руками…
Где-то там приютилось ещё регулирование, типа ПИДов, но о них как-нибудь в другой раз.На повестке дня вопрос распределения переменных по областям памяти. Что будет глобальным, а что локальным?
К глобальным относится всё, что ранее было названо глобальным, а также туда настоятельно рекомендуется выносить:
- все структуры управления драйверами
- все структуры параметров драйверами
- все структуры состояний драйверами
- общие параметры техпроцесса
- общее управление техпроцессом, типа включить/выключить установку
Из них в раздел энергонезависимой памяти попадают только структуры параметров.
REQ – Request, запрос запуска. Сюда мы из авторежима будем писать команду для устройства, а затем скармливать драйверам в CMD.Start_A.
DONE – состояние устройств, если оно выключено или в аварии то соответствующий флаг =0, если успешно запущен = 1. Это хорошо заходит для минимизации алгоритма авторежима и всяких вспомогательных операций.
А что же тогда попадает в call’ы?Нерадивые любители звонков с автонабором? Увы, их неплохо бы там запереть, но места маловато. Там будут вызваны непосредственно экземпляры драйверов на исполнение со всей обвязкой. На примере уже рассмотренных дискретных входов это выглядит так… опс, в этом проекте их нет, вот вам выхода:
Вторжение в Украину 2022 политика песочница политоты рельсы белорусские партизаны
За русских пришли воевать белорусские партизаны (>ლ)
«Рельсовая война» разворачивается и на территории Российской Федерации.
На Московской железной дороге, одной из 16 территориальных филиалов ОАО «РЖД», за последние 2 недели «Рельсовые партизаны» провели ряд успешных акций по приведению в негодность железнодорожных путей в районах Брянской, Орловской, Смоленской и Курской областях.
«На перегонах в релейных шкафах СЦБ (СЦБ - устройства сигнализации, централизации и блокировки) устанавливают специальные приспособления, которые срабатывают по таймеру и полностью выжигают внутреннее оборудование релейного шкафа».
Ответственность за некоторые проведенные партизанские акции на инфраструктуре РЖД взяли на себя «Буслы ляцяць
https://t.me/belzhd_live/1543