АЛГОРИТМЫ САМОТЕСТИРОВАНИЯ СИСТЕМЫ АВТОНОМНОЙ ПЕЧАТИ ДЛЯ 3D-ПРИНТЕРА - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

АЛГОРИТМЫ САМОТЕСТИРОВАНИЯ СИСТЕМЫ АВТОНОМНОЙ ПЕЧАТИ ДЛЯ 3D-ПРИНТЕРА

Ильин И.В. 1, Гудков К.В. 1
1ФГБОУ ВО "Пензенский государственный технологический университет" (ПензГТУ)
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Согласно проведенным исследованиям при возникновении неполадок в одном из компонентов системы, вся система может потерять работоспособность, причины возникновения сбоя могут быть не очевидны, поэтому система должна быть оснащена функцией самотестирования. Система состоит из компонентов, тесно взаимодействующих между собой.

Внедрение алгоритмов самотестирования влечет за собой небольшое осложнение системы, но позволяет перед началом работы проверить на работоспособность ее компоненты, получить правильные настройки. При возникновении неполадок система способна сообщить о них пользователю в удобном виде. В данной статье описана система автономной печати для 3D-принтера и алгоритмы самотестирования ее компонентов.

1. ОПИСАНИЕ СИСТЕМЫ

Разрабатываемая система представляет собой одноплатный компьютер с модифицированным программным комплексом Pronterface, которому подключены устройства ввода-вывода (текстовый дисплей, блок тактовых кнопок и съемный накопитель информации). Система подключается по USB к 3D-принтеру и может получать энергию от блока питания смартфона или планшетного компьютера. Система не требует подключения монитора, клавиатуры, мыши так далее, так как имеет собственный блок кнопок и дисплей, позволяющие управлять печатью 3D-принтера, не пользуясь внешними устройствами ввода-вывода.

Система практически полностью заменяет персональный компьютер при эксплуатации вместе 3D-принтером, но в то же время намного компактнее и экономичнее. Такая система обеспечит 3D-принтеру возможность автономной печати. Система автономной печати для 3D-принтера состоит из компонентов, которые перед началом работы должны быть протестированы на работоспособность: текстовый дисплей на контроллере HD44780, накопитель информации и сам 3D-принтер. Диаграмма использования, представленная на рисунке 1, отображает компоненты системы, которые необходимо протестировать перед началом работы.

Рисунок 1 – Компоненты система автономной печати

Порядок тестирования всех компонентов системы представлен на рисунке 2.

Рисунок 2 – Порядок тестирования компонентов

Порядок тестирования имеет значение. Тестирование можно разделить на четыре этапа:

1) Тестирование дисплея (осуществляется с помощью Raspberry Pi);

2) Тестирование и калибровка всех компонентов (осуществляется с помощью Arduino или любого другого устройства, управляющего 3D-принтером);

3) Тестирование накопителя и проверка файла (осуществляется с помощью Raspberry Pi);

4) Запись результатов тестирования в файл (осуществляется с помощью Raspberry Pi).

2 ТЕСТИРОВАНИЕ ДИСПЛЕЯ. СКАНИРОВАНИЕ ПОРТОВ

В данной работе в качестве устройства используется текстовый монохромный жидкокристаллический дисплей Winstar WH1602A-YGH-CTK, управляемый контроллером S6B0066U, который является аналогом HD44780. HD44780 – контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев с параллельным 4- или 8-битным интерфейсом. Разработан фирмой Hitachi. Управляющий интерфейс и протокол являются стандартом для такого типа дисплеев. Он имеет множество аналогов, например, S6B0066U. На базе этого контроллера выпускается огромное количество моделей с различным конструктивом и разрешением, начиная с 8x1 (восемь символов в одной строке), и заканчивая 40x4 (содержащих два независимых управляющих чипа). Часто встречаются 16x2 и 20x4, а также некоторые другие. Дисплеи нашли широкое применение в принтерах, копирах, факс-машинах, сетевом оборудовании (например, в роутерах) и других устройствах. Экраны предоставляют только возможность вывода монохромного текста. Существуют варианты дисплеев с подсветкой и без.

Дисплей может иметь следующие неисправности: отсутствие одного или нескольких контактов с платой, неверно выставленное значение потенциометра, сбой таблицы символов.

Так как количество пинов GPIO у одноплатного компьютера ограничено, для экономии пинов данные передаются на устройство вывода по 4-битной шине. В этом случае пины с седьмого по десятый не используются, а данные передаются через Pin 11 – Pin 14, по четыре бита за такт (старший полубайт, затем младший полубайт).[1]

