Just commit
This commit is contained in:
parent
fab7e2e593
commit
62a95eddde
94 changed files with 553315 additions and 236 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -1,14 +1,8 @@
|
|||
# Pascal err out logs
|
||||
|
||||
# Pascal & err out logs
|
||||
|
||||
*.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
|
||||
|
||||
### Добавлено
|
||||
|
|
|
@ -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
|
||||
|
|
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.
BIN
src/3d_printed_parts/Temp_part_Y_endstop.SLDPRT
Normal file
BIN
src/3d_printed_parts/Temp_part_Y_endstop.SLDPRT
Normal file
Binary file not shown.
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/chelnok_organizer_new.SLDPRT
Normal file
BIN
src/3d_printed_parts/chelnok_organizer_new.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.
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.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue