Введение в программирование контроллеров NEWKER
Макропрогаммирование контроллеров NEWKER 990, NEWKER 1000, NEWKER 16, NEWKER 18, NEWKER 2000, SZGH-CNC1000, SZGH-CNC990
Для успешного понимания основ программирования контроллеров NEWKER необходимо немного углубится в организацию системы управления, давайте рассмотрим ее составляющие.
По классической схеме существует программно-аппаратное разделение на две подсистемы, которые взаимодействуют друг с другом через модальные и немодальные переменные разных типов.
Непосредственно система управления осями и интерполяцией (далее NC подсистема) отвечает за выполнение G-кода и более понятна, так как это первое, что мы видим при загрузке контроллера. Она содержит данные о параметрах станка и алгоритмы, необходимые для работы ЧПУ. Вторая подсистема представляет собой ПЛК (PLC подсистема) которая программируется на своем языке программирования (похож на Си, но имеет много элементов древнего BASIC), содержит предустановленные M макросы (такие как M03/04 и т. д.), при внесении которых в G-код PLC подсистема активирует соответствующие последовательности действий, а также, способна работать с входами/выходами системы на основе макропрограмм, написанных пользователем.
Как организовано взаимодействие этих двух подсистем?
Согласно документации пользователю доступны следующие варианты:
- Написание M макроса M880-M889, которые соответствуют файлам в памяти контроллера ProgramUser0-9.
- Написание G программы G100-G170, которые соответствуют фалам в памяти контроллера ProgramG100-170.
Отличий в данных двух вариантах практически нет, по крайней мере они не описаны в документации, эмпирическим путем я их пока тоже не нашел. Заявлено, что набор операторов G программ более широкий. Передача управления от NC к PLC происходит путем написания в G-коде команд (М881, G170 и т. д.) которые автоматически передадут управление PLC подсистеме и она перехватит управление до окончания действия макропрограммы, которая была вызвана. В свою очередь PLC система умеет управлять NC системой при помощи работы с переменными, которые использует последняя, а также, при помощи специальных операторов, типа MOVE, которые могут заставить NC подсистему переместить оси в нужное положение.
Для редактирования макросов доступно 2 способа, какой из них удобнее, решайте сами, я же подробно опишу каждый из них ниже.
Способ 1: непосредственно через интерфейс контроллера
- подключаем USB клавиатуру к контроллеру через порт USB
- нажимаем кнопку DIAGNOSIS
- нажимаем кнопку N на клавиатуре контроллера
- вводим пароль 111111
- во всплывающем диалоговом окне пишем М880 или М881 или М882 и тд, также, забегая вперед, через данный диалог можно выбрать программы для автосмены инструмента (введите T), M6, G100-G170 (также программы пользователя)
- далее Вы попадаете в окно редактирования, обратите внимание на верхнюю часть окна, в ней отображается имя файла, в котором будет сохранена Ваша программа
- кнопки внизу окна, такие как COMPIL и прочие работают при нажатии комбинации кнопки RAPID+N, T, R и так далее (описано внизу окна)
- отдельно стоит выделить режим TEACHIN, доступен на стойках 1000 серии без внешнего пульта, на 990 стойках необходим внешний пульт управления осями. Данный режим позволяет записать в макрос все перемещения которые Вы произведете при помощи пульта.
- При подключенной внешней клавиатуре можно приступать к написанию программы, если клавиатуры у вас нет, то можете использовать клавиатуру контроллера, клавиши с двойным назначением при одном нажатии выдают первое значение, при двойном нажатии выдают второе значение (например: буква Х имеет вторым значением букву О, которая появится в тексте при двойном нажатии кнопки Х.
Способ 2: программирование на компьютере через файлы подпрограмм
- создайте на компьютере текстовый файл, назовите его ProgramUser0, ProgramUser1 и т. д. до 9, либо ProgramG100, 101 и т. д до 170
- напишите свой код в файле, сохраните
- удалите расширение файла
- скопируйте файл на флешку (в связи с тем, что Windows создает директорию SYSTEM VOLUME INFORMATION в корне флешки, необходимо создать в корне папку с любым именем на латинском алфавите без пробелов и символов (например NEW) и скопировать файл в нее)
- вставьте флешку в контроллер
- нажмите кнопку PROGRAM
- нажмите кнопку B
- войдите в каталог, который вы создали ранее, в нашем случае NEW
- в нем будет отображен Ваш файл, нажмите RESTORE (буква Т, на 990 контроллере)
- введите код NEWNEW (стойка NEWKER) либо 111111
- подтвердите восстановление кнопкой Enrter
- после окончания процесса Вы можете войти в режим MDI и ввести команду M880 (если Ваш макрос содержится в файле ProgramUser0)
- нажмите кнопку Start (предварительно войдите в режим AUTO) и наблюдайте выполнение Вашего макроса.
HELLO WORLD или работаем с входами/выходами
Что нужно знать о работе с входами/выходами. Для начала нужно понять, как нам контролировать их работу для отладки процесса. В контроллере существует раздел DIAGNOSIS для данных целей, который вызывается по нажатию соответствующей кнопки на панели контроллера. Диалог DIAGNOSIS имеет вид таблиц с значениями входов, выходов и внутренних реле контроллера (bool), страницы перелистываются кнопками PGDN/PGUP.
В данных окнах мы видим выходы OUTPUT POINT, и входы INPUT POINT. Некоторые выходы и входы являются служебными и их использование не по назначению требует редактирования LADDER файла через контроллер или специальной программой, доступной у нас на сайте в разделе инструкций. Такие порты в обозначениях имеют краткое описание своей функции, например вход X00, также участвует в работе автосмены инструмента, о чем говорит обозначение X00/Т01, если Вы не используете автосмену, то можете смело на него вешать нужную Вам функцию. Входы и выходы в обозначениях которых есть М код, например Y00/М61 говорит о том, что данным кодом в G-коде или в MDI режиме Вы можете снимать значение входа или устанавливать значение выхода. Для выходов используется простое правило, так как М команды выходов являются модальными bool переменными, они требуют для деактивации ввода М команды отключения, то есть, выход будет активен, пока не получит М команду деактивации. Для всех выходов М код деактивации формируется по правилу минус 1 - активируем выход Y00 командой M61, деактивируем M61 - 1 = M60. Можете попробовать войти в режим MDI (кнопка М), написать M61, перейти в режим DIAGNOSIS и увидеть 1 на Y00, повторив все действия, но с командой M60, в режиме диагностики вы увидите Y00 = 0. М команды входов можно использовать для считывания значений этих входов, но это занятие неблагодарное поэтому лучше для этого использовать реле, о которых мы поговорим ниже.
М команды входов/выходов нужны, в первую очередь, для простых задач, если Вы не планируете копать макросы, а Вам просто нужно что-то активировать/деактивировать в процессе работы без условий и взаимосвязей, то вполне можно просто использовать соответствующую выходу команду в G-коде для реализации таких алгоритмов, но если Вам нужно активировать выход и получить сигнал о том, что что-то там действительно заработало и отдало сигнал на вход контроллера, то уже нужно писать программу и в программе макроса PLC подсистема примет Вашу М команду за обращение к реле, а имена реле выходов/входов не соответствуют их М командам, так что Ваш код будет мимо кассы, так сказать.
Итак, для работы с выходами через макрос, нам необходимо знать, что такое реле. Так уж сложилось, что имена реле в контроллерах NEWKER тоже начинаются с буквы М, что вносит некоторую путаницу и нужно понимать какая подсистема будет выполнять макрос в данный момент. PLC подсистема не работает с М командами NC системы, так как последние, по сути, являются предустановленными макросами для активации выходов и чтения входов. Прописав в макрос обращение к выходу Y02 через его М команду М65 PLC обратится к реле M65, которое отвечает за выход Y22, что мы можем увидеть в LADDER файле.
Таким образом, макрос внутри макроса использовать нельзя. Для примера я приведу таблицу, в которой приведено соответствие выходов разъема CN10 и реле в памяти PLC подсистемы.
CN10 DB25 I/O | ||||||||
Сигнал | NC макрос активации | NC макрос деактивации | имя в PLC | переменная в PLC | Пин | I/O | Назначение | Уровень |
0V | 1 | OUT | Земля источника | 0V | ||||
+24V | 14 | OUT | +24V | +24V | ||||
ALM2 | X24 | m88 | 2 | IN | Machine alarm2 | 0V | ||
M24 | M24 | X26 | 3 | IN | M24 | 0V | ||
M22 | M22 | X27 | m43 | 5 | IN | M01 input(Spindle back to zero) | 0V | |
M59 | M59 | М58 | Y07 | m50 | 6 | OUT | Huff | 0V |
M61 | M61 | М60 | Y00 | m59 | 19 | OUT | User-defined output 1 | 0V |
M63 | M63 | М62 | Y01 | m63 | 7 | OUT | User-defined output 2 | 0V |
M65 | M65 | М64 | Y02 | m52 | 20 | OUT | User-defined output 3 | 0V |
M67 | M67 | М66 | Y03 | m60 | 8 | OUT | User-defined output 4 | 0V |
M69 | M69 | М68 | Y04 | m105 | 21 | OUT | User-defined output 5 | 0V |
M71 | M71 | М71 | Y05 | m56 | 9 | OUT | User-defined output 6 | 0V |
M73 | M73 | М72 | Y06 | m57 | 22 | OUT | User-defined output 7 | 0V |
M18 | M18 | X28 | m30 | 10 | IN | User-defined input 1 | 0V | |
M28 | M28 | X25 | m73 | 23 | IN | User-defined input 2 | 0V | |
M12 | M12 | X29 | m71 | 11 | IN | User-defined input 3 | 0V | |
M14 | M14 | X30 | m74 | 24 | IN | User-defined input 4 | 0V | |
M16 | M16 | X31 | m75 | 12 | IN | User-defined input 5 | 0V | |
YZO+ | 16 | IN | +Y motor Zero signal | 5V | ||||
YZO- | 15 | IN | -Y motor Zero signal | |||||
AZO+ | 18 | IN | +A motor Zero signal | 5V | ||||
AZO- | 17 | IN | -A motor Zero signal | |||||
+10V | 25 | OUT | the second spindle converting | 0~10V | ||||
0V | 13 | OUT | 0V | 0V |
Реле в таблице обозначены с малой буквой m для размежевания с М командами, перечисленными в столбце "NC макрос" и "Сигнал", но при использовании в макросах имена реле должны быть написаны с заглавной буквы.
В работе с выходами в инструкции по программированию от производителя не описан один нюанс. Задекларировано, что для работы с входами/выходами в рамках макропрограммы можно использовать три варианта:
- обратится к смене состояния выхода через его имя, например выход Y00 активировать командой OUT+Y00, что приведет его в активное состояние.
- обратится к выходу через его реле, в данном случае это реле М63, согласно таблице, написав OUT+M63, мы получим тот же результат.
- обратится к регистру, который хранит значение состояния выхода Y00 напрямую, согласно документации это 16 битный регистр #1808, который хранит значения выходов Y00-Y15 (D0-15), но он хранит значение 15 выходов, что не очень удобно использовать, постоянно прописывая значения всех 15, да и не совсем нам это нужно.
Это означает, что по умолчанию у нас установлена зависимость между реле M59 и выходом Y00, так как мы меняем состояние выхода, не изменяя состояния реле, то на новом цикле PLC исправит это несоответствие и потушит Y00, поэтому для предсказуемой работы с выходами лучше обращаться к реле напрямую. Такая зависимость прописана для всех выходов, и нужно либо удалять строку в LAD файле, либо напрямую менять состояние реле, тогда на следующем цикле PLC присвоит выходу значение привязанного реле и все будет работать так, как запланировано.
Со входами все обстоит ровно наоборот, если Вы хотите проверить состояние входа, например, через оператор WAT, то лучше использовать имя входа напрямую.
Нашли ошибку? Сообщите нам!
|