Поэтому необходимо произвести инициализацию дисплея в определенном порядке для корректной передачи данных, отличной от инициализации в 8-битном режиме.

Перед началом работы устройства необходимо убедится, что его дисплей исправен. Для этого необходимо подать напряжение на сам контроллер (VSS и VDD), запитать подсветку (A и K), а также настроить контрастность. Для настройки контрастности следует использовать потенциометр на 10 кОм. На крайние ноги подается +5V и GND, центральная ножка соединяется с выводом VO.[2]

После подачи питания на схему необходимо добиться правильного контраста. Для настройки контраста следует изменять значения потенциометра. Если значение сопротивления потенциометра, то дисплей ничего не будет показывать, если значение слишком низкое, то обе строки будут заполнены прямоугольниками, перекрывающими символы.

При исправном состоянии дисплея, правильной сборке схемы, правильной настройке контраста, в результате инициализации самотестирования, на экране должна заполниться прямоугольниками верхняя строка, как на рисунке 3.

Рисунок 3 – Результат инициализации и самотестирования дисплея

Изначально HD44780 имеет предопределенную таблицу символов, размещенную в ОЗУ знакогенератора CGRAM (Character Generator RAM). Для отображения любого из них программа микроконтроллера должна передать координаты позиции и, непосредственно за ними, сам адрес символа из CGRAM.

Заглавные и прописные буквы латинского алфавита, числовые знаки, а также большинство знаков препинания совпадают в ней с кодами ASCII. Набор символов, размещенных по адресам 0xA0…0xFF, содержит национальный алфавит (в данном случае кириллицу) того региона, где предполагается его использование. Первые 16 ячеек CGRAM имеют особое значение. При желании, в них могут быть записаны любые пользовательские символы, которых нет таблице (сразу после включения модуля в них находится случайная информация).[3]

Для того чтобы убедится в корректной работе знакогенератора и таблицы, в первой строке дисплея выводится сообщение «-->Hello, world!», а во второй – «-->Ready to work». Таким образом, используются все 32 символьные ячейки дисплея и можно убедиться в их работоспособности.

Диаграмма данного процесса представлена на рисунке 4.

Рисунок 4 – Диаграмма тестирования дисплея

Настройка подключения к 3D-принтеру, тестирование сервоприводов и температурных датчиков

После включения система сканирует COM-порты и определяет, к какому из них подключен 3D-принтер. Затем определяется скорость обмена данными между 3D-принтером и системой. Слишком высокая или слишком низкая скорость приведет к нестабильной работе 3D-принтера при печати. После определения параметров порта, производится попытка подключения к 3D-принтеру. При неудачной попытке выводится сообщение с текстом ошибки.

В случае удачной попытки, производится считывание информации с ПЗУ 3D-принтера, в котором хранятся данные о характеристиках 3D-принтра и типа установленной прошивки. Способы взаимодействия и тип выводимых данных зависят от установленной прошивки. После этого происходит тестирование датчиков, нагревательных элементов, экструдера, сервомоторов стола и экструдера.[4]

2 ПРОВЕРКА НАЛИЧИЯ ПЛАСТИКОВОЙ НИТИ. АВТОКАЛИБРОВКА СТОЛА И ЭКСТРУДЕРА.

Перед началом печати нужно протестировать подачу нити с помощью датчика толщины нити. Принцип работы такого устройства: нить пропускается через закрытую камеру между светодиодом и фотодатчиком, луч светодиода освещает нить и она отбрасывает тень на фотодатчик. По величине тени можно судить о диаметре нити. Все это делается в реальном времени, и если толщина нити отклоняется от номинальной, то принтер/экструдер увеличивает или уменьшает подачу пластика, чтобы компенсировать недостаток/избыток пластика на выходе. Так же с помощью этот датчика можно определить отсутствие нити.

Качество изделия зависит как от адгезии пластика к печатному столу, так и от точно перемещения стола и экструдера. В этой связи большое значение приобретает автокалибровка печатного стола. В сущности, суть ее заключается в том, что 3D принтер посредством специального устройства (щупа, зонда, или иного устройства) проверяет плоскостность печатного стола при касании в нескольких точках (задаваемых программно в прошивке) после чего выстраивает «свою горизонтальную» плоскость. Плоскость может и вообще не совпадать с реальной горизонтальной плоскостью: 3D-принтер строит свою новую систему декартовых координат, внося в алгоритм перемещения необходимую «дельту».[5]

