Winder v5-rc2 - update some parts & gcode generator v4
This commit is contained in:
parent
4c6d2c1dca
commit
e2ccef90fc
96 changed files with 553352 additions and 291 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -1,8 +1,13 @@
|
|||
# Pascal err out logs
|
||||
# Pascal & err out logs, binaries
|
||||
|
||||
*.exe
|
||||
*.o
|
||||
*.compiled
|
||||
*.err
|
||||
*.out
|
||||
|
||||
# Solidworks
|
||||
|
||||
~$*.SLDPRT
|
||||
~$*.SLDASM
|
||||
|
||||
|
|
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [v5-rc...] Намотчик - 2025-01-05
|
||||
### Добавлено
|
||||
|
||||
### Изменено
|
||||
-Изменены некоторые названия файлов
|
||||
-Обьединил детали каретки и упора для концевика оси Х
|
||||
|
||||
### Исправлено
|
||||
|
||||
## [v5-rc2] Намотчик - 2025-01-05
|
||||
|
||||
### Добавлено
|
||||
|
@ -18,9 +27,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||
- Также изменена высота каретки, чтобы можно было менять высоту иглы.
|
||||
- Небольшие изменения в раме станка. (Удалил лишние построения, для старого держателя катушки)
|
||||
|
||||
### Исправлено
|
||||
|
||||
|
||||
## [v5-rc1] Намотчик - 2024-11-11
|
||||
|
||||
### Добавлено
|
||||
|
|
56
README.md
56
README.md
|
@ -1,43 +1,51 @@
|
|||
# Намотчик Робосборщика
|
||||
|
||||

|
||||

