Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Здесь программист производит линеаризацию аналогового входа на основе библиотечной функции FC105. В основном цикле по включению бита М0.1 происходит масштабирование аналогового сигнала. Все бы хорошо, но если в ПЛК не загрузить тот самый FC105, то при выполнении данной строчки, ПЛК вывалится в «СТОП SF» если не задать обработчик программных ошибок, так называемый OB121.С сименсом не работал, но возникает естественный вопрос: по какой причине в контроллер может не залиться библиотечный модуль использованный в программе? Если инженеру требуется где-то руками повторно добавлять модуль, который он использовал, в список заливаемых на контроллер, то это вопиющая некомпетентность разработчиков среды программирования. Эдакое места гарантированных ошибок по человеческому фактору.
Надо понимать, что это совершенно другой мир, в отличие от настольного программирования. Мы тут до сих пор пишем почти что на ассемблере, оперируем отдельными битами, работаем в реальном времени, а большой считается программа уже в несколько килобайт :)Вы слишком акцентируете на этом внимание. Оно иногда ближе к системному программированию, чем к прикладному, но это далеко не всегда и не для всех ПЛК. И МЭКовские языки ощутимо дальше от железа, чем обычно ассемблер. Оперирование битами и подсчёт памяти ничем (кроме характерных масштабов) не отличается от того же на x86_64.
Это не всякие си шарпы, дотнеты и прочие явы, где «Hello, world!» будет занимать несколько (десятков) мегабайт, требовать кучи библиотек, содержать в себе хренову тучу классов (ради одного «Hello, world!») и исполняться за совершенно непредсказуемое время. А ещё, разработчик оной программы не то, что ногу прострелить себе не сможет — ему чтоб коленку почесать, придётся 10 раз сказать среде разработки и операционной системе «да, чёрт возьми, я уверен, что я хочу почесать свою коленку. Да, свою, мать вашу. Да, ни миллиметра вправо-влево» ;)
Задержки не реализуются через какой-нибудь delay() — из-за этого встанет вся программа.Задержки через delay я видел, например, в firmware для некоторых контроллерах. При инициализации — вполне нормальный подход. Они вполне нормальны для всяких простых вещей на ардуине или rpi, но на нормальном embedded их не будут делать почти никогда, кроме всяких специальных задержек по несколько (десятков) тактов, где нужен busywait. А в большинстве случаев — прерывания, lock+condwait, блокирующиеся операции, освобождающие ресурсы для других потоков и разные примитивы синхронизации.
Они вполне нормальны для всяких простых вещей на ардуине
DIHALT как-то верно заметил про МЭК языки: представьте, что у вас в программе все строки выполняются одновременноИ что же здесь верного, если это совершенная ложь?
Вот необходимость ручного контроля такой заливки для меня и выглядит дикостью.
а само реле притягивать во время пуска главного привода и в рабочем состоянии удерживать его притянутым.
Критические ошибки проектирования АСУ ТП и программирования ПЛК