Процесс автокалибровки 3D-принтера выглядит так: сопло экструдера движется вниз до срабатывания датчика. Достигнув нижней точки, сопло останавливается и записывается его Z-координата. После этого сопло движется в сторону до крайней точки. Потом сопло движется в противоположную сторону до крайней точки. После этого записывается X-координаты крайних точек и рассчитывается пройденное расстояние.

Процесс автокалибровки представлен на рисунке 5.

Рисунок 5 – Автокалибровка 3D-принтера

Калибровка по Y-координате происходит за счет движения стола. Стол движется в сторону до крайней точки. Потом стол движется в противоположную сторону до крайней точки. После этого записывается Y-координаты крайних точек и рассчитывается пройденное расстояние.

3 РАБОТА С ФАЙЛАМИ НА СЪЕМНОМ НОСИТЕЛЕ

Для работы с альтернативными устройствами ввода-вывода (блок кнопок и текстовый дисплей) написан модуль, подключаемый к Pronterface. Обработка нажатия кнопки выполняется с помощью бесконечного цикла и конструкций if. Таким образом при нажатии на кнопку, подсоединенной к GPIO 21 выполняется сканирование накопителя.

Все внешние накопители в операционной системе Raspbian по умолчанию находятся в директории /media/. Чтобы найти все файлы не только в корневой директории, но и во вложенных папках и после это записать имена всех файлов в массив используется следующая конструкция (листинг 1).

while True:

try:

if GPIO.input(21) == False:

arr = []

for top, dirs, files in os.walk('/media/'):

for nm in files:

path = os.path.join(top, nm)

Листинг 1 – Поиск файлов

Для записи имен файлов поочередно в массив используется функция append (листинг 2)

arr[]

arr.append(path)

Листинг 2 – Запись в массив

Для отображения только файлов G-кода используется функция filter. После чего создается массив, в котором содержатся все имена найденных файлов G-кода (листинг 3).

gcode1 = filter(lambda x: x.endswith('.GCODE'), arr)

gcode2 = filter(lambda x: x.endswith('.Gcode'), arr)

gcode3 = filter(lambda x: x.endswith('.gcode'), arr)

gcode = gcode1+ gcode2+ gcode3

Листинг 3 – Поиск файлов по маске

В переменную i записывается порядковый номер файла, отображаемого на первой строке дисплея (по умолчанию 0), в переменную j соответственно номер следующего за ним файла, отображаемого во второй строке (по умолчанию 1).

С помощью функции basename из массива gcode получаем краткие имена файлов, порядковые номера которых записаны в переменных i и j. Краткие имена записываются в переменные str1 и str2.

На дисплей полученные имена файлов выводятся с помощью функции lcd_string. Выбранный в данный момент файл помечается символом «>» (листинг 4).

i=0

j=i+1

str1=os.path.basename(gcode[i])

str2=os.path.basename(gcode[j])

lcd_string(">"+str1, LCD_LINE_1)

lcd_string(" "+str2, LCD_LINE_2)

Листинг 4 – Вывод списка файлов на дисплей

Пролистывание вверх осуществляется с помощью кнопки, подключенной к GPIO 26. При ее нажатии значения переменных i и j увеличиваются на 1. Для того, чтобы избежать вызова индексов, превышающих длину массива, используется проверка: если значение переменной j меньше длины массива, то на дисплей выводятся файлы с действительными индексами, в противно случае переменной i присваивается значение g – 2 (g – длина массива, полученная с помощью функции len), а переменной j значение g – 1 и после этого на дисплей выводятся соответствующие значения. Код представлен на листинге 5.

if GPIO.input(26) == False:

i=i+1

j=i+1

g=len(gcode)

g=int(g)

if j < g:

str1=os.path.basename(gcode[i])

str2=os.path.basename(gcode[j])

lcd_string(">"+str1, LCD_LINE_1)

lcd_string(" "+str2, LCD_LINE_2)

else:

i = g - 2

j = g - 1

str1=os.path.basename(gcode[i])

str2=os.path.basename(gcode[j])

lcd_string(">"+str1, LCD_LINE_1)

lcd_string(" "+str2, LCD_LINE_2)

Листинг 5 – Реализация прокрутки списка файлов вверх

Обработка кнопки листания вниз (GPIO 26) имеет такую же структуру и тоже имеет проверку на соответствие минимальному индексу массива (0). Если переменная i становится отрицательной, ей принудительно присваивается значение 0, а переменной j соответственно 1 (листинг 6).

if GPIO.input(20) == False:

i=i-1

j=i+1

k=abs(i)

if k == i:

str1=os.path.basename(gcode[i])

str2=os.path.basename(gcode[j])

lcd_string(">"+str1, LCD_LINE_1)

