Намоточный станок. Программа для намоточного станка. 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
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()

******************************************************************************













Комментарии

Популярные сообщения из этого блога

iNAV work around

How to build coil for Minelab Explorer. DIY

Вычисление азимута и расстояния между двумя точками