// MACROLOOP //----------------------------------------------------------------------------- //-- Author: Robertspark //-- Created: 21/10/2017 //-- Modified By: //-- Modified: //-- Copyright: © 2017 Robertspark //----------------------------------------------------------------------------- //-- CHANGES LOG //-- none //-- //-- //-- //-- //-- DESCRIPTION: //-- Macroloop to adjust Corner Error Max (field 194) to align with linear feedrate //-- for cutting corners and arcs //-- macroloop obtains the set feedrate (field 867) //-- macroloop obtains both the X and Y acceleration (field 10 & 25) //-- macroloop deterimines the min accel from X & Y to be used in calc //-- macroloop uses a corner feedrate to 60% (adjustable) of the linear feedrate //-- (as per plasma guidance for cutting arcs [and corners in CV mode]) //-- macroloop sets the Corner Error Max //-- //-- SETTINGS: //-- dblFeedAdjust = min allowable feedrate in the corners (percentage) //-- //----- SETTINGS dblFeedAdjust = 60; // 60 = 60% (0.6) //----- if (AS3.Getfield(867) != strFeedrateOld) // run update { strFeedrateOld = AS3.Getfield(867); dblFeedrate = Convert.ToDouble(strFeedrateOld); dblCornerErrorMax = fnCornerErrorMax (dblFeedrate); AS3.Setfield(dblCornerErrorMax, 194); AS3.Validatefield(194); } #Events // define static variables static string strFeedrateOld; static double dblFeedrate; static double dblFeedAdjust; static double dblCornerErrorMax; static double dblAccelXY; static string strAccelXold; static string strAccelYold; static double dblAccelX; static double dblAccelY; static double dblAccelMax; static string strStepPerUnitXold; static string strStepPerUnitYold; static double dblUnitPerStepXY; static double dblStepPerUnitX; static double dblStepPerUnitY; double fnCornerErrorMax ( double dblFeedR ) { dblCornerErrorMax = Math.Pow((dblFeedR / 60 * dblFeedAdjust / 100), 2) / fnAccelXY(); dblCornerErrorMax = Math.Max(dblCornerErrorMax, fnUnitPerStepXY()); return dblCornerErrorMax; } double fnAccelXY () { if ((AS3.Getfield(10) != strAccelXold) || (AS3.Getfield(25) != strAccelYold)) { strAccelXold = AS3.Getfield(10); strAccelYold = AS3.Getfield(11); dblAccelX = Convert.ToDouble(strAccelXold); dblAccelY = Convert.ToDouble(strAccelYold); dblAccelMax = Math.Max(dblAccelX, dblAccelY); } return dblAccelMax; } double fnUnitPerStepXY () { if ((AS3.Getfield(8) != strStepPerUnitXold) || (AS3.Getfield(23) != strStepPerUnitYold)) { strStepPerUnitXold = AS3.Getfield(8); strStepPerUnitYold = AS3.Getfield(23); dblStepPerUnitX = Convert.ToDouble(strStepPerUnitXold); dblStepPerUnitY = Convert.ToDouble(strStepPerUnitYold); dblUnitPerStepXY = Math.Min(dblStepPerUnitX, dblStepPerUnitY); dblUnitPerStepXY = 1 / dblUnitPerStepXY; } return dblUnitPerStepXY; }