Намоточный станок. Программа для намоточного станка. G code.
http://library.eltech.ru/files/vkr/2017/magistri/1405/2017%D0%92%D0%9A%D0%A01405%D0%A8%D0%BA%D1%83%D1%80%D0%B8%D0%BA%D0%BE%D0%B2%D0%B0.pdf
http://repo.ssau.ru/handle/Uchebnye-posobiya/Tehnologiya-raketnyh-i-aerokosmicheskih-konstrukcii-iz-kompozitnyh-materialov-Elektronnyi-resurs-multimed-obrazovat-modul-55059
https://www.studmed.ru/download/bulanov-im-vorobey-vv-tehnologiya-raketnyh-i-aerokosmicheskih-konstrukciy-iz-kompozitnyh-materialov_41cfb4bce96.html
https://plasma100.prom.ua/a343471-upravlenie-namotochnym-stankom.html
sin cos
https://www.g-w.com/pdf/sampchap/9781590707906_ch03.pdf
G Code Overview
http://linuxcnc.org/docs/html/gcode/overview.html
https://plasma100.prom.ua/a343471-upravlenie-namotochnym-stankom.html
Влияние наполнителя на свойства полимерного композита
http://elib.altstu.ru/journals/Files/pv2016_04_1/pdf/225samoilenko.pdf
Технология изготовления и испытания органопластиковой ...
http://www.irbis-nbuv.gov.ua/cgi-bin/irbis_nbuv/cgiirbis_64.exe?C21COM=2&I21DBN=UJRN&P21DBN=UJRN&Z21ID=&IMAGE_FILE_DOWNLOAD=1&Image_file_name=PDF/Pptvk_2013_3_4.pdf
Ось Х вращает болванку, ось У укладывает нить.
Пусть Х имеет разрешение 3200 шагов на дюйм. Это полный оборот мотора на 360 градусов.
Тогда виртуальное перемещение на 25.4 мм это и есть поворот оси Х на 360 градусов.
Тогда 1 градус равен 25.4/360 или почти 0.0705555555555556. (для точности лучше использовать дробь.)
Далее, для укладчика, ось У, максимальное теоретическое угловое движение есть 180 градусов.
Практическое меньше. Посчитаем на примере 140 градусов. Ось У имеет разрешение 3200 шагов на дюйм, тогда 1 градус равен 25.4/360, тогда 140 градусов равно 140*25.4/360 = 9.88мм.
Теперь логика работы:
Пока ось Х поворачивается от 0 до 179 градусов, укладчик, ось У, проходит от 0 до 140 градусов в одну сторону, а пока ось Х поворачивается от 180 до 359, укладчик, ось У, проходит от 140 до 0 градусов в другую сторону.
Пусть координата У ( и скорость соответственно) укладчика зависит от координаты Х.
Тогда Y = sin(X *2*Pi/25.4).
Учитывая, что для Х = 0, скорость У тоже должа быть равна нулю, то надо использовать COS,(производная от косинуса это синус. А производная и есть скорость. А синус в нуле есть ноль. это нам и надо.).
Y = К * cos(X *2*Pi/25.4) Где К это амплитуда движения по Х.
Как видно из рисунка, что бы нужная нам точка(левая нижняя, speed=0) лежала в начале координат, нам надо сдвинуть синусоиду по фазе на Pi и поднять на амплитуду движения по У деленую пополам:
Учитывая, что STEP_RATE_INCH = 3200 шагов на дюйм и соответственно STEP_PER_REVOLUTION = 200 * MICROSTEP_RATE = 200 * 16 = 3200 шагов мотора
это 360 градусов.
INCH_FOR_REVOLUTION = STEP_PER_REVOLUTION/STEP_RATE_INCH =
200 * MICROSTEP_RATE / 3200 = 1 дюйм на оборот.
Тогда:
MmPerRevolution = 25.4мм (или один дюйм)
YMoving = 140 degree (рабочий ход укладчика по иси У в градусах)
К = (YMoving * MmPerRevolution/360 = 9.88мм) / 2
Y = К * cos((X *2*Pi/MmPerRevolution) + Pi) + K
Итак , программа на питоне, выдает G код на один оборот по оси Х:
********************************************************************************
Более продвинутая версия:
********************************************************************************
import math
# MmPerRevolution = 25.4мм (или один дюйм)
# YMoving = 140 degree (рабочий ход укладчика по иси У в градусах)
# К = (YMoving * MmPerRevolution/360 = 9.88мм) / 2
# Y = К * cos((X *2*Pi/MmPerRevolution) + Pi) + K
# set controler microstep mode, 1,4,8,16 ???
MICROSTEP = 16
# set controler steps per inch
STEP_PER_INCH = 3200
# set Y angle moving, degree
YMoving = 140 # degree
# set X axis revolution
Revolution = 20
# set Y phase shift on revolution, degree
shift_degree = 25
# set step of approximation, mm
StepIn = 0.1 # step in axis X 0.1 mm
ngc_file = open("work.ngc","w")
STEP_PER_REVOLUTION = 200 * MICROSTEP
INCH_FOR_REVOLUTION = STEP_PER_REVOLUTION/STEP_PER_INCH
MmPerRevolution = 25.4 * INCH_FOR_REVOLUTION
K = (YMoving * MmPerRevolution/360)/2
g_command = "F600"
print(g_command)
ngc_file.write(g_command + "\n")
# g_command = "o2000 sub"
# print(g_command)
# ngc_file.write(g_command + "\n")
i = 0
phase_shift = shift_degree * 2 * math.pi/(360 * MmPerRevolution)
while i < (Revolution * MmPerRevolution):
Y_position = round((K * math.cos(((i) * 2 * math.pi/MmPerRevolution) + math.pi - phase_shift * i) + K), 2)
X_position = round((i),2)
i = i+StepIn
g_command = "G1 " + "X" + str(X_position) + " Y" + str(Y_position)
print(g_command)
ngc_file.write(g_command + "\n")
# g_command = "o2000 endsub"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
g_command = "M2"
print(g_command)
ngc_file.write(g_command + "\n")
ngc_file.close()
******************************************************************************
http://repo.ssau.ru/handle/Uchebnye-posobiya/Tehnologiya-raketnyh-i-aerokosmicheskih-konstrukcii-iz-kompozitnyh-materialov-Elektronnyi-resurs-multimed-obrazovat-modul-55059
https://www.studmed.ru/download/bulanov-im-vorobey-vv-tehnologiya-raketnyh-i-aerokosmicheskih-konstrukciy-iz-kompozitnyh-materialov_41cfb4bce96.html
https://plasma100.prom.ua/a343471-upravlenie-namotochnym-stankom.html
sin cos
https://www.g-w.com/pdf/sampchap/9781590707906_ch03.pdf
G Code Overview
http://linuxcnc.org/docs/html/gcode/overview.html
https://plasma100.prom.ua/a343471-upravlenie-namotochnym-stankom.html
Влияние наполнителя на свойства полимерного композита
http://elib.altstu.ru/journals/Files/pv2016_04_1/pdf/225samoilenko.pdf
Технология изготовления и испытания органопластиковой ...
http://www.irbis-nbuv.gov.ua/cgi-bin/irbis_nbuv/cgiirbis_64.exe?C21COM=2&I21DBN=UJRN&P21DBN=UJRN&Z21ID=&IMAGE_FILE_DOWNLOAD=1&Image_file_name=PDF/Pptvk_2013_3_4.pdf
Ось Х вращает болванку, ось У укладывает нить.
Пусть Х имеет разрешение 3200 шагов на дюйм. Это полный оборот мотора на 360 градусов.
Тогда виртуальное перемещение на 25.4 мм это и есть поворот оси Х на 360 градусов.
Тогда 1 градус равен 25.4/360 или почти 0.0705555555555556. (для точности лучше использовать дробь.)
Далее, для укладчика, ось У, максимальное теоретическое угловое движение есть 180 градусов.
Практическое меньше. Посчитаем на примере 140 градусов. Ось У имеет разрешение 3200 шагов на дюйм, тогда 1 градус равен 25.4/360, тогда 140 градусов равно 140*25.4/360 = 9.88мм.
Теперь логика работы:
Пока ось Х поворачивается от 0 до 179 градусов, укладчик, ось У, проходит от 0 до 140 градусов в одну сторону, а пока ось Х поворачивается от 180 до 359, укладчик, ось У, проходит от 140 до 0 градусов в другую сторону.
Пусть координата У ( и скорость соответственно) укладчика зависит от координаты Х.
Тогда Y = sin(X *2*Pi/25.4).
Учитывая, что для Х = 0, скорость У тоже должа быть равна нулю, то надо использовать COS,(производная от косинуса это синус. А производная и есть скорость. А синус в нуле есть ноль. это нам и надо.).
Y = К * cos(X *2*Pi/25.4) Где К это амплитуда движения по Х.
Как видно из рисунка, что бы нужная нам точка(левая нижняя, speed=0) лежала в начале координат, нам надо сдвинуть синусоиду по фазе на Pi и поднять на амплитуду движения по У деленую пополам:
Учитывая, что STEP_RATE_INCH = 3200 шагов на дюйм и соответственно STEP_PER_REVOLUTION = 200 * MICROSTEP_RATE = 200 * 16 = 3200 шагов мотора
это 360 градусов.
INCH_FOR_REVOLUTION = STEP_PER_REVOLUTION/STEP_RATE_INCH =
200 * MICROSTEP_RATE / 3200 = 1 дюйм на оборот.
Тогда:
MmPerRevolution = 25.4мм (или один дюйм)
YMoving = 140 degree (рабочий ход укладчика по иси У в градусах)
К = (YMoving * MmPerRevolution/360 = 9.88мм) / 2
Итак , программа на питоне, выдает G код на один оборот по оси Х:
********************************************************************************
import math # MmPerRevolution = 25.4мм (или один дюйм)# YMoving = 140 degree (рабочий ход укладчика по иси У в градусах)# К = (YMoving * MmPerRevolution/360 = 9.88мм) / 2# Y = К * cos((X *2*Pi/MmPerRevolution) + Pi) + K MICROSTEP = 16 STEP_PER_REVOLUTION = 200 * MICROSTEP STEP_PER_INCH = 3200INCH_FOR_REVOLUTION = STEP_PER_REVOLUTION/STEP_PER_INCH YMoving = 140 # degreeMmPerRevolution = 25.4 * INCH_FOR_REVOLUTION K = (YMoving * MmPerRevolution/360)/2Revolution = 2 StepIn = 0.1 # step in axis X 0.1 mmi = 0print("F600") while i < (Revolution * 25.4): Y_position = round((K * math.cos(((i) * 2 * math.pi/MmPerRevolution) + math.pi) + K), 2) X_position = round((i),2) i = i+StepIn result = "G1 " + "X" + str(X_position) + " Y" + str(Y_position) print(result) print("M2")
********************************************************************************
Более продвинутая версия:
********************************************************************************
import math
# MmPerRevolution = 25.4мм (или один дюйм)
# YMoving = 140 degree (рабочий ход укладчика по иси У в градусах)
# К = (YMoving * MmPerRevolution/360 = 9.88мм) / 2
# Y = К * cos((X *2*Pi/MmPerRevolution) + Pi) + K
# set controler microstep mode, 1,4,8,16 ???
MICROSTEP = 16
# set controler steps per inch
STEP_PER_INCH = 3200
# set Y angle moving, degree
YMoving = 140 # degree
# set X axis revolution
Revolution = 20
# set Y phase shift on revolution, degree
shift_degree = 25
# set step of approximation, mm
StepIn = 0.1 # step in axis X 0.1 mm
ngc_file = open("work.ngc","w")
STEP_PER_REVOLUTION = 200 * MICROSTEP
INCH_FOR_REVOLUTION = STEP_PER_REVOLUTION/STEP_PER_INCH
MmPerRevolution = 25.4 * INCH_FOR_REVOLUTION
K = (YMoving * MmPerRevolution/360)/2
g_command = "F600"
print(g_command)
ngc_file.write(g_command + "\n")
# g_command = "o2000 sub"
# print(g_command)
# ngc_file.write(g_command + "\n")
i = 0
phase_shift = shift_degree * 2 * math.pi/(360 * MmPerRevolution)
while i < (Revolution * MmPerRevolution):
Y_position = round((K * math.cos(((i) * 2 * math.pi/MmPerRevolution) + math.pi - phase_shift * i) + K), 2)
X_position = round((i),2)
i = i+StepIn
g_command = "G1 " + "X" + str(X_position) + " Y" + str(Y_position)
print(g_command)
ngc_file.write(g_command + "\n")
# g_command = "o2000 endsub"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
# g_command = "o2000 call"
# print(g_command)
# ngc_file.write(g_command + "\n")
g_command = "M2"
print(g_command)
ngc_file.write(g_command + "\n")
ngc_file.close()
******************************************************************************
Комментарии
Отправить комментарий