Введение в программирование контроллеров 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, то лучше использовать имя входа напрямую.
|
Нашли ошибку? Сообщите нам!
|