|
||||
|
||||
Станок предназначен для автоматической намотки катушек индуктивности статоров [outrunner-сервоприводов](https://gitlab.com/robossembler/servo) робота-манипулятора [Robossembler Arm](https://gitlab.com/robossembler/roboarm-diy-version) и других агрегатов экосистемы Робосборщика.
|
||||
Станок предназначен для автоматической намотки катушек индуктивности статоров/роторов. На данный момент станок поддерживает намотку статоров сервоприводов Robossembler Servo ([gitlab](https://gitlab.com/robossembler/servo), [radicle](https://git.robossembler.org/nodes/seed.robossembler.org/rad:z2kN57BanxaiTZq3dWZ1Ej3oT8eD5)) диаметром 50 и 70 мм., однако, благодаря генератору gcode, станок может быть адаптирован для намотки более широкой номенклатуры статоров/роторов диаметром от 30 до 100 мм.
|
||||
|
||||
## Текущее состояние разработки
|
||||
|
||||
Первая работоспособная версия v4 в состоянии публичной альфы. Работоспособность зафиксирована в видео - [VK](https://vk.com/video717161_456239257), [Youtube](https://youtu.be/5glGYkbpT6w). Пока нет документации по сборке, возможны незначительные недочёты в конструкции. Промышленная эксплуатация не производилась, поэтому предельный ресурс 3D-печатной версии станка неизвестен.
|
||||
Первая работоспособная версия v4 в состоянии публичной альфы. Работоспособность зафиксирована в видео - [VK](https://vk.com/video717161_456239257), [Youtube](https://youtu.be/5glGYkbpT6w). Пока нет документации по сборке, возможны незначительные недочёты в конструкции. Предельный ресурс 3D-печатной версии станка пока неизвестен. В настоящее время проходит испытания 5-я версия станка. Подробная информация о дате выпуска новых версий и содержании изменений приведена в файле `CHANGELOG.md`. Информация о ходе разработки также публикуется в Telegram-канале [@robossembler_ru](https://t.me/robossembler_ru).
|
||||
|
||||
## Особенности
|
||||
|
||||
1. Управление с помощью G-Code (см. директорию `gcode`). Загрузка программы осуществляется по USB с персонального компьютера с помощью [OctoPrint](https://github.com/OctoPrint/OctoPrint).
|
||||
2. В качестве платы управления используется недорогой одноплатный контроллер от 3D-принтера Creality 4.2.7. Планируется переход на Open Source версии контроллеров - RAMPS и т.п. В качестве встроенного ПО контроллера используется [Marlin](https://github.com/MarlinFirmware/Marlin). Чтобы избежать возможных расхождений в версиях, исходные файлы Marlin размещены в директории `firmware`; собрать прошивку можно, используя [официальную документацию](https://marlinfw.org/docs/basics/install_platformio.html) Marlin.
|
||||
3. В базовом варианте станок умеет мотать только статоры из сервоприводов Robossembler Servo (зеркала: [Gitlab](https://gitlab.com/robossembler/servo), [Radicle](https://git.robossembler.org/nodes/seed.robossembler.org/rad:z2kN57BanxaiTZq3dWZ1Ej3oT8eD5)) - диаметром 50 и 70 мм. Планируется реализовать генератор GCode под более широкую номенклатуру статоров.
|
||||
4. Перечень комплектующих станка для закупки приведён в BoM-листе `bom.xlsx`. Некоторые ссылки с маркетплейсов могут быть недоступны.
|
||||
1. Управление с помощью G-Code. Загрузка программы осуществляется по USB с помощью [OctoPrint](https://github.com/OctoPrint/OctoPrint) или другой подобной программы.
|
||||
2. На данный момент поддерживаются два типа контроллеров: RAMPS (Arduino Mega) и Creality 4.2.7. В качестве встроенного ПО контроллера используется [Marlin](https://github.com/MarlinFirmware/Marlin). Чтобы избежать возможных расхождений в версиях, исходные файлы Marlin размещены в директории `firmware`; собрать прошивку можно, используя [официальную документацию](https://marlinfw.org/docs/basics/install_platformio.html) Marlin.
|
||||
3. Перечень комплектующих станка для закупки приведён в BoM-листе `bom.xlsx`. Некоторые ссылки с маркетплейсов могут быть недоступны.
|
||||
|
||||
## Генератор gcode
|
||||
|
||||
Управляющая программа для станка представляет собой `gcode` (применяется для управления ЧПУ-станками или 3D-принтерами), который генерируется с помощью разработанной в рамках проекта утилиты `gcodegenerator`. Исходный код утилиты на написан на языке Pascal с использованием открытой среды разработки [Lazarus IDE](https://www.lazarus-ide.org) и размещён в директории `gcodegenerator`. Для сборки утилиты из исходных файлов необходимо установить Lazarus IDE и запустить команду `lazbuild gcodegenerator.lpi` (в случае с Windows - `lazbuild.exe gcodegenerator.lpi`).
|
||||
|
||||
Утилита не имеет графического интерфейса и запускается в командной строке следующей командой:
|
||||
```bash
|
||||
gcodegenerator stator_input.txt output.gcode coils_input.txt
|
||||
```
|
||||
где
|
||||
- `stator_input.txt` - файл, содержащий, параметры статора; описание параметров см. в файле `gcodegenerator/input.txt`
|
||||
- `output.gcode` - наименование генерируемого файла gcode;
|
||||
- `coils_input.txt` - файл, содержащий параметры катушек: количество слоёв намотки на каждый луч статора и количество витков на каждом слое. Если в конфигурационном файле `stator_input.txt` задан автоматический режим работы (`Operation_Mode=auto`, рекомендуется), то данный файл формируется автоматически или перезаписывает имеющийся файл. В ручном режиме для более тонкой настройки и отладки файл `stator_coil.txt` не перезаписывается.
|
||||
|
||||
## Конструкция
|
||||
|
||||
Исходные файлы модели размещены в директории `src` в формате Solidworks. Активно ищутся желающие перечертить всё в FreeCAD. Для просмотра моделей в любом CAD подготовлены файлы в формате STEP в директории `step`. Последняя версия станка - `step/_main_asm_config_3.STEP`.
|
||||
|
||||

|
||||
|
||||
| Вид сбоку | Вид снизу |
|
||||
| ----------- | ----------- |
|
||||
|  |  |
|
||||
|
||||
| Держатель статора | Держатель в сборе со статором |
|
||||
| ----------- | ----------- |
|
||||
|  |  |
|
||||
Исходные файлы модели размещены в директории `src` в формате Solidworks. Для просмотра моделей в любом CAD подготовлены файлы в формате STEP в директории `step`.
|
||||
|
||||
## Фото испытательных образцов
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
| Версия №4 | |
|
||||
| ----------- | ----------- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
| Версия №5 | |
|
||||
| ----------- | ----------- |
|
||||
|  |  |
|
||||
|
||||
## Сотрудничество
|
||||
|
||||
Станок разрабатывается силами энтузиастов из числа команды Robossembler при поддержке [robonomics.network](https://robonomics.network). Спасибо вам всем!
|
||||
Станок разрабатывается силами энтузиастов из числа команды Robossembler при поддержке [Robonomics](https://robonomics.network). Спасибо вам всем!
|
||||
|
||||
Мы будем рады любой форме участия в проекте: делитесь своими идеями, пожеланиями и предложениями в [issues](https://gitlab.com/robossembler/cnc/motor-wire-winder/-/issues) и комментариях канала [robossembler_ru](https://t.me/robossembler_ru) в Telegram.
|
||||
Мы будем рады любой форме участия в проекте: делитесь своими идеями, пожеланиями и предложениями в [issues](https://gitlab.com/robossembler/cnc/motor-wire-winder/-/issues) и комментариях канала [robossembler_ru](https://t.me/robossembler_ru) в Telegram.
|
||||
|
||||
По вопросам дальнейшего развития проекта и иным формам сотрудничества пишите в Telegram по адресу [@brylev](https://t.me/brylev).
|
|
@ -10,7 +10,7 @@
|
|||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="gcodegenerator"/>
|
||||
<Title Value="gcodegenerator_v5"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
|
@ -26,7 +26,7 @@
|
|||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
|
@ -35,7 +35,7 @@
|
|||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="gcodegenerator"/>
|
||||
<Filename Value="gcodegenerator_v5"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
|
|
|
@ -6,136 +6,96 @@
|
|||
<BuildModes Active="Default"/>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<TopLine Value="615"/>
|
||||
<CursorPos X="7" Y="639"/>
|
||||
<FoldState Value=" TC6B21 PMUB T3iN2{r5 piZm92L]NiejM2 T0tN4U0"/>
|
||||
<TopLine Value="648"/>
|
||||
<CursorPos X="25" Y="668"/>
|
||||
<FoldState Value=" TC6B22 PPTB T3iV2{#5 piZmf2L1123]Rl3pQ2 T0yU4U0"/>
|
||||
<UsageCount Value="220"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
<JumpHistory HistoryIndex="29">
|
||||
<JumpHistory HistoryIndex="19">
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="419" Column="18" TopLine="281"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="191" Column="51" TopLine="158"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="422" Column="40" TopLine="398"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="351" Column="28" TopLine="333"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="418" Column="18" TopLine="398"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="518" Column="74" TopLine="496"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="419" Column="20" TopLine="400"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="524" Column="47" TopLine="504"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="291" Column="12" TopLine="247"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="181" Column="56" TopLine="166"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="419" Column="66" TopLine="400"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="651" Column="71" TopLine="625"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="420" Column="18" TopLine="400"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="604" Column="42" TopLine="587"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="419" Column="18" TopLine="400"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="612" Column="91" TopLine="590"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="432" Column="22" TopLine="403"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="506" Column="32" TopLine="245"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="418" Column="62" TopLine="398"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="657" Column="139" TopLine="621"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="422" Column="72" TopLine="403"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="630" Column="26" TopLine="246"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="409" Column="32" TopLine="375"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="632" TopLine="610"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="291" Column="12" TopLine="247"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="671" Column="7" TopLine="615"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="507" Column="20" TopLine="487"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="532" Column="51" TopLine="493"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="446" Column="34" TopLine="412"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="542" Column="49" TopLine="515"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="421" Column="63" TopLine="404"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="580" Column="67" TopLine="313"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="427" Column="71" TopLine="411"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="507" Column="66" TopLine="72"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="424" Column="42" TopLine="405"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="222" Column="64" TopLine="198"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="426" Column="52" TopLine="408"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Column="11"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="291" Column="12" TopLine="247"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="425" Column="157" TopLine="406"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="440" Column="48" TopLine="416"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="436" Column="42" TopLine="417"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="437" Column="42" TopLine="417"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="446" Column="69" TopLine="415"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="439" Column="55" TopLine="418"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="382" Column="23" TopLine="361"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="407" Column="11" TopLine="394"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="445" Column="87" TopLine="419"/>
|
||||
</Position>
|
||||
<Position>
|
||||
<Filename Value="gcodegenerator.pas"/>
|
||||
<Caret Line="582" Column="3" TopLine="621"/>
|
||||
<Filename Value="gcodegenerator_v5.pas"/>
|
||||
<Caret Line="668" Column="25" TopLine="636"/>
|
||||
</Position>
|
||||
</JumpHistory>
|
||||
<RunParams>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
program gcodegenerator;
|
||||
program gcodegenerator_v5;
|
||||
|
||||
uses
|
||||
SysUtils, StrUtils, Math;
|
||||
|
@ -28,16 +28,15 @@ type
|
|||
RayCenterOffset: Double;
|
||||
WireDiameter: Double;
|
||||
NeedleDiameter: Double;
|
||||
PathClearance: Double;
|
||||
|
||||
NeedleRigidity: Double;
|
||||
WorkSpeed :integer;
|
||||
end;
|
||||
|
||||
type
|
||||
TLayer = record
|
||||
Turns: Integer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StartZ: double; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
EndZ: double; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Turns: Integer; // Êîëè÷åñòâî âèòêîâ
|
||||
StartZ: double; // Íà÷àëüíàÿ êîîðäèíàòà
|
||||
EndZ: double; // Êîíå÷íàÿ êîîðäèíàòà
|
||||
end;
|
||||
|
||||
var
|
||||
|
@ -47,6 +46,11 @@ var
|
|||
InFile, OutFile, CoilGeometryFile: TextFile;
|
||||
Line: string;
|
||||
CoilRadius,CoilWidth,CoilHeight :double;
|
||||
StartX: double;
|
||||
StartY: double;
|
||||
StartZ: double;
|
||||
CurrentX: double;
|
||||
CurrentY: double;
|
||||
CurrentZ: double;
|
||||
coords: TPoint;
|
||||
normalizecoords: TPoint;
|
||||
|
@ -61,8 +65,12 @@ var
|
|||
angle :double;
|
||||
MaxDepth,MaxPath :double;
|
||||
MoveForward:boolean;
|
||||
WindDirection:integer;
|
||||
OperationMode:string;
|
||||
|
||||
xclearance,yclearance,zclearance: Double;
|
||||
FixtureOffset: Double;
|
||||
FixtureDiameter: Double;
|
||||
FixtureTurns:integer;
|
||||
|
||||
function ParseLine(Line: string): Boolean;
|
||||
var
|
||||
|
@ -70,20 +78,20 @@ var
|
|||
Value: string;
|
||||
TrimmedLine: string;
|
||||
begin
|
||||
TrimmedLine := Trim(Line); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TrimmedLine := Trim(Line); // Óäàëÿåì ïðîáåëû â íà÷àëå è êîíöå ñòðîêè
|
||||
if Length(TrimmedLine) = 0 then
|
||||
begin
|
||||
exit(true); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
exit(true); // Ïóñòàÿ ñòðîêà - ïðîïóñêàåì
|
||||
end
|
||||
else if TrimmedLine[1] in [';','#'] then
|
||||
begin
|
||||
exit(true); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
exit(true); // Ñòðîêà êîììåíòàðèÿ - ïðîïóñêàåì
|
||||
end;
|
||||
Parts := SplitString(TrimmedLine, '='); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TrimmedLine
|
||||
Parts := SplitString(TrimmedLine, '='); // Èñïîëüçóåì TrimmedLine
|
||||
Result := Length(Parts) = 2;
|
||||
if Result then
|
||||
begin
|
||||
Value := LowerCase(Trim(Parts[1])); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Value := LowerCase(Trim(Parts[1])); // Ïðèâîäèì ê íèæíåìó ðåãèñòðó
|
||||
case Trim(Parts[0]) of
|
||||
'stator_name': begin
|
||||
StatorParams.StatorName := Value;
|
||||
|
@ -177,18 +185,50 @@ var
|
|||
writeln('Needle Diameter: ', StatorParams.NeedleDiameter:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'path_clearance': begin
|
||||
StatorParams.PathClearance := StrToFloat(Value);
|
||||
writeln('Path Clearance: ', StatorParams.PathClearance:8:2);
|
||||
'needle_rigidity': begin
|
||||
StatorParams.NeedleRigidity := StrToFloat(Value);
|
||||
StatorParams.NeedleRigidity := StatorParams.NeedleRigidity/100;
|
||||
writeln('Needle Rigidity: ', StatorParams.NeedleRigidity:8:2);
|
||||
writeln();
|
||||
end;
|
||||
|
||||
'x_clearance': begin
|
||||
xclearance := StrToFloat(Value);
|
||||
writeln('X Clearance: ', xclearance:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'y_clearance': begin
|
||||
yclearance := StrToFloat(Value);
|
||||
writeln('Y Clearance: ', yclearance:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'z_clearance': begin
|
||||
zclearance := StrToFloat(Value);
|
||||
writeln('Z Clearance: ', zclearance:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'fixture_offset': begin
|
||||
FixtureOffset := StrToFloat(Value);
|
||||
writeln('Fixture Offset: ', FixtureOffset:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'fixture_dia': begin
|
||||
FixtureDiameter := StrToFloat(Value);
|
||||
writeln('Fixture Diameter: ', FixtureDiameter:8:2);
|
||||
writeln();
|
||||
end;
|
||||
'fixture_turns': begin
|
||||
FixtureTurns := StrToInt(Value);
|
||||
writeln('Fixture Turns: ', FixtureTurns);
|
||||
writeln();
|
||||
end;
|
||||
|
||||
|
||||
'work_speed': begin
|
||||
StatorParams.WorkSpeed := StrToInt(Value);
|
||||
writeln('Work Speed: ', StatorParams.WorkSpeed);
|
||||
writeln();
|
||||
end;
|
||||
|
||||
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
|
@ -229,7 +269,7 @@ var
|
|||
angleRadians: Double;
|
||||
begin
|
||||
radius := diameter / 2;
|
||||
// angleRadians := -1*angleDegrees * PI / 180; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// angleRadians := -1*angleDegrees * PI / 180; // Ïåðåâîä ãðàäóñîâ â ðàäèàíû
|
||||
angleRadians := -1 * DegToRad(angleDegrees);
|
||||
|
||||
Result.X := radius * Cos(angleRadians);
|
||||
|
@ -248,28 +288,28 @@ end;
|
|||
var
|
||||
thetaRad, alphaRad, xKas, yKas, mTang, bTang: Real;
|
||||
begin
|
||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 1. Ïðåîáðàçîâàíèå óãëà èç ãðàäóñîâ â ðàäèàíû.
|
||||
thetaRad := DegToRad(thetaDeg);
|
||||
|
||||
// 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0,0).
|
||||
// 2. Âû÷èñëåíèå êîîðäèíàò òî÷êè êàñàíèÿ íà îêðóæíîñòè (îòíîñèòåëüíî öåíòðà 0,0).
|
||||
xKas := radius * Cos(thetaRad);
|
||||
yKas := radius * Sin(thetaRad);
|
||||
|
||||
// 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>).
|
||||
// 3. Âû÷èñëåíèå óãëà, ïåðïåíäèêóëÿðíîãî ðàäèóñ-âåêòîðó (êàñàòåëüíîé).
|
||||
alphaRad := thetaRad + PI / 2;
|
||||
|
||||
// 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 4. Âû÷èñëåíèå óãëîâîãî êîýôôèöèåíòà êàñàòåëüíîé.
|
||||
mTang := Tan(alphaRad);
|
||||
|
||||
// 5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (y = mTang * x + bTang).
|
||||
// 5. Âû÷èñëåíèå ñâîáîäíîãî ÷ëåíà óðàâíåíèÿ êàñàòåëüíîé (y = mTang * x + bTang).
|
||||
bTang := yKas - mTang * xKas;
|
||||
|
||||
// 6. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> X <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> X (y = 0).
|
||||
// 6. Âû÷èñëåíèå êîîðäèíàòû X òî÷êè ïåðåñå÷åíèÿ êàñàòåëüíîé ñ îñüþ X (y = 0).
|
||||
// 0 = mTang * x + bTang
|
||||
// x = -bTang / mTang
|
||||
if mTang = 0 then
|
||||
begin
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> X - <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NaN.
|
||||
// Êàñàòåëüíàÿ ïàðàëëåëüíà îñè X - íåò òî÷êè ïåðåñå÷åíèÿ. Âîçâðàùàåì NaN.
|
||||
NormalizeZ := NaN;
|
||||
end
|
||||
else
|
||||
|
@ -289,25 +329,25 @@ begin
|
|||
end;
|
||||
|
||||
function CalculateMaxPath(length, width, angleDegrees: double): double;
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
|
||||
//ôóíêöèÿ âû÷èñëÿåò ìàêñèìàëüíîå ðàññòîÿíèå ìåæäó ëó÷àìè. Äëÿ ýòîãî îò öåíòðà ñòàòîðà äî
|
||||
var
|
||||
topLeftX, topLeftY, rotatedX, rotatedY, angleRadians, distance: double;
|
||||
begin
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Âû÷èñëÿåì êîîðäèíàòû âåðõíåãî ëåâîãî óãëà ïðÿìîóãîëüíèêà
|
||||
topLeftX := -length;
|
||||
topLeftY := width / 2;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Ïðåîáðàçóåì óãîë â ðàäèàíû (ñ ó÷åòîì âðàùåíèÿ ïî ÷àñîâîé ñòðåëêå)
|
||||
angleRadians := degToRad(-angleDegrees);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Âû÷èñëÿåì êîîðäèíàòû ïîâåðíóòîãî íèæíåãî ëåâîãî óãëà âòîðîãî ïðÿìîóãîëüíèêà
|
||||
rotatedX := -length * cos(angleRadians) - (-width / 2) * sin(angleRadians);
|
||||
rotatedY := -length * sin(angleRadians) + (-width / 2) * cos(angleRadians);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Âû÷èñëÿåì ðàññòîÿíèå ìåæäó òî÷êàìè
|
||||
distance := sqrt(sqr(rotatedX - topLeftX) + sqr(rotatedY - topLeftY));
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Âîçâðàùàåì ðåçóëüòàò
|
||||
MaxPath := distance;
|
||||
end;
|
||||
|
||||
|
@ -319,47 +359,47 @@ end;
|
|||
AssignFile(CoilGeometryFile, CoilGeometryFileName);
|
||||
try
|
||||
Rewrite(CoilGeometryFile);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//Ñ÷èòàåì, ñêîëüêî ñëî¸â ìîæåì íàìîòàòü.
|
||||
MaxPath:=CalculateMaxPath((StatorParams.RayLength+StatorParams.BaseRadius), StatorParams.RayWidth, AngleBetweenRays);
|
||||
//writeln(CoilGeometryFile, ';MaxPath:', MaxPath);
|
||||
//MaxLayers :=trunc(((MaxPath-RequiredSpacing)/2/StatorParams.WireDiameter));
|
||||
MaxLayers :=round((MaxPath-StatorParams.NeedleDiameter)/2/(StatorParams.WireDiameter+RequiredSpacing));
|
||||
if (MaxLayers mod 2 <> 0) then writeln(CoilGeometryFile, ';MaxLayers ', MaxLayers) else
|
||||
if (MaxLayers mod 2 = 0) then writeln(CoilGeometryFile, ';MaxLayers ', MaxLayers) else
|
||||
begin
|
||||
dec(MaxLayers);
|
||||
writeln(CoilGeometryFile, ';<EFBFBD>alculations resulted in MaxLayers=', MaxLayers+1, ' because it is even, MaxLayers=MaxLayers-1 and equal ',MaxLayers);
|
||||
writeln(CoilGeometryFile, ';Ñalculations resulted in MaxLayers=', MaxLayers+1, ' because it is even, MaxLayers=MaxLayers-1 and equal ',MaxLayers);
|
||||
end;
|
||||
|
||||
MoveForward:=true;
|
||||
for i := 1 to MaxLayers do
|
||||
begin
|
||||
write(CoilGeometryFile, ';Lair:', i, ' have ');
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> + 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RequiredSpacing:=StatorParams.PathClearance*2+(i-1)*StatorParams.WireDiameter*2+StatorParams.NeedleDiameter;
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//Ñ÷èòàåì äëèíó êàòóøêè è êîëè÷åñòâî âèòêîâ
|
||||
//Äëÿ ýòîãî ñ÷èòàåì íåîáõîäèìîå ðàññòîÿíèå ìåæäó ëó÷àìè. 2 äèàìåòðà ïðîâîäà + äèàìåòð èãëû + 2 çàçîðà áåçîïàñíîñòè
|
||||
RequiredSpacing:=yclearance*2+(i-1)*StatorParams.WireDiameter*2+StatorParams.NeedleDiameter;
|
||||
//Èñïîëüçóÿ íåîáõîäèìîå ðàññòîÿíèå, ðàññ÷èòûâàåì íà êàêóþ, ìàêñèìàëüíóþ ãëóáèíó ìîæåò ïîãðóçèòüñÿ èãîëêà. (ðàññòîÿíèå îò öåíòðà ñòàòîðà)
|
||||
MaxDepth:=DepthCheck(StatorParams.RayWidth, RequiredSpacing, AngleBetweenRays);
|
||||
//writeln(OutFile, ';RayWidth ', StatorParams.RayWidth:0:5);
|
||||
//writeln(OutFile, ';RequiredSpacing ', RequiredSpacing:0:5);
|
||||
//writeln(OutFile, ';AngleBetweenRays ', AngleBetweenRays:0:5);
|
||||
//writeln(CoilGeometryFile, ';MaxDepth ', MaxDepth:0:5);
|
||||
//writeln(OutFile);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//Åñëè äîïóñòèìàÿ ãëóáèíà ìåíüøå, ÷åì äèàìåòð îñíîâàíèÿ, òîãäà äëèíà êàòóøêè ðàâíà äëèíå ëó÷à.
|
||||
//Åñëè äîïóñòèìàÿ ãëóáèíà áîëüøå, ÷åì äèàìåòð + äëèíà ëó÷à, ïðåêðàùàåì äâèæ.
|
||||
//Èíà÷å äëèíà êàòóøêè ðàâíà "ðàäèóñ_îñíîâàíèÿ + äëèíà_ëó÷à - ãëóáèíà)
|
||||
If (MaxDepth < (StatorParams.BaseRadius)) then CoilLength:=StatorParams.RayLength else if (MaxDepth > (StatorParams.RayLength+StatorParams.BaseRadius)) then break
|
||||
else CoilLength:=StatorParams.RayLength+StatorParams.BaseRadius-MaxDepth;
|
||||
//writeln(CoilGeometryFile, '!!!');
|
||||
|
||||
write(CoilGeometryFile, CoilLength:0:5, 'mm ');
|
||||
//CurrentCoilTurns := ceil(CoilLength/StatorParams.WireDiameter);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//Èñõîäÿ èç äëèíû êàòóøêè ñ÷èòàåì êîëè÷åñòâî âèòêîâ. È ñêëàäûâàåì ñêîëüêî âñåãî âèòêîâ íà êàòóøêå.
|
||||
CurrentCoilTurns := round(CoilLength/StatorParams.WireDiameter);
|
||||
write(CoilGeometryFile, CurrentCoilTurns, ' Turns');
|
||||
CoilTurnsSum := CoilTurnsSum+CurrentCoilTurns;
|
||||
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Z
|
||||
//Ïåðåä êàæäûì ñëîåì íóæíî ïåðåñ÷èòàòü êîîðäèíàòó Z
|
||||
//writeln(CoilGeometryFile,' StartZ=',CurrentZ:0:5);
|
||||
// if (MoveForward = false) then CurrentZ:=StatorParams.RayLength+StatorParams.BaseRadius-StatorParams.WireDiameter/2
|
||||
// else CurrentZ:=StatorParams.RayLength+StatorParams.BaseRadius-StatorParams.WireDiameter*(CurrentCoilTurns-0.5);
|
||||
|
@ -419,9 +459,10 @@ end;
|
|||
ReadLn(CoilGeometryFile, Line);
|
||||
if Length(Line) > 0 then
|
||||
begin
|
||||
TrimmedLine := Trim(Line); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (Length(TrimmedLine) = 0) then continue //exit() // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if TrimmedLine[1] in [';','#'] then continue; // exit(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TrimmedLine := Trim(Line); // Óäàëÿåì ïðîáåëû â íà÷àëå è êîíöå ñòðîêè
|
||||
if (Length(TrimmedLine) = 0) then continue //exit() // Ïóñòàÿ ñòðîêà - ïðîïóñêàåì
|
||||
else if TrimmedLine[1] in [';','#'] then continue; // exit(); // Ñòðîêà êîììåíòàðèÿ - ïðîïóñêàåì
|
||||
StringReplace(TrimmedLine, ',', '.', [rfReplaceAll]);
|
||||
inc(i);
|
||||
spacePos := Pos(' ', TrimmedLine);
|
||||
//writeln(spacePos);
|
||||
|
@ -468,7 +509,211 @@ end;
|
|||
CloseFile(CoilGeometryFile);
|
||||
end;
|
||||
|
||||
procedure StartSequence();
|
||||
begin
|
||||
writeln(OutFile, ';Generate G-code file for ',StatorParams.StatorName,' stator. At ',FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', StartTime));
|
||||
writeln(OutFile, '; G-code for stator winding');
|
||||
writeln(OutFile, 'G90 ; Absolute coordinate system');
|
||||
//writeln(OutFile, 'G1 Y-10');
|
||||
writeln(OutFile, 'G28 X Y Z');
|
||||
writeln(OutFile, 'G1 X0 Y0');
|
||||
writeln(OutFile);
|
||||
// Move to center of ray along Y axis and reset coordinate
|
||||
writeln(OutFile, 'G1 X', StatorParams.RayCenterOffset:0:2, ' Y0.0');
|
||||
writeln(OutFile, 'G92 X0 Y0');
|
||||
|
||||
//îòâîäèì èãëó ëåâåå è âûøå âåðøèíû ëó÷à
|
||||
CoilRadius:=(StatorParams.RayTopHeight/2+StatorParams.NeedleDiameter/2+yclearance);
|
||||
CoilWidth:=(StatorParams.RayTopWidth+StatorParams.NeedleDiameter+yclearance*2);
|
||||
CoilHeight:=(StatorParams.RayTopHeight+StatorParams.NeedleDiameter+xclearance*2);
|
||||
writeln(OutFile, ';CoilRadius = ', CoilRadius:0:3);
|
||||
writeln(OutFile, ';CoilWidth = ', CoilWidth:0:3);
|
||||
writeln(OutFile, ';CoilHeight = ', CoilHeight:0:3);
|
||||
StartX:=-1*CoilHeight/2;
|
||||
StartY:=-1*AngleBetweenRays/2;
|
||||
writeln(OutFile, 'G1 X', StartX:0:3, ' Y', StartY:0:3);
|
||||
|
||||
//ïðèáëèæàåìñÿ ê îñíîâàíèþ ñòàòîðà.
|
||||
CurrentZ:=(StatorParams.BaseDiameter/2)+zclearance;
|
||||
writeln(OutFile, 'G1 Z', CurrentZ:0:2, ' F', StatorParams.WorkSpeed);
|
||||
//Âñòà¸ì íà ïàóçó äëÿ òîãî, ÷òîáû ïðèâÿçàòü êîíåö ïðîâîëîêè
|
||||
writeln(OutFile, 'M0');
|
||||
//Äâèæåíèå "ââåðõ" ïåðâîé êàòóøêè. Äåëàåòñÿ îäèí ðàç, ÷òîáû îáðàçîâàòü ïåòëþ îò êðþ÷êà.
|
||||
writeln(OutFile, 'G1 X', StartX:0:3, ' Y', -1*StartY:0:3);
|
||||
end;
|
||||
|
||||
procedure MakeCoil();
|
||||
begin
|
||||
for j := 1 to CurrentCoilTurns do
|
||||
begin
|
||||
writeln(OutFile,';Coil¹ = ',j);
|
||||
writeln(OutFile,'M117 L',LayerNumber,'/C',j,'/S',CoilTurnsSum-CurrentCoilTurns+j);
|
||||
|
||||
//Move from -X,Y to X,Y
|
||||
angle := WindDirection*AngleBetweenRays/2;
|
||||
CurrentX :=CoilHeight/2+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity);
|
||||
writeln(OutFile, 'G1 X', CurrentX:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5,' F',StatorParams.WorkSpeed, ' ;Point 1 CurrentZ= ',CurrentZ:0:5, ' 2x_clear= ',+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity):0:3); // Top Right Corner
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
|
||||
//Divide the path into 100 points
|
||||
//Move from X,Y to X,-Y
|
||||
for k := 1 to 100 do
|
||||
begin
|
||||
angle := AngleBetweenRays/2;
|
||||
angle := WindDirection*(angle-(2*(angle/100*k)));
|
||||
CurrentX :=CoilHeight/2+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity);
|
||||
writeln(OutFile, 'G1 X', CurrentX:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5,' F',round(1.2*StatorParams.WorkSpeed/StatorParams.BaseRadius*CurrentZ), ' ;Point 2 CurrentZ= ',CurrentZ:0:5, ' 3x_clear= ',+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity):0:3); // Bottom Right Corner
|
||||
end;
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
|
||||
//Move from X,-Y to -X,-Y
|
||||
angle := -1*WindDirection*AngleBetweenRays/2;
|
||||
CurrentX :=CoilHeight/2+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity);
|
||||
writeln(OutFile, 'G1 X', -1*CurrentX:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5,' F',StatorParams.WorkSpeed, ' ;Point 3 CurrentZ= ',CurrentZ:0:5, ' 4x_clear= ',+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity):0:3); // Bottom Left Corner
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
|
||||
//Move from -X,-Y to -X,Y
|
||||
//Divide the path into 100 points
|
||||
for k := 1 to 100 do
|
||||
begin
|
||||
angle := AngleBetweenRays/2;
|
||||
angle := -1*WindDirection*(angle-(2*(angle/100*k)));
|
||||
CurrentX :=CoilHeight/2+((CurrentZ-StatorParams.BaseRadius)*xclearance*StatorParams.NeedleRigidity);
|
||||
writeln(OutFile, 'G1 X', -1*CurrentX:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5,' F',round(1.2*StatorParams.WorkSpeed/StatorParams.BaseRadius*CurrentZ) , ' ;Point 4 CurrentZ= ',CurrentZ:0:5, ' 1x_clear= ',+((CurrentZ-StatorParams.BaseRadius*xclearance*StatorParams.NeedleRigidity)):0:3); // Top Left Corner
|
||||
end;
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure PairCoilWind(mode: string);
|
||||
begin
|
||||
if ((mode = 'Aa') or (mode = 'Bb') or (mode = 'Cc')) then
|
||||
begin
|
||||
WindDirection:=1;
|
||||
end
|
||||
else if ((mode = 'aA') or (mode = 'bB') or (mode = 'cC')) then
|
||||
begin
|
||||
WindDirection:=-1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Writeln('Wrong Pair Coil Pattern. (Aa, aA, Bb, bB, Cc, cC');
|
||||
Readln;
|
||||
Halt(1);
|
||||
end;
|
||||
|
||||
for LayerNumber := 1 to MaxLayers do
|
||||
begin
|
||||
writeln(OutFile, ';Layer ', LayerNumber);
|
||||
if (Layers[LayerNumber].StartZ > Layers[LayerNumber].EndZ) then CoilLength:=Layers[LayerNumber].StartZ-Layers[LayerNumber].EndZ
|
||||
else CoilLength:=Layers[LayerNumber].EndZ-Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile, ';CoilLength ', CoilLength:0:5);
|
||||
CurrentCoilTurns:=Layers[LayerNumber].Turns;
|
||||
//writeln(OutFile, ';CurrentCoilTurns ', CurrentCoilTurns);
|
||||
CoilTurnsSum := CoilTurnsSum+CurrentCoilTurns;
|
||||
writeln(OutFile, ';CoilTurnsSum ', CoilTurnsSum);
|
||||
CurrentZ:=Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile,'; NewZ=',CurrentZ:0:5);
|
||||
//Íà÷èíàåì ìîòàòü.
|
||||
writeln(OutFile, ';We make ',CurrentCoilTurns, ' turns on ', LayerNumber, ' layer.' );
|
||||
writeln(OutFile);
|
||||
|
||||
WindDirection := 1;
|
||||
MakeCoil();
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
|
||||
CoilWidth:=CoilWidth+StatorParams.WireDiameter*2;
|
||||
MoveForward:= not MoveForward;
|
||||
writeln(OutFile,';MoveForward: ', MoveForward);
|
||||
end;
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, 'G4 P100');
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, 'G4 P100');
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, ';Coil Complete.');
|
||||
writeln(OutFile, ';Changing coords.');
|
||||
writeln(OutFile, 'G92 Y', -1*angle:0:5);
|
||||
writeln(OutFile, ';Second coil');
|
||||
|
||||
for LayerNumber := 1 to MaxLayers do
|
||||
begin
|
||||
writeln(OutFile, ';Layer ', LayerNumber);
|
||||
if (Layers[LayerNumber].StartZ > Layers[LayerNumber].EndZ) then CoilLength:=Layers[LayerNumber].StartZ-Layers[LayerNumber].EndZ
|
||||
else CoilLength:=Layers[LayerNumber].EndZ-Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile, ';CoilLength ', CoilLength:0:5);
|
||||
CurrentCoilTurns:=Layers[LayerNumber].Turns;
|
||||
//writeln(OutFile, ';CurrentCoilTurns ', CurrentCoilTurns);
|
||||
CoilTurnsSum := CoilTurnsSum+CurrentCoilTurns;
|
||||
writeln(OutFile, ';CoilTurnsSum ', CoilTurnsSum);
|
||||
CurrentZ:=Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile,'; NewZ=',CurrentZ:0:5);
|
||||
//Íà÷èíàåì ìîòàòü.
|
||||
writeln(OutFile, ';We make ',CurrentCoilTurns, ' turns on ', LayerNumber, ' layer.' );
|
||||
writeln(OutFile);
|
||||
|
||||
WindDirection := -1;
|
||||
MakeCoil();
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
|
||||
CoilWidth:=CoilWidth+StatorParams.WireDiameter*2;
|
||||
MoveForward:= not MoveForward;
|
||||
writeln(OutFile,';MoveForward: ', MoveForward);
|
||||
end;
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, 'G4 P50');
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, 'G4 P50');
|
||||
writeln(OutFile, 'M300 S2500 P100');
|
||||
writeln(OutFile, ';Coil Complete.');
|
||||
|
||||
end;
|
||||
|
||||
procedure MoveToNextPair();
|
||||
begin
|
||||
writeln(OutFile, ';Move To Next Pair');
|
||||
writeln(OutFile, 'G92 Y0');
|
||||
writeln(OutFile, 'G1 Y', 360/(StatorParams.NumberOfRays/3/2):0:5 ); // Top Left Corner
|
||||
writeln(OutFile, ';Turn to next pair with ',360/(StatorParams.NumberOfRays/3/2):0:5,'°.' );
|
||||
writeln(OutFile, 'G92 Y',StartY:0:5);
|
||||
end;
|
||||
|
||||
procedure CreateMotorPhase(pattern:string);
|
||||
begin
|
||||
PairCoilWind(pattern);
|
||||
MoveToNextPair();
|
||||
PairCoilWind(pattern);
|
||||
MoveToNextPair();
|
||||
PairCoilWind(pattern);
|
||||
MoveToNextPair();
|
||||
PairCoilWind(pattern);
|
||||
end;
|
||||
|
||||
procedure MoveToFixture();
|
||||
begin
|
||||
writeln(OutFile, ';Move To Fixture');
|
||||
writeln(OutFile, 'G1 X', FixtureOffset:0:3);
|
||||
writeln(OutFile, 'M0'); //Ïàóçà
|
||||
end;
|
||||
|
||||
procedure AttachToFixture();
|
||||
begin
|
||||
writeln(OutFile, ';Attach To Fixture');
|
||||
for j := 0 to FixtureTurns do
|
||||
begin
|
||||
for i := 0 to 360 do
|
||||
begin
|
||||
coords := CircleCoordinates(FixtureDiameter/2+xclearance, i+180);
|
||||
angle := CalculateAngle(coords.Y, CurrentZ);
|
||||
writeln(OutFile, 'G1 X', coords.X:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5);
|
||||
CurrentZ:=CurrentZ+StatorParams.WireDiameter/360;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin //Start Programm
|
||||
// Command line argument handling
|
||||
StartTime := Now;
|
||||
if ParamCount < 3 then
|
||||
|
@ -486,33 +731,8 @@ begin
|
|||
AssignFile(OutFile, OutputFileName);
|
||||
try
|
||||
Rewrite(OutFile);
|
||||
StartSequence();
|
||||
// *** Your G-code generation logic here ***
|
||||
writeln(OutFile, ';Generate G-code file for ',StatorParams.StatorName,' stator. At ',FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', StartTime));
|
||||
writeln(OutFile, '; G-code for stator winding');
|
||||
writeln(OutFile, 'G90 ; Absolute coordinate system');
|
||||
writeln(OutFile, 'G1 Y-10');
|
||||
writeln(OutFile, 'G28 X Y Z');
|
||||
writeln(OutFile, 'G1 X0 Y0');
|
||||
//writeln(OutFile, 'G28 O'); //Home all "untrusted" axes
|
||||
writeln(OutFile);
|
||||
// Move to center of ray along Y axis and reset coordinate
|
||||
writeln(OutFile, 'G1 X', StatorParams.RayCenterOffset:0:2);
|
||||
writeln(OutFile, 'G92 X0');
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CoilRadius:=(StatorParams.RayTopHeight/2+StatorParams.NeedleDiameter/2+StatorParams.PathClearance);
|
||||
CoilWidth:=(StatorParams.RayTopWidth+StatorParams.NeedleDiameter+StatorParams.PathClearance*2);
|
||||
CoilHeight:=(StatorParams.RayTopHeight+StatorParams.NeedleDiameter+StatorParams.PathClearance*2);
|
||||
writeln(OutFile, ';CoilRadius = ', CoilRadius:0:3);
|
||||
writeln(OutFile, ';CoilWidth = ', CoilWidth:0:3);
|
||||
writeln(OutFile, ';CoilHeight = ', CoilHeight:0:3);
|
||||
writeln(OutFile, 'G1 X', -1*CoilHeight/2:0:3, ' Y',-1*AngleBetweenRays/2:0:3);
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
CurrentZ:=(StatorParams.BaseDiameter/2)+StatorParams.PathClearance;
|
||||
writeln(OutFile, 'G1 Z', CurrentZ:0:2, ' F', StatorParams.WorkSpeed);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
writeln(OutFile, 'M0');
|
||||
|
||||
if (OperationMode = 'auto') then CalculateCoilGeometry() else
|
||||
if (OperationMode = 'manual') then ReadCoilGeometry() else
|
||||
|
@ -530,12 +750,14 @@ begin
|
|||
begin
|
||||
writeln(OutFile, ';', i, ' ',Layers[i].Turns,' ',Layers[i].StartZ:0:5,' ',Layers[i].EndZ:0:5);
|
||||
end;
|
||||
|
||||
Inc(LayerNumber);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//Íà÷èíàåì ìîòàòü êàòóøêó.
|
||||
writeln(OutFile);
|
||||
writeln(OutFile, ';Start winding');
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Äâèãàåìñÿ îò öåíòðà ê êðàþ
|
||||
MoveForward:=true;
|
||||
|
||||
if (StatorParams.RayShape = 'circle') then
|
||||
begin
|
||||
for j := 0 to CurrentCoilTurns do
|
||||
|
@ -562,7 +784,7 @@ begin
|
|||
writeln(OutFile, ';RequiredSpacing = ',RequiredSpacing:0:5);
|
||||
RequiredSpacing:=RequiredSpacing+StatorParams.NeedleDiameter;
|
||||
writeln(OutFile, ';RequiredSpacing = ',RequiredSpacing:0:5);
|
||||
RequiredSpacing:=RequiredSpacing+StatorParams.PathClearance*2+LayerNumber*StatorParams.WireDiameter*2;
|
||||
RequiredSpacing:=RequiredSpacing+yclearance*2+LayerNumber*StatorParams.WireDiameter*2;
|
||||
writeln(OutFile, ';RequiredSpacing = ',RequiredSpacing:0:5);
|
||||
|
||||
CurrentZ:=RequiredSpacing/(2 * tan(AngleBetweenRays*PI/180/2));
|
||||
|
@ -572,70 +794,10 @@ begin
|
|||
begin
|
||||
// writeln(OutFile, ';Rect? ');
|
||||
|
||||
for LayerNumber := 1 to MaxLayers do
|
||||
begin
|
||||
writeln(OutFile, ';Layer ', LayerNumber);
|
||||
if (Layers[LayerNumber].StartZ > Layers[LayerNumber].EndZ) then CoilLength:=Layers[LayerNumber].StartZ-Layers[LayerNumber].EndZ
|
||||
else CoilLength:=Layers[LayerNumber].EndZ-Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile, ';CoilLength ', CoilLength:0:5);
|
||||
CurrentCoilTurns:=Layers[LayerNumber].Turns;
|
||||
//writeln(OutFile, ';CurrentCoilTurns ', CurrentCoilTurns);
|
||||
CoilTurnsSum := CoilTurnsSum+CurrentCoilTurns;
|
||||
writeln(OutFile, ';CoilTurnsSum ', CoilTurnsSum);
|
||||
CurrentZ:=Layers[LayerNumber].StartZ;
|
||||
writeln(OutFile,'; NewZ=',CurrentZ:0:5);
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
writeln(OutFile, ';We make ',CurrentCoilTurns, ' turns on ', LayerNumber, ' layer.' );
|
||||
writeln(OutFile);
|
||||
for j := 1 to CurrentCoilTurns do
|
||||
begin
|
||||
writeln(OutFile,';Coil<69> = ',j);
|
||||
writeln(OutFile,'M117 ',j);
|
||||
//angle := CalculateAngle(CoilWidth/2, CurrentZ);
|
||||
angle := AngleBetweenRays/2;
|
||||
CreateMotorPhase('Aa');
|
||||
MoveToFixture();
|
||||
AttachToFixture();
|
||||
|
||||
//Divide the path into 100 points
|
||||
//Move from left-down to left-up
|
||||
for k := 1 to 100 do
|
||||
begin
|
||||
angle := AngleBetweenRays/2;
|
||||
angle := ((-1*angle)+2*(angle/100*k));
|
||||
writeln(OutFile, 'G1 X', -1*CoilHeight/2:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5, ' ;CurrentZ= ',CurrentZ:0:5); // Top Left Corner
|
||||
end;
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
|
||||
// angle := CalculateAngle(CoilWidth/2, CurrentZ);
|
||||
angle := AngleBetweenRays/2;
|
||||
writeln(OutFile, 'G1 X', CoilHeight/2:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5, ' ;CurrentZ= ',CurrentZ:0:5); // Top Right Corner
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
//writeln(OutFile, 'M0');
|
||||
|
||||
//Divide the path into 100 points
|
||||
//Move from left-down to rt-up
|
||||
for k := 1 to 100 do
|
||||
begin
|
||||
angle := AngleBetweenRays/2;
|
||||
angle := (angle-(2*(angle/100*k)));
|
||||
writeln(OutFile, 'G1 X', CoilHeight/2:0:3, ' Y', angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5, ' ;CurrentZ= ',CurrentZ:0:5); // Bottom Right Corner
|
||||
end;
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
//writeln(OutFile, 'M0');
|
||||
|
||||
// angle := CalculateAngle(CoilWidth/2, CurrentZ);
|
||||
angle := AngleBetweenRays/2;
|
||||
writeln(OutFile, 'G1 X', -1*CoilHeight/2:0:3, ' Y', -angle:0:5,' Z', NormalizeZ(CurrentZ, angle):0:5, ' ;CurrentZ= ',CurrentZ:0:5); // Bottom Left Corner
|
||||
if MoveForward then CurrentZ:=CurrentZ+StatorParams.WireDiameter/4 else CurrentZ:=CurrentZ-StatorParams.WireDiameter/4;
|
||||
//writeln(OutFile, 'M0');
|
||||
end;
|
||||
|
||||
writeln(OutFile, 'M0');
|
||||
// writeln(OutFile, 'G91');
|
||||
// writeln(OutFile, 'G1 Y50');
|
||||
// writeln(OutFile, 'G90');
|
||||
CoilWidth:=CoilWidth+StatorParams.WireDiameter*2;
|
||||
MoveForward:= not MoveForward;
|
||||
writeln(OutFile,';MoveForward: ', MoveForward);
|
||||
end;
|
||||
end;
|
||||
|
||||
except
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
# диаметр основания статора
|
||||
base_dia=37,8
|
||||
# количество лучей статора
|
||||
num_rays=1
|
||||
|
||||
# форма луча статора (circle, rect, superellipse)
|
||||
ray_shape=rect
|
||||
# диаметр луча статора
|
||||
# ray_dia=5,0
|
||||
# ширина луча статора
|
||||
ray_w=2,4
|
||||
# высота луча статора
|
||||
ray_h=5
|
||||
# длина луча статора
|
||||
ray_len=9,0
|
||||
|
||||
# форма вершины луча
|
||||
raytop_shape=circle
|
||||
# диаметр вершины луча
|
||||
raytop_dia=8,9
|
||||
# ширина вершины луча
|
||||
raytop_w=5,6
|
||||
# высота вершины луча
|
||||
raytop_h=14,0
|
||||
|
||||
# смещение центра луча
|
||||
ray_offset=14,7
|
||||
# диаметр провода
|
||||
wire_diameter=0,25
|
||||
# диаметр иглы
|
||||
needle_diameter=1,25
|
||||
# зазор пути
|
||||
path_clearance=0,2
|
||||
|
||||
# скорость намотки
|
||||
work_speed=2000
|
|
@ -1 +0,0 @@
|
|||
gcodegenerator_v4.exe trident_input.txt trident_output.gcode trident_coil.txt
|
BIN
img/winder-5-rc2-1.jpg
Normal file
BIN
img/winder-5-rc2-1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 191 KiB |
BIN
img/winder-5-rc2-2.jpg
Normal file
BIN
img/winder-5-rc2-2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 178 KiB |
BIN
img/winder-5-rc2.jpg
Normal file
BIN
img/winder-5-rc2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
Binary file not shown.
BIN
src/3d_printed_parts/Electronics_cover.STL
Normal file
BIN
src/3d_printed_parts/Electronics_cover.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Old_to_sort/main_platform.SLDPRT
Normal file
BIN
src/3d_printed_parts/Old_to_sort/main_platform.SLDPRT
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Rotary_spacer_1.8mm.SLDPRT
Normal file
BIN
src/3d_printed_parts/Rotary_spacer_1.8mm.SLDPRT
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Rotary_spacer_1.8mm.STL
Normal file
BIN
src/3d_printed_parts/Rotary_spacer_1.8mm.STL
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/Rotary_spacer_for_72mm_plastic_stator.STL
Normal file
BIN
src/3d_printed_parts/Rotary_spacer_for_72mm_plastic_stator.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/Display_stand.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/Display_stand.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/brake_equipment.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/brake_equipment.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/brake_handle.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/brake_handle.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/carrying_handle.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/carrying_handle.STL
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/e-stop_mount.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/e-stop_mount.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/main_carriage.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/main_carriage.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/nut_holder.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/nut_holder.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/opto_endstop_holder.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/opto_endstop_holder.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/pully.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/pully.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/rail_spacer.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/rail_spacer.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/rotary axis.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/rotary axis.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/spring_cap.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/spring_cap.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/tension_knob.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/tension_knob.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/tension_roller.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/tension_roller.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/tension_roller_cheek.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/tension_roller_cheek.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/tension_system_base.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/tension_system_base.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/weldroller_holder.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/weldroller_holder.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Complete/x_axis_cariage.STL
Normal file
BIN
src/3d_printed_parts/Stl/Complete/x_axis_cariage.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/Electronics_cover.STL
Normal file
BIN
src/3d_printed_parts/Stl/Electronics_cover.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/PCB_spacer.STL
Normal file
BIN
src/3d_printed_parts/Stl/PCB_spacer.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/main_platform.STL
Normal file
BIN
src/3d_printed_parts/Stl/main_platform.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/Stl/rotary axis nut.STL
Normal file
BIN
src/3d_printed_parts/Stl/rotary axis nut.STL
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/chelnok_organizer.SLDPRT
Normal file
BIN
src/3d_printed_parts/chelnok_organizer.SLDPRT
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/e-stop_mount.SLDPRT
Normal file
BIN
src/3d_printed_parts/e-stop_mount.SLDPRT
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/main_platform.STL
Normal file
BIN
src/3d_printed_parts/main_platform.STL
Normal file
Binary file not shown.
BIN
src/3d_printed_parts/needle_holder_bottom.STL.SLDPRT
Normal file
BIN
src/3d_printed_parts/needle_holder_bottom.STL.SLDPRT
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/pully.SLDPRT
Normal file
BIN
src/3d_printed_parts/pully.SLDPRT
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/rail_spacer.SLDPRT
Normal file
BIN
src/3d_printed_parts/rail_spacer.SLDPRT
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/rotary axis nut.STL
Normal file
BIN
src/3d_printed_parts/rotary axis nut.STL
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/rotary axis.STL
Normal file
BIN
src/3d_printed_parts/rotary axis.STL
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/3d_printed_parts/x_axis_sensor_pin.SLDPRT
Normal file
BIN
src/3d_printed_parts/x_axis_sensor_pin.SLDPRT
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
552957
src/Electronic_and_linear_parts/Ramps/Assembly Arduino Mega RAMPS 1.4.step
Normal file
552957
src/Electronic_and_linear_parts/Ramps/Assembly Arduino Mega RAMPS 1.4.step
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/Secondary_asms/asm_electronics_and_z-axis.SLDASM
Normal file
BIN
src/Secondary_asms/asm_electronics_and_z-axis.SLDASM
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue