Компиляция
Наша программа готова и мы можем первый раз выполнить компиляцию программы.
Изучение и понимание этого вопроса помогло мне преодолеть несколько, на первый взгляд, казалось бы непреодолимых препятствий. В какой то момент мне даже показалось, что ПЛК Л02 мне вообще не подойдут не только потому, что у них есть некоторые ограничения языка ST по сравнения с CoDeSys, но и потому что они просто не способны сделать то, что нужно от них мне. И это все было до того, как я решил разобраться с компиляцией и понял, как я могу оптимизировать свой код. После того как я разобрался с компиляций и смог видеть результат своего кода, и сравнить его с результатом других вариантов, мне удалось оптимизировать код так, что программа с 25 000 шагов, сократилась до 7 000 шагов.
1️⃣ Что такое компиляция
Компиляция — это процесс преобразования написанной вами программы в машинный код, который ПЛК может понять и выполнить. В GX Works 2 вы пишете программу на одном из языков, определённых стандартом МЭК 61131-3 (LD, FBD, ST и т. д.), а затем компилируете её, чтобы создать исполняемый файл для контроллера. По сути языки это только внешний интерфейс, разный вид и представление. Не важно вызовите вы инструкцию МУВ в СТ или ЛД, в исполняемом файле она будет выглядеть одинаково.
2️⃣ Зачем нужна компиляция
Важно
Компиляция является обязательным процессом перед загрузкой программы в ПЛК. Так же для поиска по проекту и использование разных инструментов как Перекрестные ссылки, поиск регистров.
-
Проверка ошибок: Компилятор ищет синтаксические и логические ошибки в программе. Он проверяет правильность написания инструкций, адресов и соответствие типов данных. Если находит ошибку, то указывает на неё, чтобы вы могли её исправить до загрузки в контроллер. Давайте для пример я сделаю синтаксическую ошибку и выполню компиляцию. В навигаторе Output появилось сообщения об ошибке. Если я ДК на этом сообщении, то меня перебросит на ту строку где это ошибка обнаружена, а для большей видимости в левом поле, появится индикатор этой строки.
-
Генерация кода: Компилятор преобразует текст или графические блоки вашей программы в двоичный код, который после загрузки хранится в памяти ПЛК.
-
Оптимизация: Он может оптимизировать код, чтобы он выполнялся быстрее и занимал меньше памяти в контроллере.
Процесс компиляции в GX Works2
-
Выбор проекта: Убедитесь, что у вас открыт нужный проект в GX Works2.
-
▶️ Запуск компиляции: Вы можете запустить компиляцию, выбрав в меню "Project" → "Compile" или нажав кнопку F4.
-
🗄️ Лог-файл: После завершения компиляции появится окно "Output", где отобразится список всех найденных ошибок и предупреждений.
-
❌ Ошибки (Errors): Если есть ошибки, компиляция будет остановлена. Вы не сможете загрузить программу в контроллер, пока не исправите их все.
-
⚠️ Предупреждения (Warnings): Это некритические ошибки, которые не останавливают компиляцию, но могут указывать на потенциальные проблемы в логике программы.
Различия между "Build" и "Rebuild All"
В GX Works2 есть две похожие команды для компиляции:
"Compile All" Компилировать Все (или Ctrl + F4): Эта команда компилирует весь проект с нуля, даже если в нём не было изменений. Это полезно, когда вы хотите быть полностью уверены, что все части программы проверены. В момент выполнения команды компилировать все, компилятор присваивает ячейки области D всем локальным символьным переменным. Ну и глобальным тоже, если мы явно не присвоили номер ячейки для переменной.
Я выполняю эту компиляцию, когда у меня что-то не работает но я не могу понять почему, потому что код явно правильный. Так же перед загрузкой в ПЛК уже окончательной программы.
"Compile" Компилировать (или F4): При первом запуске команды Компилировать фактически происходит запуск команды Компилировать Все. После этого, команда компилирует только те части программы, которые были изменены с момента последней компиляции. Это экономит время при внесении небольших изменений. Это так же значит, что однажды присвоив символьным переменным ячейки, компиляция этого уже не измени.
Давайте посмотрим на небольшую демонстрацию. Создам 1 переменную и использую ее в программе. Сделаю компиляцию. Теперь я наведу мышку на эту переменную и вижу ту ячейку которой эта переменная была присвоена. Это М1535. Создам еще одну переменную и размещу ее над нашей переменной. То есть по идее, по порядку именно она должна получить ячейку М1535. Добавлю ее в программу и откомпилирую. Мы видим что ей присвоилась ячейка М1534, а наша старая переменная осталась М1535. Теперь выполним полную перекомпиляцию. Теперь М1335 это вот эта переменная, а 1334 вот эта. При полной перекомпиляции произошло полное переназначение автоматически выделяемой области памяти.
3️⃣ Просмотр списка инструкций (IL)
В GX Works2 вы можете просмотреть скомпилированный код в виде списка инструкций (IL). Для этого после компиляции в пустом месте экрана в документе редактора кода, ПКМ и в контекстом меню, выбираем пункт Display Compile Result...
Мы увидим список исполняемых инструкций на языке IL. Что еще удобней мы видим сколько шагов займет та или иная инструкция, так мы можем увидеть где наша программа не оптимально.
Просмотр результата компиляции бывает особенно полезен, потому что:
-
Изучение логики: Независимо от того, на каком языке вы писали программу (LD, FBD или ST), компилятор преобразует её в единый формат, похожий на ассемблер, который называется Instruction List (IL). Просмотр этого списка позволяет увидеть, как именно контроллер будет выполнять ваш код, шаг за шагом. Это помогает выявить неэффективные или избыточные инструкции, которые компилятор мог создать.
-
Отладка: Если вы столкнулись с проблемой, которую сложно найти на языке высокого уровня таком как ST, просмотр IL может дать ключ к её решению. Вы сможете точно увидеть, какие регистры и биты изменяются в каждый момент времени, что особенно полезно при работе со счётчиками, таймерами и сложной арифметикой.
-
Оптимизация: Анализ скомпилированного кода позволяет оптимизировать программу. Например, если вы видите, что какая-то операция выполняется в несколько шагов, вы можете попытаться переписать её так, чтобы она стала короче и быстрее.
-
Понимание работы сложных блоков: Просмотр IL помогает лучше понять, как компилятор GX Works 2 преобразует ваши инструкции в машинный код. Например, вы можете увидеть, как сложные функции языка ST (Structured Text) преобразуются в простые команды IL, что улучшит ваше понимание логики ПЛК.