G-code
Ця стаття не містить посилань на джерела. (грудень 2021) |
| G-code | |
|---|---|
| Массачусетський технологічний інститут | |
| Парадигма | Процедурна, імперативна |
| Дата появи | 1950-ті (перші варіації) |
| Основні реалізації | є багато. Переважно Siemens, Sinumerik, FANUC, Haas, Heidenhain, Mazak. Є міжнародний стандарт — ISO 6983 |
| Звичайні розширення файлів | .mpt, .mpf .nc і декілька інших |
G-код є загальною назвою для найбільш широко використовуваної мови програмування числовим програмним керуванням, яка має багато реалізацій. Застосовують здебільшого в галузі автоматизації, є частиною автоматизованого проектування.
В загальному, G-код — це мова, якою люди взаємодіють з комп'ютеризованими верстатами, задають їм що робити і як це зробити. «Як» визначається інструкціями про те, де перейти до (повернути або виконати дію), як швидко рухатися, і якою траєкторією переміщуватися.
G-код використовується в системі керування верстатами з числовим програмним керуванням LinuxCNC, програмі Mach3, інших системах.
Приклад використання: запрограмований верстат переміщує різальний інструмент відповідно до заданих G-кодом інструкцій через визначені траєкторії, зрізаючи надлишки матеріалу, щоб отримати деталь відповідно до креслення. Це ж саме поняття поширюється також на нерізальні (незрозумілий термін???) технології, такі як інструменти формування або полірування; 3D-друк; вимірювальне зондування для перевірки результатів.
Пробіли в рядку кадру ігноруються, тому припустимо злите написання команд кадру.
У більшості сучасних інтерпретаторів коду допустимо використовувати в коді програми малі та великі літери, як у прикладі.
Програма, написана мовою G-коду, має жорстко визначену структуру. Усі команди управління згруповані у кадри — блоки, які містять одну або кілька команд. Кадр закінчується символом переходу на новий рядок (CR/LF) і може необов’язково містити явний номер, що починається з літери N, за винятком першого кадру програми та коментарів. Цей номер виступає як позначка кадру і не обов’язково повинен збільшуватися у програмі або бути послідовними цілими числами, головне, щоб він не повторювався в межах програми. ...
N200 G0 n100 x0 x5y4
... У більшості сучасних інтерпретаторів G-коду допустиме використання як малих, так і великих літер, як у прикладі. Пробіли в рядку кадру ігноруються, тож команди можуть записуватися без пропусків.
Перший (а іноді й останній) кадр містить лише один необов’язковий знак <%>. Програма завершується командами M02 або M30.
Коментарі розміщуються в круглих дужках і можуть знаходитися як у окремому рядку, так і в будь-якому місці кадру серед команд. Заборонено оформляти кілька рядків коментаря, оточених парою дужок.
Елементарні команди в кадрі виконуються одночасно, тому порядок їх розміщення не є жорстко визначеним, але зазвичай спочатку йдуть підготовчі команди (наприклад, вибір площини інтерполяції, швидкості переміщення за осями тощо), потім вказівка координат руху, а далі — вибір режимів обробки та технологічні команди.
Максимальна кількість елементарних команд і координат у одному кадрі залежить від конкретного інтерпретатора мови керування верстатом, але для більшості популярних інтерпретаторів вона не перевищує шести.
Координати задаються вказанням осі з подальшим числовим значенням, де ціла і дробова частини розділяються десятковою крапкою. Допускається опускання незначущих нулів або їх додавання. Також у більшості інтерпретаторів можна не ставити десяткову крапку після цілих чисел. Наприклад: Y0.5 і Y.5, Y77, Y77. та Y077.0.
Команди поділяються на модальні та немодальні. Модальні змінюють певний параметр чи налаштування, які діють на всі подальші кадри програми до їхньої зміни наступною модальною командою або її відміною. До модальних належать, наприклад, швидкість руху інструмента, керування швидкістю шпинделя, подача холодильно-мастильної рідини (СОЖ) та інші. Немодальні діють лише в межах одного кадру, наприклад, команди прискорення або гальмування шпинделя.
Інтерпретатор (стійка керування верстатом) зберігає значення введених параметрів і налаштувань до їхньої зміни іншою модальною командою або скасуванням попередньої, тому необов’язково вказувати у кожному кадрі, наприклад, швидкість руху інструмента.
Мова програмування дозволяє багаторазове виконання одного й того самого набору команд і переміщень інструменту, який можна викликати з різних частин програми. Це особливо зручно, наприклад, при обробці листового матеріалу, коли потрібно вирізати багато отворів зі складним однаковим контуром, розташованих у різних місцях деталі. У тілі такої підпрограми описується траєкторія руху інструмента для вирізання одного отвору, а в основній програмі ця підпрограма багаторазово викликається з різних позицій.
У підпрограмі переміщення інструмента задаються у відносних координатах, які описують шлях інструмента під час обробки отвору. Перехід до відносної системи координат (інкрементної) здійснюється командою G91 на початку підпрограми, а повернення до абсолютної системи координат — командою G90 у кінці.
g90 x5 (призначення абсолютної системи координат після виконання цього кадру машинна координата по осі X стане рівною 5) g91 x10 (призначення інкрементної системи координат, після виконання цього кадру машинна координата по осі X стане рівною 15) x-15 (після виконання цього кадру машинна координата по осі X стане рівною 0, тому що продовжує діяти інкрементна система координат, задана модальною командою g91)
Тіло підпрограми обов'язково повинно мати бути описане до команди кінця програми - м³0, проте допустимо розташування підпрограми після команди М02 - кінця програми і мати ім'я, що починається з літери О з цифрами номера підпрограми, наприклад, О112. Наприкінці тіла підпрограми міститься команда повернення до основної програми — М99.
У програмі виклик підпрограми здійснюється командою М98 із зазначенням обов'язкового параметра імені підпрограми P. Неприпустимий збіг імен підпрограм у межах однієї програми. Приклад виклику підпрограм O112: M98 P112. Допустимо при виклику підпрограми вказівку кількості викликів підпрограми додаванням необов'язкового параметра L, наприклад, дворазовий виклик підпрограми 112: M98 P112 L2, що, наприклад, може бути корисним при описі виконання другого проходу чистової обробки після першого проходу чорнової обробки. При опущеному параметрі підпрограма L викликається одноразово.
Керуюче математичне забезпечення деяких верстатів або деякі інтерпретатори G-коду допускають виклик підпрограм за номером рядка (кадра) у програмі, для цього використовується команда M97 з параметром P, що вказує на номер (мітку) рядка, наприклад, M97 P321 L4 - чотириразовий виклик підпрограми, що починається з 3. Оформлена таким чином підпрограма, як звичайно, повинна закінчуватися командою M99 — поверненням у програму, що викликала.
- Приклад програми вирізання 2 прямокутних отворів 10 x 20 мм, збільшених на діаметр торцевої фрези, з координатами лівих нижніх кутів отворів x=57, y=62 і x=104, y=76 у листовій заготовці товщиною 5 мм з викликом підпрограми описує вирізання
...
(Фрагмент програми) G00 X57 Y62 (поз. X, Y на 1-й отвір) M98 P112 (вирізання 1-го отвору) G00 X104 Y76 (поз. X, Y на 2-й отвір) M98 P112 (вирізання 2-го отвору)
...
М02 (Кінець програми)
...
(Тіло підпрограми) O112 (Підмітка підпрограми, номер 112) G00 Z1 (Підведення інструменту на висоту 1 мм над поверхнею заготовки зі швидкістю холостого переміщення) G01 F40 Z-5.5 (Врізання інструменту на глибину -5,5 мм у заготовку зі швидкістю 40 мм/хв) G91 (Перехід у відносну систему координат, у цій системі спочатку X=0, Y=0) G01 F20 X10 (Вирізання 1-ї сторони прямокутника зі швидкістю 20 мм/хв) Y20 (Вирізання 2-ї сторони прямокутника зі швидкістю 20 мм/хв) X-10 (Вирізання 3-ї сторони прямокутника зі швидкістю 20 мм/хв. Оскільки включена інкрементальна система координат, то повернення інструмента у вихідну точку до виклику підпрограми вказується у вигляді збільшення координати, тут -10.) Y-20 (Вирізання 4-ї сторони прямокутника зі швидкістю 20 мм/хв) G90 (перехід в абсолютну систему координат, відновлення поточних координат до переходу в відносну систему) G00 Z5 (Підйом інструменту на висоту 5 мм над поверхнею заготовки зі швидкістю холостого переміщення) M99 (Повернення до програми або підпрограми, що викликала)
...
м³0 (Кінець інтерпретуємого коду програми, після виконання цієї команди покажчик номера кадру встановлюється на 1-й рядок програми і виконання програми зупиняється)
Програма, написана за допомогою G-коду, має жорстку структуру. Усі команди управління об'єднуються у кадри — групи, які з однієї чи більше команд. Кадр завершується символом перекладу рядка (CR/LF) і може необов'язково мати явно вказаний номер, що починається з літери N, за винятком першого кадру програми та коментарів. Цей номер є по суті міткою кадру і необов'язково повинен наростати в програмі або бути послідовними цілими числами, важливо, щоб номер не повторювався в межах програми, наприклад, допустимо:
Основні (називаються в стандарті підготовчими) команди мови починаються з літери G (абревіатура від слова General):
- Переміщення робочих органів обладнання із заданою швидкістю (лінійне та кругове)
- Виконання типових послідовностей (таких, як обробка отворів та різьблення)
- Управління параметрами інструмента, системами координат та робочих площин
| Коди | Опис |
|---|---|
| G00-G03 | Позиціонування інструменту |
| G17-G19 | Перемикання робочих площин (XY, ZX, YZ) |
| G20-G21 | Не стандартизовано |
| G40-G44 | Компенсація розміру різних частин інструменту (довжина, діаметр) |
| G53-G59 | Перемикання систем координат |
| G80-G85 | Цикли свердління, розточування, нарізування різьблення |
| G90-G91 | Перемикання систем координат (абсолютна, відносна) |
| Команда | Опис | Приклад |
|---|---|---|
| G00 | Прискорене переміщення інструменту (холостий хід). При холостому переміщенні НЕ ОБОВ'ЯЗКОВО виконується лінійна інтерполяція переміщення аналогічно команді G01. У деяких інтерпретаторах при виконанні команди переміщення по декількох осях одночасно, переміщення по осях відпрацьовується з максимальною швидкістю, тому лінійне переміщення від вихідної точки до кінцевої точки не забезпечується, тому не можна виконувати хід обробки деталі при дії цієї модальної команди. | G0 X0 Y0 Z100. |
| G01 | Лінійна інтерполяція, модальна команда. Інструмент (робочий орган) переміщається по відрізку прямої лінії від вихідної точки з координатами до виконання команди в точку із заданими в команді координатами, швидкість переміщення задається тут же або раніше модальною командою F. При цьому швидкість переміщення пов'язана зі швидкостями переміщення по осях як
— приріст координат між кадрами; — швидкості по осям. |
G01 X0. Y0. Z100. F200. |
| G02 | Кругова інтерполяція за годинниковою стрілкою, модальна команда. Інструмент переміщується по дузі кола за годинниковою стрілкою від вихідної точки з координатами до виконання команди в точку із заданими в команді координатами, швидкість переміщення задається в цій команді параметром F, радіус дуги задається параметром R, або зазначенням координат центру дуги параметрами I — (зсув центру по осі X відносно початкової координати X), J — (зсув центру по осі Y відносно початкової координати Y), К — (зсув центру по осі Z відносно початкової координати Z) відносно початкових координат інструменту. Для вказівки площини, в якій проводиться кругова інтерполяція, попередньо повинна бути вказана площина кругової інтерполяції (в цьому ж або в іншому попередньому кадрі) модальною командою G17 (площина X-Y), або G18 (площина X-Z), або G19 (площина Y-Z). Швидкість переміщення задана модальною командою F. | G02 G17 X15. Y15. R5. F200. чи G02 G17 X20. Y15. I-50. J-60. |
| G03 | Кругова інтерполяція проти годинникової стрілки. Параметри та дія аналогічні команді G02. | G03 X15. Y15. R5. F200. |
| G04 | Затримка виконання програми, спосіб завдання величини затримки залежить від реалізації системи управління, P зазвичай задає паузу в мілісекундах, X — в секундах. У деяких інтерпретаторах P задає паузу в секундах і параметр X в цій команді не використовується. Також в деяких інтерпретаторах можливе завдання затримки параметром U. | G04 P500 чи G04 X.5 |
| G10 | Перемикання абсолютної системи координат. У прикладі початок координат буде в точці 10, 10, 10 старих координат. | G10 X10. Y10. Z10. |
| G15 | Перехід в полярну (циліндричну) систему координат. У цій системі параметр X задає радіус, а Y кут в градусах. Якщо ввімкнено абсолютну систему координат (G90), то початок полярних координат буде в точці поточних координат 0; 0, якщо ввімкнено інкрементну систему координат, то початок координат буде в точці, досягнутій під час відпрацювання попереднього кадру. | G15 X15. Y22.5 |
| G16 | Відміна полярної системи координат | G16 X15. Y22.5 |
| G17 | Вибір рабочої площини X-Y | G17 |
| G18 | Вибір рабочої площини Z-X | G18 |
| G19 | Вибір рабочої площини Y-Z | G19 |
| G20 | Режим работи у дюймовій системі | G90 G20 |
| G21 | Режим работм в метричній системі | G90 G21 |
| G22 | Активувати встановлену межу переміщень (Інструмент не вийде за їх межу) | G22 G01 X15. Y25. |
| G28 | Повернутися до референтної точки | G28 G91 Z0 Y0 |
| G30 | Підняття по осі Z на точку зміни інструменту | G30 G91 Z0 |
| G40 | Скасування компенсації радіуса інструменту | G1 G40 X0. Y0. F200. |
| G41 | Компенсувати радіус інструменту ліворуч від траєкторії | G41 X15. Y15. D1 F100. |
| G42 | Компенсувати радіус інструменту праворуч від траєкторії | G42 X15. Y15. D1 F100. |
| G43 | Компенсувати довжину інструменту в позитивну сторону. В основному застосовується при зміні інструменту. | G43 X15. Y15. Z100. H1 S1000 M3 |
| G44 | Компенсувати довжину інструменту в негативну сторону. Дія аналогічна G43. | G44 X15. Y15. Z4. H1 S1000 M3 |
| G49 | Скасування компенсації довжини інструменту | G49 Z100. |
| G50 | Скидання всіх коефіцієнтів масштабування в 1,0 | G50 |
| G51 | Призначення масштабів. У прикладі — зменшення масштабу по осі X в 10 разів. Після цієї модальної команди всі вказані в командах переміщення і координати по осі X будуть множитися на коефіцієнт масштабування 0,1 і результат інтерпретуватися як необхідне переміщення. Якщо задати коефіцієнт масштабування по деякій осі (або по будь-яких осях) рівним −1, то подальший рух буде дзеркальним по цій осі (або осях, де коефіцієнт масштабування −1). | G51 X.1 чи G51 X-1 |
| G53 | Перехід в систему координат верстата. | G53 G0 X0. Y0. Z0. |
| G54-G59 | Переключитися на задану оператором систему координат | G54 G0 X0. Y0. Z100. |
| G61-G64 | Перемикання режимів Точний стоп/Постійна швидкість | |
| G68 | Поворот координат на потрібний кут | G68 X0 Y0 R45. |
| G70 | Цикл поздовжнього чистового точіння | G70 P10 Q15. |
| G71 | Цикл багатопрохідного поздовжнього чорнового точіння | G71 P10 Q15. D.5 U.2 W.5 |
| G80 | Скасування циклів свердління, розточування, нарізання різьби мітчиком тощо. | G80 |
| G81 | Цикл свердління | G81 X0 Y0. Z-10. R3. F100. |
| G82 | Цикл свердління із затримкою | G82 X0. Y0. Z-10. R3. P100 F100. |
| G83 | Цикл переривчастого свердління (з періодичним повним виведенням свердла). Параметр Z вказує повну глибину свердління від поверхні (Z=0), R — висота виведення інструменту над поверхнею для виведення стружки, а також кінцеве положення після завершення свердління, Q — величина заглиблення одного з декількох заглиблень при свердлінні, F — швидкість подачі (необов'язкова, за відсутності цього параметра швидкість визначається раніше заданою швидкістю в команді G1). | G83 Z-20 R1 Q2 f20 |
| G84 | Цикл нарізання різьби | G95 G84 M29 X0. Y0. Z-10. R3 F1.411 |
| G90 | Задання абсолютних координат опорних точок траєкторії | G90 G1 X0.5. Y0.5. F10. |
| G91 | Задання координат інкрементально відносно координат останньої введеної опорної точки, переміщення інструменту в цій системі координат задається у вигляді приростів | G91 G1 X4. Y5. F100. |
| G94 | F (подача) — у форматі мм/хв | G94 G80 Z100. F75. |
| G95 | F (подача) — у форматі мм/об | G95 G84 X0. Y0. Z-10. R3 F1.411 |
| G99 | Після кожного циклу не відходити на <прохідну точку> | G99 G91 X10. K4. |
Технологічні команди мови починаються з літери М (абревіатура від Miscellaneous — додатковий). Включають такі дії, як:
- Змінити інструмент
- Увімкнути/вимкнути шпиндель
- Увімкнути/вимкнути охолодження
- Робота з підпрограмами
| Код | Опис | Приклад |
|---|---|---|
| M00 | Призупинити роботу верстата до натискання кнопки <старт> на пульті управління, так звана <безумовна технологічна зупинка> | G0 X0 Y0 Z100 M0 |
| M01 | Призупинити роботу верстата до натискання кнопки <старт>, якщо ввімкнено режим підтвердження зупинки. Якщо цей режим вимкнено, то команда ігнорується. Використовується для початкової перевірки (налагодження) коду. | G0 X0 Y0 Z100 M1 |
| M02 | Кінець програми, без скидання модальних функцій. Покажчик номера кадру не змінюється. | M02 |
| M03 | Почати обертання шпинделя за годинниковою стрілкою | M3 S2000 |
| M04 | Почати обертання шпинделя проти годинникової стрілки | M4 S2000 |
| M05 | Зупинити обертання шпинделя | M5 |
| M06 | Змінити інструмент | T15 M6 |
| M07 | Увімкнути додаткове охолодження | M3 S2000 M7 |
| M08 | Увімкнути основне охолодження. Іноді використання більше одного M-коду в одному рядку (як у прикладі) неприпустимо, для цього використовуються M13 і M14. | M3 S2000 M8 |
| M09 | Вимкнути охолодження | G0 X0 Y0 Z100 M5 M9 |
| M13 | Увімкнути одночасно охолодження і обертання шпинделя за годинниковою стрілкою | S2000 M13 |
| M14 | Увімкнути одночасно охолодження і обертання шпинделя проти годинникової стрілки | S2000 M14 |
| M17 | Повернення з підпрограми або з макросу (дія аналогічна М99) | M17 |
| M48 | Дозволити перевизначати швидкість подачі | |
| M49 | Заборонити перевизначення швидкості подачі | |
| M25 | Заміна інструменту вручну | M25 |
| M97 | Запуск підпрограми, що знаходиться в тій же програмі (де P — номер кадру, в прикладі перехід відбудеться до рядка з міткою N25), реалізований не у всіх інтерпретаторах, імовірно — тільки на верстатах HAAS. | M97 P25 |
| M98 | Запуск підпрограми, що знаходиться окремо від основної програми (де P — номер підпрограми, у прикладі перехід відбудеться до програми O1015) | M98 P1015 |
| M99 | Кінець підпрограми і перехід до програми, що її викликала | M99 |
| M30 | Кінець програми, зі скиданням модальних функцій і зміною покажчика номера кадру на початок програми. | M30 |
| Код | Опис | Приклад |
|---|---|---|
| X | Переміщення інструменту в задану точку із заданою координатою по осі X при роботі в абсолютній системі координат (див. G90) або завдання зміщень відносно точки, досягнутої в попередньому кадрі при роботі в інкрементній системі координат (див. G91) | G0 X100 Y0 Z0 |
| Y | Аналогічно Х по осі Y | G0 X0 Y100 Z0 |
| Z | Аналогічно Х по осі Z | G0 X0 Y0 Z100 |
| P | При використанні в команді виклику підпрограми (М98) — вказівка номера підпрограми, що викликається, з іменем, заданим після літери О, наприклад Р301 викличе підпрограму з міткою О301. При використанні в команді затримки (G04) вказує час затримки в мілісекундах. | G04 P500;
М98 Р301 |
| О | Мітка підпрограми із зазначеним номером | О301 |
| F | Лінійна швидкість переміщення інструменту.
Для фрезерних верстатів це дюйми за хвилину (IPM) або міліметри за хвилину (мм/хв), Для токарних верстатів це дюйми за оборот (IPR) або міліметри за оборот (мм/об). Вибір одиниць вимірювання, дюйми або міліметри, виконується командами G20 і G21. |
G1 G91 X10 F100 |
| S | Частота обертання шпинделя в обертах за хвилину. | S3000 M3 |
| Т | Вказівка номера інструменту в команді зміни інструменту. Зазвичай вказується перед командою М6. | Т1 М6 |
| R | Відстань відведення інструменту в повторюваних циклах обробки, наприклад, переривчастого свердління глибоких отворів (G81-G89) або радіус дуги при кругових інтерполяціях переміщення інструменту (G02, G03). | G81 Z-20 R2 чи
G2 G91 X12.5 R12.5 |
| D | Параметр корекції радіуса вибраного інструменту | G1 G41 D1 X10. F150. |
| L | Кількість викликів підпрограми, кількість викликів макросу або кількість циклів у повторюваних операціях X_Y_R_ — параметри, що передаються в макрос | M98 L82 P10 чи G65 L82 P10 X_Y_R_ |
| I | Вказівка зміщення по осі X координати центру дуги при круговій інтерполяції переміщення інструменту (див. G02, G03). Координати центру дуги по осях вказуються у вигляді зміщення відносно початкової точки (досягнутої в попередньому кадрі). Площина інтерполяції (площина, яка паралельна заданій координатній площині вказується командами G17, G18, G19. | G03 X10 Y10 I10 J0 F10 |
| J | Аналогічно параметру I для осі Y. | G03 X10 Y10 I0 J10 F10 |
| K | Аналогічно параметру I для осі Z. | G03 X10 Y10 I0 K0 F10 |

Гравіювання літери W глибиною 2 мм, вписаної в прямокутник розміром 40×30 мм (див. рисунок), виконується на умовному вертикальному фрезерному верстаті з ЧПУ у листовій заготівлі. Для цього використовується кінцева фреза діаметром 2 мм.[1]:
% (мітка початку програми, необов’язкова)
(вісь Z налаштована так, що при Z=0 інструмент торкається поверхні заготовки)
O200 (мітка програми, необов’язкова)
G21 G40 G49 G53 G80 G90 G17 (рядок безпеки)
(Стан верстата або інтерпретатора визначається попередніми налаштуваннями або встановлюється у певний початковий стан при увімкненні живлення, і ці налаштування можуть спричинити небажані та непередбачувані дії, тому необхідно привести верстат у <початковий стан> за допомогою «рядка безпеки».)
(G21 — вибір метричної системи одиниць — міліметри,)
(G40 — скасування автоматичної компенсації радіуса інструменту,)
(G49 — скасування автоматичної компенсації довжини інструменту,)
(G53 — скасування можливих раніше введених додаткових систем координат зі зміщенням відносно початкової та переведення верстат у основну систему координат,)
(G80 — скасування всіх постійних циклів, наприклад, циклів свердління та їх параметрів,)
(G90 — перехід в абсолютну систему координат,)
(G17 — вибір площини кругової інтерполяції X-Y.)
G0 F300 (задання швидкості холостого переміщення інструменту в мм/хв)
M3 S500 (увімкнення обертання шпинделя за годинниковою стрілкою з частотою 500 об/хв)
G4 P2000 (затримка 2 секунди для набору обертів шпинделя)
X0 Y30 Z5 (переміщення інструмента у точку з координатами X=0, Y=30, Z=5 зі швидкістю холостого ходу)
G1 Z-2 F40 (врізання інструмента у заготовку на глибину 2 мм зі швидкістю 40 мм/хв)
G1 F20 X10 Y0 (фрезерування першого відрізка літери W зі швидкістю 20 мм/хв)
X20 Y30 (фрезерування другого відрізка літери W зі швидкістю 20 мм/хв)
X30 Y0 (фрезерування третього відрізка літери W зі швидкістю 20 мм/хв)
X40 Y30 (фрезерування четвертого відрізка літери W зі швидкістю 20 мм/хв)
G0 Z5 (підйом інструмента на висоту 5 мм над поверхнею заготовки зі швидкістю 300 мм/хв)
M5 (зупинка обертання шпинделя)
M30 (кінець програми та кінець інтерпретованого коду)
- ↑ Subroutine G-Code. Архів оригіналу за 17 січня 2016. Процитовано 2 січня 2016.