diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/launch.json b/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/launch.json new file mode 100644 index 0000000..a647ba0 --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/launch.json @@ -0,0 +1,48 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch post", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "buildPostprocessor", + "program": "${env:SprutCAMDir}/DotNet/InpCore.exe", + "args": [ + "-cldviewermode", + "-sharedfile:STInpCoreOfDebugger", + "-postfile:\"${workspaceFolder}\\bin\\Debug\\${workspaceFolderBasename}.dll\"" + ], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false, + "justMyCode": true + }, + { + "name": "Launch post (console mode)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "buildPostprocessor", + "program": "${env:SprutCAMDir}/DotNet/InpCore.exe", + "args": [ + "-batchmode", + "-cldfile:\"c:\\Users\\Public\\Documents\\SprutCAM\\Version 16\\Projects\\Examples\\Milling\\3+2D\\3+2.stc\"", + "-postfile:\"${workspaceFolder}\\bin\\Debug\\${workspaceFolderBasename}.dll\"", + "-settingsfile:\"${workspaceFolder}\\Settings.xml" + ], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false, + "enableStepFiltering": false, + "justMyCode": true + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] +} \ No newline at end of file diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/tasks.json b/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/tasks.json new file mode 100644 index 0000000..303bb59 --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/.vscode/tasks.json @@ -0,0 +1,44 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "buildPostprocessor", + "command": "dotnet", + "type": "shell", + "args": [ + "build", + // Ask dotnet build to generate full paths for file names. + "/property:GenerateFullPaths=true", + // Do not generate summary otherwise it leads to duplicate errors in Problems panel + "/consoleloggerparameters:NoSummary" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "silent" + }, + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "shell", + "args": [ + "publish", + // Ask dotnet build to generate full paths for file names. + "/property:GenerateFullPaths=true", + // Do not generate summary otherwise it leads to duplicate errors in Problems panel + "/consoleloggerparameters:NoSummary" + ], + "group": "build", + "presentation": { + "reveal": "silent" + }, + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/Kuka robot (src_dat)_DN.csproj b/Distributive/Robots/Kuka robot (src_dat)_DN/Kuka robot (src_dat)_DN.csproj new file mode 100644 index 0000000..699401d --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/Kuka robot (src_dat)_DN.csproj @@ -0,0 +1,31 @@ + + + + net6.0-windows + bin\Debug\ + bin\Debug\ + enable + annotations + + + + + $(SprutCAMDir)\DotNet\STDefLib.dll + + + $(SprutCAMDir)\DotNet\VecMatrLib.dll + + + $(SprutCAMDir)\DotNet\SCPostprocessor.dll + + + + + + + + + + + + diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/PostSchema.xsd b/Distributive/Robots/Kuka robot (src_dat)_DN/PostSchema.xsd new file mode 100644 index 0000000..0b6fa9b --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/PostSchema.xsd @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/Postprocessor.cs b/Distributive/Robots/Kuka robot (src_dat)_DN/Postprocessor.cs new file mode 100644 index 0000000..16c7232 --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/Postprocessor.cs @@ -0,0 +1,693 @@ +namespace SprutTechnology.SCPostprocessor +{ + + public partial class NCFile: TTextNCFile + { + // Declare variables specific to a particular file here, as shown below + // int FileNumber; + } + + public partial class Postprocessor: TPostprocessor + { + #region Common variables definition + + double MaxReal, ACC_CP, DEF_ACC, X_prev, Y_prev, Z_prev, A_prev, B_prev, C_prev, + E1_prev, E2_prev, E3_prev, E4_prev, E5_prev, E6_prev; + + int Num_E6POS, Num_E6AXIS, Num_CPDAT, Num_PPDAT, MAX_num_line, Current_num_file, big_small_file, mid_end, State, Turn, + block_src1, block_dat1, PTP_main_axes, Vel_PTP, Acc_PTP, APO_CDIS, APO_CPT, WorkpieceHolder; + + string Current_NAME_file, outstr; + + int[] AIndex = new int[6] { 0, 1, 2, 3, 4, 5 }; + + ///Current src-file + NCFile src; + ///Current dat-file + NCFile dat; + + #endregion + + public override void OnStartProject(ICLDProject prj) + { + + } + + public override void OnFinishProject(ICLDProject prj) + { + + } + + public override void OnStartTechOperation(ICLDTechOperation op, ICLDPPFunCommand cmd, CLDArray cld) + { + + } + + public override void OnFinishTechOperation(ICLDTechOperation op, ICLDPPFunCommand cmd, CLDArray cld) + { + src.WriteLine(); + } + + public override void StopOnCLData() + { + // Do nothing, just to be possible to use CLData breakpoints + } + + public override void OnFeedrate(ICLDFeedrateCommand cmd, CLDArray cld) + { + src.VEL_CP.v = cld[1] / 1000; + src.VEL_CP.v = Round(src.VEL_CP.v / 60, 3); + outstr = src.VEL_CP.ToString(); + if (outstr.Length > 0) SectOutput(block_src1, outstr+"; m/sec; " + Str(src.VEL_CP.v * 60 * 1000) + " mm/min"); + } + + public override void OnFini(ICLDFiniCommand cmd, CLDArray cld) + { + // ---.SRC---- + // ChangeNcFile Current_NAME_file + ".src" + SectOutput(block_src1, "END"); + head_src(); + + // ---.DAT---- + // ChangeNcFile Current_NAME_file + ".dat" + SectOutput(block_dat1, "ENDDAT"); + head_dat(); + } + + public override void OnFrom(ICLDFromCommand cmd, CLDArray cld) + { + A1_A6(11, cld[10], cld); + src.A1.v0 = src.A1; + src.A2.v0 = src.A2; + src.A3.v0 = src.A3; + src.A4.v0 = src.A4; + src.A5.v0 = src.A5; + src.A6.v0 = src.A6; + + Ext_Axis(cmd); + src.E1.v0 = src.E1; + src.E2.v0 = src.E2; + src.E3.v0 = src.E3; + src.E4.v0 = src.E4; + src.E5.v0 = src.E5; + src.E6.v0 = src.E6; + } + + public override void OnLoadTool(ICLDLoadToolCommand cmd, CLDArray cld) + { + if (WorkpieceHolder == 0) + { + src.TOOL_DATA.v = cmd.Number; + if (src.TOOL_DATA.v != src.TOOL_DATA.v0) + { + if (src.TOOL_DATA.v == 0) + { + src.Output("$TOOL = $NULLFRAME"); + src.TOOL_DATA.v = 0; + src.TOOL_DATA.v0 = 0; + } + else + { + SectOutput(block_src1, "$ACT_TOOL=" + src.TOOL_DATA.ToString()); + SectOutput(block_src1, "$TOOL=TOOL_DATA[" + src.TOOL_DATA.ToString() + "]"); + SectOutput(block_src1, "$LOAD=LOAD_DATA[" + src.TOOL_DATA.ToString() + "]"); + } + } + } + } + + public override void OnMultiArc(ICLDMultiArcCommand cmd, CLDArray cld) + { + if (Num_E6POS == 0) if_first_point(); + Num_CPDAT = Num_CPDAT + 1; + Num_E6POS = Num_E6POS + 1; + + //------------MID-DAT---------------- + src.X.v = cld[8]; src.Y.v = cld[9]; src.Z.v = cld[10]; + src.A.v = cld[11]; src.B.v = cld[12]; src.C.v = cld[13]; + RoundXYZABC(); + mid_end = 1; + + Point_Position("MidPos.MachineStateFlags","circ1", cmd); + Ext_Axis(cmd); + SectOutput(block_dat1, "DECL E6POS XP" + Num_E6POS.ToString() + "={X " + src.X.ToString() + ",Y " + + src.Y.ToString() + ",Z " + src.Z.ToString() + ",A "+ src.A.ToString() + ",B " + src.B.ToString() +",C " + + src.C.ToString() +",S " + State.ToString() + ",T " + Turn.ToString() + ",E1 " + src.E1.ToString() + ",E2 " + + src.E2.ToString() + ",E3 " + src.E3.ToString() + ",E4 " + src.E4.ToString() + ",E5 " + src.E5.ToString() + ",E6 " + + src.E6.ToString() + "}"); + //------------END-DAT---------------- + src.X.v = cld[1]; src.Y.v = cld[2]; src.Z.v = cld[3]; + src.A.v = cld[4]; src.B.v = cld[5]; src.C.v = cld[6]; + RoundXYZABC(); + mid_end = 2; + Point_Position("EndPos.MachineStateFlags","circ2", cmd); + Ext_Axis(cmd); + + SectOutput(block_dat1, "DECL E6POS XP" + (Num_E6POS+1).ToString() + "={X " + src.X.ToString() + ",Y " + + src.Y.ToString() + ",Z " + src.Z.ToString() + ",A "+ src.A.ToString() + ",B " + src.B.ToString() + ",C " + + src.C.ToString() + ",S " + State.ToString() + ",T " + Turn.ToString() + ",E1 " + src.E1.ToString() + + ",E2 " + src.E2.ToString() + ",E3 " + src.E3.ToString() + ",E4 " + src.E4.ToString() + ",E5 " + src.E5.ToString() + + ",E6 " + src.E6.ToString() + "}"); + SectOutput(block_dat1, "DECL FDAT FP" + (Num_E6POS + 1).ToString() + "={TOOL_NO " + Str(src.TOOL_DATA) + ",BASE_NO " + + Str(src.BASE_DATA) + ",IPO_FRAME #BASE,POINT2[] "+ "34" + "XP" + Num_E6POS.ToString() + "34" +",TQ_STATE FALSE}"); + SectOutput(block_dat1, "DECL LDAT LCPDAT" + Num_CPDAT.ToString() + "={VEL " + Str(src.VEL_CP.v) + ",ACC " + + (ACC_CP * 100 / DEF_ACC).ToString() + ",APO_DIST " + APO_CDIS.ToString() + ".000,APO_FAC 50.0000,AXIS_VEL " + + Vel_PTP.ToString() + ".000,AXIS_ACC " + Acc_PTP.ToString() + ".000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 50.0000,EXAX_IGN 0}"); + SectOutput(block_dat1, ""); + //-------------SRC---------------- + SectOutput(block_src1, ";FOLD CIRC P" + Num_E6POS.ToString() + " P" + (Num_E6POS+1).ToString() + " CONT Vel=" + Str(src.VEL_CP.v) + + " m/s CPDAT" + Num_CPDAT.ToString() + " Tool[" + Str(src.TOOL_DATA) + "]:Tool_main Base[" + Str(src.BASE_DATA) + + "]:Base_main;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VCIRC, %P 1:CIRC, 2:P" + Num_E6POS.ToString() + ", 3:P" + + (Num_E6POS+1).ToString() + ", 4:C_DIS C_DIS, 6:" + Str(src.VEL_CP.v) + ", 8:CPDAT" + Num_CPDAT.ToString()); + SectOutput(block_src1, "$BWDSTART=FALSE"); + SectOutput(block_src1, "LDAT_ACT=LCPDAT" + Num_CPDAT.ToString()); + SectOutput(block_src1, "FDAT_ACT=FP" + (Num_E6POS+1).ToString()); + SectOutput(block_src1, "BAS(#CP_PARAMS," + Str(src.VEL_CP.v) + ")"); + SectOutput(block_src1, "CIRC XP" + Num_E6POS.ToString() + ", XP" + (Num_E6POS+1).ToString() + " C_DIS C_DIS"); + SectOutput(block_src1, ";ENDFOLD"); + SectOutput(block_src1, ""); + //-------------------------------- + + Num_E6POS = Num_E6POS + 1; + + X_prev = src.X.v; Y_prev = src.Y.v; Z_prev = src.Z.v; A_prev = src.A.v; B_prev = src.B.v; C_prev = src.C.v; + E1_prev = src.E1.v; E2_prev = src.E2.v; E3_prev = src.E3.v; E4_prev = src.E4.v; E5_prev = src.E5.v; E6_prev = src.E6.v; + + if (Num_CPDAT >= MAX_num_line) + { + //---.SRC---- + // ChangeNcFile Current_NAME_file + ".src" + SectOutput(block_src1, "END"); + head_src(); + //---.DAT---- + //ChangeNcFile Current_NAME_file + ".dat" + SectOutput(block_dat1, "ENDDAT"); + head_dat(); + } + } + + public override void OnMultiGoto(ICLDMultiGotoCommand cmd, CLDArray cld) + { + src.X.v = cld[1]; src.Y.v = cld[2]; src.Z.v = cld[3]; + src.A.v = cld[4]; src.B.v = cld[5]; src.C.v = cld[6]; + Point_Position("MachineStateFlags","line", cmd); + + RoundXYZABC(); + Ext_Axis(cmd); + + if (Math.Abs(src.X.v - X_prev) > 0.001 || Math.Abs(src.Y.v - Y_prev) > 0.001 || Math.Abs(src.Z.v - Z_prev) > 0.001 || + Math.Abs(src.A.v - A_prev) > 0.001 || Math.Abs(src.B.v - B_prev) > 0.001 || Math.Abs(src.C.v - C_prev) > 0.001 || + Math.Abs(src.E1.v - E1_prev) > 0.001 || Math.Abs(src.E2.v - E2_prev) > 0.001 || Math.Abs(src.E3.v - E3_prev) > 0.001 || + Math.Abs(src.E4.v - E4_prev) > 0.001 || Math.Abs(src.E5.v - E5_prev) > 0.001 || Math.Abs(src.E6.v - E6_prev) > 0.001) + { + Num_E6POS = Num_E6POS + 1; + Num_CPDAT = Num_CPDAT + 1; + //-------------SRC---------------- + SectOutput(block_src1, ";FOLD LIN P" + Num_E6POS.ToString() + " CONT Vel=" + Str(src.VEL_CP.v) + " m/s CPDAT" + + Num_CPDAT.ToString() + " Tool[" + Str(src.TOOL_DATA) + "]:Tool_main Base[" + Str(src.BASE_DATA) + + "]:Base_main;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN, %P 1:LIN, 2:P" + Num_E6POS.ToString() + + ", 3:C_DIS C_DIS,5:" + Str(src.VEL_CP.v) + ",7:CPDAT" + Num_CPDAT.ToString()); + SectOutput(block_src1, "$BWDSTART=FALSE"); + SectOutput(block_src1, "LDAT_ACT=LCPDAT" + Num_CPDAT.ToString() + ""); + SectOutput(block_src1, "FDAT_ACT=FP" + Num_E6POS.ToString() + ""); + SectOutput(block_src1, "BAS(#CP_PARAMS," + Str(src.VEL_CP.v) + ")"); + SectOutput(block_src1, "LIN XP" + Num_E6POS.ToString() + " C_DIS C_DIS"); + SectOutput(block_src1, ";ENDFOLD"); + SectOutput(block_src1, ""); + + //------------DAT----------------- + SectOutput(block_dat1, "DECL E6POS XP" + Num_E6POS.ToString() + "={X " + src.X.ToString() + ",Y " + src.Y.ToString() + + ",Z " + src.Z.ToString() + ",A " + src.A.ToString() + ",B " + src.B.ToString() + ",C " + src.C.ToString() + + ",S "+ State.ToString() + ",T " + Turn.ToString()+ ",E1 " + src.E1.ToString() + ",E2 " + src.E2.ToString() + + ",E3 "+ src.E3.ToString() +",E4 "+ src.E4.ToString() + ",E5 " + src.E5.ToString() +",E6 " + src.E6.ToString() + "}"); + SectOutput(block_dat1, "DECL FDAT FP" + Num_E6POS.ToString() + "={TOOL_NO " + src.TOOL_DATA.ToString() + ",BASE_NO " + + src.BASE_DATA.ToString() + ",IPO_FRAME #BASE,POINT2[] " + "34" + " " + "34" + ",TQ_STATE FALSE}"); + SectOutput(block_dat1, "DECL LDAT LCPDAT" + Num_CPDAT.ToString() + "={VEL " + Str(src.VEL_CP.v) + ",ACC " + + (ACC_CP * 100 / DEF_ACC).ToString() + ",APO_DIST " + APO_CDIS.ToString() + ".00000,APO_FAC 50.0000,AXIS_VEL " + + Vel_PTP.ToString() + ".000,AXIS_ACC " + Acc_PTP.ToString() + + ".000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 50.0000,EXAX_IGN 0}"); + SectOutput(block_dat1, ""); + //-------------------------------- + + X_prev = src.X.v; Y_prev = src.Y.v; Z_prev = src.Z.v; A_prev = src.A.v; B_prev = src.B.v; C_prev = src.C.v; + E1_prev = src.E1.v; E2_prev = src.E2.v; E3_prev = src.E3.v; E4_prev = src.E4.v; E5_prev = src.E5.v; E6_prev = src.E6.v; + + if (Num_CPDAT >= MAX_num_line) + { + //---.SRC---- + // ChangeNcFile Current_NAME_file + ".src" + SectOutput(block_src1, "END"); + head_src(); + // !---.DAT---- + // ChangeNcFile Current_NAME_file + ".dat" + SectOutput(block_dat1, "ENDDAT"); + head_dat(); + } + } + } + + public override void OnOrigin(ICLDOriginCommand cmd, CLDArray cld) + { + if (cmd.Flt["CSNumber"] >= 53) src.BASE_DATA.v = cmd.Flt["CSNumber"] - 53; + else src.BASE_DATA.v = cmd.Flt["CSNumber"]; + + if (src.BASE_DATA.v != src.BASE_DATA.v0) + { + if (cld[1] == 0 && cld[2] == 0 && cld[3] == 0 && cld[6] == 0 && cld[7] == 0 && cld[8] == 0) + { + SectOutput(block_src1, "$BASE = $WORLD"); + src.BASE_DATA.v = 0; + src.BASE_DATA.v0 = src.BASE_DATA.v; + } + else SectOutput(block_src1, "$BASE=BASE_DATA[" + src.BASE_DATA.ToString() + "]"); + } + } + + public override void OnPartNo(ICLDPartNoCommand cmd, CLDArray cld) + { + MaxReal = 9999999; + + Vel_PTP = 20; + Acc_PTP = 20; + APO_CDIS = 2; + APO_CPT = 3; + ACC_CP = 1; + DEF_ACC = 2.3; + + // От использования следующих двух переменных в принципе можно избавится + block_src1 = 1; + block_dat1 = 3; + + MAX_num_line = Settings.Params.Int["OutFiles.MaxLinesCount"]; + + var prj = CLDProject; + string dir = Settings.Params.Str["OutFiles.NCFilesOutDir"]; + if (String.IsNullOrEmpty(dir)) + dir = prj.FilePath; + string progName = Settings.Params.Str["OutFiles.ProgName"]; + if (String.IsNullOrEmpty(progName)) + progName = prj.ProjectName; + src = new NCFile(); + dat = new NCFile(); + src.OutputFileName = Path.Combine(dir, progName + ".src"); + dat.OutputFileName = Path.Combine(dir, progName + ".dat"); + Current_NAME_file = progName.ToUpper(); + + + // Big_small_file(); + // if (Big_small_file == 1) + // { + // Current_NAME_file = UPCASE(NCName$) + current_num_file.ToString(); + // } + // else Current_NAME_file = UPCASE(NCName$); + } + + public override void OnPhysicGoto(ICLDPhysicGotoCommand cmd, CLDArray cld) + { + PTP_main_axes = 0; + + if (cmd.Ptr["Axes(AxisA1Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + if (cmd.Ptr["Axes(AxisA2Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + if (cmd.Ptr["Axes(AxisA3Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + if (cmd.Ptr["Axes(AxisA4Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + if (cmd.Ptr["Axes(AxisA5Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + if (cmd.Ptr["Axes(AxisA6Pos)"] != null) PTP_main_axes = PTP_main_axes + 1; + A1_A6(11, cld[10], cld); + + Ext_Axis(cmd); + + if (PTP_main_axes > 0) + { + //-------------SRC---------------- + Num_E6POS = Num_E6POS + 1; + Num_PPDAT = Num_PPDAT + 1; + + SectOutput(block_src1, ";FOLD PTP P" + Num_E6POS.ToString() + " Vel=" + Vel_PTP.ToString() + " % PDAT" + + Num_PPDAT.ToString() + " Tool[" + Str(src.TOOL_DATA) + "]:Tool_main Base[" + Str(src.BASE_DATA) + + "]:Base_main;%{PE};%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P" + + Num_E6POS.ToString() + ", 3:, 5:" + Vel_PTP.ToString() + ", 7:PDAT" + Num_PPDAT.ToString()); + SectOutput(block_src1, "$BWDSTART=FALSE"); + SectOutput(block_src1, "PDAT_ACT=PPDAT" + Num_PPDAT.ToString()); + SectOutput(block_src1, "FDAT_ACT=FP" + Num_E6POS.ToString()); + SectOutput(block_src1, "BAS(#PTP_PARAMS," + Vel_PTP.ToString() + ")"); + SectOutput(block_src1, "PTP XP" + Num_E6POS.ToString()); + SectOutput(block_src1, ";ENDFOLD"); + SectOutput(block_src1, ""); + + //------------DAT----------------- + SectOutput(block_dat1, "DECL E6AXIS XP" + Num_E6POS.ToString() + "={A1 " + src.A1.ToString() + ",A2 " + src.A2.ToString() + + ",A3 " + src.A3.ToString() + ",A4 " + src.A4.ToString() + ",A5 " + src.A5.ToString() + ",A6 " + src.A6.ToString() + + ",E1 " + src.E1.ToString() + ",E2 " + src.E2.ToString() + ",E3 " + src.E3.ToString() + ",E4 " + src.E4.ToString() + + ",E5 " + src.E5.ToString() + ",E6 " + src.E6.ToString() + "}"); + SectOutput(block_dat1, "DECL FDAT FP" + Num_E6POS.ToString() + "={TOOL_NO " + Str(src.TOOL_DATA) + ",BASE_NO " + + Str(src.BASE_DATA) + ",IPO_FRAME #BASE,POINT2[] " + "34" + " " + "34" + ",TQ_STATE FALSE}"); + SectOutput(block_dat1, "DECL PDAT PPDAT" + Num_PPDAT.ToString() + "={VEL " + Vel_PTP.ToString() + ",ACC " + + Acc_PTP.ToString() + ",APO_DIST " + APO_CDIS.ToString() + ".0,APO_MODE #CDIS,GEAR_JERK 50.0000,EXAX_IGN 0}"); + SectOutput(block_dat1, ""); + } + } + + public override void OnPPFun(ICLDPPFunCommand cmd, CLDArray cld) + { + if (cld[1] == 58) + { + if (cmd.Str["PPFun(TechInfo).Tool.RevolverID"].IndexOf("ExtTool") != 0) WorkpieceHolder = 1; + if (cmd.Str["PPFun(TechInfo).Tool.RevolverID"].IndexOf("TableTool") != 0) WorkpieceHolder = 1; + } + } + + public override void OnRapid(ICLDRapidCommand cmd, CLDArray cld) + { + src.VEL_CP.v = cld[1] / 1000; + src.VEL_CP.v = Round(src.VEL_CP.v / 60, 3); + outstr = src.VEL_CP.ToString(); + if (outstr.Length > 0) SectOutput(block_src1, outstr+"; m/sec; " + Str(src.VEL_CP.v * 60 * 1000) + " mm/min"); + } + + public void Big_small_file() + { + + } + + public void RoundXYZABC() + { + if (src.X.v > -0.001 && src.X.v < 0) src.X.v = 0; + if (src.Y.v > -0.001 && src.Y.v < 0) src.Y.v = 0; + if (src.Z.v > -0.001 && src.Z.v < 0) src.Z.v = 0; + if (src.A.v > -0.001 && src.A.v < 0) src.A.v = 0; + if (src.B.v > -0.001 && src.B.v < 0) src.B.v = 0; + if (src.C.v > -0.001 && src.C.v < 0) src.C.v = 0; + } + + public void Point_Position(string prm, string move_type, ICLDCommand cmd) + { + int ElbowFlag, fBase, fElbow, fWrist; + ElbowFlag = cmd.Int[prm]; + + //-----State------ + if (ElbowFlag == 1 || ElbowFlag == 3 || ElbowFlag == 5) fWrist = 1; + else fWrist = 0; + if (ElbowFlag == 2 || ElbowFlag == 3 || ElbowFlag == 6 || ElbowFlag == 7) fElbow = 0; + else fElbow = 1; + if (ElbowFlag >= 4) fBase = 1; + else fBase = 0; + State = fBase + 2*fElbow + 4*fWrist; + + //----Turn------ + if (move_type == "line" || move_type == "ptp") + { + if (cmd.Ptr["Axes(AxisA1Pos)"] is not null) src.A1.v = cmd.Flt["Axes(AxisA1Pos).Value"]; + if (cmd.Ptr["Axes(AxisA2Pos)"] is not null) src.A2.v = cmd.Flt["Axes(AxisA2Pos).Value"]; + if (cmd.Ptr["Axes(AxisA3Pos)"] is not null) src.A3.v = cmd.Flt["Axes(AxisA3Pos).Value"]; + if (cmd.Ptr["Axes(AxisA4Pos)"] is not null) src.A4.v = cmd.Flt["Axes(AxisA4Pos).Value"]; + if (cmd.Ptr["Axes(AxisA5Pos)"] is not null) src.A5.v = cmd.Flt["Axes(AxisA5Pos).Value"]; + if (cmd.Ptr["Axes(AxisA6Pos)"] is not null) src.A6.v = cmd.Flt["Axes(AxisA6Pos).Value"]; + } + else if (move_type == "circ1") + { + if (cmd.Ptr["MidPos.Axes(AxisA1Pos)"] is not null) src.A1.v = cmd.Flt["MidPos.Axes(AxisA1Pos).Value"]; + if (cmd.Ptr["MidPos.Axes(AxisA2Pos)"] is not null) src.A2.v = cmd.Flt["MidPos.Axes(AxisA2Pos).Value"]; + if (cmd.Ptr["MidPos.Axes(AxisA3Pos)"] is not null) src.A3.v = cmd.Flt["MidPos.Axes(AxisA3Pos).Value"]; + if (cmd.Ptr["MidPos.Axes(AxisA4Pos)"] is not null) src.A4.v = cmd.Flt["MidPos.Axes(AxisA4Pos).Value"]; + if (cmd.Ptr["MidPos.Axes(AxisA5Pos)"] is not null) src.A5.v = cmd.Flt["MidPos.Axes(AxisA5Pos).Value"]; + if (cmd.Ptr["MidPos.Axes(AxisA6Pos)"] is not null) src.A6.v = cmd.Flt["MidPos.Axes(AxisA6Pos).Value"]; + } + else if (move_type == "circ2") + { + if (cmd.Ptr["EndPos.Axes(AxisA1Pos)"] is not null) src.A1.v = cmd.Flt["EndPos.Axes(AxisA1Pos).Value"]; + if (cmd.Ptr["EndPos.Axes(AxisA2Pos)"] is not null) src.A2.v = cmd.Flt["EndPos.Axes(AxisA2Pos).Value"]; + if (cmd.Ptr["EndPos.Axes(AxisA3Pos)"] is not null) src.A3.v = cmd.Flt["EndPos.Axes(AxisA3Pos).Value"]; + if (cmd.Ptr["EndPos.Axes(AxisA4Pos)"] is not null) src.A4.v = cmd.Flt["EndPos.Axes(AxisA4Pos).Value"]; + if (cmd.Ptr["EndPos.Axes(AxisA5Pos)"] is not null) src.A5.v = cmd.Flt["EndPos.Axes(AxisA5Pos).Value"]; + if (cmd.Ptr["EndPos.Axes(AxisA6Pos)"] is not null) src.A6.v = cmd.Flt["EndPos.Axes(AxisA6Pos).Value"]; + } + + src.A1.v0 = src.A1.v; src.A2.v0 = src.A2.v; src.A3.v0 = src.A3.v; src.A4.v0 = src.A4.v; src.A5.v0 = src.A5.v; src.A6.v0 = src.A6.v; + + Turn = 0; + if (src.A1.v < 0) Turn = Turn + 1; + if (src.A2.v < 0) Turn = Turn + 2; + if (src.A3.v < 0) Turn = Turn + 4; + if (src.A4.v < 0) Turn = Turn + 8; + if (src.A5.v < 0) Turn = Turn + 16; + if (src.A6.v < 0) Turn = Turn + 32; + } + + public void if_first_point() + { + Num_E6POS = Num_E6POS + 1; + Num_CPDAT = Num_CPDAT + 1; + //-------------SRC---------------- + SectOutput(block_src1, ";FOLD LIN P" + Num_E6POS.ToString() + " CONT Vel=" + Str(src.VEL_CP.v) + " m/s CPDAT" + + Num_CPDAT.ToString() + " Tool[" + src.TOOL_DATA.ToString() + "]:Tool_main Base[" + + src.BASE_DATA.ToString() + "]:Base_main;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN, %P 1:LIN, 2:P" + + Num_E6POS.ToString() + ", 3:C_DIS C_DIS,5:" + Str(src.VEL_CP.v) + ",7:CPDAT" + Num_CPDAT.ToString()); + SectOutput(block_src1, "$BWDSTART=FALSE"); + SectOutput(block_src1, "LDAT_ACT=LCPDAT" + Num_CPDAT.ToString() + ""); + SectOutput(block_src1, "FDAT_ACT=FP" + Num_E6POS.ToString() + ""); + SectOutput(block_src1, "BAS(#CP_PARAMS," + Str(src.VEL_CP.v) + ")"); + SectOutput(block_src1, "LIN XP" + Num_E6POS.ToString() + " C_DIS C_DIS"); + SectOutput(block_src1, ";ENDFOLD"); + SectOutput(block_src1, ""); + //------------DAT----------------- + SectOutput(block_dat1, "DECL E6POS XP" + Num_E6POS.ToString() + "={X " + src.X.ToString() + ",Y " + src.Y.ToString() + + ",Z " + src.Z.ToString() + ",A " + src.A.ToString() + ",B " + src.B.ToString() + ",C " + src.C.ToString() + + ",S " + State.ToString() + ",T " + Turn.ToString() + ",E1 " + src.E1.ToString() + ",E2 " + src.E2.ToString() + + ",E3 " + src.E3.ToString() + ",E4 " + src.E4.ToString() + ",E5 " + src.E5.ToString() + ",E6 " + src.E6.ToString() + "}"); + SectOutput(block_dat1, "DECL FDAT FP" + Num_E6POS.ToString() + "={TOOL_NO " + src.TOOL_DATA.ToString() + ",BASE_NO " + + src.BASE_DATA.ToString() + ",IPO_FRAME #BASE,POINT2[] " + "34" + " " + "34" + ",TQ_STATE FALSE}"); + SectOutput(block_dat1, "DECL LDAT LCPDAT" + Num_CPDAT.ToString() + "={VEL "+ Str(src.VEL_CP.v) + ",ACC " + + (ACC_CP * 100 / DEF_ACC).ToString() + ",APO_DIST " + APO_CDIS.ToString() + ".00000,APO_FAC 50.0000,AXIS_VEL " + + Vel_PTP.ToString() + ".000,AXIS_ACC " + Acc_PTP.ToString() + ".000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 50.0000,EXAX_IGN 0}"); + SectOutput(block_dat1, ""); + } + + public void SectOutput(int SectID, string NCString) + { + switch (SectID) + { + case 1: + src.WriteLine(NCString); + break; + case 2: + throw new Exception("Output to section 2 not implemented"); + case 3: + dat.WriteLine(NCString); + break; + case 4: + throw new Exception("Output to section 4 not implemented"); + } + } + + public void head_src() + { + string begin_src_file = $@"DEF {Current_NAME_file}() +decl int i +GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) +INTERRUPT ON 3 +;global Interrupt Decl 10 when ParStopAndRetract == 1 Do InterruptProg10() +;ParStopAndRetract=0 +;INTERRUPT ON 10 +BAS (#INITMOV,0)"" +;dry_run=1"" +FOR I=1 TO 6 + $VEL_AXIS[I]="" {Vel_PTP.ToString()} + $ACC_AXIS[I]="" {Acc_PTP.ToString()} +ENDFOR +$ADVANCE=5 +;--SET LIN AND ARC MOTION VARIABLES-- +$VEL.CP=0.05 ; m/s +$ACC.CP="" {ACC_CP.ToString()} ; m/s^2 +;REAL DEF_ACC_CP="" {DEF_ACC.ToString()} +$VEL.ORI1=200 ; grad/s +$VEL.ORI2=200 ; grad/s +$ACC.ORI1=200 ; grad/s^2 +$ACC.ORI2=200 ; grad/s^2 +; --approximation-- +$APO.CDIS = "" {APO_CDIS.ToString()} "".0 ; mm, C_DIS +$APO.CPTP = "" {APO_CPT.ToString()} "" ; %, C_PTP +$APO.CVEL = 50 ; %, c_vel +; SET POSITIONING CRITERIA +$ORI_TYPE = #VAR; #VAR, #CONSTANT, #JOINT +$CIRC_TYPE = #base; #PATH, #BASE"""; + + src.Output(begin_src_file, src.FileStart); + } + + public void head_dat() + { + string begin_dat_file = $@"&ACCESS RVP +&REL 43 +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\\KRC\\Roboter\\Template\vorgabe +DEFDAT {Current_NAME_file} +;FOLD EXTERNAL DECLARATIONS;%{{PE}}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{{PE}}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{{E}}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +;DECL BASIS_SUGG_T LAST_BASIS={{POINT1[] ""P53 "",POINT2[] ""P53 "",CP_PARAMS[] ""CPDAT41 "",PTP_PARAMS[] ""PDAT4 "",CONT[] ""C_DIS C_DIS "",CP_VEL[] ""0.02 "",PTP_VEL[] ""50 "",SYNC_PARAMS[] ""SYNCDAT "",SPL_NAME[] ""S0 "",A_PARAMS[] ""ADAT0 ""}}"; + + dat.Output(begin_dat_file, dat.FileStart); + } + + public void A1_A6(int StartCLDIndex, int AxesCount, CLDArray cld) + { + int axi, cli; + for (axi = 1; axi <= AxesCount; axi++) + { + cli = StartCLDIndex + (axi - 1) * 2; + if (cld[cli] == AIndex[0]) src.A1.v = cld[cli + 1]; + if (cld[cli] == AIndex[1]) src.A2.v = cld[cli + 1]; + if (cld[cli] == AIndex[2]) src.A3.v = cld[cli + 1]; + if (cld[cli] == AIndex[3]) src.A4.v = cld[cli + 1]; + if (cld[cli] == AIndex[4]) src.A5.v = cld[cli + 1]; + if (cld[cli] == AIndex[5]) src.A6.v = cld[cli + 1]; + } + } + + public void Ext_Axis(ICLDCommand cmd) + { + E1_prev = src.E1.v; E2_prev = src.E2.v; E3_prev = src.E3.v; E4_prev = src.E4.v; E5_prev = src.E5.v; E6_prev = src.E6.v; + + // ===E1==== + if (cmd.Ptr["Axes(ExtAxis1Pos)"] is not null) + { + src.E1.v = cmd.Flt["Axes(ExtAxis1Pos).Value"]; + src.E1.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis1Pos)"] is not null && mid_end == 1) + { + src.E1.v = cmd.Flt["MidPos.Axes(ExtAxis1Pos).Value"]; + src.E1.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis1Pos)"] is not null && mid_end == 2) + { + src.E1.v = cmd.Flt["EndPos.Axes(ExtAxis1Pos).Value"]; + src.E1.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + // ===E2==== + if (cmd.Ptr["Axes(ExtAxis2Pos)"] is not null) + { + src.E2.v = cmd.Flt["Axes(ExtAxis2Pos).Value"]; + src.E2.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis2Pos)"] is not null && mid_end == 1) + { + src.E2.v = cmd.Flt["MidPos.Axes(ExtAxis2Pos).Value"]; + src.E2.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis2Pos)"] is not null && mid_end == 2) + { + src.E2.v = cmd.Flt["EndPos.Axes(ExtAxis2Pos).Value"]; + src.E2.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + // ===E3==== + if (cmd.Ptr["Axes(ExtAxis3Pos)"] is not null) + { + src.E3.v = cmd.Flt["Axes(ExtAxis3Pos).Value"]; + src.E3.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis3Pos)"] is not null && mid_end == 1) + { + src.E3.v = cmd.Flt["MidPos.Axes(ExtAxis3Pos).Value"]; + src.E3.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis3Pos)"] is not null && mid_end == 2) + { + src.E3.v = cmd.Flt["EndPos.Axes(ExtAxis3Pos).Value"]; + src.E3.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + // ===E4==== + if (cmd.Ptr["Axes(ExtAxis4Pos)"] is not null) + { + src.E4.v = cmd.Flt["Axes(ExtAxis4Pos).Value"]; + src.E4.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis4Pos)"] is not null && mid_end == 1) + { + src.E4.v = cmd.Flt["MidPos.Axes(ExtAxis4Pos).Value"]; + src.E4.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis4Pos)"] is not null && mid_end == 2) + { + src.E4.v = cmd.Flt["EndPos.Axes(ExtAxis4Pos).Value"]; + src.E4.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + // ===E5==== + if (cmd.Ptr["Axes(ExtAxis5Pos)"] is not null) + { + src.E5.v = cmd.Flt["Axes(ExtAxis5Pos).Value"]; + src.E5.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis5Pos)"] is not null && mid_end == 1) + { + src.E5.v = cmd.Flt["MidPos.Axes(ExtAxis5Pos).Value"]; + src.E5.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis5Pos)"] is not null && mid_end == 2) + { + src.E5.v = cmd.Flt["EndPos.Axes(ExtAxis5Pos).Value"]; + src.E5.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + // ===E6==== + if (cmd.Ptr["Axes(ExtAxis6Pos)"] is not null) + { + src.E6.v = cmd.Flt["Axes(ExtAxis6Pos).Value"]; + src.E6.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["MidPos.Axes(ExtAxis6Pos)"] is not null && mid_end == 1) + { + src.E6.v = cmd.Flt["MidPos.Axes(ExtAxis6Pos).Value"]; + src.E6.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + + if (cmd.Ptr["EndPos.Axes(ExtAxis6Pos)"] is not null && mid_end == 2) + { + src.E6.v = cmd.Flt["EndPos.Axes(ExtAxis6Pos).Value"]; + src.E6.v0 = MaxReal; + PTP_main_axes = PTP_main_axes + 1; + } + } + + + } +} \ No newline at end of file diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/Registers.cs b/Distributive/Robots/Kuka robot (src_dat)_DN/Registers.cs new file mode 100644 index 0000000..ee3e647 --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/Registers.cs @@ -0,0 +1,84 @@ +// This file may be autogenerated, do not place meaningful code here. +// Use it only to define a list of nc-words (registers) that may appear +// in blocks of the nc-file. +namespace SprutTechnology.SCPostprocessor +{ + ///A class that defines the nc-file - main output file that should be generated by the postprocessor. + public partial class NCFile : TTextNCFile + { + ///The block of the nc-file is an ordered list of nc-words + public NCBlock Block; + ///X coordinate of the movement + public NumericNCWord X = new NumericNCWord("X {-#####!000}", 0); + ///Y coordinate of the movement + public NumericNCWord Y = new NumericNCWord(",Y {-#####!000}", 0); + /// + public NumericNCWord Z = new NumericNCWord(",Z {-#####!000}", 0); + /// + public NumericNCWord A = new NumericNCWord(",A {-#####!000}", 0); + /// + public NumericNCWord B = new NumericNCWord(",B {-#####!000}", 0); + /// + public NumericNCWord C = new NumericNCWord(",C {-#####!000}", 0); + ///6 + public NumericNCWord A1 = new NumericNCWord(" A1 {-####!###}", 0); + /// + public NumericNCWord A2 = new NumericNCWord(",A2 {-####!000}", 0); + /// + public NumericNCWord A3 = new NumericNCWord(",A3 {-####!000}", 0); + /// + public NumericNCWord A4 = new NumericNCWord(",A4 {-####!000}", 0); + /// + public NumericNCWord A5 = new NumericNCWord(",A5 {-####!000}", 0); + /// + public NumericNCWord A6 = new NumericNCWord(",A6 {-####!000}", 0); + /// + public NumericNCWord E1 = new NumericNCWord(",E1 {-######!000}", 0); + /// + public NumericNCWord E2 = new NumericNCWord(",E2 {-######!000}", 0); + /// + public NumericNCWord E3 = new NumericNCWord(",E3 {-######!000}", 0); + /// + public NumericNCWord E4 = new NumericNCWord(",E4 {-######!000}", 0); + /// + public NumericNCWord E5 = new NumericNCWord(",E5 {-######!000}", 0); + /// + public NumericNCWord E6 = new NumericNCWord(",E6 {-######!000}", 0); + /// + public NumericNCWord VEL_CP = new NumericNCWord("$VEL.CP={-###.###}", 0); + /// + public NumericNCWord TOOL_DATA = new NumericNCWord("$TOOL=TOOL_DATA[{##_##}]", 0); + /// + public NumericNCWord BASE_DATA = new NumericNCWord("$BASE=BASE_DATA[{##_##}]", 0); + /// + public NumericNCWord v_p = new NumericNCWord("{-######!###}", 0); + public NCFile(): base() + { + Block = new NCBlock( + this, + X, + Y, + Z, + A, + B, + C, + A1, + A2, + A3, + A4, + A5, + A6, + E1, + E2, + E3, + E4, + E5, + E6, + VEL_CP, + TOOL_DATA, + BASE_DATA, + v_p); + OnInit(); + } + } +} \ No newline at end of file diff --git a/Distributive/Robots/Kuka robot (src_dat)_DN/Settings.xml b/Distributive/Robots/Kuka robot (src_dat)_DN/Settings.xml new file mode 100644 index 0000000..e13a2ab --- /dev/null +++ b/Distributive/Robots/Kuka robot (src_dat)_DN/Settings.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + No + + false + 0.01 + 0 + . + + + + + + 1000000 + + +