lcd_string(" "+str2, LCD_LINE_2)

else:

i=0

j=1

str1=os.path.basename(gcode[i])

str2=os.path.basename(gcode[j])

lcd_string(">"+str1, LCD_LINE_1)

lcd_string(" "+str2, LCD_LINE_2)

Листинг 6 – Реализация прокручивания списка файлов вниз

При нажатии на кнопку, подключенной к GPIO 19 переменной sname присваивается имя выбранного файла. После этого объявляется глобальная переменная full, в которую записывается полное имя этой файла (путь) с помощью os.path.join. После чего программа завершается, возвратив значение full и система Pronterface продолжает свою работу (листинг 7).

if GPIO.input(19) == False:

sname=gcode[i]

sname =str(sname)

global full

full = os.path.join('/media/', sname)

full = str(ful)

return full

sleep(0.1)

except KeyboardInterrupt:

exit()

Листинг 7 – Сохранение имени выбранного файла

В функцию __init__, класса PronterApp добавляется код, который выполняет следующие функции: Pronterface получает значение имени файла, которое возвратил модуль, после этого добавяет к нему значение пути, в котором он находится. Далее полученная переменная в виде аргумента передается вызову функции loadfile, которая служит для загрузки файла G-кода (листинг 8).

filename=program.main()

ful = os.path.join('/media/', filename)

ful=str(ful)

self.mainwindow.loadfile(None, ful)

Листинг 8 – Получение полного имени файла

В самой функции loadfile (класс PronterWindow) добавляется строка self.connect(), которая вызывает функцию connect, служащую для подключения 3D-принтера. Таким образом организуется автоматическая загрузка файла G-кода и подключения 3D-принтера.

На выходе функции loadfile в переменную filename записывается имя загруженного файла, которое потом передается функции post_gcode_load, там значение имени загруженного файла присваивается глобальной переменной, значение которой в качестве аргумента передается вызову функции printfile, служащей для печати загруженного файла. Начинается подготовка 3D-принтера, а затем сама печать (листинг 9).

global filename2

filename2 = self.filename

self.printfile(filename2)

Листинг 9 – Запуск печати

После того, как программа получает имя файла, начинается его проверка и загрузка. Таким образом осуществляется взаимодействие двух модулей. Диаграмма работы с накопителем информации представлена на рисунке 6.

Рисунок 6 – Выбор файла с накопителя информации

ЗАКЛЮЧЕНИЕ.

Важнейшие аспекты КИС – надежность, отказоустойчивость и простота в использовании. Поэтому в КИС должна быть реализована система самотестирования для превентивного обнаружения неполадок, с возможностью предоставления результатов самотестирования в удобном читаемом виде.

Корпоративная информационная система (КИС) – это масштабируемая система, предназначенная для комплексной автоматизации всех видов хозяйственной деятельности больших и средних предприятий, в том числе корпораций, состоящих из группы компаний, требующих единого управления. Объединяет систему управления персоналом, материальными, финансовыми и другими ресурсами компании, используется для поддержки планирования и управления компанией, для поддержки принятия управленческих решений ее руководителями. Под КИС можно понимать управленческую идеологию, объединяющую бизнес-стратегию и информационные технологии.

В данной статье описаны алгоритмы самотестирования отдельных компонентов системы и показана реализация этих алгоритмов с помощью UML-диаграмма и фрагментов программного кода на языке программирования Python.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. HD44780 [Электронный ресурс]. – Режим доступа: http://wp.wiki-wiki.ru/wp/index.php/HD44780, свободный. - Заголовок с экрана (дата обращения: 8.01.2017).

2. Подключение LCD 1602 (HD44780) к Arduino [Электронный ресурс]. – Режим доступа: http://zelectro.cc/LCD1602, свободный. - Заголовок с экрана (дата обращения: 8.01.2017).

3. Символьный ЖКИ на базе контроллера HD44780 [Электронный ресурс]. – Режим доступа: http://cxem.net/mc/book52.php, свободный. - Заголовок с экрана (дата обращения: 10.01.2017).

4. Pronterface – управление 3D принтером [Электронный ресурс]. – Режим доступа: http://3deshnik.ru/blogs/akdzg/pronterface-upravlenie-3d-printerom, свободный. - Заголовок с экрана (дата обращения: 11.01.2017).

5. Устройства для автокалибровки стола 3D принтера [Электронный ресурс]. – Режим доступа: http://3dtoday.ru/blogs/injener3d/the-device-for-calibration-of-desktop-3d-printer/, свободный. - Заголовок с экрана (дата обращения: 12.01.2017).

18

Просмотров работы: 419