<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://www.machsupport.com/MachCustomizeWiki/skins/common/feed.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>MachCustomizeWiki - New pages [en]</title>
		<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Special:Newpages</link>
		<description>From MachCustomizeWiki</description>
		<language>en</language>
		<generator>MediaWiki 1.5.3</generator>
		<lastBuildDate>Sat, 25 May 2013 11:58:39 GMT</lastBuildDate>
		<item>
			<title>UserDROs &amp; UserLEDs</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=UserDROs_%26_UserLEDs</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below is from an email from Art Fenerty to the mach1mach2cnc group:&lt;br /&gt;
----&lt;br /&gt;
'''UserDROs and UserLEDs'''&lt;br /&gt;
&lt;br /&gt;
There are 255 user DROs and 255 User Leds.&lt;br /&gt;
&lt;br /&gt;
They are used by dropping an LED or DRO on the screen,&lt;br /&gt;
and giving it an OEM value of 1000 plus the DRO number.&lt;br /&gt;
&lt;br /&gt;
So a DRO of OEM number 1001 is UserDRO #1...etc...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be set or controlled by the macro commands:&lt;br /&gt;
&lt;br /&gt;
SetUserDRO( 1, 2.345 ); for example&lt;br /&gt;
or&lt;br /&gt;
SetUserLED ( 1, 1) to turn on an LED, or (1,0) to turn it off...&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I found, when using a UserDRO, I had to give the DRO on screen the OEM Value 1900, and also had to use GetUserDRO( 1900 )&lt;br /&gt;
&lt;br /&gt;
[not GetUserDRO( 900 ) as is stated in Art's message]&lt;/div&gt;</description>
			<pubDate>Mon, 02 Mar 2009 22:02:05 GMT</pubDate>			<dc:creator>Awander</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:UserDROs_%26_UserLEDs</comments>		</item>
		<item>
			<title>Rs274ngc.h</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Rs274ngc.h</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Head==&lt;br /&gt;
 #ifndef RS274NGC_HH&lt;br /&gt;
 #define RS274NGC_HH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==defines== &lt;br /&gt;
 #define AA&lt;br /&gt;
 #define BB&lt;br /&gt;
 #define CC&lt;br /&gt;
 /*&lt;br /&gt;
   rs274ngc.hh&lt;br /&gt;
 &lt;br /&gt;
   Declarations for the rs274abc translator.&lt;br /&gt;
 &lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 /**********************/&lt;br /&gt;
 /* INCLUDE DIRECTIVES */&lt;br /&gt;
 /**********************/&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;quot;canon.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /**********************/&lt;br /&gt;
 /*   COMPILER MACROS  */&lt;br /&gt;
 /**********************/&lt;br /&gt;
 &lt;br /&gt;
 #define AND              &amp;amp;&amp;amp;&lt;br /&gt;
 #define IS               ==&lt;br /&gt;
 #define ISNT             !=&lt;br /&gt;
 #define MAX(x, y)        ((x) &amp;gt; (y) ? (x) : (y))&lt;br /&gt;
 #define NOT              !&lt;br /&gt;
 #define OR               ||&lt;br /&gt;
 #define SET_TO           =&lt;br /&gt;
 &lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 #define TRUE             1&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 #define FALSE            0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #define RS274NGC_TEXT_SIZE 256&lt;br /&gt;
 &lt;br /&gt;
 /* numerical constants */&lt;br /&gt;
 #define TOLERANCE_INCH 0.5&lt;br /&gt;
 #define TOLERANCE_MM 12.5&lt;br /&gt;
 #define TOLERANCE_CONCAVE_CORNER 0.2  /* angle threshold for concavity for&lt;br /&gt;
                                          cutter compensation, in radians */&lt;br /&gt;
 #define TINY 1e-12              /* for arc_data_r */&lt;br /&gt;
 #define UNKNOWN 1e-20&lt;br /&gt;
 #define TWO_PI  6.2831853071795864&lt;br /&gt;
 &lt;br /&gt;
 #ifndef PI&lt;br /&gt;
 #define PI      3.1415926535897932&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #ifndef PI2&lt;br /&gt;
 #define PI2     1.5707963267948966&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 // array sizes&lt;br /&gt;
 #define RS274NGC_ACTIVE_G_CODES 13&lt;br /&gt;
 #define RS274NGC_ACTIVE_M_CODES 7&lt;br /&gt;
 #define RS274NGC_ACTIVE_SETTINGS 3&lt;br /&gt;
 &lt;br /&gt;
 // name of parameter file for saving/restoring interpreter variables&lt;br /&gt;
 #define RS274NGC_PARAMETER_FILE_NAME_DEFAULT &amp;quot;rs274ngc.var&amp;quot;&lt;br /&gt;
 #define RS274NGC_PARAMETER_FILE_BACKUP_SUFFIX &amp;quot;.bak&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // max number of m codes on one line&lt;br /&gt;
 #define MAX_EMS  4&lt;br /&gt;
 &lt;br /&gt;
 // English - Metric conversion (long number keeps error buildup down)&lt;br /&gt;
 #define MM_PER_INCH 25.4&lt;br /&gt;
 #define INCH_PER_MM 0.039370078740157477&lt;br /&gt;
 &lt;br /&gt;
 // on-off switch settings&lt;br /&gt;
 #define OFF 0&lt;br /&gt;
 #define ON 1&lt;br /&gt;
 &lt;br /&gt;
 // feed_mode&lt;br /&gt;
 #define UNITS_PER_MINUTE 0&lt;br /&gt;
 #define INVERSE_TIME 1&lt;br /&gt;
 #define UNITS_PER_REV 2&lt;br /&gt;
 &lt;br /&gt;
 // cutter radius compensation mode, OFF already defined to 0&lt;br /&gt;
 // not using CANON_SIDE since interpreter handles cutter radius comp&lt;br /&gt;
 #define RIGHT 1&lt;br /&gt;
 #define LEFT 2&lt;br /&gt;
 &lt;br /&gt;
 // number of parameters in parameter table&lt;br /&gt;
 #define RS274NGC_MAX_PARAMETERS 15000&lt;br /&gt;
 &lt;br /&gt;
 // unary operations&lt;br /&gt;
 // These are not enums because the &amp;quot;&amp;amp;&amp;quot; operator is used in&lt;br /&gt;
 // reading the operation names and is illegal with an enum&lt;br /&gt;
 &lt;br /&gt;
 #define ABS 1&lt;br /&gt;
 #define ACOS 2&lt;br /&gt;
 #define ASIN 3&lt;br /&gt;
 #define ATAN 4&lt;br /&gt;
 #define COS 5&lt;br /&gt;
 #define EXP 6&lt;br /&gt;
 #define FIX 7&lt;br /&gt;
 #define FUP 8&lt;br /&gt;
 #define LN 9&lt;br /&gt;
 #define ROUND 10&lt;br /&gt;
 #define SIN 11&lt;br /&gt;
 #define SQRT 12&lt;br /&gt;
 #define TAN 13&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // binary operations&lt;br /&gt;
 #define NO_OPERATION 0&lt;br /&gt;
 #define DIVIDED_BY 1&lt;br /&gt;
 #define MODULO 2&lt;br /&gt;
 #define POWER 3&lt;br /&gt;
 #define TIMES 4&lt;br /&gt;
 #define AND2 5&lt;br /&gt;
 #define EXCLUSIVE_OR 6&lt;br /&gt;
 #define MINUS 7&lt;br /&gt;
 #define NON_EXCLUSIVE_OR 8&lt;br /&gt;
 #define PLUS 9&lt;br /&gt;
 #define RIGHT_BRACKET 10&lt;br /&gt;
 &lt;br /&gt;
 // G Codes are symbolic to be dialect-independent in source code&lt;br /&gt;
 #define G_0      0&lt;br /&gt;
 #define G_1     10&lt;br /&gt;
 #define G_2     20&lt;br /&gt;
 #define G_3     30&lt;br /&gt;
 #define G_4     40&lt;br /&gt;
 #define G_8     80&lt;br /&gt;
 #define G_9     90&lt;br /&gt;
 #define G_10   100&lt;br /&gt;
 #define G_12   120&lt;br /&gt;
 #define G_13   130&lt;br /&gt;
 #define G_15   150&lt;br /&gt;
 #define G_16   160&lt;br /&gt;
 #define G_17   170&lt;br /&gt;
 #define G_18   180&lt;br /&gt;
 #define G_19   190&lt;br /&gt;
 #define G_20   200&lt;br /&gt;
 #define G_21   210&lt;br /&gt;
 #define G_28   280&lt;br /&gt;
 #define G_28_1 281&lt;br /&gt;
 #define G_30   300&lt;br /&gt;
 #define G_31   310&lt;br /&gt;
 #define G_32   320&lt;br /&gt;
 #define G_38_2 382&lt;br /&gt;
 #define G_40   400&lt;br /&gt;
 #define G_40_1 401&lt;br /&gt;
 #define G_40_2 402&lt;br /&gt;
 #define G_41   410&lt;br /&gt;
 #define G_42   420&lt;br /&gt;
 #define G_43   430&lt;br /&gt;
 #define G_44   440&lt;br /&gt;
 #define G_48   480&lt;br /&gt;
 #define G_49   490&lt;br /&gt;
 #define G_50   500&lt;br /&gt;
 #define G_51   510&lt;br /&gt;
 #define G_52   520&lt;br /&gt;
 #define G_53   530&lt;br /&gt;
 #define G_54   540&lt;br /&gt;
 #define G_55   550&lt;br /&gt;
 #define G_56   560&lt;br /&gt;
 #define G_57   570&lt;br /&gt;
 #define G_58   580&lt;br /&gt;
 #define G_59   590&lt;br /&gt;
 #define G_59_1 591&lt;br /&gt;
 #define G_59_2 592&lt;br /&gt;
 #define G_59_3 593&lt;br /&gt;
 #define G_61   610&lt;br /&gt;
 #define G_61_1 611&lt;br /&gt;
 #define G_64   640&lt;br /&gt;
 #define G_65   650&lt;br /&gt;
 #define G_68   680&lt;br /&gt;
 #define G_69   690&lt;br /&gt;
 #define G_70   700&lt;br /&gt;
 #define G_71   710&lt;br /&gt;
 #define G_73   730&lt;br /&gt;
 #define G_76   760&lt;br /&gt;
 #define G_77   770&lt;br /&gt;
 #define G_78   780&lt;br /&gt;
 #define G_80   800&lt;br /&gt;
 #define G_801  801&lt;br /&gt;
 #define G_802  802&lt;br /&gt;
 #define G_81   810&lt;br /&gt;
 #define G_82   820&lt;br /&gt;
 #define G_83   830&lt;br /&gt;
 #define G_831  831&lt;br /&gt;
 #define G_832  832&lt;br /&gt;
 #define G_84   840&lt;br /&gt;
 #define G_85   850&lt;br /&gt;
 #define G_86   860&lt;br /&gt;
 #define G_87   870&lt;br /&gt;
 #define G_88   880&lt;br /&gt;
 #define G_89   890&lt;br /&gt;
 #define G_90   900&lt;br /&gt;
 #define G_901  901&lt;br /&gt;
 #define G_91   910&lt;br /&gt;
 #define G_911  911&lt;br /&gt;
 #define G_92   920&lt;br /&gt;
 #define G_92_1 921&lt;br /&gt;
 #define G_92_2 922&lt;br /&gt;
 #define G_92_3 923&lt;br /&gt;
 #define G_93   930&lt;br /&gt;
 #define G_94   940&lt;br /&gt;
 #define G_95   950&lt;br /&gt;
 #define G_96   960&lt;br /&gt;
 #define G_97   970&lt;br /&gt;
 #define G_98   980&lt;br /&gt;
 #define G_99   990&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define RS274NGC_OK 0&lt;br /&gt;
 #define RS274NGC_EXIT 1&lt;br /&gt;
 #define RS274NGC_EXECUTE_FINISH 2&lt;br /&gt;
 #define RS274NGC_ENDFILE 3&lt;br /&gt;
 #define NCE_A_FILE_IS_ALREADY_OPEN 4&lt;br /&gt;
 #define NCE_ALL_AXES_MISSING_WITH_G92 5&lt;br /&gt;
 #define NCE_ALL_AXES_MISSING_WITH_MOTION_CODE 6&lt;br /&gt;
 #define NCE_ARC_RADIUS_TOO_SMALL_TO_REACH_END_POINT 7&lt;br /&gt;
 #define NCE_ARGUMENT_TO_ACOS_OUT_OF_RANGE 8&lt;br /&gt;
 #define NCE_ARGUMENT_TO_ASIN_OUT_OF_RANGE 9&lt;br /&gt;
 #define NCE_ATTEMPT_TO_DIVIDE_BY_ZERO 10&lt;br /&gt;
 #define NCE_ATTEMPT_TO_RAISE_NEGATIVE_TO_NON_INTEGER_POWER 11&lt;br /&gt;
 #define NCE_BAD_CHARACTER_USED 12&lt;br /&gt;
 #define NCE_BAD_FORMAT_UNSIGNED_INTEGER 13&lt;br /&gt;
 #define NCE_BAD_NUMBER_FORMAT 14&lt;br /&gt;
 #define NCE_BUG_BAD_G_CODE_MODAL_GROUP_0 15&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G0_OR_G1 16&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G17_G18_OR_G19 17&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G20_OR_G21 18&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G28_OR_G30 19&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G2_OR_G3 20&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G40_G41_OR_G42 21&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G43_OR_G49 22&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G4_G10_G28_G30_G53_OR_G92_SERIES 23&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G61_G61_1_OR_G64 24&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G90_OR_G91 25&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G93_OR_G94 26&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_G98_OR_G99 27&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_IN_G92_SERIES 28&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_IN_RANGE_G54_TO_G593 29&lt;br /&gt;
 #define NCE_BUG_CODE_NOT_M0_M1_M2_M30_M60 30&lt;br /&gt;
 #define NCE_BUG_DISTANCE_MODE_NOT_G90_OR_G91 31&lt;br /&gt;
 #define NCE_BUG_FUNCTION_SHOULD_NOT_HAVE_BEEN_CALLED 32&lt;br /&gt;
 #define NCE_BUG_IN_TOOL_RADIUS_COMP 33&lt;br /&gt;
 #define NCE_BUG_PLANE_NOT_XY_YZ_OR_XZ 34&lt;br /&gt;
 #define NCE_BUG_SIDE_NOT_RIGHT_OR_LEFT 35&lt;br /&gt;
 #define NCE_BUG_UNKNOWN_MOTION_CODE 36&lt;br /&gt;
 #define NCE_BUG_UNKNOWN_OPERATION 37&lt;br /&gt;
 #define NCE_CANNOT_CHANGE_AXIS_OFFSETS_WITH_CUTTER_RADIUS_COMP 38&lt;br /&gt;
 #define NCE_CANNOT_CHANGE_UNITS_WITH_CUTTER_RADIUS_COMP 39&lt;br /&gt;
 #define NCE_CANNOT_CREATE_BACKUP_FILE 40&lt;br /&gt;
 #define NCE_CANNOT_DO_G1_WITH_ZERO_FEED_RATE 41&lt;br /&gt;
 #define NCE_CANNOT_DO_ZERO_REPEATS_OF_CYCLE 42&lt;br /&gt;
 #define NCE_CANNOT_MAKE_ARC_WITH_ZERO_FEED_RATE 43&lt;br /&gt;
 #define NCE_CANNOT_MOVE_ROTARY_AXES_DURING_PROBING 44&lt;br /&gt;
 #define NCE_CANNOT_OPEN_BACKUP_FILE 45&lt;br /&gt;
 #define NCE_CANNOT_OPEN_VARIABLE_FILE 46&lt;br /&gt;
 #define NCE_CANNOT_PROBE_IN_INVERSE_TIME_FEED_MODE 47&lt;br /&gt;
 #define NCE_CANNOT_PROBE_WITH_CUTTER_RADIUS_COMP_ON 48&lt;br /&gt;
 #define NCE_CANNOT_PROBE_WITH_ZERO_FEED_RATE 49&lt;br /&gt;
 #define NCE_CANNOT_PUT_A_B_IN_CANNED_CYCLE 50&lt;br /&gt;
 #define NCE_CANNOT_PUT_A_C_IN_CANNED_CYCLE 51&lt;br /&gt;
 #define NCE_CANNOT_PUT_AN_A_IN_CANNED_CYCLE 52&lt;br /&gt;
 #define NCE_CANNOT_TURN_CUTTER_RADIUS_COMP_ON_OUT_OF_XY_PLANE 53&lt;br /&gt;
 #define NCE_CANNOT_TURN_CUTTER_RADIUS_COMP_ON_WHEN_ON 54&lt;br /&gt;
 #define NCE_CANNOT_USE_A_WORD 55&lt;br /&gt;
 #define NCE_CANNOT_USE_AXIS_VALUES_WITH_G80 56&lt;br /&gt;
 #define NCE_CANNOT_USE_AXIS_VALUES_WITHOUT_A_G_CODE_THAT_USES_THEM 57&lt;br /&gt;
 #define NCE_CANNOT_USE_B_WORD 58&lt;br /&gt;
 #define NCE_CANNOT_USE_C_WORD 59&lt;br /&gt;
 #define NCE_CANNOT_USE_G28_OR_G30_WITH_CUTTER_RADIUS_COMP 60&lt;br /&gt;
 #define NCE_CANNOT_USE_G53_INCREMENTAL 61&lt;br /&gt;
 #define NCE_CANNOT_USE_G53_WITH_CUTTER_RADIUS_COMP 62&lt;br /&gt;
 #define NCE_CANNOT_USE_TWO_G_CODES_THAT_BOTH_USE_AXIS_VALUES 63&lt;br /&gt;
 #define NCE_CANNOT_USE_XZ_PLANE_WITH_CUTTER_RADIUS_COMP 64&lt;br /&gt;
 #define NCE_CANNOT_USE_YZ_PLANE_WITH_CUTTER_RADIUS_COMP 65&lt;br /&gt;
 #define NCE_COMMAND_TOO_LONG 66&lt;br /&gt;
 #define NCE_CONCAVE_CORNER_WITH_CUTTER_RADIUS_COMP 67&lt;br /&gt;
 #define NCE_COORDINATE_SYSTEM_INDEX_PARAMETER_5220_OUT_OF_RANGE 68&lt;br /&gt;
 #define NCE_CURRENT_POINT_SAME_AS_END_POINT_OF_ARC 69&lt;br /&gt;
 #define NCE_CUTTER_GOUGING_WITH_CUTTER_RADIUS_COMP 70&lt;br /&gt;
 #define NCE_D_WORD_WITH_NO_G41_OR_G42 71&lt;br /&gt;
 #define NCE_DWELL_TIME_MISSING_WITH_G4 72&lt;br /&gt;
 #define NCE_DWELL_TIME_P_WORD_MISSING_WITH_G82 73&lt;br /&gt;
 #define NCE_DWELL_TIME_P_WORD_MISSING_WITH_G86 74&lt;br /&gt;
 #define NCE_DWELL_TIME_P_WORD_MISSING_WITH_G88 75&lt;br /&gt;
 #define NCE_DWELL_TIME_P_WORD_MISSING_WITH_G89 76&lt;br /&gt;
 #define NCE_EQUAL_SIGN_MISSING_IN_PARAMETER_SETTING 77&lt;br /&gt;
 #define NCE_F_WORD_MISSING_WITH_INVERSE_TIME_ARC_MOVE 78&lt;br /&gt;
 #define NCE_F_WORD_MISSING_WITH_INVERSE_TIME_G1_MOVE 79&lt;br /&gt;
 #define NCE_FILE_ENDED_WITH_NO_PERCENT_SIGN 80&lt;br /&gt;
 #define NCE_FILE_ENDED_WITH_NO_PERCENT_SIGN_OR_PROGRAM_END 81&lt;br /&gt;
 #define NCE_FILE_NAME_TOO_LONG 82&lt;br /&gt;
 #define NCE_FILE_NOT_OPEN 83&lt;br /&gt;
 #define NCE_G_CODE_OUT_OF_RANGE 84&lt;br /&gt;
 #define NCE_H_WORD_WITH_NO_G43 85&lt;br /&gt;
 #define NCE_I_WORD_GIVEN_FOR_ARC_IN_YZ_PLANE 86&lt;br /&gt;
 #define NCE_I_WORD_MISSING_WITH_G87 87&lt;br /&gt;
 #define NCE_I_WORD_WITH_NO_G2_OR_G3_OR_G87_TO_USE_IT 88&lt;br /&gt;
 #define NCE_J_WORD_GIVEN_FOR_ARC_IN_XZ_PLANE 89&lt;br /&gt;
 #define NCE_J_WORD_MISSING_WITH_G87 90&lt;br /&gt;
 #define NCE_J_WORD_WITH_NO_G2_OR_G3_OR_G87_TO_USE_IT 91&lt;br /&gt;
 #define NCE_K_WORD_GIVEN_FOR_ARC_IN_XY_PLANE 92&lt;br /&gt;
 #define NCE_K_WORD_MISSING_WITH_G87 93&lt;br /&gt;
 #define NCE_K_WORD_WITH_NO_G2_OR_G3_OR_G87_TO_USE_IT 94&lt;br /&gt;
 #define NCE_L_WORD_WITH_NO_CANNED_CYCLE_OR_G10 95&lt;br /&gt;
 #define NCE_LEFT_BRACKET_MISSING_AFTER_SLASH_WITH_ATAN 96&lt;br /&gt;
 #define NCE_LEFT_BRACKET_MISSING_AFTER_UNARY_OPERATION_NAME 97&lt;br /&gt;
 #define NCE_LINE_NUMBER_GREATER_THAN_99999 98&lt;br /&gt;
 #define NCE_LINE_WITH_G10_DOES_NOT_HAVE_L2 99&lt;br /&gt;
 #define NCE_M_CODE_GREATER_THAN_99 100&lt;br /&gt;
 #define NCE_MIXED_RADIUS_IJK_FORMAT_FOR_ARC 101&lt;br /&gt;
 #define NCE_MULTIPLE_A_WORDS_ON_ONE_LINE 102&lt;br /&gt;
 #define NCE_MULTIPLE_B_WORDS_ON_ONE_LINE 103&lt;br /&gt;
 #define NCE_MULTIPLE_C_WORDS_ON_ONE_LINE 104&lt;br /&gt;
 #define NCE_MULTIPLE_D_WORDS_ON_ONE_LINE 105&lt;br /&gt;
 #define NCE_MULTIPLE_F_WORDS_ON_ONE_LINE 106&lt;br /&gt;
 #define NCE_MULTIPLE_H_WORDS_ON_ONE_LINE 107&lt;br /&gt;
 #define NCE_MULTIPLE_I_WORDS_ON_ONE_LINE 108&lt;br /&gt;
 #define NCE_MULTIPLE_J_WORDS_ON_ONE_LINE 109&lt;br /&gt;
 #define NCE_MULTIPLE_K_WORDS_ON_ONE_LINE 110&lt;br /&gt;
 #define NCE_MULTIPLE_L_WORDS_ON_ONE_LINE 111&lt;br /&gt;
 #define NCE_MULTIPLE_P_WORDS_ON_ONE_LINE 112&lt;br /&gt;
 #define NCE_MULTIPLE_Q_WORDS_ON_ONE_LINE 113&lt;br /&gt;
 #define NCE_MULTIPLE_R_WORDS_ON_ONE_LINE 114&lt;br /&gt;
 #define NCE_MULTIPLE_S_WORDS_ON_ONE_LINE 115&lt;br /&gt;
 #define NCE_MULTIPLE_T_WORDS_ON_ONE_LINE 116&lt;br /&gt;
 #define NCE_MULTIPLE_X_WORDS_ON_ONE_LINE 117&lt;br /&gt;
 #define NCE_MULTIPLE_Y_WORDS_ON_ONE_LINE 118&lt;br /&gt;
 #define NCE_MULTIPLE_Z_WORDS_ON_ONE_LINE 119&lt;br /&gt;
 #define NCE_MUST_USE_G0_OR_G1_WITH_G53 120&lt;br /&gt;
 #define NCE_NEGATIVE_ARGUMENT_TO_SQRT 121&lt;br /&gt;
 #define NCE_NEGATIVE_D_WORD_TOOL_RADIUS_INDEX_USED 122&lt;br /&gt;
 #define NCE_NEGATIVE_F_WORD_USED 123&lt;br /&gt;
 #define NCE_NEGATIVE_G_CODE_USED 124&lt;br /&gt;
 #define NCE_NEGATIVE_H_WORD_TOOL_LENGTH_OFFSET_INDEX_USED 125&lt;br /&gt;
 #define NCE_NEGATIVE_L_WORD_USED 126&lt;br /&gt;
 #define NCE_NEGATIVE_M_CODE_USED 127&lt;br /&gt;
 #define NCE_NEGATIVE_OR_ZERO_Q_VALUE_USED 128&lt;br /&gt;
 #define NCE_NEGATIVE_P_WORD_USED 129&lt;br /&gt;
 #define NCE_NEGATIVE_SPINDLE_SPEED_USED 130&lt;br /&gt;
 #define NCE_NEGATIVE_TOOL_ID_USED 131&lt;br /&gt;
 #define NCE_NESTED_COMMENT_FOUND 132&lt;br /&gt;
 #define NCE_NO_CHARACTERS_FOUND_IN_READING_REAL_VALUE 133&lt;br /&gt;
 #define NCE_NO_DIGITS_FOUND_WHERE_REAL_NUMBER_SHOULD_BE 134&lt;br /&gt;
 #define NCE_NON_INTEGER_VALUE_FOR_INTEGER 135&lt;br /&gt;
 #define NCE_NULL_MISSING_AFTER_NEWLINE 136&lt;br /&gt;
 #define NCE_OFFSET_INDEX_MISSING 137&lt;br /&gt;
 #define NCE_P_VALUE_NOT_AN_INTEGER_WITH_G10_L2 138&lt;br /&gt;
 #define NCE_P_VALUE_OUT_OF_RANGE_WITH_G10_L2 139&lt;br /&gt;
 #define NCE_P_WORD_WITH_NO_G4_G10_G82_G86_G88_G89 140&lt;br /&gt;
 #define NCE_PARAMETER_FILE_OUT_OF_ORDER 141&lt;br /&gt;
 #define NCE_PARAMETER_NUMBER_OUT_OF_RANGE 142&lt;br /&gt;
 #define NCE_Q_WORD_MISSING_WITH_G83 143&lt;br /&gt;
 #define NCE_Q_WORD_WITH_NO_G83 144&lt;br /&gt;
 #define NCE_QUEUE_IS_NOT_EMPTY_AFTER_PROBING 145&lt;br /&gt;
 #define NCE_R_CLEARANCE_PLANE_UNSPECIFIED_IN_CYCLE 146&lt;br /&gt;
 #define NCE_R_I_J_K_WORDS_ALL_MISSING_FOR_ARC 147&lt;br /&gt;
 #define NCE_R_LESS_THAN_X_IN_CYCLE_IN_YZ_PLANE 148&lt;br /&gt;
 #define NCE_R_LESS_THAN_Y_IN_CYCLE_IN_XZ_PLANE 149&lt;br /&gt;
 #define NCE_R_LESS_THAN_Z_IN_CYCLE_IN_XY_PLANE 150&lt;br /&gt;
 #define NCE_R_WORD_WITH_NO_G_CODE_THAT_USES_IT 151&lt;br /&gt;
 #define NCE_RADIUS_TO_END_OF_ARC_DIFFERS_FROM_RADIUS_TO_START 152&lt;br /&gt;
 #define NCE_RADIUS_TOO_SMALL_TO_REACH_END_POINT 153&lt;br /&gt;
 #define NCE_REQUIRED_PARAMETER_MISSING 154&lt;br /&gt;
 #define NCE_SELECTED_TOOL_SLOT_NUMBER_TOO_LARGE 155&lt;br /&gt;
 #define NCE_SLASH_MISSING_AFTER_FIRST_ATAN_ARGUMENT 156&lt;br /&gt;
 #define NCE_SPINDLE_NOT_TURNING_CLOCKWISE_IN_G84 157&lt;br /&gt;
 #define NCE_SPINDLE_NOT_TURNING_IN_G86 158&lt;br /&gt;
 #define NCE_SPINDLE_NOT_TURNING_IN_G87 159&lt;br /&gt;
 #define NCE_SPINDLE_NOT_TURNING_IN_G88 160&lt;br /&gt;
 #define NCE_SSCANF_FAILED 161&lt;br /&gt;
 #define NCE_START_POINT_TOO_CLOSE_TO_PROBE_POINT 162&lt;br /&gt;
 #define NCE_TOO_MANY_M_CODES_ON_LINE 163&lt;br /&gt;
 #define NCE_TOOL_LENGTH_OFFSET_INDEX_TOO_BIG 164&lt;br /&gt;
 #define NCE_TOOL_MAX_TOO_LARGE 165&lt;br /&gt;
 #define NCE_TOOL_RADIUS_INDEX_TOO_BIG 166&lt;br /&gt;
 #define NCE_TOOL_RADIUS_NOT_LESS_THAN_ARC_RADIUS_WITH_COMP 167&lt;br /&gt;
 #define NCE_TWO_G_CODES_USED_FROM_SAME_MODAL_GROUP 168&lt;br /&gt;
 #define NCE_TWO_M_CODES_USED_FROM_SAME_MODAL_GROUP 169&lt;br /&gt;
 #define NCE_UNABLE_TO_OPEN_FILE 170&lt;br /&gt;
 #define NCE_UNCLOSED_COMMENT_FOUND 171&lt;br /&gt;
 #define NCE_UNCLOSED_EXPRESSION 172&lt;br /&gt;
 #define NCE_UNKNOWN_G_CODE_USED 173&lt;br /&gt;
 #define NCE_UNKNOWN_M_CODE_USED 174&lt;br /&gt;
 #define NCE_UNKNOWN_OPERATION 175&lt;br /&gt;
 #define NCE_UNKNOWN_OPERATION_NAME_STARTING_WITH_A 176&lt;br /&gt;
 #define NCE_UNKNOWN_OPERATION_NAME_STARTING_WITH_M 177&lt;br /&gt;
 #define NCE_UNKNOWN_OPERATION_NAME_STARTING_WITH_O 178&lt;br /&gt;
 #define NCE_UNKNOWN_OPERATION_NAME_STARTING_WITH_X 179&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_A 180&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_C 181&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_E 182&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_F 183&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_L 184&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_R 185&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_S 186&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_STARTING_WITH_T 187&lt;br /&gt;
 #define NCE_UNKNOWN_WORD_WHERE_UNARY_OPERATION_COULD_BE 188&lt;br /&gt;
 #define NCE_X_AND_Y_WORDS_MISSING_FOR_ARC_IN_XY_PLANE 189&lt;br /&gt;
 #define NCE_X_AND_Z_WORDS_MISSING_FOR_ARC_IN_XZ_PLANE 190&lt;br /&gt;
 #define NCE_X_VALUE_UNSPECIFIED_IN_YZ_PLANE_CANNED_CYCLE 191&lt;br /&gt;
 #define NCE_X_Y_AND_Z_WORDS_ALL_MISSING_WITH_G38_2 192&lt;br /&gt;
 #define NCE_Y_AND_Z_WORDS_MISSING_FOR_ARC_IN_YZ_PLANE 193&lt;br /&gt;
 #define NCE_Y_VALUE_UNSPECIFIED_IN_XZ_PLANE_CANNED_CYCLE 194&lt;br /&gt;
 #define NCE_Z_VALUE_UNSPECIFIED_IN_XY_PLANE_CANNED_CYCLE 195&lt;br /&gt;
 #define NCE_ZERO_OR_NEGATIVE_ARGUMENT_TO_LN 196&lt;br /&gt;
 #define NCE_ZERO_RADIUS_ARC 197&lt;br /&gt;
 #define NCE_F_WORD_MISSING_WITH_THREADING 198&lt;br /&gt;
 #define NCE_NO_SUBROUTINE_SPECIFIED 199&lt;br /&gt;
 #define NCE_NO_SPINDLE_SPEED_WITH_G96 200&lt;br /&gt;
 #define NCE_NO_SPINDLE_SPEED_WITH_G97 201&lt;br /&gt;
 #define NCE_NO_R_WITH_ROTATION 202&lt;br /&gt;
 #define NCE_NO_A_OR_B_WITH_ROTATION 203&lt;br /&gt;
 #define NCE_NOG43INTURN  204&lt;br /&gt;
 #define NCE_MULTIPLE_E_WORDS_ON_ONE_LINE 205&lt;br /&gt;
 &lt;br /&gt;
 #define RS274NGC_MIN_ERROR 3&lt;br /&gt;
 #define RS274NGC_MAX_ERROR 199&lt;br /&gt;
 #define SEMI_COLON  999;&lt;br /&gt;
 &lt;br /&gt;
 ==typedefs==&lt;br /&gt;
 /**********************/&lt;br /&gt;
 /*      TYPEDEFS      */&lt;br /&gt;
 /**********************/&lt;br /&gt;
 &lt;br /&gt;
 /* distance_mode */&lt;br /&gt;
 typedef enum&lt;br /&gt;
 { MODE_ABSOLUTE, MODE_INCREMENTAL } DISTANCE_MODE;&lt;br /&gt;
 &lt;br /&gt;
 /* retract_mode for cycles */&lt;br /&gt;
 typedef enum&lt;br /&gt;
 { R_PLANE, OLD_Z } RETRACT_MODE;&lt;br /&gt;
 &lt;br /&gt;
 typedef int ON_OFF;&lt;br /&gt;
 &lt;br /&gt;
 typedef struct block_struct&lt;br /&gt;
 {&lt;br /&gt;
 #ifdef AA&lt;br /&gt;
   ON_OFF    a_flag;&lt;br /&gt;
   double    a_number;&lt;br /&gt;
 #endif&lt;br /&gt;
 #ifdef BB&lt;br /&gt;
   ON_OFF    b_flag;&lt;br /&gt;
   double    b_number;&lt;br /&gt;
 #endif&lt;br /&gt;
 #ifdef CC&lt;br /&gt;
   ON_OFF    c_flag;&lt;br /&gt;
   double    c_number;&lt;br /&gt;
 #endif&lt;br /&gt;
   char      comment[256];&lt;br /&gt;
   int       d_number;&lt;br /&gt;
   int       e_number;&lt;br /&gt;
   double    f_number;&lt;br /&gt;
   int       g_modes[14];&lt;br /&gt;
 &lt;br /&gt;
   int       h_number;&lt;br /&gt;
   double    h_double;&lt;br /&gt;
   ON_OFF    h_flag;&lt;br /&gt;
 &lt;br /&gt;
   ON_OFF    i_flag;&lt;br /&gt;
   double    i_number;&lt;br /&gt;
   ON_OFF    j_flag;&lt;br /&gt;
   double    j_number;&lt;br /&gt;
   ON_OFF    k_flag;&lt;br /&gt;
   double    k_number;&lt;br /&gt;
   int       l_number;&lt;br /&gt;
   double    l_double;&lt;br /&gt;
   ON_OFF    l_flag;&lt;br /&gt;
   int       line_number;&lt;br /&gt;
   int       motion_to_be;&lt;br /&gt;
   int       m_count;&lt;br /&gt;
   int       m_modes[10];&lt;br /&gt;
   double    p_number;&lt;br /&gt;
   double    q_number;&lt;br /&gt;
   ON_OFF    q_flag;&lt;br /&gt;
   ON_OFF    r_flag;&lt;br /&gt;
   double    r_number;&lt;br /&gt;
   double    s_number;&lt;br /&gt;
   double    t_number;&lt;br /&gt;
   ON_OFF    x_flag;&lt;br /&gt;
   double    x_number;&lt;br /&gt;
   ON_OFF    y_flag;&lt;br /&gt;
   double    y_number;&lt;br /&gt;
   ON_OFF    z_flag;&lt;br /&gt;
   double    z_number;&lt;br /&gt;
 } block;&lt;br /&gt;
 &lt;br /&gt;
 typedef block *block_pointer;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /*The current_x, current_y, and current_z are the location of the tool&lt;br /&gt;
 in the current coordinate system. current_x and current_y differ from&lt;br /&gt;
 program_x and program_y when cutter radius compensation is on.&lt;br /&gt;
 current_z is the position of the tool tip in program coordinates when&lt;br /&gt;
 tool length compensation is using the actual tool length; it is the&lt;br /&gt;
 position of the spindle when tool length is zero.&lt;br /&gt;
 &lt;br /&gt;
 In a setup, the axis_offset values are set by g92 and the origin_offset&lt;br /&gt;
 values are set by g54 - g59.3. The net origin offset uses both values&lt;br /&gt;
 and is not represented here&lt;br /&gt;
 &lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 typedef struct setup_struct&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   double    AA_axis_offset;     // A-axis g92 offset&lt;br /&gt;
   double    AA_current;         // current A-axis position&lt;br /&gt;
   double    AA_origin_offset;   // A-axis origin offset&lt;br /&gt;
 &lt;br /&gt;
   double    BB_axis_offset;     // B-axis g92offset&lt;br /&gt;
   double    BB_current;         // current B-axis position&lt;br /&gt;
   double    BB_origin_offset;   // B-axis origin offset&lt;br /&gt;
 &lt;br /&gt;
   double    CC_axis_offset;     // C-axis g92offset&lt;br /&gt;
   double    CC_current;         // current C-axis position&lt;br /&gt;
   double    CC_origin_offset;   // C-axis origin offset&lt;br /&gt;
 &lt;br /&gt;
   int       active_g_codes[RS274NGC_ACTIVE_G_CODES];  // array of active G codes&lt;br /&gt;
   int       active_m_codes[RS274NGC_ACTIVE_M_CODES];  // array of active M codes&lt;br /&gt;
   double    active_settings[RS274NGC_ACTIVE_SETTINGS];  // array of feed, speed, etc.&lt;br /&gt;
   double    axis_offset_x;      // X-axis g92 offset&lt;br /&gt;
   double    axis_offset_y;      // Y-axis g92 offset&lt;br /&gt;
   double    axis_offset_z;      // Z-axis g92 offset&lt;br /&gt;
   block     block1;             // parsed next block&lt;br /&gt;
   char      blocktext[RS274NGC_TEXT_SIZE];  // linetext downcased, white space gone&lt;br /&gt;
   CANON_MOTION_MODE control_mode; // exact path or cutting mode&lt;br /&gt;
   int       current_slot;       // carousel slot number of current tool&lt;br /&gt;
   int       current_offset_slot;  //for turn offsets, current slot in use.  &lt;br /&gt;
   int       current_tip;        //current tip direction.&lt;br /&gt;
   double    cutter_tip_radius;  //for turn offsets&lt;br /&gt;
   // bool   cutter_tip_on;              // lathe tip radisu on/off&lt;br /&gt;
   double    current_x;          // current X-axis position&lt;br /&gt;
   double    current_y;          // current Y-axis position&lt;br /&gt;
   double    current_z;          // current Z-axis position&lt;br /&gt;
   double    cutter_comp_radius; // current cutter compensation radius&lt;br /&gt;
   int       cutter_comp_side;   // current cutter compensation side&lt;br /&gt;
   double    cycle_cc;           // cc-value (normal) for canned cycles&lt;br /&gt;
   double    cycle_i;            // i-value for canned cycles&lt;br /&gt;
   double    cycle_j;            // j-value for canned cycles&lt;br /&gt;
   double    cycle_k;            // k-value for canned cycles&lt;br /&gt;
   int       cycle_l;            // l-value for canned cycles&lt;br /&gt;
   double    cycle_p;            // p-value (dwell) for canned cycles&lt;br /&gt;
   double    cycle_q;            // q-value for canned cycles&lt;br /&gt;
   double    cycle_r;            // r-value for canned cycles&lt;br /&gt;
   DISTANCE_MODE distance_mode;  // absolute or incremental&lt;br /&gt;
   int       feed_mode;          // G_93 (inverse time) or G_94 units/min&lt;br /&gt;
   int       spindle_mode;&lt;br /&gt;
   ON_OFF    feed_override;      // whether feed override is enabled&lt;br /&gt;
   double    feed_rate;          // feed rate in current units/min&lt;br /&gt;
   char      filename[RS274NGC_TEXT_SIZE]; // name of currently open NC code file&lt;br /&gt;
   FILE     *file_pointer;       // file pointer for open NC code file&lt;br /&gt;
   ON_OFF    flood;              // whether flood coolant is on&lt;br /&gt;
   int       length_offset_index;  // for use with tool length offsets&lt;br /&gt;
   int       length_units;       // millimeters or inches&lt;br /&gt;
   int       line_length;        // length of line last read&lt;br /&gt;
   char      linetext[RS274NGC_TEXT_SIZE]; // text of most recent line read&lt;br /&gt;
   ON_OFF    mist;               // whether mist coolant is on&lt;br /&gt;
   int       motion_mode;        // active G-code for motion&lt;br /&gt;
   int       origin_index;       // active origin (1=G54 to 9=G59.3)&lt;br /&gt;
   double    origin_offset_x;    // origin offset x&lt;br /&gt;
   double    origin_offset_y;    // origin offset y&lt;br /&gt;
   double    origin_offset_z;    // origin offset z&lt;br /&gt;
   double    parameters[RS274NGC_MAX_PARAMETERS];  // system parameters&lt;br /&gt;
   int       parameter_occurrence; // parameter buffer index&lt;br /&gt;
   int       parameter_numbers[50];  // parameter number buffer&lt;br /&gt;
   double    parameter_values[50]; // parameter value buffer&lt;br /&gt;
   ON_OFF    percent_flag;       // ON means first line was percent sign&lt;br /&gt;
   CANON_PLANE plane;            // active plane, XY-, YZ-, or XZ-plane&lt;br /&gt;
   ON_OFF    probe_flag;         // flag indicating probing done&lt;br /&gt;
   double    program_x;          // program x, used when cutter comp on&lt;br /&gt;
   double    program_y;          // program y, used when cutter comp on&lt;br /&gt;
   double    program_z;          // used in tnc&lt;br /&gt;
   RETRACT_MODE retract_mode;    // for cycles, old_z or r_plane&lt;br /&gt;
   int       selected_tool_slot; // tool slot selected but not active&lt;br /&gt;
   int       sequence_number;    // sequence number of line last read&lt;br /&gt;
   double    speed;              // current spindle speed in rpm&lt;br /&gt;
   CANON_SPEED_FEED_MODE speed_feed_mode;  // independent or synched&lt;br /&gt;
   ON_OFF    speed_override;     // whether speed override is enabled&lt;br /&gt;
   CANON_DIRECTION spindle_turning;  // direction spindle is turning&lt;br /&gt;
   int       stack_index;        // index into the stack&lt;br /&gt;
   double    tool_length_offset; // current tool length offset&lt;br /&gt;
   double    tool_xoffset;&lt;br /&gt;
   int       dummy;&lt;br /&gt;
   int       tool_max;           // highest number tool slot in carousel&lt;br /&gt;
   int       tool_table_index;   // tool index used with cutter comp&lt;br /&gt;
   double    traverse_rate;      // rate for traverse motions&lt;br /&gt;
   int       IJMode;&lt;br /&gt;
   double    CurrentOrigins[6];&lt;br /&gt;
   bool      AutoTurnOff;&lt;br /&gt;
   bool      AutoEStop;&lt;br /&gt;
   bool      RadiusCompOff;&lt;br /&gt;
   bool      AutoToolOff;&lt;br /&gt;
   int       OverRideTime;&lt;br /&gt;
   bool      OptionalStop;&lt;br /&gt;
   bool      Rewind;&lt;br /&gt;
   bool      ProgramSafety;&lt;br /&gt;
   bool      HotKeyCheck;&lt;br /&gt;
   double    JogPercent;&lt;br /&gt;
   int       ColorUnRef;&lt;br /&gt;
   int       ColorRef;&lt;br /&gt;
   int       ColorBac;&lt;br /&gt;
   bool      GougeCheck;&lt;br /&gt;
   double    xscale,&lt;br /&gt;
             yscale,&lt;br /&gt;
             zscale,&lt;br /&gt;
             ascale,&lt;br /&gt;
             bscale,&lt;br /&gt;
             cscale;&lt;br /&gt;
   bool      xmirror,&lt;br /&gt;
             ymirror,&lt;br /&gt;
             zmirror,&lt;br /&gt;
             amirror,&lt;br /&gt;
             bmirror,&lt;br /&gt;
             cmirror;&lt;br /&gt;
   double    Diameters[3];&lt;br /&gt;
   bool      startagain;&lt;br /&gt;
   bool      drawtocenter;&lt;br /&gt;
   bool      G92Off;&lt;br /&gt;
   bool      OriginsOff;&lt;br /&gt;
   int       LightLine;&lt;br /&gt;
   bool      ForceRefresh;&lt;br /&gt;
   char      stack[50][80];      // stack of calls for error reporting&lt;br /&gt;
   bool      Threading;&lt;br /&gt;
   double    Cylinder;&lt;br /&gt;
   bool      MillMode;&lt;br /&gt;
 &lt;br /&gt;
   //threading variables...&lt;br /&gt;
   double    XStart;&lt;br /&gt;
   double    ZStart;&lt;br /&gt;
   double    XEnd;&lt;br /&gt;
   double    ZEnd;&lt;br /&gt;
   int       Spring;&lt;br /&gt;
   double    Pitch;&lt;br /&gt;
   double    Passes;&lt;br /&gt;
   double    DepthCut;&lt;br /&gt;
   double    Infeed;&lt;br /&gt;
   double    Chamfer;&lt;br /&gt;
   double    ClearanceX;&lt;br /&gt;
   double    ClearanceZ;&lt;br /&gt;
   double    DepthLastPass;&lt;br /&gt;
   double    MinPerPass;&lt;br /&gt;
   double    Taper;&lt;br /&gt;
   double    Tapers[256];&lt;br /&gt;
   double    ThreadDepths[256];&lt;br /&gt;
   double    InFeeds[256];&lt;br /&gt;
   double    IncludedAngle;&lt;br /&gt;
   block     MacroBlock;&lt;br /&gt;
   bool      polar;&lt;br /&gt;
   double    polarx;&lt;br /&gt;
   double    polary;&lt;br /&gt;
   double    polAngle;&lt;br /&gt;
   double    polRadius;&lt;br /&gt;
   double    G73PullOff;&lt;br /&gt;
   int       LastMotionMode;&lt;br /&gt;
   bool      Diameter;&lt;br /&gt;
   bool      Redraw;&lt;br /&gt;
   int       CutType;&lt;br /&gt;
   int       InFeedType;&lt;br /&gt;
   double    tempspeed;&lt;br /&gt;
   double    Rotation;&lt;br /&gt;
   double    RotationX;&lt;br /&gt;
   double    RotationY;&lt;br /&gt;
   double    PausedAt[6];&lt;br /&gt;
   double    CSSLimit;&lt;br /&gt;
   double    peck;&lt;br /&gt;
   bool      CompInUse;&lt;br /&gt;
 } setup;&lt;br /&gt;
 &lt;br /&gt;
 typedef setup *setup_pointer;&lt;br /&gt;
 &lt;br /&gt;
 // pointer to function that reads&lt;br /&gt;
 typedef int (*read_function_pointer) (char *, int *, block_pointer, double *);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /*************************************************************************/&lt;br /&gt;
 /*&lt;br /&gt;
 &lt;br /&gt;
 ==Interface==&lt;br /&gt;
&lt;br /&gt;
 Interface functions to call to tell the interpreter what to do.&lt;br /&gt;
 Return values indicate status of execution.&lt;br /&gt;
 These functions may change the state of the interpreter.&lt;br /&gt;
 &lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
  // close the currently open NC code file&lt;br /&gt;
 extern int rs274ngc_close ();&lt;br /&gt;
 &lt;br /&gt;
 // execute a line of NC code&lt;br /&gt;
 #ifndef NOT_OLD_EMC_INTERP_COMPATIBLE&lt;br /&gt;
 extern int rs274ngc_execute (const char *command = 0);&lt;br /&gt;
 #else&lt;br /&gt;
 extern int rs274ngc_execute ();&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 // stop running&lt;br /&gt;
 extern int rs274ngc_exit ();&lt;br /&gt;
 &lt;br /&gt;
 // get ready to run&lt;br /&gt;
 extern int rs274ngc_init ();&lt;br /&gt;
 &lt;br /&gt;
 // load a tool table&lt;br /&gt;
 extern int rs274ngc_load_tool_table ();&lt;br /&gt;
 &lt;br /&gt;
 // open a file of NC code&lt;br /&gt;
 extern int rs274ngc_open (const char *filename);&lt;br /&gt;
 &lt;br /&gt;
 // read the mdi or the next line of the open NC code file&lt;br /&gt;
 extern int rs274ngc_read (const char *mdi = 0);&lt;br /&gt;
 &lt;br /&gt;
 // reset yourself&lt;br /&gt;
 extern int rs274ngc_reset ();&lt;br /&gt;
 &lt;br /&gt;
 // restore interpreter variables from a file&lt;br /&gt;
 extern int rs274ngc_restore_parameters (const char *filename);&lt;br /&gt;
 &lt;br /&gt;
 // save interpreter variables to file&lt;br /&gt;
 extern int rs274ngc_save_parameters (const char *filename, const double parameters[]);&lt;br /&gt;
 &lt;br /&gt;
 // synchronize your internal model with the external world&lt;br /&gt;
 extern int rs274ngc_synch ();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /*************************************************************************/&lt;br /&gt;
 /*&lt;br /&gt;
 &lt;br /&gt;
 Interface functions to call to get information from the interpreter.&lt;br /&gt;
 If a function has a return value, the return value contains the information.&lt;br /&gt;
 If a function returns nothing, information is copied into one of the&lt;br /&gt;
 arguments to the function. These functions do not change the state of&lt;br /&gt;
 the interpreter.&lt;br /&gt;
 &lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 // copy active G codes into array [0]..[11]&lt;br /&gt;
 extern void rs274ngc_active_g_codes (int *codes);&lt;br /&gt;
 &lt;br /&gt;
 // copy active M codes into array [0]..[6]&lt;br /&gt;
 extern void rs274ngc_active_m_codes (int *codes);&lt;br /&gt;
 &lt;br /&gt;
 // copy active F, S settings into array [0]..[2]&lt;br /&gt;
 extern void rs274ngc_active_settings (double *settings);&lt;br /&gt;
 &lt;br /&gt;
 // copy the text of the error message whose number is error_code into the&lt;br /&gt;
 // error_text array, but stop at max_size if the text is longer.&lt;br /&gt;
 extern void rs274ngc_error_text (int error_code, char *error_text, int max_size);&lt;br /&gt;
 &lt;br /&gt;
 // copy the name of the currently open file into the file_name array,&lt;br /&gt;
 // but stop at max_size if the name is longer&lt;br /&gt;
 extern void rs274ngc_file_name (char *file_name, int max_size);&lt;br /&gt;
 &lt;br /&gt;
 // return the length of the most recently read line&lt;br /&gt;
 extern int rs274ngc_line_length ();&lt;br /&gt;
 &lt;br /&gt;
 // copy the text of the most recently read line into the line_text array,&lt;br /&gt;
 // but stop at max_size if the text is longer&lt;br /&gt;
 extern void rs274ngc_line_text (char *line_text, int max_size);&lt;br /&gt;
 &lt;br /&gt;
 // return the current sequence number (how many lines read)&lt;br /&gt;
 extern int rs274ngc_sequence_number ();&lt;br /&gt;
 &lt;br /&gt;
 // copy the function name from the stack_index'th position of the&lt;br /&gt;
 // function call stack at the time of the most recent error into&lt;br /&gt;
 // the function name string, but stop at max_size if the name is longer&lt;br /&gt;
 extern void rs274ngc_stack_name (int stack_index, char *function_name, int max_size);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #ifndef NOT_OLD_EMC_INTERP_COMPATABLE&lt;br /&gt;
 // Get the parameter file name from the ini file.&lt;br /&gt;
 extern int rs274ngc_ini_load (const char *filename);&lt;br /&gt;
 static inline int rs274ngc_line ()&lt;br /&gt;
 {&lt;br /&gt;
   return rs274ngc_sequence_number ();&lt;br /&gt;
 }&lt;br /&gt;
 static inline const char *rs274ngc_command ()&lt;br /&gt;
 {&lt;br /&gt;
   static char buf[100];&lt;br /&gt;
 &lt;br /&gt;
   rs274ngc_line_text (buf, 100);&lt;br /&gt;
   return buf;&lt;br /&gt;
 }&lt;br /&gt;
 static inline const char *rs274ngc_file ()&lt;br /&gt;
 {&lt;br /&gt;
   static char buf[100];&lt;br /&gt;
 &lt;br /&gt;
   rs274ngc_file_name (buf, 100);&lt;br /&gt;
   return buf;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ==end of header file==&lt;br /&gt;
 #endif&lt;/div&gt;</description>
			<pubDate>Mon, 08 Dec 2008 11:12:22 GMT</pubDate>			<dc:creator>Steffen</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Rs274ngc.h</comments>		</item>
		<item>
			<title>Mach4View.h</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach4View.h</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Head==&lt;br /&gt;
 // Mach4View.h : interface of the CMach4View class&lt;br /&gt;
 //&lt;br /&gt;
 &lt;br /&gt;
==Includes==&lt;br /&gt;
 #include &amp;quot;ControlRect.h&amp;quot;        //to allow all the other classes to get their definitions here&lt;br /&gt;
 #include &amp;quot;Afxtempl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;xmlprofile.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;engine.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;trajectoryControl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;Addondlg.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;circinterp.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;memdc.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PluginManager.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;TitleTip.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;flashview.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #import  &amp;quot;PROGID:ShockwaveFlash.ShockwaveFlash&amp;quot; no_namespace raw_interfaces_only&lt;br /&gt;
 &lt;br /&gt;
 typedef char *(_cdecl * stringfunc) (int string);&lt;br /&gt;
&lt;br /&gt;
==struct defs== &lt;br /&gt;
===bdata===&lt;br /&gt;
 struct bdata&lt;br /&gt;
 {&lt;br /&gt;
   CString   Name;&lt;br /&gt;
   CString   Date;&lt;br /&gt;
   bool      Timeout;&lt;br /&gt;
   bool      Dxf;&lt;br /&gt;
   bool      Hpgl;&lt;br /&gt;
   bool      Jpg;&lt;br /&gt;
   CString   Test;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define DELETE_SCREW 10325&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #pragma once&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Classes== &lt;br /&gt;
===CMach4View=== &lt;br /&gt;
 class     CMach4View:public CView&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
   bool m_Selection;             // Is an input control selected?&lt;br /&gt;
   int       selpos;&lt;br /&gt;
   int       nControls;&lt;br /&gt;
   int       nHotControls;&lt;br /&gt;
   int       CurrentTab;&lt;br /&gt;
   int       Tabs[100];&lt;br /&gt;
   int       numgroups;&lt;br /&gt;
   char      trawdata[210];&lt;br /&gt;
   char      trawdata2[210];&lt;br /&gt;
   bdata     Block;&lt;br /&gt;
   bdata     Block2;&lt;br /&gt;
   bool      Stable;             // Was engine stable on last run&lt;br /&gt;
   OVERLAPPED ov;                // for overlapped IO&lt;br /&gt;
   TimeData  Info;               // for timing info&lt;br /&gt;
   HANDLE    hEvent;&lt;br /&gt;
   unsigned long cpuSpeed;       // CPU speed&lt;br /&gt;
   int       m_Units;            // default setup units&lt;br /&gt;
   double    En0_nSteps,&lt;br /&gt;
             En1_nSteps,&lt;br /&gt;
             En2_nSteps;&lt;br /&gt;
   bool      RemoteHandle;&lt;br /&gt;
   HWND      Remhandle;          // remotely set handle&lt;br /&gt;
   bool      FilePres,&lt;br /&gt;
             mConverse;          // file protection string&lt;br /&gt;
   char      LicData[1024];&lt;br /&gt;
   CString   rName;&lt;br /&gt;
   CString   LoadedScreen;&lt;br /&gt;
   char      acrData[200];&lt;br /&gt;
   char      acrData2[200];&lt;br /&gt;
   bool      AutoLoadAddon;&lt;br /&gt;
   CString   tempstring;&lt;br /&gt;
   bool      JogAllowed[100];&lt;br /&gt;
   bool      External;&lt;br /&gt;
   AddonDlg *addons;&lt;br /&gt;
   double    OEMDROs[255];&lt;br /&gt;
   bool      OEMLeds[255];&lt;br /&gt;
   CString   Tickers[255];&lt;br /&gt;
   bool      LoadCode;&lt;br /&gt;
   bool      ScreenAuto;&lt;br /&gt;
   bool      LockedUp;&lt;br /&gt;
   double    m_cxMax,&lt;br /&gt;
             m_cxMin,&lt;br /&gt;
             m_cyMax,&lt;br /&gt;
             m_cyMin;&lt;br /&gt;
 //PlugIn variables.&lt;br /&gt;
   bool      m_PrinterOn;&lt;br /&gt;
   bool     *m_ShiftState;&lt;br /&gt;
   bool     *m_CtrlState;&lt;br /&gt;
   CFrameWnd *MachFrame;&lt;br /&gt;
   int       LocTest;&lt;br /&gt;
   bool      NormalScreen;&lt;br /&gt;
   HWND      FlashWnd;&lt;br /&gt;
   IShockwaveFlash *flash;&lt;br /&gt;
   bool      FlashAvailable;&lt;br /&gt;
   bool      FlashLoaded;&lt;br /&gt;
   FlashView *FlashWindow;&lt;br /&gt;
   bool      Protected;&lt;br /&gt;
   CString   sPassword;&lt;br /&gt;
   HANDLE    ClickRes;&lt;br /&gt;
   LPSTR     lpClick;&lt;br /&gt;
   CString   runtime;&lt;br /&gt;
   CString   esttime;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //all position sensitive. Keep vars above..//////////////////////////////////////////////////////////&lt;br /&gt;
 protected:                      // create from serialization only&lt;br /&gt;
             CMach4View ();&lt;br /&gt;
             DECLARE_DYNCREATE (CMach4View)&lt;br /&gt;
 // Attributes&lt;br /&gt;
 public:                       //from the ocx&lt;br /&gt;
             CMemDC * memdc;&lt;br /&gt;
   PlugInManager plugin;&lt;br /&gt;
   COLORREF  BackColor;&lt;br /&gt;
   CBrush    BackBrush;&lt;br /&gt;
   TrajectoryControl Planner;&lt;br /&gt;
   CObList   m_listCtrls;&lt;br /&gt;
   LRESULT   DoHelpIt (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   LRESULT   DoDeferredStart (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   LRESULT   DeleteScrew (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   CControlRect *m_Controls[2000]; // array of controls&lt;br /&gt;
   CControlRect *m_HotKeys[2000];  // array of hot-keyed controls&lt;br /&gt;
   CControlRect *Selection;      // Selected Control&lt;br /&gt;
   bool      Calculators;&lt;br /&gt;
   int       tripmenu;&lt;br /&gt;
   int       Slave0,&lt;br /&gt;
             Slave1,&lt;br /&gt;
             Slave2;&lt;br /&gt;
   bool      StanScreen;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // Operations&lt;br /&gt;
 public:                       //from the ocx.&lt;br /&gt;
 &lt;br /&gt;
             BOOL LoadLayout (CString FileName);&lt;br /&gt;
   void      Lock (bool Lock);&lt;br /&gt;
   void      CloseXML ();&lt;br /&gt;
   void      OpenXML ();&lt;br /&gt;
   void      SetHotKeysOn ();&lt;br /&gt;
   void      SetHotKeysOff ();&lt;br /&gt;
   void      ConfigureEngine ();&lt;br /&gt;
   void      OnAllocate ();&lt;br /&gt;
   BOOL      StopEngine ();&lt;br /&gt;
   void      GetFileName (CString &amp;amp; path);&lt;br /&gt;
   void      SelectionMDICalled ();&lt;br /&gt;
   void      CalcTabs ();&lt;br /&gt;
   void      SortTabs ();&lt;br /&gt;
   bool      included (int *vects, int check, int nItems);&lt;br /&gt;
   void      NextGroup ();&lt;br /&gt;
   void      PreviousGroup ();&lt;br /&gt;
   void      PreviousSelection ();&lt;br /&gt;
   void      NextSelection ();&lt;br /&gt;
   bool      SelectionType (int key);&lt;br /&gt;
   void      SelectionCalled (int type);&lt;br /&gt;
   BOOL      StartEngine ();&lt;br /&gt;
   void      ShowGroup ();&lt;br /&gt;
   void      CreateAll ();&lt;br /&gt;
   void      CheckCirc (char *Pass);&lt;br /&gt;
   void      CheckCirc2 (char *Pass);&lt;br /&gt;
   void      CheckCirc3 (char *Pass);&lt;br /&gt;
   void      CircInterp (CString Pass);&lt;br /&gt;
   void      CircInterp2 (CString Pass); //wizlic&lt;br /&gt;
   void      CircInterp3 (CString Pass); //g100&lt;br /&gt;
   void      JPeg ();&lt;br /&gt;
   void      SetupBacklash ();&lt;br /&gt;
   void      CalculateEncoderVars ();&lt;br /&gt;
   void      CalEncoders ();&lt;br /&gt;
   void      UnHookKeys ();&lt;br /&gt;
   void      UpdateLoop ();&lt;br /&gt;
   void      ResizeControls (CControlRect *);&lt;br /&gt;
   BOOL      CMach4View::InitEngine ();&lt;br /&gt;
   void      CMach4View::HookKeys ();&lt;br /&gt;
   void      ShowGroupZero (void);&lt;br /&gt;
   void      CloseLayout (void);&lt;br /&gt;
   void      CheckForAddons (void);&lt;br /&gt;
   void      LoadAddon (void);&lt;br /&gt;
   void      LoadDefLayout (CString screen);&lt;br /&gt;
   SHORT     GetnToolpathOps (void);&lt;br /&gt;
   VARIANT   GetOperation (SHORT nOperation);&lt;br /&gt;
   void      Offline (SHORT state);&lt;br /&gt;
   void      ConfigToolPath (void);&lt;br /&gt;
   void      Regen (void);&lt;br /&gt;
   void      SelectionListCalled ();&lt;br /&gt;
   void      LoadNoRun (LPCTSTR name);&lt;br /&gt;
   DOUBLE    GetParam (LPCTSTR param);&lt;br /&gt;
   void      CalSpindle (void);&lt;br /&gt;
   void      Maintain (void);&lt;br /&gt;
   void      Formulas (void);&lt;br /&gt;
   void      ScrewMap (void);&lt;br /&gt;
   LRESULT   LoadDefaultLayout (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   LRESULT   LoadGCodeMessage (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   LRESULT   LoadAddonButton (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
   bool      CheckTime ();&lt;br /&gt;
   bool      CheckTime2 ();&lt;br /&gt;
   bool      SetLog ();&lt;br /&gt;
   void      MenuOn ();&lt;br /&gt;
   void      MenuOff ();&lt;br /&gt;
   void      CheckSer ();&lt;br /&gt;
   void      FlushSettings ();&lt;br /&gt;
 &lt;br /&gt;
   LRESULT   OnViewVideoScript (WPARAM /*wParam */ , LPARAM /*lParam */ );&lt;br /&gt;
 &lt;br /&gt;
 // Overrides&lt;br /&gt;
 public:&lt;br /&gt;
             virtual BOOL PreCreateWindow (CREATESTRUCT &amp;amp; cs);&lt;br /&gt;
 protected:&lt;br /&gt;
             virtual void OnInitialUpdate ();  // called first time after construct&lt;br /&gt;
 &lt;br /&gt;
 // Implementation&lt;br /&gt;
 public:&lt;br /&gt;
             virtual ~ CMach4View ();&lt;br /&gt;
 #ifdef _DEBUG&lt;br /&gt;
   virtual void AssertValid () const;&lt;br /&gt;
   virtual void Dump (CDumpContext &amp;amp; dc) const;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
 &lt;br /&gt;
 // Generated message map functions&lt;br /&gt;
 protected:&lt;br /&gt;
             afx_msg void OnStyleChanged (int nStyleType, LPSTYLESTRUCT lpStyleStruct);&lt;br /&gt;
 DECLARE_MESSAGE_MAP () public:&lt;br /&gt;
 &lt;br /&gt;
             virtual BOOL PreTranslateMessage (MSG * pMsg);&lt;br /&gt;
   afx_msg void OnTimer (UINT nIDEvent);&lt;br /&gt;
   afx_msg void OnFileNew ();&lt;br /&gt;
 protected:&lt;br /&gt;
             virtual void OnDraw (CDC * /*pDC */ );&lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
             afx_msg BOOL OnEraseBkgnd (CDC * pDC);&lt;br /&gt;
   afx_msg void OnLoadgcode ();&lt;br /&gt;
   afx_msg void OnImporthpgl ();&lt;br /&gt;
   afx_msg void OnImportdxf ();&lt;br /&gt;
   afx_msg void OnClosefile ();&lt;br /&gt;
   afx_msg void OnSetnative ();&lt;br /&gt;
   afx_msg void OnPortspins ();&lt;br /&gt;
   afx_msg void OnHominglimits ();&lt;br /&gt;
   afx_msg void OnSlave ();&lt;br /&gt;
   afx_msg void OnSethotkeys ();&lt;br /&gt;
   afx_msg void OnTunemotor ();&lt;br /&gt;
   afx_msg void OnBacklash ();&lt;br /&gt;
   afx_msg void OnToolpath ();&lt;br /&gt;
   afx_msg void OnLogic ();&lt;br /&gt;
   afx_msg void OnState ();&lt;br /&gt;
   afx_msg void OnLoadscreens ();&lt;br /&gt;
   afx_msg void OnRegen ();&lt;br /&gt;
   afx_msg void OnPickwizard ();&lt;br /&gt;
   afx_msg void OnOffline ();&lt;br /&gt;
   afx_msg void OnLock ();&lt;br /&gt;
   afx_msg void OnUnlock ();&lt;br /&gt;
   afx_msg void OnMacros ();&lt;br /&gt;
   afx_msg void OnFixtures ();&lt;br /&gt;
   afx_msg void OnTooltable ();&lt;br /&gt;
   afx_msg void OnSpincal ();&lt;br /&gt;
   afx_msg void OnScrewmap ();&lt;br /&gt;
   afx_msg void OnFormulas ();&lt;br /&gt;
   afx_msg void OnMaintenance ();&lt;br /&gt;
   afx_msg void OnAbout ();&lt;br /&gt;
   afx_msg void OnArtsoft ();&lt;br /&gt;
   afx_msg void OnExit ();&lt;br /&gt;
   BOOL      CMach4View::LoadGCode ();&lt;br /&gt;
   afx_msg void OnKillFocus (CWnd * pNewWnd);&lt;br /&gt;
   afx_msg void OnUpdateOffline (CCmdUI * pCmdUI);&lt;br /&gt;
   void      ShowRight (void);&lt;br /&gt;
   void      TogglePanel (void);&lt;br /&gt;
   afx_msg void OnOperatorCalibratempg ();&lt;br /&gt;
   afx_msg void OnOperatorModbuscontrol ();&lt;br /&gt;
   afx_msg void OnOperatorTCPModbuscontrol ();&lt;br /&gt;
   afx_msg void OnHelpEmailsupportrequest ();&lt;br /&gt;
   afx_msg void OnConfigSerialmonitor ();&lt;br /&gt;
   void      StoreLayout (void);&lt;br /&gt;
   afx_msg void OnViewSavecurrentlayout ();&lt;br /&gt;
   afx_msg void OnFileDxfturnimport ();&lt;br /&gt;
   afx_msg void OnViewVideowindow ();&lt;br /&gt;
   afx_msg void OnConfigFonts ();&lt;br /&gt;
   afx_msg void OnHelpWww32894 ();&lt;br /&gt;
   afx_msg void OnConfigEditbutotnscript ();&lt;br /&gt;
   afx_msg void OnLButtonDown (UINT nFlags, CPoint point);&lt;br /&gt;
   afx_msg void OnConfigCheckconfig ();&lt;br /&gt;
   afx_msg void OnConfigModbusconfig ();&lt;br /&gt;
   afx_msg void OnOperatorConfigplugins ();&lt;br /&gt;
   afx_msg void OnConfigGeneralmodbusconfig ();&lt;br /&gt;
   void      SU (void);&lt;br /&gt;
   afx_msg void OnConfigResetdevicesel ();&lt;br /&gt;
   afx_msg void OnConfigSpindlepulleys ();&lt;br /&gt;
   afx_msg void OnConfigSafe ();&lt;br /&gt;
   afx_msg void OnOperatorAuto ();&lt;br /&gt;
   afx_msg void OnUpdateOperatorAuto (CCmdUI * pCmdUI);&lt;br /&gt;
   afx_msg void OnOperatorSetnormalcondition ();&lt;br /&gt;
   bool      AttachFlash (void);&lt;br /&gt;
   bool      DetachFlash (void);&lt;br /&gt;
   afx_msg void OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);&lt;br /&gt;
   afx_msg void OnViewManualencoderdroscreen ();&lt;br /&gt;
   afx_msg void OnViewDefaultmotorcontrolscreen ();&lt;br /&gt;
   afx_msg void OnOperatorRestoresettings ();&lt;br /&gt;
 &lt;br /&gt;
   __int64   lic;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   afx_msg void OnOperatorBraincontrol ();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
==defines==&lt;br /&gt;
 #define WM_LOADDEF 10321&lt;br /&gt;
 #define WM_LOADPROGRAM 10322&lt;br /&gt;
 #define WM_RUNTHEHELP  10323&lt;br /&gt;
 #define WM_LOADADDON   10324&lt;br /&gt;
 #define DELETE_SCREW   10325&lt;br /&gt;
 #define WM_DEFERRED    10326&lt;br /&gt;
 &lt;br /&gt;
 /////init of the driver code..&lt;br /&gt;
 &lt;br /&gt;
 #define MACH1_SUCCESS         0&lt;br /&gt;
 #define MACH1_ERROR_MEMORY   21&lt;br /&gt;
 #define MACH1_ERROR_NOTIMER   22&lt;br /&gt;
 #define MACH1_ERROR_ALREADYON  1&lt;br /&gt;
 #define MACH1_ERROR_NOIDT      2&lt;br /&gt;
 #define MACH1_ERROR_NOVECTORS  3&lt;br /&gt;
 #define MACH1_ERROR_NOFREEVECT 4&lt;br /&gt;
 #define MACH1_ERROR_NOGDT      5&lt;br /&gt;
 #define MACH1_ERROR_NOLIDT     6&lt;br /&gt;
 &lt;br /&gt;
 #define IOCTL_INBUF_SIZE  512&lt;br /&gt;
 #define IOCTL_OUTBUF_SIZE 512&lt;br /&gt;
 #define MACH1_PREPTIMER  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define MACH1_STOPTIMER  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define MACH1_GETCOUNT   CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define MACH1_GETMAXTIME CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define MACH1_GETMINTIME CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define MACH1_STARTTIMER CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // control code for iocontrol calls for Master5 operations&lt;br /&gt;
 &lt;br /&gt;
 #define  SOFT_GET_STATUS        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x806, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_CONTROL_OUT       CTL_CODE(FILE_DEVICE_UNKNOWN, 0x807, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SET_FREQUENCY     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_ACTIVATE          CTL_CODE(FILE_DEVICE_UNKNOWN, 0x809, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GET_TIMES         CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80a, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GET_DATA          CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80b, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_ADD_TO_BUFFER     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80c, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GET_LOADINDEX     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80d, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GET_CONTROLINDEX  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80e, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SET_PORT          CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80f, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_LOAD_MASKS        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x810, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GET_ACTIVE        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x811, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GETINDEXS         CTL_CODE(FILE_DEVICE_UNKNOWN, 0x812, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SETREVERSALS      CTL_CODE(FILE_DEVICE_UNKNOWN, 0x813, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_CONTROL_IN        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x814, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_CONTROL_JOGON     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x815, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_CONTROL_JOGOFF    CTL_CODE(FILE_DEVICE_UNKNOWN, 0x816, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SETNEGS           CTL_CODE(FILE_DEVICE_UNKNOWN, 0x817, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GETIDLE           CTL_CODE(FILE_DEVICE_UNKNOWN, 0x818, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_EMERGENCY         CTL_CODE(FILE_DEVICE_UNKNOWN, 0x819, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_OVERRIDE          CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81a, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GOHOME            CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81b, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_PAUSE             CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81c, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_HALT              CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81d, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_LASER             CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81e, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SPACE             CTL_CODE(FILE_DEVICE_UNKNOWN, 0x81f, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_GATE              CTL_CODE(FILE_DEVICE_UNKNOWN, 0x820, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_ALLOCATE_BUFF     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x821, METHOD_OUT_DIRECT,FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SAMPLE_BUFF     CTL_CODE(FILE_DEVICE_UNKNOWN, 0x822, METHOD_OUT_DIRECT,FILE_ANY_ACCESS)&lt;br /&gt;
 #define  SOFT_SAMPLE_ON         CTL_CODE(FILE_DEVICE_UNKNOWN, 0x823, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  MACH1_RELEASEBUFFERS   CTL_CODE(FILE_DEVICE_UNKNOWN, 0x824, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 #define  MACH1_DRIVERVERSION  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x825, METHOD_BUFFERED, FILE_ANY_ACCESS)&lt;br /&gt;
 &lt;br /&gt;
 #ifndef _DEBUG                  // debug version in Mach4View.cpp&lt;br /&gt;
 //inline CMach4Doc* CMach4View::GetDocument() const&lt;br /&gt;
 //   { return reinterpret_cast&amp;lt;CMach4Doc*&amp;gt;(m_pDocument); }&lt;br /&gt;
 #endif&lt;/div&gt;</description>
			<pubDate>Mon, 08 Dec 2008 11:09:21 GMT</pubDate>			<dc:creator>Steffen</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach4View.h</comments>		</item>
		<item>
			<title>Engine.h</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Engine.h</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The structures are also documented (in a different fashion and slightly differently) in [[SDK Variables]].  This page is probably the newer (and therefore better?) page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Head==&lt;br /&gt;
 //Axis definitions&lt;br /&gt;
 &lt;br /&gt;
 #if !defined(AFX_ENGINE_H__738D3A62_292C_413C_A76F_052BE3C1250C__INCLUDED_)&lt;br /&gt;
 #define AFX_ENGINE_H__738D3A62_292C_413C_A76F_052BE3C1250C__INCLUDED_&lt;br /&gt;
 &lt;br /&gt;
==defines==&lt;br /&gt;
 #define XAXIS    0&lt;br /&gt;
 #define YAXIS    1&lt;br /&gt;
 #define ZAXIS    2&lt;br /&gt;
 #define AAXIS    3              // disptype&lt;br /&gt;
 #define BAXIS    4&lt;br /&gt;
 #define CAXIS    5&lt;br /&gt;
 #define SPINDLE  6&lt;br /&gt;
 #define ENC1     7&lt;br /&gt;
 #define ENC2     8&lt;br /&gt;
 #define ENC3     9&lt;br /&gt;
 #define TOOLPATH 10&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // Controller States&lt;br /&gt;
 #define STOP      0&lt;br /&gt;
 #define RUN       1&lt;br /&gt;
 #define PAUSE     2&lt;br /&gt;
 #define FINISHING 3&lt;br /&gt;
 #define MDISTATE  4&lt;br /&gt;
 #define WAITING   5&lt;br /&gt;
 #define SINGLE    6&lt;br /&gt;
 //  Device outputs&lt;br /&gt;
 /*&lt;br /&gt;
 #define EXTERNACT1    1&lt;br /&gt;
 #define EXTERNACT2    2&lt;br /&gt;
 #define EXTERNACT3    3&lt;br /&gt;
 #define EXTERNACT4    4&lt;br /&gt;
 #define EXTERNACT5    5&lt;br /&gt;
 #define EXTERNACT6    6&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 // EStop reasons;&lt;br /&gt;
 &lt;br /&gt;
 #define  LOCALWATCHDOG       1&lt;br /&gt;
 #define  REQUESTED           2&lt;br /&gt;
 #define  DRIVERWATCHDOG      3&lt;br /&gt;
 #define  LIMITSWITCH         4&lt;br /&gt;
 #define  DRIVERSAFETY        5&lt;br /&gt;
 #define  ESTOPINPUTLINE      6&lt;br /&gt;
 #define  SOFTLIMITS          7&lt;br /&gt;
 #define  CONFIG              8&lt;br /&gt;
 #define  SIMSTOP             9&lt;br /&gt;
 #define  ENDOFFILE          10&lt;br /&gt;
 #define  SERVODISABLE       11&lt;br /&gt;
 #define  EXTERNALCOMTIMEOUT 12&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // Commands to Engine&lt;br /&gt;
 &lt;br /&gt;
 #define COMDWELL         1&lt;br /&gt;
 #define COMDIGTRIGON     2&lt;br /&gt;
 #define COMDIGTRGOFF     3&lt;br /&gt;
 #define COMEXT1ON        4&lt;br /&gt;
 #define COMEXT1OFF       5&lt;br /&gt;
 #define COMEXT2ON        6&lt;br /&gt;
 #define COMEXT2OFF       7&lt;br /&gt;
 #define COMEXT3ON        8&lt;br /&gt;
 #define COMEXT3OFF       9&lt;br /&gt;
 #define MOTIONCS        10&lt;br /&gt;
 #define MOTIONCV        11&lt;br /&gt;
 #define CHANGEUNITS     12&lt;br /&gt;
 #define SETFEED         13&lt;br /&gt;
 #define CHANGEPLANE     14&lt;br /&gt;
 #define CHANGESLOT      15&lt;br /&gt;
 #define LENGTHOFFSET    16&lt;br /&gt;
 #define SETORIGINS      17&lt;br /&gt;
 #define SETMAXVEL       18&lt;br /&gt;
 #define PROGRAMSTOP     19&lt;br /&gt;
 #define PROGRAMSTOPOPT  20&lt;br /&gt;
 #define PROGRAMEND      21&lt;br /&gt;
 #define SPINAXISSPEED   22&lt;br /&gt;
 #define SPINAXISCW      23&lt;br /&gt;
 #define SPINAXISCCW     24&lt;br /&gt;
 #define SPINAXISSTOP    25&lt;br /&gt;
 #define RUNSUB          26&lt;br /&gt;
 #define RETSUB          27&lt;br /&gt;
 #define CALLMAC         28&lt;br /&gt;
 #define PROBEAXIS       29&lt;br /&gt;
 #define WAITCOMMAND     30&lt;br /&gt;
 #define THREADOFF       31&lt;br /&gt;
 #define FINISHSLOT      32&lt;br /&gt;
 #define DISABLESPEED    33&lt;br /&gt;
 #define REFCOM          34&lt;br /&gt;
 #define COMEXT4ON       35&lt;br /&gt;
 #define COMEXT4OFF      36&lt;br /&gt;
 #define COMEXT5ON       37&lt;br /&gt;
 #define COMEXT5OFF      38&lt;br /&gt;
 #define COMEXT6ON       39&lt;br /&gt;
 #define COMEXT6OFF      40&lt;br /&gt;
 #define FLOODSIGON      41&lt;br /&gt;
 #define FLOODSIGOFF     42&lt;br /&gt;
 #define MISTSIGON       43&lt;br /&gt;
 #define MISTSIGOFF      44&lt;br /&gt;
 #define TURNOFFCOMP     45&lt;br /&gt;
 #define TURNONCOMP      46&lt;br /&gt;
 #define ESIGON          47&lt;br /&gt;
 #define ESIGOFF         48&lt;br /&gt;
 #define EPURGE          49&lt;br /&gt;
 &lt;br /&gt;
 #define CW               0&lt;br /&gt;
 #define CCW              1&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define MMS              0&lt;br /&gt;
 #define INCHES           1&lt;br /&gt;
 #define DEGREES          2          //dispunits&lt;br /&gt;
 #define COUNTS           3&lt;br /&gt;
 #define VELOCITY         4&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span id=def:InSignals&amp;gt;// Number of input signals in total that need to be loaded from engine&amp;lt;/span&amp;gt;&lt;br /&gt;
 #define nSigs        53&lt;br /&gt;
 &lt;br /&gt;
 // Input signals&lt;br /&gt;
 #define XLIMITPLUS      0&lt;br /&gt;
 #define XLIMITMINUS     1&lt;br /&gt;
 #define XHOME           2&lt;br /&gt;
 #define YLIMITPLUS      3&lt;br /&gt;
 #define YLIMITMINUS     4&lt;br /&gt;
 #define YHOME           5&lt;br /&gt;
 #define ZLIMITPLUS      6&lt;br /&gt;
 #define ZLIMITMINUS     7&lt;br /&gt;
 #define ZHOME           8&lt;br /&gt;
 #define ALIMITPLUS      9&lt;br /&gt;
 #define ALIMITMINUS    10&lt;br /&gt;
 #define AHOME          11&lt;br /&gt;
 #define BLIMITPLUS     12&lt;br /&gt;
 #define BLIMITMINUS    13&lt;br /&gt;
 #define BHOME          14&lt;br /&gt;
 #define CLIMITPLUS     15&lt;br /&gt;
 #define CLIMITMINUS    16&lt;br /&gt;
 #define CHOME          17&lt;br /&gt;
 #define ACTIVATION1    18&lt;br /&gt;
 #define ACTIVATION2    19&lt;br /&gt;
 #define ACTIVATION3    20&lt;br /&gt;
 #define ACTIVATION4    21&lt;br /&gt;
 #define DIGITIZE       22&lt;br /&gt;
 #define INDEX          23&lt;br /&gt;
 #define LIMITOVER      24&lt;br /&gt;
 #define EMERGENCY      25&lt;br /&gt;
 #define THCON          26&lt;br /&gt;
 #define THCUP          27&lt;br /&gt;
 #define THCDOWN        28         //last engine signal&lt;br /&gt;
 #define OEMTRIGGER1    29&lt;br /&gt;
 #define OEMTRIGGER2    30&lt;br /&gt;
 #define OEMTRIGGER3    31         // OEM Trigger signals..&lt;br /&gt;
 #define OEMTRIGGER4    32&lt;br /&gt;
 #define OEMTRIGGER5    33&lt;br /&gt;
 #define OEMTRIGGER6    34         // OEM Trigger signals..&lt;br /&gt;
 #define OEMTRIGGER7    35&lt;br /&gt;
 #define OEMTRIGGER8    36&lt;br /&gt;
 #define OEMTRIGGER9    37         // OEM Trigger signals..&lt;br /&gt;
 #define OEMTRIGGER10   38&lt;br /&gt;
 #define OEMTRIGGER11   39&lt;br /&gt;
 #define OEMTRIGGER12   40         // OEM Trigger signals..&lt;br /&gt;
 #define OEMTRIGGER13   41&lt;br /&gt;
 #define OEMTRIGGER14   42&lt;br /&gt;
 #define OEMTRIGGER15   43         // OEM Trigger signals..&lt;br /&gt;
 #define TIMING         44&lt;br /&gt;
 #define JOGXP          45&lt;br /&gt;
 #define JOGXM          46&lt;br /&gt;
 #define JOGYP          47         //Jog inputs&lt;br /&gt;
 #define JOGYM          48&lt;br /&gt;
 #define JOGZP          49&lt;br /&gt;
 #define JOGZM          50&lt;br /&gt;
 #define JOGAP          51&lt;br /&gt;
 #define JOGAM          52&lt;br /&gt;
 #define HOMING         53         //software signal&lt;br /&gt;
 #define PROBING        54         //software signal&lt;br /&gt;
 #define RESUME         55         //software signal&lt;br /&gt;
 #define EXHOME         56         //software signal for external homing offset circuit.&lt;br /&gt;
 &lt;br /&gt;
 //software triggers...Last 3 bits of the engine Wait condition... &lt;br /&gt;
 //which encompasses all 31 signals in a 32 bit word&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span id=def:OutSignals&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 #define nSigsOut    30          /// output signals&lt;br /&gt;
 &lt;br /&gt;
 #define DIGTRIGGER      0&lt;br /&gt;
 #define ENABLE1         1&lt;br /&gt;
 #define ENABLE2         2&lt;br /&gt;
 #define ENABLE3         3&lt;br /&gt;
 #define ENABLE4         4&lt;br /&gt;
 #define ENABLE5         5&lt;br /&gt;
 #define ENABLE6         6&lt;br /&gt;
 #define EXTACT1         7&lt;br /&gt;
 #define EXTACT2         8&lt;br /&gt;
 #define EXTACT3         9&lt;br /&gt;
 #define EXTACT4        10&lt;br /&gt;
 #define EXTACT5        11&lt;br /&gt;
 #define EXTACT6        12&lt;br /&gt;
 #define CHARGE         13&lt;br /&gt;
 #define CHARGE2        14&lt;br /&gt;
 #define CURRENTHILOW   15&lt;br /&gt;
 #define EXTACT7        16&lt;br /&gt;
 #define EXTACT8        17&lt;br /&gt;
 #define EXTACT9        18&lt;br /&gt;
 #define EXTACT10       19&lt;br /&gt;
 #define EXTACT11       20&lt;br /&gt;
 #define EXTACT12       21&lt;br /&gt;
 #define EXTACT13       22&lt;br /&gt;
 #define EXTACT14       23&lt;br /&gt;
 #define EXTACT15       24&lt;br /&gt;
 #define EXTACT16       25&lt;br /&gt;
 #define EXTACT17       26&lt;br /&gt;
 #define EXTACT18       27&lt;br /&gt;
 #define EXTACT19       28&lt;br /&gt;
 #define EXTACT20       29&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define KEYNOCOMMAND    0&lt;br /&gt;
 #define KEYFLOOD        1&lt;br /&gt;
 #define KEYJOGINCR      2&lt;br /&gt;
 #define KEYMIST         3&lt;br /&gt;
 #define KEYPAUSE        4&lt;br /&gt;
 #define KEYRESET        5&lt;br /&gt;
 #define KEYRESUME       6&lt;br /&gt;
 #define KEYREWIND       7&lt;br /&gt;
 #define KEYRUN          8&lt;br /&gt;
 #define KEYSINGLE       9&lt;br /&gt;
 #define KEYSPINCCW     10&lt;br /&gt;
 #define KEYSPINCW      11&lt;br /&gt;
 #define KEYSPINOFF     12&lt;br /&gt;
 #define KEYSTOP        13&lt;br /&gt;
 #define KEYZEROX       14&lt;br /&gt;
 #define KEYZEROY       15&lt;br /&gt;
 #define KEYZEROZ       16&lt;br /&gt;
 #define KEYZEROA       17&lt;br /&gt;
 #define KEYZEROB       18&lt;br /&gt;
 #define KEYZEROC       19&lt;br /&gt;
 #define KEYZEROALL     20&lt;br /&gt;
 #define KEYGOTOZERO    21&lt;br /&gt;
 #define KEYREFALL      22&lt;br /&gt;
 #define KEYOVERIDE     23&lt;br /&gt;
 &lt;br /&gt;
 ////  Control groups...&lt;br /&gt;
 //&lt;br /&gt;
 //&lt;br /&gt;
 #define DRO             1&lt;br /&gt;
 #define BITMAPCTRL      3&lt;br /&gt;
 #define TEXTBUTTON      4&lt;br /&gt;
 #define JOYSTICK        5&lt;br /&gt;
 #define LED             6&lt;br /&gt;
 #define LABLE           7&lt;br /&gt;
 #define BITBUTTON       8&lt;br /&gt;
 #define MDILINE         9&lt;br /&gt;
 #define GCODE          10&lt;br /&gt;
 #define PATHCTRL       11&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==struct defs==&lt;br /&gt;
===OutputInfo===&lt;br /&gt;
 // output signal structure&lt;br /&gt;
 struct OutputInfo&lt;br /&gt;
 {&lt;br /&gt;
   bool      active;&lt;br /&gt;
   char      OutPin;&lt;br /&gt;
   char      OutPort;&lt;br /&gt;
   bool      Negated;&lt;br /&gt;
   bool      Activated;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
An output Signal as declared in ''Ports and Pins''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;margin:1em 1em 1em 0em; border:0px #AAA solid; border-collapse:collapse; empty-cells:show;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|''active'': || the Output is used&lt;br /&gt;
|-&lt;br /&gt;
|''OutPin'': || the number of the output (in case of LPT: the pinnumber on the connector)&lt;br /&gt;
|-&lt;br /&gt;
|''OutPort'': || the portnumber addressed by this output. e.g. 1/2: LPT 1/2, 0: ModBus, 10: pokeys&lt;br /&gt;
|-&lt;br /&gt;
|''Negated'': || if set, the signal shall be low-active&lt;br /&gt;
|-&lt;br /&gt;
|''Activated'': || the output signal is set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The port and pin number are unsigned and shown in Mach3-Dialog for ports and pins as -127..128&lt;br /&gt;
&lt;br /&gt;
This struct is used in [[#var:OutSigs|OutSigs]] as an array for the number of [[#def:OutSignals|Output Signals]]&lt;br /&gt;
&lt;br /&gt;
===InputInfo===&lt;br /&gt;
 // input signal structure&lt;br /&gt;
 struct InputInfo&lt;br /&gt;
 {&lt;br /&gt;
   bool      Active;             // signal active?&lt;br /&gt;
   char      InPin;              // which Pin&lt;br /&gt;
   char      InPort;             // which Port&lt;br /&gt;
   bool      Negated;&lt;br /&gt;
   int       ReqState;           // Required State on Activation&lt;br /&gt;
   bool      Activated;&lt;br /&gt;
   bool      Emulated;&lt;br /&gt;
   int       EmulationKey;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#OutputInfo|OutputInfo]] for Inputs.&lt;br /&gt;
&lt;br /&gt;
This struct is used in [[#var:InSigs|InSigs]] as an array for the number of [[#def:InSignals|Input Signals]]&lt;br /&gt;
&lt;br /&gt;
===Encoder===&lt;br /&gt;
 // encoder inputs&lt;br /&gt;
 struct Encoder&lt;br /&gt;
 {&lt;br /&gt;
   bool      Active;             // is the encoder turned on?&lt;br /&gt;
   int       APin;               //  A Pin designations&lt;br /&gt;
   int       BPin;               //  B Pin designations&lt;br /&gt;
   int       APort;              //  A Pin Ports&lt;br /&gt;
   int       BPort;              //  B Pin Ports&lt;br /&gt;
   bool      LastStateA;&lt;br /&gt;
   bool      LastStateB;         // storage for the last known state&lt;br /&gt;
   int       Count[2];           //  Index counts for each encoder&lt;br /&gt;
   int       Memory[16];&lt;br /&gt;
   int       ActiveMemory;&lt;br /&gt;
   int       Color;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
===AxisInfo===&lt;br /&gt;
 // axis information structure&lt;br /&gt;
 struct AxisInfo&lt;br /&gt;
 {&lt;br /&gt;
   int       Index;              // Current Count&lt;br /&gt;
   int       MasterIndex;&lt;br /&gt;
   char      StepPin;            // Pin for step pulse&lt;br /&gt;
   char      DirPin;             // Pin for Direction Pulse&lt;br /&gt;
   char      StepPort;           // Port # for step&lt;br /&gt;
   char      DirPort;            // Port # for Direction&lt;br /&gt;
   bool      StepNegate;         // low active step?&lt;br /&gt;
   bool      DirNegate;          // low active Direction?&lt;br /&gt;
   int       CurVelocity;        // Current Velocity&lt;br /&gt;
   int       MaxVelocity;        // Current Max Velocity (jogging )&lt;br /&gt;
   int       MasterVelocity;     // Master Velocity...Maximum Velocity in all circumstances.&lt;br /&gt;
   int       Acceleration;       // Acceleration&lt;br /&gt;
   bool      AtSpeed;            // At Speed Currently&lt;br /&gt;
   bool      Acc;                // Accelerating?&lt;br /&gt;
   bool      Dec;                // Decelerating?&lt;br /&gt;
   bool      Enable;             // Axis Enabled?&lt;br /&gt;
   bool      Jogging;            // Jogging On?&lt;br /&gt;
   int       JoggDir;            // Direction of Jog;&lt;br /&gt;
   bool      Homing;             // is this a homing jog?&lt;br /&gt;
   bool      DeRef;              // Dereferanceing Move?&lt;br /&gt;
   int       Memory[6];&lt;br /&gt;
   int       ActiveMemory;&lt;br /&gt;
   int       Color;&lt;br /&gt;
   int       TripCount;&lt;br /&gt;
   int       DepthCount;&lt;br /&gt;
   bool      Probing;&lt;br /&gt;
   bool      Slave;&lt;br /&gt;
   int       SlaveAxis;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
===TrajPoint===&lt;br /&gt;
 struct TrajPoint&lt;br /&gt;
 {&lt;br /&gt;
   int       Points[6];&lt;br /&gt;
   int       Command;&lt;br /&gt;
   int       ID;&lt;br /&gt;
   char      shifter[6];&lt;br /&gt;
 };&lt;br /&gt;
Type for [[#var:Trajectories|Trajectories]]&lt;br /&gt;
&lt;br /&gt;
===TrajBuffer===&lt;br /&gt;
 struct TrajBuffer&lt;br /&gt;
 {&lt;br /&gt;
   [[#TrajPoint|TrajPoint]] &amp;lt;span id=&amp;quot;var:Trajectories&amp;quot;&amp;gt;Trajectories&amp;lt;/span&amp;gt;[0x1000];&lt;br /&gt;
   int       TrajIndex;          // Trajectory buffer current Index&lt;br /&gt;
   int       TrajHead;           // Trajectory buffer Fill point&lt;br /&gt;
   int       uSecStep;           // clock count for step signal&lt;br /&gt;
   int       uSecDir;            // clock count for pre-raising the direction bit;&lt;br /&gt;
   double    LastCommandPos[6];&lt;br /&gt;
   bool      Configured;&lt;br /&gt;
   bool      Busy;&lt;br /&gt;
   bool      Idle;&lt;br /&gt;
   bool      Emergency;&lt;br /&gt;
   bool      Jogging;&lt;br /&gt;
   bool      IncrementalJog;&lt;br /&gt;
   bool      Sync;&lt;br /&gt;
   bool      Port1On;&lt;br /&gt;
   bool      Port2On;&lt;br /&gt;
   bool      Tuning;&lt;br /&gt;
   bool      ReconfigHotKeys;&lt;br /&gt;
   short     Port1Address;&lt;br /&gt;
   short     Port2Address;&lt;br /&gt;
 &lt;br /&gt;
   [[#AxisInfo|AxisInfo]]  Axis[7];            // axis information&lt;br /&gt;
   [[#InputInfo|InputInfo]] &amp;lt;span id=&amp;quot;var:InSigs&amp;quot;&amp;gt;InSigs&amp;lt;/span&amp;gt;[nSigs];      // input signals&lt;br /&gt;
   [[#OutputInfo|OutputInfo]] &amp;lt;span id=&amp;quot;var:OutSigs&amp;quot;&amp;gt;OutSigs&amp;lt;/span&amp;gt;[nSigsOut]; // output signals&lt;br /&gt;
   [[#Encoder|Encoder]]   Encoders[7];        // encoder inputs&lt;br /&gt;
   int       LastCubics[6];&lt;br /&gt;
   // WatchDogs&lt;br /&gt;
   int       WDInt0;&lt;br /&gt;
   int       WDInt8;&lt;br /&gt;
   int       WD2Way;&lt;br /&gt;
   int       StartClocks;&lt;br /&gt;
   int       EndClocks;&lt;br /&gt;
   bool      ReadClocks;&lt;br /&gt;
   bool      Sampleing;          // Sampleing flag&lt;br /&gt;
   bool      CubicDrain;         // cubicDrain flag..sets cubics to zero;&lt;br /&gt;
   bool      EStop;&lt;br /&gt;
   // software limits&lt;br /&gt;
   int       XLimitPos,&lt;br /&gt;
             YLimitPos,&lt;br /&gt;
             ZLimitPos,&lt;br /&gt;
             ALimitPos,&lt;br /&gt;
             BLimitPos,&lt;br /&gt;
             CLimitPos;&lt;br /&gt;
   int       XLimitNeg,&lt;br /&gt;
             YLimitNeg,&lt;br /&gt;
             ZLimitNeg,&lt;br /&gt;
             ALimitNeg,&lt;br /&gt;
             BLimitNeg,&lt;br /&gt;
             CLimitNeg;&lt;br /&gt;
   int       StatHolders[6];&lt;br /&gt;
   int       StatLast[6];&lt;br /&gt;
   bool      StatBusy;&lt;br /&gt;
   int       StatCount;&lt;br /&gt;
   bool      SyncError;&lt;br /&gt;
   int       DwellTime;&lt;br /&gt;
   int       CurrentUnits;&lt;br /&gt;
   bool      Directions[7];&lt;br /&gt;
   bool      Safe;&lt;br /&gt;
 // G-Code vars&lt;br /&gt;
   int       State;&lt;br /&gt;
   bool      NoTime;&lt;br /&gt;
   int       DisplayLine;&lt;br /&gt;
   int       CurrentLineExec;&lt;br /&gt;
   bool      Loaded;&lt;br /&gt;
   int       SpindleCW;&lt;br /&gt;
   int       SpindleCCW;&lt;br /&gt;
   bool      Jpg;&lt;br /&gt;
   double    oSpinSeconds;&lt;br /&gt;
   bool      SpinDelayReq;&lt;br /&gt;
   int       Flood;&lt;br /&gt;
   int       Mist;&lt;br /&gt;
   bool      Hpgl;&lt;br /&gt;
   bool      NoSpindle;&lt;br /&gt;
   bool      NoFlood;&lt;br /&gt;
   bool      Pro;&lt;br /&gt;
   bool      Dxf;&lt;br /&gt;
   bool      Referenced[6];&lt;br /&gt;
   bool      HomeSpeed[6];&lt;br /&gt;
   unsigned long TargetTime;&lt;br /&gt;
   int       BackCounts[6];&lt;br /&gt;
   int       BackSpeeds[6];&lt;br /&gt;
   bool      BackState[6];&lt;br /&gt;
   bool      BackLast[6];&lt;br /&gt;
   bool      BackOn;&lt;br /&gt;
   bool      AutoZero[6];&lt;br /&gt;
   double    ToolChangePos[6];&lt;br /&gt;
   int       LastState;&lt;br /&gt;
   int       LookAhead;&lt;br /&gt;
   int       Year;&lt;br /&gt;
   int       LastExec;&lt;br /&gt;
   int       DROUpdate;&lt;br /&gt;
   bool      WatchDogOn;&lt;br /&gt;
   bool      LimitsOff;&lt;br /&gt;
   bool      Simulate;&lt;br /&gt;
   int       Month;&lt;br /&gt;
   int       KeyAction;&lt;br /&gt;
   bool      JoyOn;&lt;br /&gt;
   unsigned __int64 WaitCondition;&lt;br /&gt;
   int       EStopReason;&lt;br /&gt;
   bool      PWM;&lt;br /&gt;
   int       PWMFreq;&lt;br /&gt;
   int       Day;&lt;br /&gt;
   int       oCurrentPulley;     //remove this&lt;br /&gt;
   int       oldMaxSpeeds[4];    //and this..&lt;br /&gt;
   int       m_SetExec;&lt;br /&gt;
   bool      AutoHome;&lt;br /&gt;
   int       templookahead;&lt;br /&gt;
   bool      Homing;&lt;br /&gt;
   char      CircData[201];&lt;br /&gt;
   bool      CircLoaded;&lt;br /&gt;
   bool      DROMaster;&lt;br /&gt;
   int       SoftLimitsHi[6];&lt;br /&gt;
   int       SoftLimitsLo[6];&lt;br /&gt;
   bool      SoftDir[3];&lt;br /&gt;
   bool      SoftLimitEnable;&lt;br /&gt;
   bool      SoftLimitTriggered;&lt;br /&gt;
   bool      HotStart;&lt;br /&gt;
   bool      LCD;&lt;br /&gt;
   int       OverRide;&lt;br /&gt;
   bool      Follow;&lt;br /&gt;
   int       NewWindow;&lt;br /&gt;
   bool      Deselect;&lt;br /&gt;
   bool      DeSelectClick;&lt;br /&gt;
   bool      SelectClick;&lt;br /&gt;
   int       PWMBaseFrequency;&lt;br /&gt;
   int       PulseCount;&lt;br /&gt;
   int       THCCorrection;&lt;br /&gt;
   int       THCMaxCor;&lt;br /&gt;
   int       THCMinCor;&lt;br /&gt;
   bool      THCOn;&lt;br /&gt;
   int       THCAdder;&lt;br /&gt;
   bool      THCZero;&lt;br /&gt;
   int       PPS;&lt;br /&gt;
   int       RefCounts[6];&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   int       CurrentSpindleCount;&lt;br /&gt;
   int       IntsPerRotation;&lt;br /&gt;
   bool      SpinDec;&lt;br /&gt;
   bool      SpinAcc;&lt;br /&gt;
 &lt;br /&gt;
   long      WorstCase;&lt;br /&gt;
   int       VerifyChecks[6];&lt;br /&gt;
   int       Verifys[6];&lt;br /&gt;
 &lt;br /&gt;
   int       THCDev;&lt;br /&gt;
 &lt;br /&gt;
   int       Debounce;&lt;br /&gt;
 &lt;br /&gt;
   bool      WaitForTrigger;&lt;br /&gt;
   int       nTrigger;&lt;br /&gt;
   int       PumpTime;&lt;br /&gt;
 &lt;br /&gt;
   int       MaxSpinCounts;&lt;br /&gt;
   bool      Threading;&lt;br /&gt;
   int       NormSpinCounts;&lt;br /&gt;
   int       SpinCorrection;&lt;br /&gt;
   int       SpinAdder;&lt;br /&gt;
   int       SpinDebounce;&lt;br /&gt;
 &lt;br /&gt;
   int       SPIDataPin;&lt;br /&gt;
   int       SPIClockPin;&lt;br /&gt;
   int       DataOutPort;&lt;br /&gt;
   int       DataOutByte;&lt;br /&gt;
   bool      DataOutDone;&lt;br /&gt;
   int       DataInPort;&lt;br /&gt;
   int       DataInByte;&lt;br /&gt;
   bool      DataInDone;&lt;br /&gt;
   bool      LaserTrigger;&lt;br /&gt;
   int       Counter;&lt;br /&gt;
   bool      SPIOn;&lt;br /&gt;
   int       SPIDataOut;&lt;br /&gt;
   int       SPIDataIn;&lt;br /&gt;
   bool      SPIDone;&lt;br /&gt;
   bool      SPIhidata;&lt;br /&gt;
 &lt;br /&gt;
   bool      OffLine;&lt;br /&gt;
   int       SpinStability;&lt;br /&gt;
   char      BitTest;&lt;br /&gt;
 &lt;br /&gt;
   int       CurRate;&lt;br /&gt;
   int       PlungeLimit;&lt;br /&gt;
   bool      NoPlunge;           //THC No plunge control&lt;br /&gt;
   bool      SpindleStable;&lt;br /&gt;
   short     nSlots;&lt;br /&gt;
   bool      LaserMode;&lt;br /&gt;
   bool      MaxNCMode;&lt;br /&gt;
   int       MaxNCLag;&lt;br /&gt;
   bool      SlowMode;&lt;br /&gt;
   bool      MaxNC10;&lt;br /&gt;
   bool      Port2Input;&lt;br /&gt;
   bool      ChargeAlwaysOn;&lt;br /&gt;
   bool      RaiseLower;&lt;br /&gt;
   unsigned int RawInputs;&lt;br /&gt;
   bool      HalfPulse;&lt;br /&gt;
   bool      Shuttle;&lt;br /&gt;
   int       ShuttleCurVel;      // Current Velocity&lt;br /&gt;
   int       ShuttleMaxVel;      // Current Max Velocity (jogging )&lt;br /&gt;
   int       ShuttleAccel;&lt;br /&gt;
   int       LaserX;&lt;br /&gt;
   int       LaserY;&lt;br /&gt;
   int       LaserZ;&lt;br /&gt;
   int       LaserXOff;&lt;br /&gt;
   int       LaserYOff;&lt;br /&gt;
   int       LaserZOff;&lt;br /&gt;
   bool      HoldInput1;&lt;br /&gt;
   int       Pierce;&lt;br /&gt;
   bool      StopForBacklash;&lt;br /&gt;
   int       GlobalCurHoldVel;&lt;br /&gt;
   int       GlobalTargetVel;&lt;br /&gt;
   bool      BackLashHolding;&lt;br /&gt;
   bool      backlash;&lt;br /&gt;
   bool      BacklashEnded;&lt;br /&gt;
   bool      TriggerBits;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===TimeData===&lt;br /&gt;
 struct TimeData&lt;br /&gt;
 {&lt;br /&gt;
   int       Time[32000];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==End of header file==&lt;br /&gt;
 #endif&lt;/div&gt;</description>
			<pubDate>Mon, 08 Dec 2008 11:06:13 GMT</pubDate>			<dc:creator>Steffen</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Engine.h</comments>		</item>
		<item>
			<title>TrajectoryControl.h</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=TrajectoryControl.h</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Head==&lt;br /&gt;
 #if !defined(AFX_TRAJECTORYCONTROL_H__C8CBC326_3A49_4703_B02E_13CBC7C2848C__INCLUDED_)&lt;br /&gt;
 #define AFX_TRAJECTORYCONTROL_H__C8CBC326_3A49_4703_B02E_13CBC7C2848C__INCLUDED_&lt;br /&gt;
 &lt;br /&gt;
 #if _MSC_VER &amp;gt; 1000&lt;br /&gt;
 #pragma once&lt;br /&gt;
 #endif // _MSC_VER &amp;gt; 1000&lt;br /&gt;
 // TrajectoryControl.h : header file&lt;br /&gt;
 //&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // TrajectoryControl window&lt;br /&gt;
&lt;br /&gt;
==Includes==&lt;br /&gt;
 #include &amp;quot;engine.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;memmap.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;activdbg.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;spindlefm.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;toolcabinet.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;MPGControl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;formelParser.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;screwmapcurve.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;scewmap.H&amp;quot;&lt;br /&gt;
 #include &amp;quot;traj.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;Reprocessor.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;SerialRingThread.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;SerialRingThread.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;MyScriptObject.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;MySplitterWnd.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;GenUDPSocket.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;LEDConditions.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;DROValues.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;fixtureCabinet.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;afxtempl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;normals.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;Titletip.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;BrainHandler.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;brain.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
==external variables==&lt;br /&gt;
 extern CMySplitterWnd *Splitter;&lt;br /&gt;
&lt;br /&gt;
==defines==&lt;br /&gt;
 #define STRAIGHTFEED       1&lt;br /&gt;
 #define STRAIGHTTRAVERSE   2&lt;br /&gt;
 #define SETFEEDRATE        3&lt;br /&gt;
 #define ARCFEED            4&lt;br /&gt;
 #define SETTRAVERSERATE    5&lt;br /&gt;
 #define TRANSDWELL         6&lt;br /&gt;
 #define SPINDLECW          7&lt;br /&gt;
 #define SPINDLECCW         8&lt;br /&gt;
 #define SPINDLEOFF         9&lt;br /&gt;
 #define MOTIONMODE         10&lt;br /&gt;
 #define SETUNITS           11&lt;br /&gt;
 #define SETPLANE           12&lt;br /&gt;
 #define CHANGETOOL         13&lt;br /&gt;
 #define FLOODOFF           114&lt;br /&gt;
 #define FLOODON            115&lt;br /&gt;
 #define MISTON             116&lt;br /&gt;
 #define MISTOFF            117&lt;br /&gt;
 #define SPINDLESPEED       118&lt;br /&gt;
 #define PRESLINE           119&lt;br /&gt;
 #define HOLDLINENUMBER     120&lt;br /&gt;
 #define OVERRIDE           121&lt;br /&gt;
 #define REFAXISON          122&lt;br /&gt;
 #define RADCIRCW           123&lt;br /&gt;
 #define RADCIRCCW          124&lt;br /&gt;
 #define STRAIGHTHREAD      125&lt;br /&gt;
 #define SETCSSON           126&lt;br /&gt;
 #define SETRPMON           127&lt;br /&gt;
 #define COMPTURNOFF        128&lt;br /&gt;
 #define COMPTURNON         129&lt;br /&gt;
 #define DOTHREAD           130&lt;br /&gt;
 #define PAUSECYCLEOFF      131&lt;br /&gt;
 #define GOTOSAFE           132&lt;br /&gt;
 &lt;br /&gt;
 //Plugin Notifications and defines..&lt;br /&gt;
 enum&lt;br /&gt;
 { EX_DDA, EX_VMS, EX_COMMAND, EX_SPINON, EX_SPINOFF, EX_SPINSPEED, EX_MOTORTUNED, EX_SETUP, EX_FEEDHOLD, EX_RUN, EX_ESTOP, EX_CONFIG&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 enum&lt;br /&gt;
 { SAFEMACHINE, SAFEWORK, SAFERISE };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define JOGCONT 0&lt;br /&gt;
 #define JOGINC  1&lt;br /&gt;
 #define JOGMPG  2&lt;br /&gt;
&lt;br /&gt;
==struct defs==&lt;br /&gt;
===Externals===&lt;br /&gt;
 struct Externals&lt;br /&gt;
 {&lt;br /&gt;
   int       Line;&lt;br /&gt;
   bool      Active;&lt;br /&gt;
   int       Signal;&lt;br /&gt;
   bool      State;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===Extreme===&lt;br /&gt;
 struct Extreme&lt;br /&gt;
 {&lt;br /&gt;
   double    px,&lt;br /&gt;
             py,&lt;br /&gt;
             pz;&lt;br /&gt;
   double    mx,&lt;br /&gt;
             my,&lt;br /&gt;
             mz;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===ModCfg===&lt;br /&gt;
 struct ModCfg&lt;br /&gt;
 {&lt;br /&gt;
   short     Data[128];&lt;br /&gt;
   char      Comment[80];&lt;br /&gt;
   bool      Enabled;&lt;br /&gt;
   int       ModAdd;             //modbus address&lt;br /&gt;
   int       nReg;&lt;br /&gt;
   int       Input;&lt;br /&gt;
   int       Port;&lt;br /&gt;
   int       Slave;&lt;br /&gt;
   int       Refresh;&lt;br /&gt;
   int       timref;&lt;br /&gt;
   int       status;&lt;br /&gt;
   char      msgstatus[40];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===ModCon===&lt;br /&gt;
 struct ModCon&lt;br /&gt;
 {&lt;br /&gt;
   [[#ModCfg|ModCfg]]    cgf[65];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===TCPModCFG===&lt;br /&gt;
 struct TCPModCfg&lt;br /&gt;
 {&lt;br /&gt;
   short     Data[128];&lt;br /&gt;
   char      Comment[80];&lt;br /&gt;
   bool      Enabled;&lt;br /&gt;
   int       ModAdd;             //modbus address&lt;br /&gt;
   int       nReg;&lt;br /&gt;
   int       Input;&lt;br /&gt;
   int       Port;&lt;br /&gt;
   int       Slave;&lt;br /&gt;
   int       Refresh;&lt;br /&gt;
   int       timref;&lt;br /&gt;
   int       status;&lt;br /&gt;
   char      msgstatus[40];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===TCPModCon===&lt;br /&gt;
 struct TCPModCon&lt;br /&gt;
 {&lt;br /&gt;
   [[#TCPModCFG|TCPModCFG]] cgf[65];&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
===GMoves===&lt;br /&gt;
 struct GMoves&lt;br /&gt;
 {&lt;br /&gt;
   int       type;               // 0 is linear, 1 is cubic&lt;br /&gt;
   double    cx,&lt;br /&gt;
             cy,&lt;br /&gt;
             cz;                 // center of move for cubics. &lt;br /&gt;
   double    ex,&lt;br /&gt;
             ey,&lt;br /&gt;
             ez,&lt;br /&gt;
             ea,&lt;br /&gt;
             eb,&lt;br /&gt;
             ec;&lt;br /&gt;
   double    sx,&lt;br /&gt;
             sy,&lt;br /&gt;
             sz,&lt;br /&gt;
             sa,&lt;br /&gt;
             sb,&lt;br /&gt;
             sc;&lt;br /&gt;
   __int64   DDA1[6];            //DDA1's for cubics&lt;br /&gt;
   __int64   DDA2[6];&lt;br /&gt;
   __int64   DDA3[6];&lt;br /&gt;
   double    Time;&lt;br /&gt;
   bool      Stop;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===GMoves1===&lt;br /&gt;
 struct GMoves1&lt;br /&gt;
 {&lt;br /&gt;
   double    diffs[6];&lt;br /&gt;
   double    velocity;&lt;br /&gt;
   double    accel;&lt;br /&gt;
   double    sweep;&lt;br /&gt;
   double    radius;&lt;br /&gt;
   short     nx,&lt;br /&gt;
             ny,&lt;br /&gt;
             nz;&lt;br /&gt;
   short     line;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
 struct Commands&lt;br /&gt;
 {&lt;br /&gt;
   int       Command[0x400];&lt;br /&gt;
   int       LineID[0x400];&lt;br /&gt;
   double    params[0x400];&lt;br /&gt;
   int       nCommand;&lt;br /&gt;
   int       tail;&lt;br /&gt;
   int       head;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===ModBusRedir===&lt;br /&gt;
 struct ModBusRedir&lt;br /&gt;
 {&lt;br /&gt;
   bool      SpindleOn;&lt;br /&gt;
   int       SpindleSpeedReg;&lt;br /&gt;
   double    SpindleCal;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===Executions===&lt;br /&gt;
 struct Executions&lt;br /&gt;
 {&lt;br /&gt;
   bool      line;&lt;br /&gt;
   EmcPose   end;&lt;br /&gt;
   PmCartesian center,&lt;br /&gt;
             normal;&lt;br /&gt;
   double    rotation;&lt;br /&gt;
   double    Arotation;&lt;br /&gt;
   int       linenumber;&lt;br /&gt;
   bool      rapid;&lt;br /&gt;
   double    toolz;&lt;br /&gt;
   double    toolx;&lt;br /&gt;
   double    Feedrate;&lt;br /&gt;
   short     toolnumber;&lt;br /&gt;
   bool      Abs;&lt;br /&gt;
   double    comp;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===ProgData===&lt;br /&gt;
 struct ProgData&lt;br /&gt;
 {&lt;br /&gt;
   int       UnitType;&lt;br /&gt;
   double    MaxX,&lt;br /&gt;
             MaxY,&lt;br /&gt;
             MaxZ,&lt;br /&gt;
             MaxA,&lt;br /&gt;
             MaxB,&lt;br /&gt;
             MaxC;&lt;br /&gt;
   double    MinX,&lt;br /&gt;
             MinY,&lt;br /&gt;
             MinZ,&lt;br /&gt;
             MinA,&lt;br /&gt;
             MinB,&lt;br /&gt;
             MinC;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===NextLine===&lt;br /&gt;
 struct NextLine&lt;br /&gt;
 {&lt;br /&gt;
   CString   Block;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===AddStruct===&lt;br /&gt;
 struct AddStruct&lt;br /&gt;
 {&lt;br /&gt;
   CString   path,&lt;br /&gt;
             name;&lt;br /&gt;
   bool      present;&lt;br /&gt;
   CString   setname;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===Subs===&lt;br /&gt;
 struct Subs&lt;br /&gt;
 {&lt;br /&gt;
   int       name;&lt;br /&gt;
   int       line;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
===ComBuf===&lt;br /&gt;
 struct ComBuf&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   int       nCommands;&lt;br /&gt;
   int       Commands[10000];&lt;br /&gt;
   double    Params[40000];&lt;br /&gt;
   int       nParams;&lt;br /&gt;
   int       LastParam;&lt;br /&gt;
   int       LastCommand;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===AxisDDA===&lt;br /&gt;
 struct AxisDDA&lt;br /&gt;
 {&lt;br /&gt;
   double    points[64];         //64 control points to work with, in the end, only the first 4 will be filled.. &lt;br /&gt;
   double    fDDA[3];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===CommandBuffer===&lt;br /&gt;
 struct CommandBuffer&lt;br /&gt;
 {&lt;br /&gt;
   CString   Commands[0x1000];&lt;br /&gt;
   short     Lines[0x1000];&lt;br /&gt;
   short     head,&lt;br /&gt;
             tail;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===GeckoBuf===&lt;br /&gt;
 struct GeckoBuf&lt;br /&gt;
 {&lt;br /&gt;
   double    XPos;&lt;br /&gt;
   double    YPos;&lt;br /&gt;
   double    ZPos;&lt;br /&gt;
   double    APos;&lt;br /&gt;
   double    BPos;&lt;br /&gt;
   double    CPos;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===PPoint===&lt;br /&gt;
 struct PPoint&lt;br /&gt;
 {&lt;br /&gt;
   double    x,&lt;br /&gt;
             y,&lt;br /&gt;
             z,&lt;br /&gt;
             a,&lt;br /&gt;
             b,&lt;br /&gt;
             c;&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
===ProgramState===&lt;br /&gt;
 struct ProgramState&lt;br /&gt;
 {&lt;br /&gt;
   CString   Filename;&lt;br /&gt;
   int       ExecutionLine;&lt;br /&gt;
   bool      IsFile;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;PathProgress.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;Mach1Button.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
===TrajectoryControl===&lt;br /&gt;
 class     TrajectoryControl:public CWnd&lt;br /&gt;
 {&lt;br /&gt;
 // Construction // Put all variables in this block to keep them synced to the main engine..&lt;br /&gt;
 public:&lt;br /&gt;
   Traj trajectory;&lt;br /&gt;
   short     HomannSlave;&lt;br /&gt;
   _int64    GeckoPos[6];&lt;br /&gt;
   bool      TPersist;&lt;br /&gt;
   bool      m_RevArc;&lt;br /&gt;
   Traj      Tooltraj;&lt;br /&gt;
   double    RexRateDRO,&lt;br /&gt;
             RexRateTemp;&lt;br /&gt;
   bool      RexRateTrigger;&lt;br /&gt;
   int       PosChange[6];&lt;br /&gt;
   double    FrontToRear;&lt;br /&gt;
   double    LastPositions[6];&lt;br /&gt;
   double    FrontXOffS;&lt;br /&gt;
   double    FrontXOffE;&lt;br /&gt;
   double    ThreadParm[6];&lt;br /&gt;
   bool      RapidOverRide;&lt;br /&gt;
   double    RapidFeedrate;&lt;br /&gt;
   double    nextradius;&lt;br /&gt;
   int       nextside;&lt;br /&gt;
   bool      RegenNeeded;&lt;br /&gt;
   bool      DROBack;&lt;br /&gt;
   int       nextindex;&lt;br /&gt;
   [[#ProgData|ProgData]]  rundata;&lt;br /&gt;
   CString   DROFont,&lt;br /&gt;
             CodeFont,&lt;br /&gt;
             LabelFont;&lt;br /&gt;
   bool      JOGPINS[8];&lt;br /&gt;
   CString   SlabIP;&lt;br /&gt;
   double    DiffX,&lt;br /&gt;
             DiffY,&lt;br /&gt;
             DiffZ;              //offset differentials..&lt;br /&gt;
   double    DiffA,&lt;br /&gt;
             DiffB,&lt;br /&gt;
             DiffC;&lt;br /&gt;
   [[#CommandBuffer|CommandBuffer]] BCommands;&lt;br /&gt;
   bool      m_HWSafe;&lt;br /&gt;
   int       M3;&lt;br /&gt;
   //laser variables.&lt;br /&gt;
   bool      HotKeysPersist;&lt;br /&gt;
   int       m_LookAhead;&lt;br /&gt;
   bool      WatchHold;&lt;br /&gt;
   int       LaserPort;&lt;br /&gt;
   int       Serial;&lt;br /&gt;
   int       m_ServoSerial;&lt;br /&gt;
   int       LaserBaud;&lt;br /&gt;
   int       LaserStops;&lt;br /&gt;
   int       LaserData;&lt;br /&gt;
   int       Timers[25];&lt;br /&gt;
   CString   LaserInit;&lt;br /&gt;
   CString   LaserCommand;&lt;br /&gt;
   // end of laser vars&lt;br /&gt;
   bool      IsPanel;&lt;br /&gt;
   double    MPGFeed;&lt;br /&gt;
   double    TempFeed;&lt;br /&gt;
   bool      PlasmaHome;&lt;br /&gt;
   bool      m_UDP;&lt;br /&gt;
   CString   NextSub;&lt;br /&gt;
   [[#ProgramState|ProgramState]] returns[1000];&lt;br /&gt;
   ToolCabinet Tools;&lt;br /&gt;
   double    RefCounts[6];&lt;br /&gt;
   double    m_Seconds;&lt;br /&gt;
   double    MinPerPass;&lt;br /&gt;
   bool      InCycle;&lt;br /&gt;
   bool      HommanHolding;&lt;br /&gt;
   bool      OverRideMode2;&lt;br /&gt;
   int       PanelOut;&lt;br /&gt;
   CTime     SinceOn;&lt;br /&gt;
   bool      m_PathBoxed;&lt;br /&gt;
   bool      m_Plane;&lt;br /&gt;
   double    AxisDist[6];&lt;br /&gt;
   [[#Executions|Executions]] BackBuffer;&lt;br /&gt;
   int       BackHead,&lt;br /&gt;
             BackTail;&lt;br /&gt;
   double    FeedRate;           //feedrate velocity;&lt;br /&gt;
   [[#ModBusRedir|ModBusRedir]] ModCouple;&lt;br /&gt;
   bool      ChangeScreens;&lt;br /&gt;
   int       Units;&lt;br /&gt;
   double    FeedInc;&lt;br /&gt;
   double    ToolPostOffset;&lt;br /&gt;
   double    StepsPerAxis[6];&lt;br /&gt;
   double    Velocities[6];&lt;br /&gt;
   double    Acceleration[6];&lt;br /&gt;
   double    Corrections[6];&lt;br /&gt;
   [[#GeckoBuf|GeckoBuf]]  GeckoBuffer[4096];&lt;br /&gt;
   [[#Commands|Commands]]  CommandBuffer;&lt;br /&gt;
   int       history[6];&lt;br /&gt;
   int       load;&lt;br /&gt;
   bool      m_ZInhPersist;&lt;br /&gt;
   bool      TangentalControl;&lt;br /&gt;
   bool      AutoScreens;&lt;br /&gt;
   bool      skiptan;&lt;br /&gt;
   double    LiftAngle;&lt;br /&gt;
   double    LiftLevel;&lt;br /&gt;
   bool      m_OVPersist;&lt;br /&gt;
   bool      m_AutoSpindle;&lt;br /&gt;
   bool      ToolFlip;&lt;br /&gt;
   CMemMapFile GCodeFile;&lt;br /&gt;
   CMemMapFile DisplayComs;&lt;br /&gt;
   CFile     BackBufferFile;&lt;br /&gt;
   bool      BufferFileOpen;&lt;br /&gt;
   bool      m_Loaded;&lt;br /&gt;
   LPVOID    GCodeData;&lt;br /&gt;
   int      *GLines;&lt;br /&gt;
   int       Lines;&lt;br /&gt;
   CString   m_FileName;&lt;br /&gt;
   int       TermMode;&lt;br /&gt;
   bool      configured;&lt;br /&gt;
   bool      pathconfig;&lt;br /&gt;
   double    OrigSpindleSpeed;&lt;br /&gt;
   bool      m_Flash;&lt;br /&gt;
   bool      g_ZInhibit;&lt;br /&gt;
   double    g_ZInhDepth;&lt;br /&gt;
   bool      m_ToolChange;&lt;br /&gt;
   double    m_SafeZ,&lt;br /&gt;
             m_SafeZO;&lt;br /&gt;
   bool      m_ToolIgnore;&lt;br /&gt;
   int       SetupUnits;&lt;br /&gt;
   double    nStepsStore[6];&lt;br /&gt;
   double    VelStore[6];&lt;br /&gt;
   double    AccStore[6];&lt;br /&gt;
   int       unitscommand;&lt;br /&gt;
   double    OffsetLength;&lt;br /&gt;
   int       Tool;&lt;br /&gt;
   double    NextFeed;&lt;br /&gt;
   bool      FeedTrigger;&lt;br /&gt;
   bool      OriginTrigger;&lt;br /&gt;
   bool      MacroTrigger;&lt;br /&gt;
   bool      DwellTrigger;&lt;br /&gt;
   bool      ProbeTrigger;&lt;br /&gt;
   double    m_ByPassFeed;&lt;br /&gt;
   bool      ByPassFeedOn;&lt;br /&gt;
   int       DwellAmount;&lt;br /&gt;
   int       macro;&lt;br /&gt;
   double    VelLimit;&lt;br /&gt;
   bool      AAng,&lt;br /&gt;
             BAng,&lt;br /&gt;
             CAng;&lt;br /&gt;
   double    rpm;&lt;br /&gt;
   bool      Simulating;&lt;br /&gt;
   bool      ArcTest;&lt;br /&gt;
   int       FeedID,&lt;br /&gt;
             OriginID,&lt;br /&gt;
             ToolID,&lt;br /&gt;
             UnitID,&lt;br /&gt;
             LengthID,&lt;br /&gt;
             DwellID,&lt;br /&gt;
             SpinID,&lt;br /&gt;
             MacroID,&lt;br /&gt;
             ProbeID;&lt;br /&gt;
   int       SpinVelPerRPM;&lt;br /&gt;
   int       SpinAcc;&lt;br /&gt;
   int       lines;              // current translation line while loading&lt;br /&gt;
   [[#Subs|Subs]]      oSubroutines[100];  //unused padding..&lt;br /&gt;
   int       nSubs;&lt;br /&gt;
   int       nReturns;&lt;br /&gt;
   double    THCSpeed;&lt;br /&gt;
   double    THCCurrent;&lt;br /&gt;
   double    THCMax;&lt;br /&gt;
   double    THCMin;&lt;br /&gt;
   double    PlungePercent;&lt;br /&gt;
   bool      PWMLaser;&lt;br /&gt;
   int       full_circle_in_active_plane;&lt;br /&gt;
   double    radius;&lt;br /&gt;
   bool      ModBusOn;&lt;br /&gt;
   bool      OverRide;&lt;br /&gt;
   bool      m_MacroPump;&lt;br /&gt;
   double    Estimate;&lt;br /&gt;
   bool      SimDone;&lt;br /&gt;
   double    simx,&lt;br /&gt;
             simy,&lt;br /&gt;
             simz,&lt;br /&gt;
             sima,&lt;br /&gt;
             simb,&lt;br /&gt;
             simc;&lt;br /&gt;
   double    MacroP1,&lt;br /&gt;
             MacroP2,&lt;br /&gt;
             MacroP3;&lt;br /&gt;
   int       RefSpeed[6];&lt;br /&gt;
   int       Vels[6],&lt;br /&gt;
             Accs[6];&lt;br /&gt;
   bool      AxisNegs[6];&lt;br /&gt;
   int       References[6];&lt;br /&gt;
   double    Returns[6];&lt;br /&gt;
   bool      SingleVerify;&lt;br /&gt;
   int       SingleAxis;&lt;br /&gt;
   int       tempExec;&lt;br /&gt;
   bool      Silence;&lt;br /&gt;
   bool      Stage2Trigger,&lt;br /&gt;
             Stage3Trigger;&lt;br /&gt;
   bool      LastAutoZero[6];&lt;br /&gt;
   int       ProbeAction;&lt;br /&gt;
   double    ProbeGoto;&lt;br /&gt;
   double    ProbeX,&lt;br /&gt;
             ProbeY,&lt;br /&gt;
             ProbeZ,&lt;br /&gt;
             ProbeA,&lt;br /&gt;
             ProbeB,&lt;br /&gt;
             ProbeC;&lt;br /&gt;
   bool      DigFileOpen;&lt;br /&gt;
   CStdioFile digfile;&lt;br /&gt;
   double    RadiusA,&lt;br /&gt;
             RadiusB,&lt;br /&gt;
             RadiusC;            // distance per 1 degree of angular movement&lt;br /&gt;
   double    m_Increment;&lt;br /&gt;
   int       AxisKeys[12];&lt;br /&gt;
   int       m_DROCode;          //hot key for DRO selection;&lt;br /&gt;
   int       m_MDICode;          //hot key for MDI selection;&lt;br /&gt;
   int       m_GCode;            // hotkey for GCODE selection&lt;br /&gt;
   int       m_ListKey;          // hotkey for GCode display&lt;br /&gt;
   bool      m_ExcludeZ;&lt;br /&gt;
   bool      m_JoyOn;&lt;br /&gt;
   bool      m_Linear;&lt;br /&gt;
   bool      MDIMove;&lt;br /&gt;
   double    m_IncFeed;&lt;br /&gt;
   int       Platform;&lt;br /&gt;
   bool      Homeing;&lt;br /&gt;
   bool      Jogging;&lt;br /&gt;
   bool      CustomIncremental;&lt;br /&gt;
   bool      SoftLimitHold;&lt;br /&gt;
   [[#ComBuf|ComBuf]]    CannonBuffer;&lt;br /&gt;
   bool      m_Virtual;&lt;br /&gt;
   CString   LastError;&lt;br /&gt;
   int       Line;&lt;br /&gt;
   int       name,&lt;br /&gt;
             repeat;             //for subroutines.&lt;br /&gt;
   bool      FileFinished;&lt;br /&gt;
   int       LastPress;&lt;br /&gt;
   double    OVMaxVel;&lt;br /&gt;
   int       PausedFrom;&lt;br /&gt;
   bool      Follow;&lt;br /&gt;
   int       EStopCause;&lt;br /&gt;
   bool      CommandWaiting;&lt;br /&gt;
   bool      m_DisplayMachineCoord;&lt;br /&gt;
   double    FeedOverRide;&lt;br /&gt;
   double    tFeedOverRide;&lt;br /&gt;
   double    JogSlideIncr;&lt;br /&gt;
   bool      ConstantVolume;&lt;br /&gt;
   bool      PathGenerate;&lt;br /&gt;
   int       toolpath;&lt;br /&gt;
   bool      PathLoaded;&lt;br /&gt;
   double    m_CPULoad;&lt;br /&gt;
   CString   LastFile;&lt;br /&gt;
   bool      Threading;&lt;br /&gt;
   double    CycleInts[10];&lt;br /&gt;
   bool      ErrorClear;&lt;br /&gt;
   bool      AutoRun;&lt;br /&gt;
   int       EncJogAxis;&lt;br /&gt;
   double    RatioTaper;&lt;br /&gt;
   bool      TaperMode;&lt;br /&gt;
   bool      DualMPG;&lt;br /&gt;
   int       EncJogAxis2;&lt;br /&gt;
   int       EncJogAxis3;&lt;br /&gt;
   int       LastEncJogCount;&lt;br /&gt;
   int       CurrentEncJogCount;&lt;br /&gt;
   int       LastEncJogCount2;&lt;br /&gt;
   int       CurrentEncJogCount2;&lt;br /&gt;
   bool      m_Z25D;&lt;br /&gt;
   bool      BlockDelete;&lt;br /&gt;
   bool      m_AutoTool;&lt;br /&gt;
   int       OldTool;&lt;br /&gt;
   bool      OnFeed;&lt;br /&gt;
   CFile    *ErrorFile;&lt;br /&gt;
   CArchive *Errors;&lt;br /&gt;
   double    OEMDROs[256];&lt;br /&gt;
   bool      OEMLeds[256];&lt;br /&gt;
   CString   Tickers[256];&lt;br /&gt;
   CString   UserLabels[256];&lt;br /&gt;
   bool      ErrorsOpen;&lt;br /&gt;
   int       ScriptsRunning;&lt;br /&gt;
   bool      TeachFileOpen;&lt;br /&gt;
   double    LaserMaxSpin;&lt;br /&gt;
   //CArchive *TeachFile;&lt;br /&gt;
   CStdioFile TeachFileFile;&lt;br /&gt;
   CString   TeachFileName;&lt;br /&gt;
   bool      SingleAxisVerify;&lt;br /&gt;
   int       nSingleAxisVerify;&lt;br /&gt;
   bool      MaxCLMode;&lt;br /&gt;
   bool      Regening;&lt;br /&gt;
   int       RegenLine;&lt;br /&gt;
   EmcPose   whereold;&lt;br /&gt;
   bool      Dig4Axis;&lt;br /&gt;
   int       SerialType;&lt;br /&gt;
   bool      RunAt;&lt;br /&gt;
   bool      DigLetter;&lt;br /&gt;
   bool      filestart;          //for the backbuffer initialization.&lt;br /&gt;
   bool      DelayedReset[6];&lt;br /&gt;
   int       ResetTimer;&lt;br /&gt;
   bool      OrigXDir;&lt;br /&gt;
   bool      FrontPost;&lt;br /&gt;
   int       m_OEMRegNum;&lt;br /&gt;
   bool      m_OEMRegOn;&lt;br /&gt;
   int       VelMode;&lt;br /&gt;
   double    VelPer1,&lt;br /&gt;
             VelPer2,&lt;br /&gt;
             VelPer3;&lt;br /&gt;
   double    m_RealVelocity[7];&lt;br /&gt;
   double    m_RealAccel[7];&lt;br /&gt;
   double    m_G20X;&lt;br /&gt;
   double    m_G20Y;&lt;br /&gt;
   double    m_G20Z;&lt;br /&gt;
   double    m_G20A;&lt;br /&gt;
   double    m_G20B;&lt;br /&gt;
   double    m_G20C;&lt;br /&gt;
   bool      m_Rot360;&lt;br /&gt;
 &lt;br /&gt;
   CString   ProgramDir;&lt;br /&gt;
   CString   ThisProfile;&lt;br /&gt;
 &lt;br /&gt;
   double    m_ToGo[6];&lt;br /&gt;
   bool      ToGo;&lt;br /&gt;
 &lt;br /&gt;
   LEDConditions LEDBool;&lt;br /&gt;
   DROValues DROS;&lt;br /&gt;
 &lt;br /&gt;
   GenSocket UDPIO;&lt;br /&gt;
 &lt;br /&gt;
   int       EncoderZeros[6];&lt;br /&gt;
 &lt;br /&gt;
   [[#AxisDDA|AxisDDA]]   AllDDA[6];&lt;br /&gt;
 &lt;br /&gt;
   bool      m_ShortRot;&lt;br /&gt;
   CString   m_Init;&lt;br /&gt;
   bool      m_InitAllResets;&lt;br /&gt;
   double    BackOffsetx,&lt;br /&gt;
             BackOffsety,&lt;br /&gt;
             BackOffsetz,&lt;br /&gt;
             BackOffseta,&lt;br /&gt;
             BackOffsetb,&lt;br /&gt;
             BackOffsetc;&lt;br /&gt;
   double    BackToolZ,&lt;br /&gt;
             BackToolX;&lt;br /&gt;
   //////////////////////////////////&lt;br /&gt;
   //&lt;br /&gt;
   //   Values for DRO's&lt;br /&gt;
   /////////////////////////////&lt;br /&gt;
   double    XPosition;&lt;br /&gt;
   double    YPosition;&lt;br /&gt;
   double    ZPosition;&lt;br /&gt;
   double    APosition;&lt;br /&gt;
   double    BPosition;&lt;br /&gt;
   double    CPosition;&lt;br /&gt;
   double    MXPosition,&lt;br /&gt;
             MYPosition,&lt;br /&gt;
             MZPosition;&lt;br /&gt;
   double    MAPosition,&lt;br /&gt;
             MBPosition,&lt;br /&gt;
             MCPosition;&lt;br /&gt;
 &lt;br /&gt;
   double    XVel,&lt;br /&gt;
             YVel,&lt;br /&gt;
             ZVel,&lt;br /&gt;
             AVel,&lt;br /&gt;
             BVel,&lt;br /&gt;
             CVel,&lt;br /&gt;
             BlendVel;&lt;br /&gt;
   double    JogFeedRate;&lt;br /&gt;
 &lt;br /&gt;
   double    Maxs[6];&lt;br /&gt;
   double    Mins[6];&lt;br /&gt;
 &lt;br /&gt;
   PmCartesian dummy;            // for addtobuffer&lt;br /&gt;
   double    feedtemp;&lt;br /&gt;
   bool      CancelPath;&lt;br /&gt;
   PathProgress *progress;&lt;br /&gt;
   bool      LastMoveRapid;&lt;br /&gt;
 &lt;br /&gt;
   double    RefPoints[6];&lt;br /&gt;
   int       OldState;&lt;br /&gt;
   bool      MillMode;&lt;br /&gt;
   double    MachPositions[6];   //machine coordinates of first three axis&lt;br /&gt;
 &lt;br /&gt;
   double    SlowPoints[6];&lt;br /&gt;
   double    m_SoftMaxs[6];&lt;br /&gt;
   double    m_SoftMins[6];&lt;br /&gt;
 &lt;br /&gt;
   double    SlowPointsO[6];&lt;br /&gt;
   double    m_SoftMaxsO[6];&lt;br /&gt;
   double    m_SoftMinsO[6];&lt;br /&gt;
 &lt;br /&gt;
   bool      ToolPathOn;&lt;br /&gt;
   double    LatheCorrection;&lt;br /&gt;
   double    Diameter;&lt;br /&gt;
   bool      RunInReverse;&lt;br /&gt;
 &lt;br /&gt;
   bool      m_DroLock;&lt;br /&gt;
 &lt;br /&gt;
   double    Throttle;&lt;br /&gt;
   int       ThrottleFunc;&lt;br /&gt;
 &lt;br /&gt;
   int       simcount;&lt;br /&gt;
 &lt;br /&gt;
   double    cpuSpeed;&lt;br /&gt;
   bool      CorrectionOn;&lt;br /&gt;
   bool      AutoLimitOverRide;&lt;br /&gt;
 &lt;br /&gt;
   bool      SetSkip;            // skip the softlimits setup on Ref All from G-Code&lt;br /&gt;
   int       refaxis;&lt;br /&gt;
 &lt;br /&gt;
   bool      SingleTriggerOn;&lt;br /&gt;
   bool      SingleActive4On;&lt;br /&gt;
 &lt;br /&gt;
   bool      ConditionRapid;&lt;br /&gt;
   bool      CurveLoaded;&lt;br /&gt;
 &lt;br /&gt;
   int       MaxFeedOverRide;&lt;br /&gt;
   double    thcmax;&lt;br /&gt;
   double    thcmin;&lt;br /&gt;
   bool      SpinActual;&lt;br /&gt;
 &lt;br /&gt;
   double    m_BB,&lt;br /&gt;
             m_BR,&lt;br /&gt;
             m_BG,&lt;br /&gt;
             m_RB,&lt;br /&gt;
             m_RG,&lt;br /&gt;
             m_RR,&lt;br /&gt;
             m_FB,&lt;br /&gt;
             m_FR,&lt;br /&gt;
             m_FG,&lt;br /&gt;
             m_AR,&lt;br /&gt;
             m_AB,&lt;br /&gt;
             m_AG,&lt;br /&gt;
             m_EG,&lt;br /&gt;
             m_EB,&lt;br /&gt;
             m_ER;&lt;br /&gt;
   int       BaudRate,&lt;br /&gt;
             ComPort;&lt;br /&gt;
   int       EntranceAngle;&lt;br /&gt;
   int       m_PWMin;&lt;br /&gt;
   double    RotError;&lt;br /&gt;
   int       SpinInc;&lt;br /&gt;
 &lt;br /&gt;
   bool      m_XMapOn,&lt;br /&gt;
             m_YMapOn,&lt;br /&gt;
             m_ZMapOn;&lt;br /&gt;
 &lt;br /&gt;
   double    LaserXGrid;&lt;br /&gt;
   double    LaserAGrid;&lt;br /&gt;
   double    LaserYGrid;&lt;br /&gt;
   int       LaserYOff;&lt;br /&gt;
   int       LaserXOff;&lt;br /&gt;
   int       LaserAOff;&lt;br /&gt;
 &lt;br /&gt;
   int       m_UseCR;&lt;br /&gt;
   CString   m_Char;&lt;br /&gt;
   bool      m_SLS;&lt;br /&gt;
   double    Repeats;&lt;br /&gt;
   double    ZInhibInc;&lt;br /&gt;
   double    SLSDist;&lt;br /&gt;
   int       LastMode;&lt;br /&gt;
 &lt;br /&gt;
   bool      MacroRunning;&lt;br /&gt;
 &lt;br /&gt;
   bool      DwellMilli;&lt;br /&gt;
   double    NextZLength,&lt;br /&gt;
             NextXLength;&lt;br /&gt;
   bool      OEMTriggers[15];&lt;br /&gt;
 &lt;br /&gt;
   Mach1Button OEMButton;&lt;br /&gt;
   short     OEMPins[15];&lt;br /&gt;
 &lt;br /&gt;
   bool      UseSwitches;&lt;br /&gt;
   double    PWMMaxSpeed;&lt;br /&gt;
 &lt;br /&gt;
   bool      DoRegen;&lt;br /&gt;
   bool      m_Homann;&lt;br /&gt;
 &lt;br /&gt;
   //Toolpath variables for display&lt;br /&gt;
   BOOL      m_OriginSphere;&lt;br /&gt;
   BOOL      m_3dCompass;&lt;br /&gt;
   CString   HomannString;&lt;br /&gt;
   short     HomannLoc;&lt;br /&gt;
   bool      m_BitPack1;&lt;br /&gt;
   int       m_BitPack1Reg;&lt;br /&gt;
   bool      m_BitPackOut1;&lt;br /&gt;
   int       m_BitPackOutReg1;&lt;br /&gt;
   BOOL      m_Boundries;&lt;br /&gt;
   BOOL      m_ToolPosition;&lt;br /&gt;
   BOOL      m_AParallel;&lt;br /&gt;
   double    m_AtoXOff;&lt;br /&gt;
   double    m_AtoYOff;&lt;br /&gt;
   double    m_AtoZOff;&lt;br /&gt;
   //Threading Variables for defaults...&lt;br /&gt;
   int       nAddons;&lt;br /&gt;
   [[#AddStruct|AddStruct]] AddonNames[200];&lt;br /&gt;
   int       AddonSelected;&lt;br /&gt;
   bool      LoadAddon;&lt;br /&gt;
   CString   Addon2Load;&lt;br /&gt;
   CString   Init2Load;&lt;br /&gt;
   bool      AddonReady;;&lt;br /&gt;
   bool      AddonLoaded;&lt;br /&gt;
   bool      AutoRegen;&lt;br /&gt;
   bool      SoundsOn;&lt;br /&gt;
   bool      VoiceOn;&lt;br /&gt;
   bool      SingleStepMode;&lt;br /&gt;
   bool      EditLoad;&lt;br /&gt;
   bool      JogActive;&lt;br /&gt;
   bool      m_Arots;&lt;br /&gt;
   [[#NextLine|NextLine]]  AfterPause;&lt;br /&gt;
   bool      HeldInReverse;&lt;br /&gt;
   bool      LastMovePartial;&lt;br /&gt;
 &lt;br /&gt;
 // Operations&lt;br /&gt;
 public:&lt;br /&gt;
             CString defaultscreen;&lt;br /&gt;
   bool      LoadScreen;&lt;br /&gt;
   int       ActiveGroup;&lt;br /&gt;
   int       LastActiveGroup;&lt;br /&gt;
   int       JogMode;&lt;br /&gt;
 &lt;br /&gt;
   bool      KeepRef;&lt;br /&gt;
   bool      Speech;&lt;br /&gt;
   bool      HelpContext;&lt;br /&gt;
   bool      LastSpeech;&lt;br /&gt;
   bool      MovingAverageDone;&lt;br /&gt;
   bool      MovingAverageOn;&lt;br /&gt;
 &lt;br /&gt;
   bool      JogPersist;&lt;br /&gt;
   bool      SaveWizard;&lt;br /&gt;
 &lt;br /&gt;
   double    StepsX,&lt;br /&gt;
             StepsY,&lt;br /&gt;
             StepsZ,&lt;br /&gt;
             StepsA,&lt;br /&gt;
             StepsB,&lt;br /&gt;
             StepsC;&lt;br /&gt;
 &lt;br /&gt;
   double    loadToolXOff;&lt;br /&gt;
   double    loadToolZOff;&lt;br /&gt;
   int       loadSlot;&lt;br /&gt;
   bool      ToolDirty,&lt;br /&gt;
             FixDirty;&lt;br /&gt;
   bool      PersistOffsets,&lt;br /&gt;
             OffsetsDialog;&lt;br /&gt;
   bool      G54Back;&lt;br /&gt;
   SpindleFM Spindle;&lt;br /&gt;
   MPGControl MPG;&lt;br /&gt;
   bool      JogVelocity;&lt;br /&gt;
   bool      LastVelJog;&lt;br /&gt;
   double    m_DepthLastPass;&lt;br /&gt;
   double    m_InFeed;&lt;br /&gt;
   double    m_Spring;&lt;br /&gt;
   double    m_MinDepth;&lt;br /&gt;
   double    m_XClear;&lt;br /&gt;
   double    m_ZClear;&lt;br /&gt;
   double    m_CutDepth;&lt;br /&gt;
   double    m_Chamfer;&lt;br /&gt;
   double    m_DepthFirstPass;&lt;br /&gt;
   int       ReversalLine;&lt;br /&gt;
   bool      MidLine;&lt;br /&gt;
   bool      UnReversed;&lt;br /&gt;
   bool      SkipProgress;&lt;br /&gt;
   double    StockSize;&lt;br /&gt;
   bool      ShowSolid;&lt;br /&gt;
   double    LastLineFeed,&lt;br /&gt;
             LastArcFeed;&lt;br /&gt;
 &lt;br /&gt;
   double    TurnMatR;&lt;br /&gt;
   double    TurnMatG;&lt;br /&gt;
   double    TurnMatB;&lt;br /&gt;
 &lt;br /&gt;
   ScrewMapCurve XCurve,&lt;br /&gt;
             YCurve,&lt;br /&gt;
             ZCurve;&lt;br /&gt;
   ScewMap  *screw;&lt;br /&gt;
   int       m_IncJogBuffer;&lt;br /&gt;
   bool      OEMDualTemp;&lt;br /&gt;
   bool      RunPlus;&lt;br /&gt;
   bool      RunMinus;           //these two are for runnign forward and back buttons.&lt;br /&gt;
   bool      LaserStandby;&lt;br /&gt;
   bool      ResetInit;&lt;br /&gt;
   bool      LastRunBackward;&lt;br /&gt;
   int       LastLineExec;&lt;br /&gt;
   EmcPose   SyncWhere;&lt;br /&gt;
   bool      FeedHolding;&lt;br /&gt;
   bool      NoPartial;&lt;br /&gt;
   bool      m_PlasmaMode;&lt;br /&gt;
   bool      m_UseSafeZ;&lt;br /&gt;
   bool      m_CompPlus;&lt;br /&gt;
   bool      EmergCalled;&lt;br /&gt;
   Reprocessor *Processsor;&lt;br /&gt;
   SerialRingThread *SerialRing;&lt;br /&gt;
   bool      ShuttleAutoOff;&lt;br /&gt;
   CString   LastMacroFile;&lt;br /&gt;
   CString   filetoload;&lt;br /&gt;
   bool      m_TurnReverse;&lt;br /&gt;
   Mach1Button *lastbutton;&lt;br /&gt;
   bool      MPG1,&lt;br /&gt;
             MPG2;&lt;br /&gt;
   bool      NoGConf;&lt;br /&gt;
   bool      TorchVoltageControl;&lt;br /&gt;
   int       TorchSpeed;&lt;br /&gt;
   [[#GMoves|GMoves]]    Movements[4096];&lt;br /&gt;
   double    EncoderPos[4];&lt;br /&gt;
   double    TouchZ,&lt;br /&gt;
             TouchX;&lt;br /&gt;
   bool      FirstRev;&lt;br /&gt;
   double    PierceDelay;&lt;br /&gt;
   bool      m_WarnOnReset;&lt;br /&gt;
   bool      HighRes;&lt;br /&gt;
   bool      m_ToolLines;&lt;br /&gt;
   ModCon    ModBusData;&lt;br /&gt;
   bool      m_ModPlug;&lt;br /&gt;
   double    MB_MPGTime;&lt;br /&gt;
   bool      UsingModMPGs,&lt;br /&gt;
             MBHaveReading;&lt;br /&gt;
   bool      Polled;&lt;br /&gt;
   short    *ModInputs;          //ModBus variable Inputs Short[128]&lt;br /&gt;
   short    *ModOutputs;         //ModBus varibale OutPuts[128] &lt;br /&gt;
   bool      ShutDown;&lt;br /&gt;
   bool      DebugRun;&lt;br /&gt;
   double    ExternalPulseRates[7];  //number 7 is for the spindle&lt;br /&gt;
   bool      ExternalStill;&lt;br /&gt;
   int       ELine;              //used in triggering External Device outputs in realtime;&lt;br /&gt;
   bool      PurgeMovements;     //Will cause MAch3 to purge all pending movement&lt;br /&gt;
   int       EHead;&lt;br /&gt;
   [[#Externals|Externals]] EXCtrls[16];&lt;br /&gt;
   bool      ModBusCfg;&lt;br /&gt;
   unsigned __int64 SoftWait;&lt;br /&gt;
   bool      DoExternalProbe;&lt;br /&gt;
   int       ExternHomedMask;&lt;br /&gt;
   bool      MovementDone;&lt;br /&gt;
   double    SpindlePer;&lt;br /&gt;
   bool      HasRot;&lt;br /&gt;
   bool      m_UseDiam;&lt;br /&gt;
   bool      Sequence;&lt;br /&gt;
 //Probe Radius&lt;br /&gt;
   double    ProbeRad;&lt;br /&gt;
   PmSpherical ProbeAngles;&lt;br /&gt;
   PmCartesian ProbeVec;&lt;br /&gt;
 &lt;br /&gt;
 //safeZ correction&lt;br /&gt;
   int       m_SafeZType;&lt;br /&gt;
   bool      m_SafeZStop;&lt;br /&gt;
 &lt;br /&gt;
   int       m_UnusedBufferFill;&lt;br /&gt;
   bool      FlashSizing;&lt;br /&gt;
   short     ExternalType;&lt;br /&gt;
   [[#GMoves1|GMoves1]]   MovementsAdd[4096];&lt;br /&gt;
   bool      BufferEnding;&lt;br /&gt;
   double    ExTime;&lt;br /&gt;
   int       ExBufferHi;&lt;br /&gt;
   bool      SkipShutdown;&lt;br /&gt;
   CString   MDIEntry;&lt;br /&gt;
   bool      m_MenuOff;&lt;br /&gt;
   bool      m_IgnoreM3;&lt;br /&gt;
   bool      m_MutiHome;&lt;br /&gt;
   int       m_HomeMask;&lt;br /&gt;
   int       PartialModes[255];&lt;br /&gt;
   bool      SkipFeed;&lt;br /&gt;
   double    aProbeX,&lt;br /&gt;
             aProbeY,&lt;br /&gt;
             aProbeZ,&lt;br /&gt;
             aProbeA,&lt;br /&gt;
             aProbeB,&lt;br /&gt;
             aProbeC;&lt;br /&gt;
   double    PausedFeed;&lt;br /&gt;
   bool      TrajDone;&lt;br /&gt;
   bool      ExecNow;&lt;br /&gt;
   HANDLE    thandle;&lt;br /&gt;
   Subs      nSubroutines[1000];&lt;br /&gt;
   CString   ExternalMacro;&lt;br /&gt;
   CString   lCOSYS,&lt;br /&gt;
             lTOOLDESC,&lt;br /&gt;
             lUNITREVMIN,&lt;br /&gt;
             lRADDIA,&lt;br /&gt;
             lINMM,&lt;br /&gt;
             lMODE,&lt;br /&gt;
             lPROFILE,&lt;br /&gt;
             lFILE;&lt;br /&gt;
   bool      VBTest;&lt;br /&gt;
   bool      FileLoadOK;&lt;br /&gt;
   bool      FileSimOK;&lt;br /&gt;
   bool      m_ExternalFeedHold;&lt;br /&gt;
   int       m_Ex_Loop3Time;&lt;br /&gt;
 &lt;br /&gt;
   short     MasterInputs[1024];&lt;br /&gt;
   short     MasterOutputs[1024];&lt;br /&gt;
   short     UserInputs[1024];&lt;br /&gt;
   short     UserOutputs[1024];&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   bool      m_ExternalPaused;&lt;br /&gt;
   bool      m_SpindleOn;&lt;br /&gt;
Spindle is running&lt;br /&gt;
   short     ex_purgeflags;&lt;br /&gt;
   bool      G100TripSection;&lt;br /&gt;
   bool      ReDraw;&lt;br /&gt;
   int       SpinDir;&lt;br /&gt;
Spindle direction: 1: CW, -1: CCW   &lt;br /&gt;
   double    RXPosition,&lt;br /&gt;
             RYPosition;&lt;br /&gt;
   bool      InternalJogProbe;&lt;br /&gt;
   double    flashsec;&lt;br /&gt;
   bool      ExternalFRO;&lt;br /&gt;
 &lt;br /&gt;
   bool      SecondPass;&lt;br /&gt;
   bool      ComBufferOpen;&lt;br /&gt;
   int       CompHead,&lt;br /&gt;
             CompTail;&lt;br /&gt;
   [[#TCPModCon|TCPModCon]] TCPModBusData;&lt;br /&gt;
   CString   m_FileOnly;&lt;br /&gt;
             CArray &amp;lt; Brain *, Brain * &amp;gt;*TheBrains;&lt;br /&gt;
   int       m_nBrains;&lt;br /&gt;
   double    OEMDROs2[1000];&lt;br /&gt;
   bool      OEMLeds2[1000];&lt;br /&gt;
   bool      m_UsingTCPIO;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   ///////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // No plugin Variables below this point..&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // Overrides&lt;br /&gt;
   // ClassWizard generated virtual function overrides&lt;br /&gt;
   //{{AFX_VIRTUAL(TrajectoryControl)&lt;br /&gt;
   //}}AFX_VIRTUAL&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   FixtureCabinet Fix;&lt;br /&gt;
 &lt;br /&gt;
 // Implementation&lt;br /&gt;
 public:&lt;br /&gt;
             CArray &amp;lt; [[#PPoint|PPoint]] *, [[#PPoint|PPoint]] * &amp;gt;ProbePoints;&lt;br /&gt;
             CArray &amp;lt; [[#PPoint|PPoint]] *, [[#PPoint|PPoint]] * &amp;gt;MissPoints;&lt;br /&gt;
   [[#Extreme|Extreme]]   ProbeEx;&lt;br /&gt;
   Normals   NormCond;&lt;br /&gt;
   bool      IncrementCorrect;&lt;br /&gt;
   EmcPose   TrueCenter;&lt;br /&gt;
   bool      ForwardCheck;&lt;br /&gt;
   double    AbsMaxs[6];&lt;br /&gt;
   double    AbsMins[6];&lt;br /&gt;
   int       Updates;&lt;br /&gt;
   CString   ButtonFont;&lt;br /&gt;
   bool      m_AbsInc;&lt;br /&gt;
   bool      m_SpinOff;&lt;br /&gt;
   int       m_SpinInc;&lt;br /&gt;
   bool      m_UseCVAngle;&lt;br /&gt;
   double    m_CVAngleDeg;&lt;br /&gt;
   int       precompmove;&lt;br /&gt;
   double    Fractions[6];&lt;br /&gt;
   bool      m_THC5;&lt;br /&gt;
   bool      KeyClick;&lt;br /&gt;
   double    OldFeeds[64];&lt;br /&gt;
   bool      donesafemove;&lt;br /&gt;
   bool      m_JogHeat;&lt;br /&gt;
   bool      DelayedJog;&lt;br /&gt;
   int       DelayedJogAxis;&lt;br /&gt;
   int       DelayedJogDir;&lt;br /&gt;
   bool      JogSpindleOn;&lt;br /&gt;
   CString   Authors[100];&lt;br /&gt;
   bool      THCEmulInOp;&lt;br /&gt;
   int       SpindleDelayedOn;&lt;br /&gt;
   bool      m_SlaveHome;&lt;br /&gt;
   double    LastFeedRate;&lt;br /&gt;
   bool      m_RotSoft;&lt;br /&gt;
   double    NormCycle;&lt;br /&gt;
   CMemMapFile CompComs;&lt;br /&gt;
   CFile     CompBufferFile;&lt;br /&gt;
   bool      SecondPassDone;&lt;br /&gt;
   bool      JustSave;&lt;br /&gt;
   bool      m_TCPModBus;&lt;br /&gt;
   bool      m_ZBar;&lt;br /&gt;
   BrainHandler BrainControl;&lt;br /&gt;
   double    BrainMs;&lt;br /&gt;
   CString   ModBusString;&lt;br /&gt;
   bool      ModStringHolding;&lt;br /&gt;
   int       ModStringAddress;&lt;br /&gt;
   int       ModStringcfg;&lt;br /&gt;
   bool      m_IgnoreMs;&lt;br /&gt;
   double    AxisOffs[6];&lt;br /&gt;
   int       ProbeStepsSec;&lt;br /&gt;
 &lt;br /&gt;
             TrajectoryControl ();&lt;br /&gt;
   int       GetProbeTrip (int ProbeGoto, int Accs, int MaxVelocity, int axis);&lt;br /&gt;
   void      ResetProbePoints ();&lt;br /&gt;
   void      AddProbePoint (double x, double y, double z, double a, double b, double c, bool hit);&lt;br /&gt;
   void      computeDDAs (double time = 64);&lt;br /&gt;
   int       BufferUsed ();&lt;br /&gt;
   void      DoGeckoLines (short num, int &amp;amp;orig);&lt;br /&gt;
   double    ShortRot (double angle, double lastangle);&lt;br /&gt;
   void      CompOff ();&lt;br /&gt;
   void      LoadFixtures ();&lt;br /&gt;
   void      JogInputHandler ();&lt;br /&gt;
   int       ConvertHex (CString hex);&lt;br /&gt;
   void      SetVelocityMode (bool state);&lt;br /&gt;
   void      TCReverse (TC_STRUCT * to, TC_STRUCT * from);&lt;br /&gt;
   void      CreatePartials (int revline);&lt;br /&gt;
   void      DoTorchRunReverse ();&lt;br /&gt;
   void      SetLastError (LPCSTR error);&lt;br /&gt;
   void      ScrewCal ();&lt;br /&gt;
   void      SaveLinearity ();&lt;br /&gt;
   int       GetNextPoint (int axis);&lt;br /&gt;
   int       SimCheckSoft (int, int);&lt;br /&gt;
   void      FakeDriver ();&lt;br /&gt;
   void      SetFormulas ();&lt;br /&gt;
   void      LoadLinearity ();&lt;br /&gt;
   void      WorkOffsetTo (short axis, double Value);&lt;br /&gt;
   void      ReversalSearch (int id);&lt;br /&gt;
   void      RunReverse ();&lt;br /&gt;
   bool      DoHelp (int OEMnumber);&lt;br /&gt;
   void      Speak (char *Text);&lt;br /&gt;
   void      ScreenToggle ();&lt;br /&gt;
   void      CalcTrigger ();&lt;br /&gt;
   bool      DoExtOuts (short n);&lt;br /&gt;
   double    WhereRel (int axis);&lt;br /&gt;
   void      SetEntranceAngle (int angle);&lt;br /&gt;
   void      Regen ();&lt;br /&gt;
   double    GetRandom ();&lt;br /&gt;
   void      CalcReverseLine (int nLine, CString &amp;amp; String);&lt;br /&gt;
   void      CalcForwardPartial (int nLine, CString &amp;amp; String);&lt;br /&gt;
   void      SetColors ();&lt;br /&gt;
   void      rs_exec (CString Block);&lt;br /&gt;
   void      AutoSaveProfile ();&lt;br /&gt;
   void      THCOff ();&lt;br /&gt;
   void      THCOn ();&lt;br /&gt;
   void      RadCircleCCW (double radius);&lt;br /&gt;
   void      RadCircleCW (double radius);&lt;br /&gt;
   void      SafeEnd ();&lt;br /&gt;
   void      Check4ExtSingle ();&lt;br /&gt;
   void      FillBitMap ();&lt;br /&gt;
   void      SetLimitOV (bool cond);&lt;br /&gt;
   double    GetFixtureAxis (int axis);&lt;br /&gt;
   void      SetFixtureAxis (int axis, double value);&lt;br /&gt;
 &lt;br /&gt;
   void      GoHome ();&lt;br /&gt;
   void      SetFixture (int fixture);&lt;br /&gt;
   void      FixtureOff ();&lt;br /&gt;
   void      SetSoftPoints ();&lt;br /&gt;
   void      SetRefPoint (int axis, double point);&lt;br /&gt;
   void      DROToEncoder (int nEncoder, int nDRO);&lt;br /&gt;
   void      EncoderToDRO (int nEncoder, int nDRO);&lt;br /&gt;
   void      CalTHC ();&lt;br /&gt;
   void      Fixtures ();&lt;br /&gt;
   void      ToolTable ();&lt;br /&gt;
   void      TouchTool ();&lt;br /&gt;
   void      SetTHCMax (double unitsmax, double unitsmin);&lt;br /&gt;
   void      SetTHCSpeed (double speed);&lt;br /&gt;
   void      ToggleSoftLimits ();&lt;br /&gt;
   void      AddToBuffer (bool line, EmcPose end, PmCartesian center, PmCartesian normal, int rot, bool rapid);&lt;br /&gt;
   void      EditFile ();&lt;br /&gt;
   void      CancelAllCommands ();&lt;br /&gt;
   void      SetEStopReason ();&lt;br /&gt;
   void      RunWaitingCommands ();&lt;br /&gt;
   void      SetJogInc (bool state);&lt;br /&gt;
   void      SwitchWindow (int Window);&lt;br /&gt;
   void      DROPositions ();&lt;br /&gt;
   void      WatchDogs ();&lt;br /&gt;
   void      Reset ();&lt;br /&gt;
   bool      GetMachineCoords ();&lt;br /&gt;
   void      SetMachineCoords (bool mach);&lt;br /&gt;
   void      SetFollow (bool fol);&lt;br /&gt;
   void      SetNextLine (int line);&lt;br /&gt;
   void      RunFileAt (int line);&lt;br /&gt;
   void      SimulateFile ();&lt;br /&gt;
   void      GoToZeros ();&lt;br /&gt;
   void      FloodToggle ();&lt;br /&gt;
   void      MistToggle ();&lt;br /&gt;
   void      ZeroAxis (int axis);&lt;br /&gt;
   void      DisplayExec ();&lt;br /&gt;
   void      ZeroAll ();&lt;br /&gt;
   void      StopFile ();&lt;br /&gt;
   void      ResumeFile ();&lt;br /&gt;
   void      RewindFile ();&lt;br /&gt;
   void      PauseFile ();&lt;br /&gt;
   void      SingleStep ();&lt;br /&gt;
   void      RunFile ();&lt;br /&gt;
   void      LoadTraj ();&lt;br /&gt;
             CString &amp;amp; GetLastError ();&lt;br /&gt;
   void      OnToolChange (double tool);&lt;br /&gt;
   void      RetSub ();&lt;br /&gt;
   void      DoSub (int name, int repeat);&lt;br /&gt;
   void      SetVirtual (bool state);&lt;br /&gt;
   bool      ExecFunctions ();&lt;br /&gt;
   bool      Execute (CString * Block, int line);&lt;br /&gt;
   void      ProgramReset ();&lt;br /&gt;
   void      DoGCodeLoop ();&lt;br /&gt;
   void      CalculateSpeeds (int axis);&lt;br /&gt;
   void      RefA ();&lt;br /&gt;
   void      RefB ();&lt;br /&gt;
   void      RefC ();&lt;br /&gt;
   void      RefX ();&lt;br /&gt;
   void      RefY ();&lt;br /&gt;
   void      RefZ ();&lt;br /&gt;
   void      DoJogLoop ();&lt;br /&gt;
   void      RefHomeOn (int axis, int dir);&lt;br /&gt;
   bool      CheckSkip ();&lt;br /&gt;
   void      SetSoftLimits ();&lt;br /&gt;
   void      JogOff (int axis);&lt;br /&gt;
   void      JogOn (int axis, int dir);&lt;br /&gt;
   bool      CheckJoyStick ();&lt;br /&gt;
   void      SetDiameters (double A, double B, double C);&lt;br /&gt;
   void      CloseDigFile ();&lt;br /&gt;
   void      OpenDigFile ();&lt;br /&gt;
   void      ProbeCommandFinished ();&lt;br /&gt;
   void      DoProbe ();&lt;br /&gt;
   void      ProbeAxis (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   void      VerifyReport ();&lt;br /&gt;
   void      VerifyStage2 ();&lt;br /&gt;
   void      FinishVerify ();&lt;br /&gt;
   void      Verify (bool silent);&lt;br /&gt;
   void      CalcVels (int axis);&lt;br /&gt;
   void      HomeOn (int axis, int dir);&lt;br /&gt;
   void      SafeTravel ();&lt;br /&gt;
   void      DoMacro ();&lt;br /&gt;
   void      SetRate (double rate);&lt;br /&gt;
   void      MacroRunFile (CString &amp;amp; name);&lt;br /&gt;
   void      RunInitFile (CString &amp;amp; name);&lt;br /&gt;
   void      CheckforSubroutine ();&lt;br /&gt;
   void      DoSpinSpeed ();&lt;br /&gt;
   void      DoSpinSpeedInternal ();&lt;br /&gt;
   void      DoSpinStop ();&lt;br /&gt;
   void      DoSpinCW ();&lt;br /&gt;
   void      DoSpinCCW ();&lt;br /&gt;
   bool      LoadFromPath (CString file);&lt;br /&gt;
   bool      LoadSub (CString file);&lt;br /&gt;
   void      DoOrigins ();&lt;br /&gt;
   void      ChangeFeed ();&lt;br /&gt;
   void      CompleteToolChange ();&lt;br /&gt;
   bool      Same (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   void      DoToolChange ();&lt;br /&gt;
   void      DoUnits (int units);&lt;br /&gt;
   void      DoLength ();&lt;br /&gt;
   void      RunRecalculate ();&lt;br /&gt;
   void      ChangeTool (int tool);&lt;br /&gt;
   void      SetPlane (int plane);&lt;br /&gt;
   void      ReturnToPaused ();&lt;br /&gt;
   void      RememberPaused ();&lt;br /&gt;
   void      StartMacroPump ();&lt;br /&gt;
 &lt;br /&gt;
   void      SetupBacklash ();&lt;br /&gt;
 &lt;br /&gt;
   bool      CalcArcs (double first_end, double second_end, double first_axis, double second_axis, int rotation, double endpoint, double enda, double endb, double endc);&lt;br /&gt;
   void      SetAccVelMan (EmcPose where);&lt;br /&gt;
   void      AddCommand (int Command, int line, double param);&lt;br /&gt;
   void      DoCommand (int Command);&lt;br /&gt;
   void      ManualLine (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   void      SetMMS ();&lt;br /&gt;
   void      SetInches ();&lt;br /&gt;
   BOOL      ChangeLine (int line, CString Text);&lt;br /&gt;
   void      CloseFile ();&lt;br /&gt;
   bool      GetLine (int nLine, CString &amp;amp; String, bool skipreverse);&lt;br /&gt;
   bool      LoadGCode ();&lt;br /&gt;
   void      Sync ();&lt;br /&gt;
   bool      SetAccVel (EmcPose where, double MaxVel);&lt;br /&gt;
   void      SetLastPos (EmcPose where);&lt;br /&gt;
   void      ReCalculate ();&lt;br /&gt;
   void      SetFeedRate (double Rate);&lt;br /&gt;
   void      Resume ();&lt;br /&gt;
   void      Pause ();&lt;br /&gt;
   bool      StraightThread (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   bool      StraightFeed (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   bool      StraightTraverse (double x, double y, double z, double a, double b, double c);&lt;br /&gt;
   bool      TrajectoryControl::ArcFeed (double first_end, double second_end, double first_axis, double second_axis, int rotation, double endpoint, double enda, double endb, double endc);&lt;br /&gt;
   void      Init ();&lt;br /&gt;
   void      Update (void);&lt;br /&gt;
   void      PlaySounds (char *sound);&lt;br /&gt;
   void      SetHelpContext ();&lt;br /&gt;
             virtual ~ TrajectoryControl ();&lt;br /&gt;
   void      DoShifter (short num, int &amp;amp;orig);&lt;br /&gt;
   void      DoGShifter (short num, int &amp;amp;orig);&lt;br /&gt;
   void      UpdateToolOffsets ();&lt;br /&gt;
   void      SaveToolTable ();&lt;br /&gt;
   void      GotoSafe_z ();&lt;br /&gt;
   void      SetIncr (int pos);&lt;br /&gt;
   // Generated message map functions&lt;br /&gt;
 protected:&lt;br /&gt;
   //{{AFX_MSG(TrajectoryControl)&lt;br /&gt;
   // NOTE - the ClassWizard will add and remove member functions here.&lt;br /&gt;
   //}}AFX_MSG&lt;br /&gt;
 DECLARE_MESSAGE_MAP () public:&lt;br /&gt;
   void      SpinUp (void);&lt;br /&gt;
   void      SpinDown (void);&lt;br /&gt;
   void      SpinOverRide (double rpm);&lt;br /&gt;
   void      ExecMacSub (CString Mac);&lt;br /&gt;
   void      ResetZTHC (void);&lt;br /&gt;
   void      CycleIncr (void);&lt;br /&gt;
   void      FillJogIncs (void);&lt;br /&gt;
   void      DoEncoderJog (void);&lt;br /&gt;
   void      DoOEMTrigger (short Trigger);&lt;br /&gt;
   void      DisableSpeedOv (void);&lt;br /&gt;
   void      SetMill (void);&lt;br /&gt;
   void      SetTurn (void);&lt;br /&gt;
   void      LatheHome (int axis);&lt;br /&gt;
   void      Add2MRU (CString fname);&lt;br /&gt;
   void      DoMRU (void);&lt;br /&gt;
   void      DisplayHistory (void);&lt;br /&gt;
   void      AddToLog (CString text);&lt;br /&gt;
   void      ExecuteButtonScript (CString script);&lt;br /&gt;
   void      EditScript (CString script);&lt;br /&gt;
   void      CalcThread (void);&lt;br /&gt;
   void      VariJogOn (int axis, int direction, double speed);&lt;br /&gt;
   int       OpenTechFile (LPCTSTR name);&lt;br /&gt;
   int       OpenSubFile (LPCTSTR name);&lt;br /&gt;
   int       AppendTeachFile (LPCTSTR name);&lt;br /&gt;
   void      CloseTeachFile (void);&lt;br /&gt;
   void      TeachLoad (void);&lt;br /&gt;
   void      CheckMacroFolder (void);&lt;br /&gt;
   void      ConfigToolPath (void);&lt;br /&gt;
   void      SelectAddon (void);&lt;br /&gt;
   void      SelectNewFangled (void);&lt;br /&gt;
   void      CheckSoftLimits ();&lt;br /&gt;
   void      LoadDefaultScreens ();&lt;br /&gt;
   void      DoSingleStep (void);&lt;br /&gt;
   double    CalcOrg (int axis);&lt;br /&gt;
   void      SaveFixtures ();&lt;br /&gt;
   // Gets BackBuffer Entry&lt;br /&gt;
   Executions GetDisplayCom (int Com);&lt;br /&gt;
   void      UpdateIO ();&lt;br /&gt;
   bool      GetInputs (int bit, bool Neg);&lt;br /&gt;
   void      SetOutput (int bit, bool onoff, bool neg);&lt;br /&gt;
   void      KillScripts (HANDLE hCtx);&lt;br /&gt;
   void      SyncLocation (void);&lt;br /&gt;
   void      TurnTouchX (void);&lt;br /&gt;
   void      TurnTouchZ (void);&lt;br /&gt;
   void      SetDwell (double delay);&lt;br /&gt;
   void      TorchVolts ();&lt;br /&gt;
   void      SwitchToRear ();&lt;br /&gt;
   void      SwitchToFront ();&lt;br /&gt;
   Executions GetCompDisplay (int Com);&lt;br /&gt;
 &lt;br /&gt;
   double    Get_Setup (double value);&lt;br /&gt;
   void      RecieveUDP (void *buffer, int bytes);&lt;br /&gt;
   bool      Emailer;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   bool      SoftForCheck (void);&lt;br /&gt;
   int       GetIndex (short axis);&lt;br /&gt;
   void      SetIndex (short axis, int value);&lt;br /&gt;
   void      RotConvert (TrajPoint &amp;amp; trajorg);&lt;br /&gt;
   void      UpdateSyncWhere (GMoves move);&lt;br /&gt;
   void      SetSoftMin ();&lt;br /&gt;
   void      SetSoftMax ();&lt;br /&gt;
   void      RestoreSoft ();&lt;br /&gt;
   bool      IsMoving ();&lt;br /&gt;
   void      SetToolDesc (int tool, LPSTR desc);&lt;br /&gt;
   void      DoLabels ();&lt;br /&gt;
   bool      ReCheck ();&lt;br /&gt;
   void      CalcDecel ();&lt;br /&gt;
   void      AddPartialArc ();&lt;br /&gt;
   void      AddToCompDisplay (bool line, EmcPose end, PmCartesian center, PmCartesian normal, int rot, bool rapid);&lt;br /&gt;
   void      DoMenu (int sub, int pos);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Closing the Header file&lt;br /&gt;
 /////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
 //{{AFX_INSERT_LOCATION}}&lt;br /&gt;
 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.&lt;br /&gt;
 &lt;br /&gt;
 #endif // !defined(AFX_TRAJECTORYCONTROL_H__C8CBC326_3A49_4703_B02E_13CBC7C2848C__INCLUDED_)&lt;/div&gt;</description>
			<pubDate>Mon, 08 Dec 2008 11:03:27 GMT</pubDate>			<dc:creator>Steffen</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:TrajectoryControl.h</comments>		</item>
		<item>
			<title>Plugin Documentation</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Plugin_Documentation</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
This Document is a community driven effort to document users findings on what the various Variables and Functions do for doing Plug-ins for Mach3. &lt;br /&gt;
&lt;br /&gt;
Those who felt generous may have also put an example of using the var, or function in the code.&lt;br /&gt;
&lt;br /&gt;
The documents covered here are:&lt;br /&gt;
#[[TrajectoryControl.h]]  (TrajectoryControl *MainPlanner)&lt;br /&gt;
#[[Mach4View.h]] (CMach4View *MachView)&lt;br /&gt;
#[[Engine.h]] (TrajBuffer *Engine)&lt;br /&gt;
#[[rs274ngc.h]] (setup *_setup)&lt;/div&gt;</description>
			<pubDate>Tue, 18 Nov 2008 16:11:04 GMT</pubDate>			<dc:creator>Poppabear</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Plugin_Documentation</comments>		</item>
		<item>
			<title>TCP/IP Modbus (beta)</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=TCP/IP_Modbus_%28beta%29</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TCP/IP Modbus (Beta):'''   &lt;br /&gt;
&lt;br /&gt;
NOTE!!!!: This is beta, and STILL under testing, with bugs worked out as they are found.&lt;br /&gt;
&lt;br /&gt;
To set this up, click on: Function Cfg’s, &amp;gt; Setup TCP Modbus&lt;br /&gt;
This will bring up this screen:&lt;br /&gt;
&lt;br /&gt;
[[Image:TCPIP_Modbus.jpg]] &lt;br /&gt;
&lt;br /&gt;
At the top, you will see a box that says Master Address, fill in this address with your masters network address, your master is also Slave 1 for addressing purposes from mach.&lt;br /&gt;
There are 1024 Inputs possible, and 1024 Outputs possible, they are each a 16 bit word.&lt;br /&gt;
1 sixteen bit word is a number from 0-65535, or FFFF in hex.&lt;br /&gt;
There are 64 possible Configurations, (Cfg #0-63). So using the example above we are connected to an Automation Direct DL06 that have ranges: &lt;br /&gt;
Input range 1 (PLC address starts at 1400) translates over to Modbus(var) address 768, and the local Mach address that it is tied to starts at (index) “0” the number of registers transferred will be 10, so Local mach (index) addresses will be 0-9, type of addresses will be Input-Holding. &lt;br /&gt;
Input range 2 ( 1500PLC)&amp;gt;832Modbus(Var), 10 registers starting at mach’s index 10, input holding.&lt;br /&gt;
This pattern continues, with the rest of the configs, note that you have to keep track of mach’s Index inputs 0-1023, and Index outputs 0-1023, since they are continuous address blocks. BUT the addresses of the ModbusVAR only has to be continuous for the number of registers it is brining in. this allows you to pick different places in the memory registers or your PLC or other Modbus device.&lt;br /&gt;
Note: Cfg #4 and #5 are a second Modbus slave device numbered “2” and it has its inputs, and outputs, but also note that it ties into the local address of Mach’s index where the other devices left off.&lt;br /&gt;
&lt;br /&gt;
The Refresh box is where you set the rate of “Polling” for the devices; it is currently set to update every 25 milli-seconds.&lt;br /&gt;
&lt;br /&gt;
Once you have filled in all the info, hit the “Test” button, you will see this screen:&lt;br /&gt;
&lt;br /&gt;
[[Image:TCP Test Screen.jpg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
It will need your master address; you need to click “Open”, when you click it, your status&lt;br /&gt;
Bar should say Opened, if you get other error then you have set something up wrong in your Modbus device, or address……….&lt;br /&gt;
To test, (just like in Modbus serial testing), put in the slave address, the start address of the block you want to look at, how many registers, and access type, hit read for inputs, write for outputs. You can manually edit the Hex or decimal numbers to do what ever.&lt;br /&gt;
&lt;br /&gt;
Currently you can only read the TCP/IP Modbus with the Macro Pump, (Art is working on a “Mach Brain”, that will allow you to manipulate the data in a more user friendly way, not to mention faster than the Macro pump.&lt;br /&gt;
&lt;br /&gt;
Here are the VB commands that will access the TCP/IP modbus, note they only move in or out full 16bit words.&lt;br /&gt;
&lt;br /&gt;
GetMasterInput(0-1023)&lt;br /&gt;
GetMasterOutput(0-1023)&lt;br /&gt;
&lt;br /&gt;
The above will get the 16 bit word from the Mach address Local(var), or Index&lt;br /&gt;
If you want to do Discrete bits you will have to send/receive in the PLC using Bit of word, and you may have to do Bit masking in Mach to get the bit patterns you want.&lt;br /&gt;
&lt;br /&gt;
SetMasterOutput(0-1023, 0-16bit)&lt;br /&gt;
SetMasterInput(0-1023, 0-16bit)&lt;br /&gt;
&lt;br /&gt;
These will send outputs on Mach’s Index address Local(var) 0-1023, and a 16 bit number from 0-65535.&lt;br /&gt;
You can also “Overwrite” your inputs using the setmasterinput, for testing, but if you are actively hooked up to a PLC or other scanning device, it will overwrite your input, on its next scan.&lt;br /&gt;
&lt;br /&gt;
I will update this as new things become available, and bugs worked out.&lt;br /&gt;
Scott&lt;/div&gt;</description>
			<pubDate>Tue, 21 Aug 2007 21:09:33 GMT</pubDate>			<dc:creator>Poppabear</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:TCP/IP_Modbus_%28beta%29</comments>		</item>
		<item>
			<title>Get/SetParam() Vars</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Get/SetParam%28%29_Vars</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a word list for the GetParam( String ) and SetParam( String ) in VB&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZMachine&amp;quot;  = Z Mach Positions (G53 Coordinates)&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;XMachine&amp;quot;  = X Mach Positions (G53 Coordinates)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;YMachine&amp;quot;  = Y Mach Positions (G53 Coordinates)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Encoder1&amp;quot;  =  X Encoder Position&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Encoder2&amp;quot; =  Y Encoder Position&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Encoder3&amp;quot; =  Z Encoder Position&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Encoder4&amp;quot; =  A Encoder Position&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MPG1&amp;quot; = MPG1’s count	&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;MPG2&amp;quot; = MPG2’s count&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MPG3&amp;quot; = MPG3’s count&lt;br /&gt;
&lt;br /&gt;
&amp;quot;XScale&amp;quot; = X Axis Scale &lt;br /&gt;
&lt;br /&gt;
&amp;quot;YScale&amp;quot; = Y Axis Scale	&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZScale&amp;quot; = Z Axis Scale&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AScale&amp;quot; = A Axis Scale&lt;br /&gt;
&lt;br /&gt;
&amp;quot;BScale&amp;quot; = B Axis Scale&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CScale&amp;quot; = C Axis Scale&lt;br /&gt;
&lt;br /&gt;
&amp;quot;FeedRate&amp;quot; =  Feedrate that is active&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Units&amp;quot;  =  0 or 1 for mm or inch&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisX&amp;quot;  = X Steps per unit from the motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisY&amp;quot;  = Y Steps per unit from the motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisZ&amp;quot;  = Z Steps per unit from the motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisA&amp;quot;  = A Steps per unit from the motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisB&amp;quot;  = B Steps per unit from the motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;StepsPerAxisC&amp;quot;  = C Steps per unit from the motor tuning page	&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesX&amp;quot; = X MaxVel from motor tuning page (SetParam as units/&amp;lt;b&amp;gt;second&amp;lt;/b&amp;gt;. Mach will multiply X60 for display in motor tuning as units/minute.)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesY&amp;quot;= Y MaxVel from motor tuning page (SetParam as units/&amp;lt;b&amp;gt;second&amp;lt;/b&amp;gt;. Mach will multiply X60 for display in motor tuning as units/minute.)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesZ&amp;quot; = Z MaxVel from motor tuning page (SetParam as units/&amp;lt;b&amp;gt;second&amp;lt;/b&amp;gt;. Mach will multiply X60 for display in motor tuning as units/minute.)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesA&amp;quot; = A MaxVel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesB&amp;quot; = B MaxVel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VelocitiesC&amp;quot; = C MaxVel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationX&amp;quot; = X Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationY&amp;quot; = Y Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationZ&amp;quot; = Z Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationA&amp;quot; = A Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationB&amp;quot; = B Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AccelerationC&amp;quot; = C Max Accel from motor tuning page&lt;br /&gt;
&lt;br /&gt;
&amp;quot;SpindleSpeed&amp;quot; = Active Spindle speed&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZInhibitOn&amp;quot;  =  1/0 for Z inhibit on/ off&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZInhibitDepth&amp;quot;  = Max depth of Zinhibit&lt;br /&gt;
&lt;br /&gt;
&amp;quot;SafeZ&amp;quot; = Safe Z height&lt;br /&gt;
&lt;br /&gt;
&amp;quot;XDRO&amp;quot; = X Position &lt;br /&gt;
&lt;br /&gt;
&amp;quot;YDRO&amp;quot; = Y Position;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZDRO&amp;quot; = Z Position;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ADRO&amp;quot; = A Position;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;BDRO&amp;quot; = B Position;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CDRO&amp;quot; = C Position;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;XRefPer&amp;quot; = X % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;YRefPer&amp;quot; = Y % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ZRefPer&amp;quot; = Z % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ARefPer&amp;quot; = A % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;BRefPer&amp;quot; = B % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CRefPer&amp;quot; = C % speed for homing&lt;br /&gt;
&lt;br /&gt;
&amp;quot;RPMOverRide&amp;quot; = SetParam(&amp;quot;RPMOverRide&amp;quot;, 1) will allow you to write to OEMDRO39(True Spindle Speed) from the modbus. If set to &amp;quot;0&amp;quot; will read True spindle as usual.&lt;/div&gt;</description>
			<pubDate>Mon, 29 Jan 2007 05:08:04 GMT</pubDate>			<dc:creator>Barker806</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Get/SetParam%28%29_Vars</comments>		</item>
		<item>
			<title>Glossary</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Glossary</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Mach Glossary=&lt;br /&gt;
&lt;br /&gt;
==Keystroke==&lt;br /&gt;
This is what is sent to the computer when you press a key on the keyboard. There are also devices you can connect to your computer so that pressing a switch (like a switch on a control panel) will send a &amp;quot;keystroke&amp;quot; to the computer.&lt;br /&gt;
&lt;br /&gt;
==Screenset==&lt;br /&gt;
A set of screens designed for Mach. A screen is what you see when you run Mach. It has buttons, [[DRO]]s, [[LED]]s, etc. Mach comes with it's own screens, their are third-party screens available, or you can make your own.&lt;br /&gt;
&lt;br /&gt;
==DRO==&lt;br /&gt;
DRO is an [[http://en.wikipedia.org/wiki/Acronym initialism]] of Digital Read Out. They look like this [[Image:DRO.jpg|50px]] in Mach.&lt;br /&gt;
&lt;br /&gt;
==LED==&lt;br /&gt;
LED is an [[http://en.wikipedia.org/wiki/Acronym initialism]] of Light Emitting Diode. They look like this [[Image:LED.jpg|50px]] in Mach.&lt;/div&gt;</description>
			<pubDate>Fri, 26 Jan 2007 14:20:16 GMT</pubDate>			<dc:creator>Pcbgcode</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Glossary</comments>		</item>
		<item>
			<title>Mach3 Pendants</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach3_Pendants</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This section is dedicated to building a pendant controller for Mach.&lt;br /&gt;
Currently all information is spread around in other forums. Please use the pendant links page.&lt;br /&gt;
[[Mach3 Pendants links]]&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jan 2007 01:13:01 GMT</pubDate>			<dc:creator>Ynneb</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach3_Pendants</comments>		</item>
		<item>
			<title>Mach3 Pendants links</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach3_Pendants_links</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Have a read through some of these links about pendants, ideas, and discussion.'''&lt;br /&gt;
Remember some of these threads are many pages long, so dont forget to use the page numbers in the threads to see the others.&lt;br /&gt;
&lt;br /&gt;
Work log of how to build a pendant http://www.cnczone.com/forums/showthread.php?t=57759 &lt;br /&gt;
&lt;br /&gt;
http://www.cnczone.com/forums/showthread.php?t=6522&lt;br /&gt;
&lt;br /&gt;
http://www.machsupport.com/forum/index.php?topic=184.0&lt;br /&gt;
&lt;br /&gt;
http://www.machsupport.com/forum/index.php?topic=1353.0&lt;br /&gt;
&lt;br /&gt;
[[Touch Screen and panel controls using ModIO]]&lt;br /&gt;
&lt;br /&gt;
[[Universal panel notes for CNC Workshop 2006]]&lt;br /&gt;
&lt;br /&gt;
[[Customization case studies]]&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jan 2007 01:02:32 GMT</pubDate>			<dc:creator>Ynneb</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach3_Pendants_links</comments>		</item>
		<item>
			<title>How to load a flash screen</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=How_to_load_a_flash_screen</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To load a flash screen is very easy, but may not be obvious.&lt;br /&gt;
Essentially you do the same thing as you do to load a conventional screen, however you must select the dropdown menu as shown below, and select the SWF option, and then browse to the flash screen you require. Currently there is only one flash screen that is distributed with Mach3.&lt;br /&gt;
&lt;br /&gt;
http://www.machsupport.com/MachCustomizeWiki/images/0/01/Howtoloadflash.jpg&lt;/div&gt;</description>
			<pubDate>Tue, 23 Jan 2007 23:00:53 GMT</pubDate>			<dc:creator>Ynneb</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:How_to_load_a_flash_screen</comments>		</item>
		<item>
			<title>Flash Screens</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Flash_Screens</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Flash Screens is new, and still very much in experimental mode for Mach 3.&lt;br /&gt;
As we are still investigating these screens, we can not offer any direct support, however the current talk about these format of screens is found here http://www.machsupport.com/forum/index.php?board=17.0 .&lt;br /&gt;
It is not expected that flash screens will be editable by other users, and that the screens will be made available for others to use, but not edit. If a user would like a customized screen they will need to use the conventional screen designer, create their own Flash screen , or commission someone else to do it for them.&lt;br /&gt;
&lt;br /&gt;
Mach 3 now has the ability to open a .swf file as well as the traditional .set files.&lt;br /&gt;
SWF file are native to the Adobe / Macromedia player.&lt;br /&gt;
There is many different softwares available that can edit and create these swf files.&lt;br /&gt;
Two that come to mind are Adobe Flash http://www.adobe.com/products/flash/flashpro/, and Swishmax http://www.swishzone.com/index.php?area=products&lt;/div&gt;</description>
			<pubDate>Sat, 18 Nov 2006 06:43:11 GMT</pubDate>			<dc:creator>Ynneb</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Flash_Screens</comments>		</item>
		<item>
			<title>JetCAM Screen Designer</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=JetCAM_Screen_Designer</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This screen designer was developed and donated by JetCAM.&lt;br /&gt;
&lt;br /&gt;
It produces .SET or .SSET files that are used by Mach3 in the same way as the Artsoft designers but, in addition, saves more information about the &amp;quot;design intent&amp;quot; of the screens in a screen definition file of its own.&lt;br /&gt;
&lt;br /&gt;
The benefits of this include: much greater control of the use of fonts and colour in buttons, labels etc.; ability to define the &amp;quot;Z-order&amp;quot; of layered objects without all the problems caused by Windows when each object is rendered as a &amp;quot;window object&amp;quot; by Mach.&lt;br /&gt;
&lt;br /&gt;
Oversimplfying somewhat, its .SET files have all the static data (labels, blocks of colour, pictures of buttons etc.) as a single bitmap for each screen. This bitmap is built at &amp;quot;save&amp;quot; time from the graphic described in the screen definition file. Buttons are hot-spots defined to correspond to the correct places on the bitmap and LEDs, DROs and user labels are the usual Mach controls that are visible through transparent holes in the bitmap.&lt;br /&gt;
&lt;br /&gt;
This screen designer has a comprehensive Help system with it and should be usable with little, if any,  additional documentation.&lt;br /&gt;
&lt;br /&gt;
You will find lots of related help here http://www.machsupport.com/forum/index.php?board=46.0&lt;/div&gt;</description>
			<pubDate>Tue, 12 Sep 2006 08:52:28 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:JetCAM_Screen_Designer</comments>		</item>
		<item>
			<title>Screen4</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Screen4</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This designer is supplied by ArtSoft but is a separate download from the Mach3 release.&lt;br /&gt;
&lt;br /&gt;
It allows the use of transparent bitmaps to obtain a range of graphic effects, supports user defined LEDs and the special &amp;quot;slider&amp;quot; style DRO for things like feedrate override setting.&lt;br /&gt;
&lt;br /&gt;
Apart from these enhancements it is architecturally similar to the original screen designer. .SET and .SSET files can be used in either without problems, although features only implemented in one designer cannot be altered in the other.&lt;br /&gt;
&lt;br /&gt;
This entry is a stub. We really need a proper description of the use of this program when it achieves stability.&lt;br /&gt;
&lt;br /&gt;
Screen4 is a good alternative to other screen editors due to these options.  To use these features, use the following steps.&lt;br /&gt;
&lt;br /&gt;
To use a user created DRO:&lt;br /&gt;
   1.  Create rectangle in a graphics creator.  Add bevel or whatever effects you want.  &lt;br /&gt;
       Making it transparent adds a nice effect.&lt;br /&gt;
   2.  Click &amp;quot;DRO&amp;quot; from the toolbar and click in your workspace.&lt;br /&gt;
   3.  Right-click the DRO to bring up the DRO Control window.&lt;br /&gt;
   4.  Check the &amp;quot;skined&amp;quot; box.&lt;br /&gt;
   5.  Find your created image in the &amp;quot;image loaction&amp;quot; explorer.&lt;br /&gt;
   6.  Click &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To use a transparent bitmap for a button:&lt;br /&gt;
   1.  Create your button in a graphics creator.&lt;br /&gt;
   2.  Save your image as a '''transparent PNG''' file.&lt;br /&gt;
   3.  Click &amp;quot;IMAGE BUTTON&amp;quot; from toolbar, and place in workspace.&lt;br /&gt;
   4.  Find image with &amp;quot;image location&amp;quot;.&lt;br /&gt;
   5.  Click &amp;quot;OK&amp;quot; and you're good to go.&lt;br /&gt;
&lt;br /&gt;
Everything else is fairly similar to the screen designer.  If anyone has any more tips or hints for Screen4, add on.&lt;/div&gt;</description>
			<pubDate>Tue, 12 Sep 2006 08:33:37 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Screen4</comments>		</item>
		<item>
			<title>Screen5</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Screen5</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This designer is supplied by ArtSoft but is a separate download from the Mach3 release.&lt;br /&gt;
&lt;br /&gt;
It allows the use of transparent bitmaps to obtain a range of graphic effects, supports user defined LEDs and the special &amp;quot;slider&amp;quot; style DRO for things like feedrate override setting.&lt;br /&gt;
&lt;br /&gt;
Apart from these enhancements it is architecturally similar to the original screen designer. .SET and .SSET files can be used in either without problems, although features only implemented in one designer cannot be altered in the other.&lt;br /&gt;
&lt;br /&gt;
This entry is a stub. We really need a proper description of the use of this program when it achieves stability.&lt;/div&gt;</description>
			<pubDate>Tue, 12 Sep 2006 08:31:31 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Screen5</comments>		</item>
		<item>
			<title>Standard Hotkeys</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Standard_Hotkeys</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Functions within Mach 3 can be controlled by keyboard combinations. &lt;br /&gt;
&lt;br /&gt;
These keys are defined in two ways. &lt;br /&gt;
&lt;br /&gt;
* In the &amp;lt;tt&amp;gt;Config&amp;gt;System Hotkeys&amp;lt;/tt&amp;gt; menu. &lt;br /&gt;
* In the screenset you have loaded.&lt;br /&gt;
&lt;br /&gt;
For traditional Mach screensets (i.e. .SET, .SSET, .LSET files) you can use the ScreenTweak utility (Rev C1 onwards) to display (and copy via the clipboard to an editor) the codes on a given screen or for the whole screenset.&lt;br /&gt;
&lt;br /&gt;
The utility can be downloaded from [http://www.machsupport.com/Downloads/Mach3ScreenTweak.exe here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Usage:&lt;br /&gt;
 (a) Load a screen set&lt;br /&gt;
 (b) Click ''Edit all Controls'' (or for a single screen select the screen you want to view&lt;br /&gt;
         in the list and click ''Control Edit'')&lt;br /&gt;
 (c) Click ''View Hotkeys''&lt;br /&gt;
&lt;br /&gt;
You can cut and paste elsewhere (e.g. Notepad) from the screen if you want a printout.&lt;br /&gt;
&lt;br /&gt;
Note the warning about the labels on non US/UK keybords. The codes are from the physical position of the key not via the codetable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The table below gives some keys for the '''Default Screensets''' provided with Mach 3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;TABLE FRAME=&amp;quot;VOID&amp;quot; CELLSPACING=&amp;quot;0&amp;quot; COLS=&amp;quot;6&amp;quot; RULES=&amp;quot;NONE&amp;quot; BORDER=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;118&amp;quot; height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Type Set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;424&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Function&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;118&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Hotkey&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;86&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Value dec.&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;86&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Value hex.&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;125&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#E6E6E6&amp;quot;&amp;gt;Called from page&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Close current file&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;U&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;85&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;85&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0055&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Cycle axis controlled by MPG 1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Alt A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2113&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2113&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0841&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Cycle axis controlled by MPG 2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Alt B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2114&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2114&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;65&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;65&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;65&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;65&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;e.g. Positioning screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;66&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;66&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0042&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;5&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;e.g. Positioning screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;77&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;77&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x004d&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;e.g. Toolpath screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;65&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;65&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Edit G-code&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;69&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;69&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0045&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Edit G-code&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;69&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;69&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0045&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Execute VB-SCript.:13&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;68&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;68&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0044&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Execute VB-SCript.:15&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;84&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;84&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0054&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Execute VB-SCript.:15&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;84&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;84&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0054&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Flood toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;67&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;67&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0043&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Flood toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;67&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;67&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0043&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Flood toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;67&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;67&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0043&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Flood toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;67&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;67&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0043&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Jog increment cycle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x084a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Load G-code&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;76&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;76&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x004c&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;70&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0046&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;ESC&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;27&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x001b&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;82&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;82&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0052&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;82&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;82&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0052&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Run from here&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;72&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;72&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0048&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Screen 1 select(e.g. Program Run screen) Button&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;81&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;81&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0051&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Screen 1 select(e.g. Program Run screen) Button&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;81&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;81&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0051&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Screen 1 select(e.g. Program Run screen) Button&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;81&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;81&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0051&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Screen 2 select (e.g. MDI screen select)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;65&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;65&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Screen 2 select (e.g. MDI screen select)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;66&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;66&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0042&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Show recent G-code files list&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;82&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;82&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0052&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Alt S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2131&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2131&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0853&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;83&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;83&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Slow Jog Dn&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;OEM_4&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;219&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;219&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x00db&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Slow Jog Up&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;OEM_6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;221&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;221&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x00dd&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;83&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;83&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;83&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;83&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;83&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;83&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;83&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;83&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;70&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0046&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;13&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;1024.lset (Lathe)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Toggle Jog Mode Through Cont/Step/Step Velocity/Velocity Only&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;Ctrl J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;32842&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot;&amp;gt;0x804a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#33CC66&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;A DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32833&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32833&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;A DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32833&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32833&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8041&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Block Delete switch toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Delete&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;46&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;46&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x002e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Cycle axis controlled by MPG 1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2113&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2113&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0841&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Cycle axis controlled by MPG 2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2114&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2114&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2130&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2130&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0852&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2130&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2130&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0852&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;e.g. Corrections screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2102&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2102&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0836&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;e.g. Diagnostics screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 7&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2103&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2103&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0837&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;e.g. Tables screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2101&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2101&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0835&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;e.g. Toolpath screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 4&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2100&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2100&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0834&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Enc To Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F15&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x007e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Execute VB-SCript&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt T&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2132&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2132&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0854&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Execute VB-SCript&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pos home&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0024&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Execute VB-SCript.:105&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pos home&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0024&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;7&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Execute VB-SCript.:105&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pos home&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0024&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Execute VB-SCript.:183&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;220&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;220&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00dc&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feed lower&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0079&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feed lower&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0079&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feed raise&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x007a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feed raise&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x007a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feedrate reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;191&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;191&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00bf&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Feedrate reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;191&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;191&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00bf&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Flood toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl F&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32838&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32838&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8046&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Goto Safe Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2138&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2138&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x085a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Goto Safe Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32858&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32858&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x805a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;GotoZs&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl O&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32847&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32847&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x804f&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog increment cycle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x084a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;10&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;5&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;7&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Joystick Toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32851&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32851&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Load G-code&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt L&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2124&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2124&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x084c&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Lower spindle speed&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Numpad Min&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;109&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;109&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x006d&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Lower spindle speed&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Numpad Min&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;109&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;109&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x006d&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Optional Stop switch toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pos end&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;35&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0023&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;5&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Raise spindle speed&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Numpad Add&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;107&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;107&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x006b&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Raise spindle speed&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Numpad Add&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;107&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;107&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x006b&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_3&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;192&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;192&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00c0&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Reset Interp&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt I&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0849&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl W&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32855&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32855&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8057&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl W&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32855&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32855&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8057&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Screen 1 select(e.g. Program Run screen) Button&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2097&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2097&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0831&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Screen 2 select (e.g. MDI screen select)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt 2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2098&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2098&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0832&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt N&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x084e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt N&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x084e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Slow Jog Dn&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_4&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;219&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;219&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00db&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Slow Jog Up&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;OEM_6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;221&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;221&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x00dd&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;116&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;116&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0074&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;116&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;116&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0074&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2131&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2131&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0853&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2131&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2131&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0853&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Toggle axis DROs display Dist to Go&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl O&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32847&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32847&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x804f&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Toggle Jog Mode Through Cont/Step/Step Velocity/Velocity Only&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32842&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x804a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Units&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt F6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2165&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2165&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0875&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;unknown&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Alt C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2115&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2115&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0843&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Verify&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl V&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32854&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32854&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8056&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Verify&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl V&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32854&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32854&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8056&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;X DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl X&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32856&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32856&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8058&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;X DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl X&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32856&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32856&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8058&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Y DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32857&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32857&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8059&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Y DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32857&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32857&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x8059&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Z DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32858&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32858&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x805a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Z DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Ctrl Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;32858&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32858&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x805a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Zero X Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;120&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;120&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0078&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Zero Y Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x0079&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;1024.set (Mill)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;Zero Z Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot;&amp;gt;0x007a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#FFFF00&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Block Delete switch toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Delete&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;46&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;46&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x002e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Cycle axis controlled by MPG 1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2113&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2113&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0841&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Cycle axis controlled by MPG 2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2114&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2114&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2130&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2130&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0852&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Cycle start&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt R&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2130&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2130&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0852&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;e.g. Corrections screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt 6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2102&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2102&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0836&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;e.g. Diagnostics screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt 7&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2103&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2103&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0837&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;e.g. Toolpath screen select&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt 4&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2100&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2100&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0834&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Enc To Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F15&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x007e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Execute VB-SCript&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pos home&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0024&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Execute VB-SCript.:105&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pos home&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0024&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Feed lower&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0079&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Feed raise&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x007a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Feedrate reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;OEM_2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;191&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;191&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x00bf&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Feedrate reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;OEM_2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;191&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;191&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x00bf&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Goto Safe Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Z&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32858&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32858&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x805a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;GotoZs&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl O&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32847&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32847&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x804f&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog increment cycle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x084a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;10&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Jog mode toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Alt J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;34890&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;34890&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x884a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;5&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Joystick Toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32851&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32851&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8053&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Optional Stop switch toggle&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pos end&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;35&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0023&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Pause&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Space&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0020&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;5&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;OEM_3&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;192&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;192&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x00c0&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Reset Interp&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt I&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0849&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl W&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32855&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32855&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8057&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Rewind&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl W&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32855&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32855&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8057&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Screen 1 select(e.g. Program Run screen) Button&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt 1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2097&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2097&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0831&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Screen 2 select (e.g. MDI screen select)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt 2&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2098&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2098&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0832&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt N&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x084e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Single&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt N&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2126&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2126&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x084e&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Slow Jog Dn&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;OEM_4&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;219&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;219&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x00db&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Slow Jog Up&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;OEM_6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;221&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;221&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x00dd&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;116&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;116&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0074&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Spindle CW, reset THC height&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F5&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;116&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;116&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0074&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2131&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2131&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0853&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Stop&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt S&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2131&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2131&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0853&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;3&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Toggle axis DROs display Dist to Go&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl O&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32847&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32847&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x804f&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Toggle axis DROs display Dist to Go&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl O&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32847&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32847&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x804f&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Toggle Jog Mode Through Cont/Step/Step Velocity/Velocity Only&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32842&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32842&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x804a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Units&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt F6&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2165&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2165&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0875&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;unknown&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Alt C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2115&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2115&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0843&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;50&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Verify&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl V&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32854&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32854&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8056&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Verify&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl V&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32854&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32854&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8056&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;4&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;X DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl X&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32856&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32856&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8058&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;X DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl X&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32856&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32856&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8058&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Y DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32857&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32857&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8059&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Y DRO&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Ctrl Y&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;32857&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;32857&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x8059&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Zero X Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F9&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;120&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;120&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0078&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Zero Y Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F10&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;121&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x0079&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;18&amp;quot; align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Plasma.set&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;Zero Z Encoder&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;122&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot;&amp;gt;0x007a&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot; bgcolor=&amp;quot;#00DCFF&amp;quot; sdval=&amp;quot;6&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;Current Hot keys as of 5-9-09 &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
     &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;A spreadsheet containg this information &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;can be downloaded from [http://www.machsupport.com/forum/index.php/topic,11463.msg72722.html#msg72722 here] &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 27 Aug 2006 11:03:36 GMT</pubDate>			<dc:creator>Davidimurray</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Standard_Hotkeys</comments>		</item>
		<item>
			<title>The G100/GREX plugin as a model for device control</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=The_G100/GREX_plugin_as_a_model_for_device_control</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document is a tutorial in how to create a plugin under Mach3 that will override the native printer port driver, and allow one to send movement and I/O via another driver/Device. This device may use any of several protocols, including USB, TCP/IP, and common serial port communication. &lt;br /&gt;
&lt;br /&gt;
Since the G100 Plugin is likely the most complex to be written due to its lack of an API (initially anyway), we will use it as the example for the process. Sample code posted in this document can also be seen in the Mach3 SDK under the G100 subfolder. &lt;br /&gt;
&lt;br /&gt;
First, let's take a look at what's necessary for a typical plugin of the non-movement variety. &amp;quot;Movement&amp;quot; plugins are built from that foundation. &lt;br /&gt;
&lt;br /&gt;
Files:&lt;br /&gt;
&lt;br /&gt;
MachDevice.cpp/.h     &lt;br /&gt;
MachDevImplementation.cpp/.h  &lt;br /&gt;
XMLProfile.cpp/.h  &lt;br /&gt;
&lt;br /&gt;
These files define a plugin. The MachDevice.cpp/.h are files which will morph over time as more two-way functions are available to call between Mach3 and a plugin. All the required calls for the writer of a plugin are in MachDevImplementation.cpp. In there are calls such as: &lt;br /&gt;
&lt;br /&gt;
 void	myInitControl ();                 // called during Mach initialisation&lt;br /&gt;
                                          // you can influence subsequent init by actions here&lt;br /&gt;
                                          // **** Not used in typical device plugin&lt;br /&gt;
 void	myPostInitControl ();			//called when mach is fully set up&lt;br /&gt;
 void	myConfig (CXMLProfile *DevProf);	// Called to configure the device&lt;br /&gt;
 void	myUpdate ();				// 10Hz update loop&lt;br /&gt;
 void	myHighSpeedUpdate ();			// called at 40Hz&lt;br /&gt;
 void    myCleanUp();                           // Used to cleanup heap variables before&lt;br /&gt;
                                                // destrucion of PlugIn&lt;br /&gt;
 void    myHome( short axis);&lt;br /&gt;
 void    myProbe();&lt;br /&gt;
&lt;br /&gt;
Lets take a quick look at each..&lt;br /&gt;
&lt;br /&gt;
 void	myInitControl ()&lt;br /&gt;
      &lt;br /&gt;
This routine is called when Mach3 is starting up. It allows a plugin to do some initialization work and to set itself up. In a movement plugin it is necessary to inform Mach3 that this '''IS''' a movement plugin, so the user should be asked if he wishes to take advantage of the non-native device. This is done by setting a variable in the Mach viewclass called &amp;lt;tt&amp;gt;m_PrinterOn&amp;lt;/tt&amp;gt;. As in &amp;lt;tt&amp;gt;MachView-&amp;gt;m_PrinterOn = false;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This call forces Mach to recognize that a plugin is available and to make sure the user has a chance to use it. It tells Mach3 not to load the printer port driver. You will see this in the InitControl call of the G100 plugin as well as some other housekeeping things we’ll go over later. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 void	myPostInitControl ();						&lt;br /&gt;
&lt;br /&gt;
This one gets called after Mach3 has setup all its various stages and is about to start running fully. In this call you still have a chance to use the Mach3 profile database. Normally, there is no access to the user settings database during run time; Mach3 cannot share it with the plugin. However, at startup and config time, access is granted.  In functions where it is allowed, you will see calls such as ,//tt&amp;gt;DefDir-&amp;gt; GetProfileString(&amp;quot;Preferences&amp;quot;,&amp;quot;DefDir&amp;quot;,&amp;quot;C:\\Mach3\\&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a call to the database to get the Default folder Mach is using. &lt;br /&gt;
&lt;br /&gt;
 void	myConfig (CXMLProfile *DevProf);&lt;br /&gt;
&lt;br /&gt;
This is called when the user asks for the configuration of a plugin. The G100 plugin then opens a dialog to allow setup of the G100’s parameters. &lt;br /&gt;
&lt;br /&gt;
 void	myUpdate ();									 &lt;br /&gt;
&lt;br /&gt;
This routine is called 10 times per second when Mach3 is running. &lt;br /&gt;
Is is handy to keep a process synced or to run periodic tasks. &lt;br /&gt;
&lt;br /&gt;
 void	myHighSpeedUpdate ();								&lt;br /&gt;
&lt;br /&gt;
If you need a faster update timer, this one is available. It is called 40 times per second when Mach3 is running. Don’t use it for much heavy work, it can affect Mach3’s available CPU time. &lt;br /&gt;
&lt;br /&gt;
 void    myCleanUp(); &lt;br /&gt;
&lt;br /&gt;
This gets called when the program shuts down. A PlugIn can cleanup any variables it may have created.&lt;br /&gt;
&lt;br /&gt;
== How Mach3 Works ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before you can effectively take over Mach3’s control, it's handy to know how exactly it works. &lt;br /&gt;
&lt;br /&gt;
Mach3 is a great many timers and loops of messages. Each is self contained in a master loop, a loop which operates at about 10Hz. The Mach3 printer port engine operates on a loop of 25KHz, and is self contained and automatic. In other words, given a series of commands, Mach3’s printer port driver runs autonomously, and with no interference. The 10 hz loop in Mach3 keeps check on the printer port driver, sends it commands and responds to various semaphores to know when it needs to interact with the Engines variable block. &lt;br /&gt;
&lt;br /&gt;
For example, if Mach3 wants to Jog with the printer port, it needs only to set a variable (&amp;lt;tt&amp;gt;Engine-&amp;gt;Axis[n].Jogging = True&amp;lt;/tt&amp;gt; after setting a max speed with &amp;lt;tt&amp;gt;Engine-&amp;gt;Axis[n].MaxVelocity = 8334400&amp;lt;/tt&amp;gt;, the jog would be automatic and will ramp up to speed and hold until told to stop. The 8334400 is the number of steps/second * 2^12 in order to give the integer based engine code a divisable integer to get many points of precision. &lt;br /&gt;
&lt;br /&gt;
The G100 has to perform many of its functions autonomously (to replace the Pport Driver), so the Plugin will get a command like &amp;lt;tt&amp;gt;JogOn (x,nnn)&amp;lt;/tt&amp;gt; telling it to do the job previously done by the printer port driver. &lt;br /&gt;
&lt;br /&gt;
What is important to the External movement plugin author is '''how''' do I get those commands; and how do I tell Mach3 my states at various times. We’ll go over the entire problem here, and how the G100 implements it. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem #1: Protocols ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To speak to an external movement controller, we need a protocol. This can be serial, TCP, USB, ect. So the first job for the plugin is to implement a protocol. The one we’ll&lt;br /&gt;
use in the G100 is a TCP protocol. So we build it up from the start. I'm using a TCP class &lt;br /&gt;
that connects a TCP port to the plugin. We’ll do that in the &amp;lt;tt&amp;gt;PostInitControl()&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
 void	myPostInitControl ()&lt;br /&gt;
 // called when mach fully set up so all data can be used but initialization&lt;br /&gt;
 //  outcomes not affected&lt;br /&gt;
 {&lt;br /&gt;
 // In the case of a MotionControl plugin, this routine is only called to tell us to take&lt;br /&gt;
 // over. We HAVE been selected and are now commanded to do whatever it takes to OWN the IO&lt;br /&gt;
 // and movement of this run.&lt;br /&gt;
 // For example, if you wish to zero all IO at this point, you're free to do so...&lt;br /&gt;
 //&lt;br /&gt;
 // First, let's add a message tracking facility to handle message traffic output.&lt;br /&gt;
 // Output is in its own class because it's important that we do not overrun the G100's&lt;br /&gt;
 // buffers or queues. We'll make the tracker object intelligent enough to be able&lt;br /&gt;
 // to handle any errors, retransmissions and tracking ack numbers and such...&lt;br /&gt;
 // Now let's open a Debug File. We'll only use it if instructed by Mach3's DebugThisRun &lt;br /&gt;
 // selection in config/state&lt;br /&gt;
  G100.Discovered.Stage = DISCNONE;&lt;br /&gt;
  CTime time = CTime::GetCurrentTime();&lt;br /&gt;
  CString stamp = time.Format( &amp;quot;%a - %H:%M:%S ---&amp;quot;);&lt;br /&gt;
   // Now a message tracker class. It will marshal messages and make sure&lt;br /&gt;
   // we don't flood the G100.&lt;br /&gt;
 if( G100Mess == NULL)&lt;br /&gt;
 {&lt;br /&gt;
    G100Mess = new MessageTracker(); //we'll delete this in the shutdown routine.&lt;br /&gt;
             // Now let's initialise some G100 variables.&lt;br /&gt;
    G100Mess-&amp;gt;ResetQueue( );&lt;br /&gt;
 }&lt;br /&gt;
 if( G100Mon == NULL)&lt;br /&gt;
 {&lt;br /&gt;
     G100Mon = new Monitoring(); //we'll delete this in the shutdown routine.&lt;br /&gt;
            // Now lets initialise some G100 variables.&lt;br /&gt;
 }&lt;br /&gt;
 G100.InJog = false;&lt;br /&gt;
 InitJogMessage();&lt;br /&gt;
  // In the G100 case, we'll open/start-up a network thread to deal with communications..&lt;br /&gt;
 StartNetwork();&lt;br /&gt;
 return;&lt;br /&gt;
 } //myPostInitControl&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The last command here is to start the network object. You'll see I have created other objects like a MessageTracker facility for the G100 and a safety monitor. You can ignore all those for now; just notice the call to startNetwork above. It starts the network process by this routine..&lt;br /&gt;
&lt;br /&gt;
 void   StartNetwork()&lt;br /&gt;
 {&lt;br /&gt;
 int t;  //error storage&lt;br /&gt;
 G100.Discovered.Done = false;&lt;br /&gt;
 G100.SEQUENCE = NOSEQ;&lt;br /&gt;
 G100.Discovered.Stage = STAGE1; //set discovery to stage 1. &lt;br /&gt;
 //&lt;br /&gt;
 // udp setup..&lt;br /&gt;
 G100.PHASE = DISCOVERY;        //set G100 to Discovery phase with zeroed address&lt;br /&gt;
                                //automatically, due to code int he 10hz update, discovery &lt;br /&gt;
		                //will begin;&lt;br /&gt;
 G100.Config.ipaddr = 0;        //set out IP to zero until we discover it.&lt;br /&gt;
 AfxSocketInit();&lt;br /&gt;
 if( g100sock != NULL )&lt;br /&gt;
 {&lt;br /&gt;
     delete g100sock;&lt;br /&gt;
 }&lt;br /&gt;
 g100sock = new CUDPSocket();  //startup the TCP support&lt;br /&gt;
 if( !g100sock-&amp;gt;Create(13887))&lt;br /&gt;
 {&lt;br /&gt;
     G100.PHASE = DISABLED;&lt;br /&gt;
     G100.Disability = &amp;quot;Socket Open Failure&amp;quot;;&lt;br /&gt;
     G100Mess-&amp;gt;DebugOut( G100.Disability );&lt;br /&gt;
     return;&lt;br /&gt;
 }&lt;br /&gt;
                   //	   	&lt;br /&gt;
 G100.Disability = &amp;quot;Starting Discovery.&amp;quot;;  //set a tracking message in case of error.&lt;br /&gt;
&lt;br /&gt;
 int res = g100sock-&amp;gt;SetSockOpt( SO_DONTROUTE, &amp;amp;t, 1);&lt;br /&gt;
 res = g100sock-&amp;gt;AsyncSelect( FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT |&lt;br /&gt;
                            FD_CLOSE ); //full capability&lt;br /&gt;
 res = g100sock-&amp;gt;SetSockOpt( SO_BROADCAST, &amp;amp;t, 1); //set socket to broadcast;&lt;br /&gt;
 } //StartNetwork&lt;br /&gt;
&lt;br /&gt;
In the case of theG100, I have created a large data structure to keep track of all its various states. It is called GRex, and has many variables in it.&lt;br /&gt;
 &lt;br /&gt;
 struct GRex&lt;br /&gt;
 {&lt;br /&gt;
 WTConfig         Config&lt;br /&gt;
 Phase            PHASE;                // current phase of G100 . &lt;br /&gt;
 Sequencing       SEQUENCE;             // Home and Probhe sequence&lt;br /&gt;
 MessageSeq       MESSAGESEQ;&lt;br /&gt;
 Discovery        Discovered;           // process information&lt;br /&gt;
 CString          Disability;           // Reason G100 is disabled.&lt;br /&gt;
 AddressAssign    G100Address;          // Address Asignment Block&lt;br /&gt;
 bool             StartUp;              // initial message traffic	&lt;br /&gt;
 CTime            LastMessageTime;      // Time last message was received&lt;br /&gt;
                                        //	&lt;br /&gt;
 // Traffic variables. &lt;br /&gt;
 short            LastAck;              //The last message Acked &lt;br /&gt;
 short            LastMess;             //The last Message Sent.&lt;br /&gt;
 short            LastStored;           //the last message stored. &lt;br /&gt;
 short            Window;               //Last Window received. &lt;br /&gt;
                                        //&lt;br /&gt;
 //Condition Varibale&lt;br /&gt;
 int             InWord;                //the last 32bit input&lt;br /&gt;
 int             OutputWord;            //The last OutputWord sent&lt;br /&gt;
 int             CurrentISR;            //Current G100 timer	&lt;br /&gt;
 int             CurrentMISR;           // Current G100 timer count. ISR counter&lt;br /&gt;
 WTMsAbs         LastAbs;               //Last absolute structure&lt;br /&gt;
 int             CurDDA[6];             //Current DDA's from last status&lt;br /&gt;
 double          LastCoord[6];          //last ABS coordinate from status.&lt;br /&gt;
 int             CurrentQueueSeq;       //Current Queue Seq. &lt;br /&gt;
 int             NextQueue;             //the next movements queue &lt;br /&gt;
 int             EndQueueSeq;           // As of last status, the last move&lt;br /&gt;
                                        // message in the queue&lt;br /&gt;
 int             QueueFlags;            // and the last Queue &lt;br /&gt;
 int             CurrentHaltBits;       //Current monitoring bits &lt;br /&gt;
 int             CurrentHaltMask;       // Current halt condition &lt;br /&gt;
 int             CurrentMonMask;        //Current monitoring mask &lt;br /&gt;
 bool            IsStill;               // Set by status if the G100 is&lt;br /&gt;
                                        //       state.sflags &amp;amp; QS_STILL&lt;br /&gt;
 bool            IsDrained;             // set by last state is state.sflags &amp;amp; QS_MAVGZ&lt;br /&gt;
 bool            InJog;                 //Is any axis Jogging&lt;br /&gt;
 int             CurrentMavg;           //Current Mavg in use. &lt;br /&gt;
 int             CalcMavg;              //Expected Mavg&lt;br /&gt;
 bool            Dwelling;              //bool that tells the system were waiting&lt;br /&gt;
                                        // for a IsStill to clear a dwell&lt;br /&gt;
 bool            HasMoved;              //tracks that a move has started for &lt;br /&gt;
                                        // probeing and homing sequences.&lt;br /&gt;
 bool            NeedDigOutputs;        //Trigger to send new outputs&lt;br /&gt;
 bool            NeedAnaOutputs;        //Trigger to make Analogues go out&lt;br /&gt;
 bool            Homing;                // We're in a homing move&lt;br /&gt;
 int             HomingMask;            //needed for homing the appropriate axis&lt;br /&gt;
 int             HomeAxis;              //current homing axis;&lt;br /&gt;
                                        //&lt;br /&gt;
 // Monitoring Vars.&lt;br /&gt;
 int             LastChallenge;         //the last responded to &lt;br /&gt;
 bool            Monitoring;            // Are we currently &lt;br /&gt;
 int             MonitorHaltBits;       //halt conditions and levels&lt;br /&gt;
 int             MonitorHaltMask;&lt;br /&gt;
 int             MonitorMask;           //Non critical monitoring &lt;br /&gt;
 int             CurrentChallenge;      // Currently sent &lt;br /&gt;
 bool            SystemHalted;          //System is currently &lt;br /&gt;
 CTime           WaitSet;&lt;br /&gt;
                                        //&lt;br /&gt;
 // G100 Sync Events&lt;br /&gt;
 WaitState                WaitForState;&lt;br /&gt;
 unsigned int             WaitForValue;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Most of these variables will become clear as you peruse the code of the plugin, they contain Booleans to trigger certain events under certain circumstances. Your movement plugin is unlikely to need this level of complexity. Most external hardware will have an API to do the majority of the work, or less of a configurable outcome than the G100. &lt;br /&gt;
&lt;br /&gt;
As you can see I have a variable called &amp;lt;tt&amp;gt;PHASE&amp;lt;/tt&amp;gt; which I use to do a several step process of contacting the G100 to see if I can take control of it. This phaseing is automatic and the end result is a &amp;lt;tt&amp;gt;PHASE&amp;lt;/tt&amp;gt; called &amp;lt;tt&amp;gt;IPRUN&amp;lt;/tt&amp;gt; which tells us its OK to do normal traffic. The stages are handled by the 10hz timer. IT will send messages and monitor responses until we can achieve stage IPRUN; meaning the hardware is all ready.&lt;br /&gt;
&lt;br /&gt;
Look at how the discovery loop is called. We set &amp;lt;tt&amp;gt;PHASE&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;DISCOVERY&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;G100.Discovered.Stage&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;STAGE1&amp;lt;/tt&amp;gt;, send a quick message of “Are you there” out the network port, and we now need to see what to do next. So the 10hz update loop checks it all.&lt;br /&gt;
&lt;br /&gt;
 void	myUpdate ()&lt;br /&gt;
 {&lt;br /&gt;
        //................&lt;br /&gt;
    CTime Now = CTime::GetCurrentTime();&lt;br /&gt;
    CTimeSpan Since = Now - G100.LastMessageTime; //Time since last ???  &lt;br /&gt;
    switch ( G100.PHASE )&lt;br /&gt;
        {&lt;br /&gt;
        case( DISABLED ):  return;  &lt;br /&gt;
        case( RUNONIP  &lt;br /&gt;
           if(Since.GetSeconds() &amp;gt; 1 &amp;amp;&amp;amp; !Engine-&amp;gt;EStop)  &lt;br /&gt;
           {&lt;br /&gt;
               Engine-&amp;gt;EStop = true;  //set an ??? &lt;br /&gt;
               Engine-&amp;gt;EStopReason = 12; &lt;br /&gt;
           }&lt;br /&gt;
           G100Mon-&amp;gt;Update();   &lt;br /&gt;
           break; //this will process IO and such..&lt;br /&gt;
        case( DISCOVERY ): DiscoveryLoop();&lt;br /&gt;
           break;  &lt;br /&gt;
        }&lt;br /&gt;
 } // myUpdate &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since the G100 variable &amp;lt;tt&amp;gt;PHASE&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;Discovery&amp;lt;/tt&amp;gt;, no other action will happen except discovery work.  SO the DiscoveryLoop is called repeatedly until the phase switches to &amp;lt;tt&amp;gt;RUNONIP&amp;lt;/tt&amp;gt;. Let's look at &amp;lt;tt&amp;gt;DiscoveryLoop&amp;lt;/tt&amp;gt; then.. &lt;br /&gt;
&lt;br /&gt;
It basically checks for what stage we’re in, and if the requirements of that stage have been met so we can progress to the next stage in discovery. &lt;br /&gt;
&lt;br /&gt;
 switch( G100.Discovered.Stage )&lt;br /&gt;
 {&lt;br /&gt;
    case( DISCNONE ):  //just a holder while we startup the discovery.. &lt;br /&gt;
        break;&lt;br /&gt;
    case( STAGE1 ):      G100.Discovered.Stage = STAGE2;&lt;br /&gt;
        res = g100sock-&amp;gt;SendTo( NULL, 0, 13887 ,&lt;br /&gt;
                               &amp;quot;255.255.255.255&amp;quot; , 0);&lt;br /&gt;
        if( res == SOCKET_ERROR )&lt;br /&gt;
        {&lt;br /&gt;
            error = g100sock-&amp;gt;GetLastError();&lt;br /&gt;
            G100.PHASE = DISABLED;&lt;br /&gt;
            G100.Disability = &amp;quot; Error Sending on      initial 13887 port.&amp;quot;;&lt;br /&gt;
            G100Mess-&amp;gt;DebugOut( G100.Disability );&lt;br /&gt;
            g100sock-&amp;gt;Close();&lt;br /&gt;
            fig = new G100Config();&lt;br /&gt;
            fig-&amp;gt;DoModal();&lt;br /&gt;
         }&lt;br /&gt;
         G100.Discovered.started = CTime::GetCurrentTime();&lt;br /&gt;
         G100.Discovered.ended =  CTime::GetCurrentTime();&lt;br /&gt;
         break;&lt;br /&gt;
    case( STAGE2) : // Here we'll check for a timeout on the initial discovery. &lt;br /&gt;
                    // We should have a response within a few seconds.&lt;br /&gt;
         G100.Discovered.ended = CTime::GetCurrentTime();...................&lt;br /&gt;
&lt;br /&gt;
Ok, So here is &amp;lt;tt&amp;gt;stage1&amp;lt;/tt1&amp;gt; being checked. We just set it to &amp;lt;tt&amp;gt;Stage1&amp;lt;/tt&amp;gt; earlier, now the discovery loop knows to send out the “Are you there” question and bump the stage to &amp;lt;tt&amp;gt;STAGE2&amp;lt;/tt&amp;gt;. Similarly, these stages will progress if the conditions are met until we hit the stage &amp;lt;tt&amp;gt;RUNONIP&amp;lt;/tt&amp;gt; where the system will begin normal operations. You can see in &amp;lt;tt&amp;lt;stage2&amp;lt;/tt&amp;gt; checking…&lt;br /&gt;
&lt;br /&gt;
    case( STAGE2) : // Here we'll check for a timeout on the initial discovery. &lt;br /&gt;
                    // We should have a response within a few seconds.&lt;br /&gt;
        G100.Discovered.ended = CTime::GetCurrentTime();&lt;br /&gt;
        sofar = G100.Discovered.ended - G100.Discovered.started;&lt;br /&gt;
        seconds = sofar.GetSeconds();&lt;br /&gt;
        if( seconds &amp;gt; 5 )&lt;br /&gt;
        {&lt;br /&gt;
            G100.Disability = &amp;quot; TimeOut in UDP Reception. No G100 Answered.&amp;quot;;&lt;br /&gt;
            G100Mess-&amp;gt;DebugOut( G100.Disability );&lt;br /&gt;
            G100.PHASE = DISABLED;&lt;br /&gt;
            g100sock-&amp;gt;Close();&lt;br /&gt;
            fig = new G100Config();&lt;br /&gt;
            fig-&amp;gt;DoModal();&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
It starts by checking the time to see if 5 seconds have passed. If we haven’t got a response from the G100 and the stage hasn’t been bumped to &amp;lt;tt&amp;gt;stage3&amp;lt;/tt&amp;gt; within 5 seconds, we will get an error. Each stage checks itself to make sure it hasn’t got hung up on an earlier stage: it will trigger a timeout message and that will open a dialog allowing the user to restart the discovery. So all this begs the question, what bumps it to &amp;lt;tt&amp;gt;stage3&amp;lt;/tt&amp;gt; so this timeout doesn’t happen?&lt;br /&gt;
&lt;br /&gt;
Most of the messageing in the G100 plugin is triggered by the incoming messages. The TCP class Im using is Event driven; that is to say you don’t need to poll for data, the functions PlugRecieve() will be called whenever a message comes in and we're not in &amp;lt;tt&amp;gt;RUNONIP&amp;lt;/tt&amp;gt; condition. So I use this function as a trigger to process incoming messages as well as to trigger events like stage checking. Lets look at it..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 void PlugReceive( char *Buffer, int m_size )&lt;br /&gt;
 {&lt;br /&gt;
 if( ShutDown ) return;&lt;br /&gt;
        //&lt;br /&gt;
        //                   Discovery Traffic Message Handing&lt;br /&gt;
        //&lt;br /&gt;
 if( m_size == sizeof( WTConfig ) &amp;amp;&amp;amp; G100.Discovered.Stage == STAGE2 ) &lt;br /&gt;
                                 //Is this a config packet responce??&lt;br /&gt;
 {                               //and are we lookign for one? If not, discard.&lt;br /&gt;
    memcpy( &amp;amp;G100.Config, Buffer, m_size );&lt;br /&gt;
    G100.Discovered.Stage = STAGE3; //we now have the G100 config. &lt;br /&gt;
                              // Switch to Stage 3, IP RUN switchover or error checking&lt;br /&gt;
                              //of the IP. &lt;br /&gt;
    if( G100.Config.version == VERSION_DLM ) //check that the firmware is running..&lt;br /&gt;
    {&lt;br /&gt;
        G100.PHASE = DISABLED;&lt;br /&gt;
        G100.Disability = &amp;quot; G100 not running firmware. Reboot G100&amp;quot;;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 // if we're waiting for first IP responce, lets tell Discovery worker&lt;br /&gt;
 // that we are now fully connected. &lt;br /&gt;
 if( G100.Discovered.Stage == STAGE4 )&lt;br /&gt;
 {&lt;br /&gt;
      //We are getting Stage4 traffic, so bump to Stage 5. We're done with discovery;&lt;br /&gt;
    G100.Discovered.Stage = STAGE5;&lt;br /&gt;
    return;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see it is bumping the stages up until finally we hit &amp;lt;tt&amp;gt;stage5&amp;lt;/tt&amp;gt; when we will switchover to &amp;lt;tt&amp;gt;RUNONIP&amp;lt;/tt&amp;gt;, which is the normal run time of the plugin. All of this from config to full discovery takes about 3-5 seconds after startup depending on the system. So now we have a running TCP link, and message traffic is OK to go. We have a send message routine, and this function will now process messages with the remainder of its function.&lt;br /&gt;
&lt;br /&gt;
 //&lt;br /&gt;
 // RUNONIP stage message handling. &lt;br /&gt;
 // This will be the normal incoming traffic&lt;br /&gt;
 // We only reach here with normal incoming traffic. &lt;br /&gt;
 //&lt;br /&gt;
    memcpy( &amp;amp;InMessage, Buffer, m_size );   &lt;br /&gt;
                            //first copy the entire message into the message structure.&lt;br /&gt;
    G100.Window =  ((InMessage.Header.chanflgs &amp;amp; UCHAN_WNDO) &amp;amp; 0x07); &lt;br /&gt;
                            //set the max message window for the input buffer of the rabbit. &lt;br /&gt;
    G100.LastMessageTime = CTime::GetCurrentTime();&lt;br /&gt;
                       //If we get a less than 6 byte messge, we have a sequence error..!!&lt;br /&gt;
    if( m_size &amp;lt;=  6) &lt;br /&gt;
    {&lt;br /&gt;
         //Message Loss Error Usually happens at high traffic..&lt;br /&gt;
        int lost = InMessage.Header.seq;&lt;br /&gt;
        G100Mess-&amp;gt;LostMessage( lost );&lt;br /&gt;
    } else&lt;br /&gt;
    {&lt;br /&gt;
        G100Mess-&amp;gt;AckMessage( InMessage.Header.ack );&lt;br /&gt;
        G100TranslateMessage( InMessage, m_size ); &lt;br /&gt;
    }&lt;br /&gt;
 //Messages have now been decoded, all G100 states shoudl be set accordingly. &lt;br /&gt;
                 // So lets update the Message Tracker so it knows&lt;br /&gt;
                 // its limitations based on any new information&lt;br /&gt;
  G100Mess-&amp;gt;Update(); //this doesnt send anythign, &lt;br /&gt;
                //it just ensures the tracker knows how much it CAN send if needs be.&lt;br /&gt;
                //So now lets send any output that is required. &lt;br /&gt;
                //The translations above have set the parameters in the G100 Block&lt;br /&gt;
                // to tell us it is now necessary to transmit an output message. &lt;br /&gt;
 if( G100.NeedDigOutputs ) DoDigOutput();&lt;br /&gt;
                                     //and analogue as well&lt;br /&gt;
 if( G100.NeedAnaOutputs ) DoAnalogOutput();&lt;br /&gt;
                                     //If we're Jogging, lets refresh the Jog..&lt;br /&gt;
 if( G100.InJog ) Rejog();&lt;br /&gt;
                                     //We really only need to send Inputs &amp;amp; Outputs &lt;br /&gt;
                                     //every 1/4 second or so. So we'll just nudge it&lt;br /&gt;
                                     // here to do a send if there is one holding..&lt;br /&gt;
 DoGcodeMove();                      //take care of any waiting Gcode movement;&lt;br /&gt;
 if( G100Mess-&amp;gt;nMessages &amp;gt; 0 ) G100Mess-&amp;gt;SendMessages();&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see, now we have a set of routines that check G100 specific protocol, such as checking the message size. If it's less than 6 bytes, an error has occurred in transmision and error handlers get called. If it is more than 6, then it will Ack the message to the state routines, and translate it for processing. It will also run &amp;lt;tt&amp;gt;G100Mess-&amp;gt;Update&amp;lt;/tt&amp;gt; which will do things such as send any holding messages and such. Most of this is unimportant to USB and Serial authors, perhaps.. But it is an idea of how the message traffic is controlled. I set up a link, then continuously buffer messages, which are sent and acknowledged, translated, and dealt with in the routines we've discussed.&lt;br /&gt;
&lt;br /&gt;
=== Problem #2: How do I control IO traffic/ ===&lt;br /&gt;
&lt;br /&gt;
Mach3, in its 10Hz loop, looks at all incoming and outgoing I/O requirements. If a spindle needs to be turned on, or an input needs to be acknowledged, it is done in the 10hz loop, but can be done anytime. &lt;br /&gt;
&lt;br /&gt;
In our case, the G100 is sending a status message every 250ms telling us the current input and output conditions. When we look at the &amp;lt;tt&amp;gt;G100TranslateMessage( InMessage, m_size );&amp;lt;/tt&amp;gt; from the Receiving loop of the PlugIn we can see the IO being checked.&lt;br /&gt;
&lt;br /&gt;
 switch( InMessage.Header.type )&lt;br /&gt;
 {&lt;br /&gt;
 case WT_MONITOR:&lt;br /&gt;
      mon = (WTMonitor*) &amp;amp;InMessage.Message;  &lt;br /&gt;
      G100Mon-&amp;gt;OnMonitorMessage( mon );&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_FULL:&lt;br /&gt;
      status = (WTMsFull*) &amp;amp;InMessage.Message;  &lt;br /&gt;
      FillFromFullStatus( *status );&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_OUTIN:&lt;br /&gt;
      oi = (WTMsOutIn*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckInputs(oi-&amp;gt;in ); //active&lt;br /&gt;
      CheckOutputs( oi-&amp;gt;out ); //active&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_ASYNC: &lt;br /&gt;
      asyn = (WTMsAsync*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckQueueCap( asyn-&amp;gt;qcap ,true );   &lt;br /&gt;
      CheckRELPosition( asyn-&amp;gt;pos ); //active&lt;br /&gt;
      CheckCurrentState( asyn-&amp;gt;qstate );&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_POS: &lt;br /&gt;
      pos = (WTMsPos*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckRELPosition( *pos ); //active&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_CTR: &lt;br /&gt;
      ctr = (WTMsCtr*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckEncoders( *ctr ); //active&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_IN:&lt;br /&gt;
      in = (WTMsIn*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckInputs( *in );&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_OUT:&lt;br /&gt;
      out = (WTMsOut*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckOutputs( *out ); //active&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_ABS:&lt;br /&gt;
      abs = (WTMsAbs*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckABSPosition( *abs ); //active&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_QSTAT:&lt;br /&gt;
      stat = (WTMsQstat*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckCurrentState( *stat );&lt;br /&gt;
      break;&lt;br /&gt;
 case WT_MS_QCAP:&lt;br /&gt;
      cap = (WTMsQcap*)&amp;amp;InMessage.Message; &lt;br /&gt;
      CheckQueueCap( *cap , true );  //check the queue capacity&lt;br /&gt;
      break;&lt;br /&gt;
 default:  &lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This loop looks at incoming message types. The input messages are &amp;lt;tt&amp;gt;WT_MS_IN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;WT_MS_OUT&amp;lt;/tt&amp;gt; so they call &amp;lt;tt&amp;gt;CheckInputs( *in )&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;CheckOutputs( *out )&amp;lt;/tt&amp;gt; when needed. These routines look at the incoming bits and compare them to what Mach3 has; same for outputs. Lets look at outputs for example.&lt;br /&gt;
&lt;br /&gt;
 void CheckOutputs( WTMsOut out   )&lt;br /&gt;
 {&lt;br /&gt;
    bool On = false;&lt;br /&gt;
    G100.NeedDigOutputs = false;&lt;br /&gt;
    unsigned int outs = 0;&lt;br /&gt;
    for( int x = 0; x&amp;lt; nSigsOut; x++ )&lt;br /&gt;
    {&lt;br /&gt;
        if( Engine-&amp;gt;OutSigs[x].OutPort == 1 &amp;amp;&amp;amp;&lt;br /&gt;
               Engine-&amp;gt;OutSigs[x].active &amp;amp;&amp;amp;&lt;br /&gt;
               Engine-&amp;gt;OutSigs[x].OutPin &amp;gt;= 1 &amp;amp;&amp;amp;&lt;br /&gt;
               Engine-&amp;gt;OutSigs[x].OutPin &amp;lt; 17 )  //pins 1-16&lt;br /&gt;
        {&lt;br /&gt;
            On =  Engine-&amp;gt;OutSigs[x].Activated;&lt;br /&gt;
            if( Engine-&amp;gt;OutSigs[x].Negated) On = !On;&lt;br /&gt;
                                      //On is now true or false depending on the current state&lt;br /&gt;
            SetBit( outs, On, Engine-&amp;gt;OutSigs[x].OutPin); //set the bit in the output..&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if( out.o != outs ) G100.NeedDigOutputs = true;&lt;br /&gt;
    G100.NeedAnaOutputs = false;&lt;br /&gt;
    if( (unsigned short)MainPlanner-&amp;gt;ModOutputs[124] != out.aout[0] || &lt;br /&gt;
                                         //analogue outputs from analogue holding registers.&lt;br /&gt;
             (unsigned short)MainPlanner-&amp;gt;ModOutputs[125] != out.aout[1] ||&lt;br /&gt;
             (unsigned short)MainPlanner-&amp;gt;ModOutputs[126] != out.aout[2] || &lt;br /&gt;
                                         //analogue #3 seems unable to accept data&lt;br /&gt;
             (unsigned short)MainPlanner-&amp;gt;ModOutputs[127] != out.aout[3])&lt;br /&gt;
       G100.NeedAnaOutputs = true; &lt;br /&gt;
 }; //outputs&lt;br /&gt;
&lt;br /&gt;
Mach3 has a variable block in the engine (seen in Engine.h) which has all the various output signals. &amp;lt;tt&amp;gt;Engine-&amp;gt;OutSigs[x]&amp;lt;/tt&amp;gt;, this block is checked against the reported output of the G100. The end result of all this checking is &amp;lt;tt&amp;gt;G100.NeedDigOutputs = true&amp;lt;/tt&amp;gt;; if the outputs are not in sync with what Mach3 knows should be set. The system will then (because this variable is set to true) send a message to the G100 to tell it to update the outputs to match Mach3. This same process is seen for inputs and outputs.&lt;br /&gt;
&lt;br /&gt;
So in summary: Each time the G100 sends an input or output status, it is checked against required status, and a setoutput message is sent if the outputs are not aligned with expectations. If we look at inputs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 void CheckInputs( WTMsIn In ) &lt;br /&gt;
 {&lt;br /&gt;
    In.i = ShuffleInWord( In.i); //shuffle the input word.. &lt;br /&gt;
    G100.InWord = In.i;&lt;br /&gt;
    bool On = false;&lt;br /&gt;
    for( int x = 0; x&amp;lt; nSigs; x++ )&lt;br /&gt;
    {&lt;br /&gt;
         if( Engine-&amp;gt;InSigs[x].InPort == 1 &amp;amp;&amp;amp;&lt;br /&gt;
                Engine-&amp;gt;InSigs[x].Active &amp;amp;&amp;amp;&lt;br /&gt;
                Engine-&amp;gt;InSigs[x].InPin &amp;gt;= 1 &amp;amp;&amp;amp;&lt;br /&gt;
                Engine-&amp;gt;InSigs[x].InPin &amp;lt; 23 )&lt;br /&gt;
         {&lt;br /&gt;
             On = ((In.i &amp;gt;&amp;gt;  (Engine-&amp;gt;InSigs[x].InPin -1)) &amp;amp; 0x01);&lt;br /&gt;
             Engine-&amp;gt;InSigs[x].Activated = On;&lt;br /&gt;
             if( Engine-&amp;gt;InSigs[x].Negated ) Engine-&amp;gt;InSigs[x].Activated = !On;&lt;br /&gt;
         }&lt;br /&gt;
         if( x &amp;lt; 64 )&lt;br /&gt;
         {&lt;br /&gt;
            int mask = 1 &amp;lt;&amp;lt; x;&lt;br /&gt;
            if( (Engine-&amp;gt;WaitCondition &amp;amp; mask) &amp;gt; 0 )&lt;br /&gt;
                if( Engine-&amp;gt;InSigs[x].Active &amp;amp;&amp;amp; Engine-&amp;gt;InSigs[x].Activated )&lt;br /&gt;
                                            //to make Mach3 waitcondition work..&lt;br /&gt;
                          Engine-&amp;gt;WaitCondition &amp;amp;= ( 0xffffffff ^ mask );&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     MainPlanner-&amp;gt;ModInputs[124] = In.ain[0]; &lt;br /&gt;
                             //analogue inputs to the analogue holding registers.&lt;br /&gt;
     MainPlanner-&amp;gt;ModInputs[125] = In.ain[1];&lt;br /&gt;
     MainPlanner-&amp;gt;ModInputs[126] = In.ain[2];&lt;br /&gt;
     MainPlanner-&amp;gt;ModInputs[127] = In.ain[3];&lt;br /&gt;
 };  //inputs&lt;br /&gt;
&lt;br /&gt;
We can see the inputs are retrieved as bits, then shuffled into the &amp;lt;tt&amp;gt;Engine-&amp;gt;inSigs[n]&amp;lt;/tt&amp;gt; variable block so that Mach3 knows what signal is set and when. It will take care of the rest. If an input has been set, Mach3 will deal with it appropriately. If a particular input means '''your''' hardware needs to perform a particular function, you should then perform it.&lt;br /&gt;
&lt;br /&gt;
=== Problem #3 :  How Do I get Movement? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SO we now have seen how Inputs and Outputs are done. Now we have to create movement. The hard part! First, let's consider what Mach3 does for movement. There are two types; Jogging and Trajectory movement. Each is very important, and many don’t consider the importance of Jogging highly enough. The tactility of Jogging is not to be underestimated to make hardware use less frustrating. So first, we’ll take a look as how jogging is done in a g100 system.&lt;br /&gt;
&lt;br /&gt;
Any external device will require code to do its jogging. Mach3 only cares about two things, first that it be told jogging is underway so it will not attempt other movement functions, and second that when jogging stops, that it be told so, in order to update its position registers with proper position. Mach keeps track of its position as an integer value of current number of steps put out. Those values can be updated automatically, by setting the variable &amp;lt;tt&amp;gt;Engine-&amp;gt;Sync&amp;lt;/tt&amp;gt; to true. This value will change back to false when Mach3 completes the syncing operation. &lt;br /&gt;
&lt;br /&gt;
The routines, &amp;lt;tt&amp;gt;void MyJogOn( short axis, short direction, double SpeedNorm)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;void  MyJogOff(short axis)&amp;lt;/tt&amp;gt; are called directly from Mach3 to the ExternalMovement.cpp file in order to control Jogging.&lt;br /&gt;
 &lt;br /&gt;
The meanings are obvious, except perhaps for the &amp;lt;tt&amp;gt;SpeedNorm&amp;lt;/tt&amp;gt; value in the jogon call. This value will be zero if normal jog speed is desired, and will be a value if a special speed is to be used. The routine also checks to see if the Keyboard is actively holding down the shift key. This is used to override the &amp;lt;tt&amp;gt;_setup-&amp;gt;JogPercent&amp;lt;/tt&amp;gt; value (which Mach3 maintains to tell the plugin writer what % of maximum speed should be used for this jog operation.) In other words, if the JogOn routine gets called and the keyboard is not shifted, and the &amp;lt;tt&amp;gt;SpeedNorm&amp;lt;/tt&amp;gt; is zero, then Jog will be at (JogPerCent/100)* MainPlanner-&amp;gt;Velocities[axis]. &amp;lt;tt&amp;gt;MainPlanner-&amp;gt;Velocities[axis]&amp;lt;/tt&amp;gt; is the holder for the maximum speed an axis is programmed to go. If the shift key is held, then that’s the speed which will be used. IF &amp;lt;tt&amp;gt;SpeedNorm&amp;lt;/tt&amp;gt; is set, then that’s the speed the jog should be performed at. This is used for some special circumstances where jog must be controlled at a finer rate.&lt;br /&gt;
&lt;br /&gt;
The routine MyJogOff(axis) will stop a jog in progress. In there, you will see that when all jogs are stopped, a call is made to resync positions by setting that variable &amp;lt;tt&amp;gt;Engine-&amp;gt;Sync = true&amp;lt;/tt&amp;gt;. Mach3 will then resync all its internal positions to be accurate when it sees all movement has stopped. &lt;br /&gt;
&lt;br /&gt;
What about GCode movement?  Well, we’ve seen that jogging is just a commanded movement to the external device. The G100 requires that this be confirmed every 250ms, so you'll see code in there to allow for the jogging messages to be re-sent every 250ms to keep jogging active. This is a safety; your hardware may not have that option. GCode movement is easy to get, but its difficulty in sending to your device depends a lot on the device. Lets look at the routine called &amp;lt;tt&amp;gt;void  DoGcodeMove()&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This routine gets called every time a message comes in from the G100, it can be called as frequenctly as you wish. It has one job, to see if movement is holding, and if so, to send it out. Mach3 buffers up movements and holds them in a ring buffer. Mach will stop buffering movement when either the buffer is full, or no more movement exists. A plugin basically just sits around sending I/O messages, checking the IO is proper, jogging or stopping jogging. It only needs to know that when the Gcode buffer is not empty; it needs to empty it by sending the data. It starts with this line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if( Engine-&amp;gt;TrajHead == Engine-&amp;gt;TrajIndex || Engine-&amp;gt;DwellTime &amp;gt; 0) return; //no moves to process&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Engine-&amp;gt;TrajHead&amp;lt;/tt&amp;gt; is the head of a ringbuffer, &amp;lt;tt&amp;gt;TrajIndex&amp;lt;/tt&amp;gt; is the tail. If these two values are the same, no data is holding. If &amp;lt;tt&amp;gt;DwellTime&amp;lt;/tt&amp;gt; is not zero then we are dwelling and no movement should be sent. (Unless the device can buffer it up until the dwell is complete. It is up to the author of the plugin to make sure he sends no more information to the external device than it can handle. You’ll see queue size checks in the G100 code to do this. Most of the code in this routine can be ignored by other programmers, the important thing is to be able to tell if movement is holding, and if so, how to get it. The &amp;lt;tt&amp;gt;TrajIndex&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;TrajHead&amp;lt;/tt&amp;gt; check will tell you if it is holding. To get it you need only reach into the ring buffer with a call like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CurrentMove = MainPlanner-&amp;gt;Movements[Engine-&amp;gt;TrajIndex]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;CurrentMove&amp;lt;/tt&amp;gt; variable is a &amp;lt;tt&amp;gt;GMoves&amp;lt;/tt&amp;gt; structure. Youll see it in the trajectorycontrol.h file. Its structure is: &lt;br /&gt;
&lt;br /&gt;
 struct GMoves&lt;br /&gt;
 {&lt;br /&gt;
    int type;    // 0 is linear, 1 is cubic&lt;br /&gt;
    double cx,cy,cz; // center of move for cubics. &lt;br /&gt;
    double ex,ey,ez,ea,eb,ec;&lt;br /&gt;
    double sx,sy,sz,sa,sb,sc;&lt;br /&gt;
    __int64  DDA1[6]; //DDA1's for cubics&lt;br /&gt;
    __int64  DDA2[6];&lt;br /&gt;
    __int64  DDA3[6];&lt;br /&gt;
    double Time;&lt;br /&gt;
    bool   Stop;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The ring buffer is up to 2048 entries long. So there are 2048 (or less) GMove structures for you to send. You grab them one at a time and send the move to your device. Lets take a look at what information is in the entry. &lt;br /&gt;
&lt;br /&gt;
“type” is a 1 or zero to tell you if this move is part of a line or arc.&lt;br /&gt;
 &lt;br /&gt;
Cx,cy,cz are the center corrdinates if this is an arc.&lt;br /&gt;
 &lt;br /&gt;
Ex,ey,ez,ea,eb,ec are the end points of this move in machine coordinates.&lt;br /&gt;
 &lt;br /&gt;
Sx,sy,syz… are the start points of the move. &lt;br /&gt;
&lt;br /&gt;
Time is the time of the move in ms. These moves will all be 1-64ms long depending on the move. No move will be longer than 64ms. Since the time of the move is in the structure, acceleration has already been taken care of. Same with velocity. The velocity will be the change in position over time, and the acceleration is built in by the change in velocity from one move to the next. How you deal with this will depend on the hardware.&lt;br /&gt;
 &lt;br /&gt;
The DDA1,2 and 3 variables are specific to the G100, but can be used by other hardware. They are a “Differential Data Derivative” of a cubic move. In the case of the G100, only cubics are sent as moves, even if only a straight line. A DDA is a way of making a frequency based axis move in a straight line or a curve. They contain speed data over time with kick and jerk information to create a curved move. These DDA’s are computed froma fast Bezier curve routine to best approximate the move requested. DDA1,DDA2 and DDA3 are computed for every move. The way they work is a bit complex (or simple depending on the reader.  )&lt;br /&gt;
&lt;br /&gt;
Take a move like: &lt;br /&gt;
&lt;br /&gt;
 DDA1 = 10000&lt;br /&gt;
 DDA2 = 5&lt;br /&gt;
 DDD3 = -1&lt;br /&gt;
 Time = 7&lt;br /&gt;
&lt;br /&gt;
This would create a curve.  DDA1 is the initial velocity to be put out in the move in the first 1ms of movement. Each ms of movement that occurs, DDA2 is added to that velocity AND DDA3 is added to DDA2. So during the 5ms of this commanded move: &lt;br /&gt;
&lt;br /&gt;
 Time in ms            FrequencyVariable              DDA2           DDA3&lt;br /&gt;
&lt;br /&gt;
       1                      10000                     5            -2&lt;br /&gt;
       2                      10005                     3            -2&lt;br /&gt;
       3                      10008                     1            -2&lt;br /&gt;
       4                      10009                    -1            -2 &lt;br /&gt;
       5                      10008                    -3            -2&lt;br /&gt;
       6                      10005                    -5            -2&lt;br /&gt;
       7                      10000                    -7            -2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  So as you can see in this 7ms movement, the speed has gone up and down in ms increments. And it's done all in the hardware with no intervention by Mach3. This allows a sub acceleration of 1ms control. Having two axes (or more) vary their speed is in essence a circular arc movement. The DDA’s are computed to ensure the movement is always a circular arc (though ellipsoids and such would be possible).&lt;br /&gt;
&lt;br /&gt;
More information is available on the DDA’s in the file G200x.h which is the header file for the G100 firmware. Here is a brief explanation from that file:&lt;br /&gt;
&lt;br /&gt;
 /* This segment is intended for efficient generation of arcs and curved&lt;br /&gt;
 motion.  The math is simple: at each iteration (1024Hz rate) the&lt;br /&gt;
 following operations are performed in sequence:&lt;br /&gt;
     &amp;lt;current velocity&amp;gt; = dda1&lt;br /&gt;
     dda1 += dda2&lt;br /&gt;
     dda2 += dda3&lt;br /&gt;
 At T=0, all ddas are set to the value in this message.&lt;br /&gt;
 After T iterations of this algorithm,&lt;br /&gt;
     &amp;lt;pos&amp;gt; = &amp;lt;start pos&amp;gt; + dda3*T*(T-1)*(T-2)/6 + dda2*T*(T-1)/2 + dda1*T&lt;br /&gt;
     dda1 = dda3*T*(T-1)/2 + dda2*T + dda1&lt;br /&gt;
     dda2 = dda3*T + dda2&lt;br /&gt;
     dda3 = &amp;lt;unchanged&amp;gt;&lt;br /&gt;
 where the right hand side dda's are the initial values.&lt;br /&gt;
 Linear motion (with dda2=dda3=0) may run for 65536 iterations (the max) with&lt;br /&gt;
 no loss of accuracy.  Parabolic motion (dda3=0, dda2 != 0) may also run&lt;br /&gt;
 for this many iterations.  General cubic motion may run for about 4096&lt;br /&gt;
 iterations, after which there may be some rounding error. (Rounding&lt;br /&gt;
 error is defined as more than 1/2 an output step.)&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
Your planner does not need to use DDA’s, though the information is there if you care to and it matches your hardware. You can just use the 64ms movement coordinates just as easily. Since there are up to 2048 entries in the buffer, there is up to 131 seonds of movement that could be sent to buffer up the device, but at the moment, I create only a maximum of 2 seconds worth at any time, so its important to keep calling the DoGCode routine (or whatever yours is called) in order to keep your device buffer full.&lt;br /&gt;
 &lt;br /&gt;
Once you use a ring buffer element, increment the Index pointer with: &amp;lt;tt&amp;gt;Engine-&amp;gt;TrajIndex++;&lt;br /&gt;
 Engine-&amp;gt;TrajIndex &amp;amp;= 0xfff; &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This keeps it synced to the next move available and informs mach3 in its 10hz loop to add more data if it needs to.&lt;br /&gt;
&lt;br /&gt;
== Summary==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So to control a plugin, you need to interface only a few functions: Jog, GCode movment when data appears, and I/O. Reading the G100 plugin will show you various variables used for syncing, or developing positional data that Mach3 needs as feedback. Check and read the message translators in Decoders.cpp to see how each of the incoming messages deals with updating Mach3 as to what has been set in inputs, what the current position is for the engine, and other semaphores used. When you see a line like &amp;lt;tt&amp;gt;TajectoryControl-&amp;gt;&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;_setup-&amp;gt;&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;Engine-&amp;gt;&amp;lt;/tt&amp;gt;, these are calls back to Mach3’s variables to tell Mach3 whats going on. There are not many of them though; most operations are autonomous. Mach3 runs, sets movements in the buffers and calls &amp;lt;tt&amp;gt;JogOn&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;JogOff&amp;lt;/tt&amp;gt; when appropriate. You need only to make the moves happen, and tell Mach3 what you did. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will undoubtedly have questions as you go. The G100 source code is the best place to see how I handled various situations, such as homing and such, but feel free to email me your questions as they arise and please edit this wiki article to clarify any point that you eventually understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Art Fenerty (PlugIn author)&lt;br /&gt;
Artsoft Inc.&lt;br /&gt;
&lt;br /&gt;
Initial text put into wiki format (without adding too many errors, I hope) by John Prentice&lt;/div&gt;</description>
			<pubDate>Tue, 08 Aug 2006 08:31:11 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:The_G100/GREX_plugin_as_a_model_for_device_control</comments>		</item>
		<item>
			<title>Introduction</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Introduction</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To be provided - Anyone volunteer?&lt;/div&gt;</description>
			<pubDate>Tue, 08 Aug 2006 08:19:46 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Introduction</comments>		</item>
		<item>
			<title>Mach3 Plugins</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach3_Plugins</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This chapter is to document available &amp;quot;model&amp;quot; plugins and the techniques used in writing them.&lt;br /&gt;
&lt;br /&gt;
Most of the articles in here will assume that you are a C++ programmer. If you are not then you need to look for a plugin already developed to suit your needs. The Yahoo! group and/or Mach Forum would be a good place to start.&lt;br /&gt;
&lt;br /&gt;
#[[Introduction]]&lt;br /&gt;
#[[Index of Plugins that have been developed]]&lt;br /&gt;
#[[The G100/GREX plugin as a model for device control]]&lt;br /&gt;
#[[Plugin Documentation]]&lt;/div&gt;</description>
			<pubDate>Tue, 08 Aug 2006 08:19:00 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach3_Plugins</comments>		</item>
		<item>
			<title>Index of Plugins that have been developed</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Index_of_Plugins_that_have_been_developed</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This list may be of use to identify Mach3 Plugins as they are released and to minimise duplication of DLL file names.&lt;br /&gt;
&lt;br /&gt;
Authors are encouraged to add their own entries (You jneed a username to login to the wiki and go to the Edit tab). I know that the markup language for wiki tables is a bit nasty but if you can code MFC dialogs then you can probably have enough &amp;quot;greycells&amp;quot; to work it out&lt;br /&gt;
&lt;br /&gt;
Users are encouraged to try the Plugins on the understanding that the terms under which they are contributed are solely the responsibility of the creator - some will be free, some licensed, some will be Alpha, some well tested and supported products. This list is not moderated or approved by any person or organisation. We hope it is useful but you use it at your own risk - a CNC machine can turn man-eating if badly treated.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding = &amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;20&amp;quot;|DLL name&lt;br /&gt;
!width=&amp;quot;50&amp;quot;|Function&lt;br /&gt;
!width=&amp;quot;24&amp;quot;|Author&lt;br /&gt;
!width=&amp;quot;12&amp;quot;|Status&lt;br /&gt;
!width=&amp;quot;64&amp;quot;|Link&lt;br /&gt;
|-&lt;br /&gt;
|BlankDevice.dll||A skeleton set of code||ArtSoft||Stable||[http://www.machsupport.com/downloads.php In SDK release]&lt;br /&gt;
|-&lt;br /&gt;
|JoyStick.dll||A Windows joystick jog controller||Artsoft||Beta||[http://www.machsupport.com/downloads.php In SDK release]&lt;br /&gt;
|-&lt;br /&gt;
|JoyStick.dll||A variant on Art's joystick||Junior||Beta||[http://www.machsupport.com/forum/ in Forum]&lt;br /&gt;
|-&lt;br /&gt;
|ModIO-1.dll||Support for ModIO as IO device||[mailto::john@castlewd.freeserve.co.uk japrentice]||Design||not avail.&lt;br /&gt;
|-&lt;br /&gt;
|ARCNC100.dll||ARCNC100 Controller||[http://atelierrobin.net atelierrobin.net]||Development||not avail.&lt;br /&gt;
|}&lt;/div&gt;</description>
			<pubDate>Fri, 02 Jun 2006 08:45:48 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Index_of_Plugins_that_have_been_developed</comments>		</item>
		<item>
			<title>SDK Variables</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=SDK_Variables</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Following is a list of brief explanations of the contents of the ENGINE block variable in the Mach3 SDK.&lt;br /&gt;
&lt;br /&gt;
The Engine-&amp;gt; variable contains all the variables used to communicate with the Ring0 driver&lt;br /&gt;
which does all the work with Printer ports. In addition, this block of variables is used for&lt;br /&gt;
simulation modes, and to create a standard point of reference even for non-printer port modes &lt;br /&gt;
such as the G100 operating mode. When no driver is loaded, the program applies various algorithms&lt;br /&gt;
to this data to create a runtime simulation of the printer port running. This Block then may be &lt;br /&gt;
considered as a very important one in Mach3, and is responsible for a great deal of its Driver functionallity.&lt;br /&gt;
&lt;br /&gt;
First, we have some structures, (All this information can be found in the &amp;quot;Engine.h&amp;quot; file, but this Wiki entry will&lt;br /&gt;
attempt to better document them. Users are invited to add annotations to qualify their use, or point out limitations&lt;br /&gt;
to their use as they are discovered. &lt;br /&gt;
&lt;br /&gt;
This structure is used for all output signals. Not only printer port, but ModIO and G100, just with different port numbers typically. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The structures are also documented (in a different fashion and slightly differently) in [[Engine.h]].  This page is older than the [[Engine.h]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 struct OutputInfo&lt;br /&gt;
 {&lt;br /&gt;
        bool active;            // Is this output Active (Enabled) or Not?&lt;br /&gt;
        char OutPin;            // What Pin? Any number from 0 -255&lt;br /&gt;
        char OutPort;           // What port, again any number from 0 - 255, BUT the&lt;br /&gt;
                                // printer driver will ignore any inappropriate to the&lt;br /&gt;
                                // printer port.&lt;br /&gt;
        bool Negated;           // Low Active or High Active. Expectation of the voltage&lt;br /&gt;
                                // level to trigger the following boolean..&lt;br /&gt;
        bool Activated;         // True when the voltage level equals the above setting.&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 // input signal structure&lt;br /&gt;
 struct  InputInfo&lt;br /&gt;
 {&lt;br /&gt;
       bool  Active;            // signal active?&lt;br /&gt;
       char  InPin;             // which Pin&lt;br /&gt;
       char  InPort;            // which Port&lt;br /&gt;
       bool  Negated;&lt;br /&gt;
       int   ReqState;          // Required State on Activation (Not used at present., &lt;br /&gt;
                                // may be used by a PlugIn at will.&lt;br /&gt;
       bool  Activated;         // Set by the pinter driver (Or ModIO, or G100) &lt;br /&gt;
                                // to indicate an input is seen matching conditions. &lt;br /&gt;
       bool  Emulated;          // If True, then the emulation key will trigger an&lt;br /&gt;
                                // Activated condition..&lt;br /&gt;
       int   EmulationKey;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // encoder inputs&lt;br /&gt;
 //&lt;br /&gt;
 // Following is set by G100, or printer port, as well as ModIO sections &lt;br /&gt;
 // to set condition for the encoder. &lt;br /&gt;
 // Only the printer drivers will use anything other than count[0] which is total encoder&lt;br /&gt;
 // count.&lt;br /&gt;
 //&lt;br /&gt;
 struct Encoder&lt;br /&gt;
 {&lt;br /&gt;
       bool Active;             // is the encoder turned on?&lt;br /&gt;
       int  APin;               // A Pin designations&lt;br /&gt;
       int  BPin;               // B Pin designations&lt;br /&gt;
       int  APort;              // A Pin Ports&lt;br /&gt;
       int  BPort;              // B Pin Ports&lt;br /&gt;
       bool LastStateA;&lt;br /&gt;
       bool LastStateB;         // storage for the last known state&lt;br /&gt;
       int  Count[2];           // Index counts for each encoder&lt;br /&gt;
       int  Memory[16];         // Unused. Free for plugins.&lt;br /&gt;
       int  ActiveMemory;&lt;br /&gt;
       int  Color;              // Unusaed. May be used by Plugins.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // axis information structure, 7 axis, 7th is spindle..&lt;br /&gt;
 struct AxisInfo&lt;br /&gt;
 {&lt;br /&gt;
       int  Index;              // Current Count&lt;br /&gt;
       int  MasterIndex;&lt;br /&gt;
       char StepPin;           // Pin for step pulse&lt;br /&gt;
       char DirPin;            // Pin for Direction Pulse&lt;br /&gt;
       char StepPort;          // Port # for step&lt;br /&gt;
       char DirPort;           // Port # for Direction&lt;br /&gt;
       bool StepNegate;        // low active step?&lt;br /&gt;
       bool DirNegate;         // low active Direction?&lt;br /&gt;
       int  CurVelocity;       // Current Velocity&lt;br /&gt;
       int  MaxVelocity;       // Current Max Velocity (jogging )&lt;br /&gt;
       int   MasterVelocity;   // Master Velocity...Maximum Velocity in all circumstances.&lt;br /&gt;
       int   Acceleration;     // Acceleration&lt;br /&gt;
       bool  AtSpeed;          // At Speed Currently&lt;br /&gt;
       bool  Acc;              // Accelerating?&lt;br /&gt;
       bool  Dec;              // Decelerating?&lt;br /&gt;
       bool  Enable;           // Axis Enabled?&lt;br /&gt;
       bool  Jogging;          // Jogging On?&lt;br /&gt;
       int   JoggDir;          // Direction of Jog;&lt;br /&gt;
       bool  Homing;           // is this a homing jog?&lt;br /&gt;
       bool  DeRef;            // Dereferanceing Move? (move off switch)&lt;br /&gt;
       int   Memory[6];        // 6 memory variables, unused. May be used for plugins..&lt;br /&gt;
       int   ActiveMemory;     //index for memories. Unused. &lt;br /&gt;
       int   Color;&lt;br /&gt;
       int   TripCount;&lt;br /&gt;
       int   DepthCount;&lt;br /&gt;
       bool  Probing;&lt;br /&gt;
       bool  Slave;&lt;br /&gt;
       int   SlaveAxis;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 struct TrajPoint&lt;br /&gt;
 {&lt;br /&gt;
       int Points[6];&lt;br /&gt;
       int Command;&lt;br /&gt;
       int ID;&lt;br /&gt;
       char shifter[6];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 struct TrajBuffer{&lt;br /&gt;
       TrajPoint Trajectories[0x1000];&lt;br /&gt;
       int   TrajIndex;	             // Trajectory buffer current Index&lt;br /&gt;
       int   TrajHead;		     // Trajectory buffer Fill point&lt;br /&gt;
       int   uSecStep;               // clock count for step signal&lt;br /&gt;
       int   uSecDir;                // clock count for pre-raising the direction bit;&lt;br /&gt;
       double LastCommandPos[6];     // End position as of last movement. &lt;br /&gt;
       bool  Configured;             // Engine is now configured. &lt;br /&gt;
       bool  Busy;                   // Not used. &lt;br /&gt;
       bool  Idle;                   // Not used. &lt;br /&gt;
       bool  Emergency;              // Emergency Condition..this is not Estop..do not use.&lt;br /&gt;
       bool  Jogging;                // One of the axis is jogging..&lt;br /&gt;
       bool  IncrementalJog;         // Incremental Jog..&lt;br /&gt;
       bool  Sync;                   // If set to true, the system will resync &lt;br /&gt;
                                     // the planner and the interpeter positions.&lt;br /&gt;
       bool  Port1On;&lt;br /&gt;
       bool  Port2On;&lt;br /&gt;
       bool  Tuning;&lt;br /&gt;
       bool  ReconfigHotKeys;        // Unused.&lt;br /&gt;
       short Port1Address;&lt;br /&gt;
       short Port2Address;&lt;br /&gt;
 &lt;br /&gt;
       AxisInfo   Axis[7];           // axis information&lt;br /&gt;
       InputInfo  InSigs[nSigs];     // input signals&lt;br /&gt;
       OutputInfo OutSigs[nSigsOut]; // output signals&lt;br /&gt;
       Encoder    Encoders[7];       // encoder inputs&lt;br /&gt;
       int        LastCubics[6];     // Used by the printer port for position&lt;br /&gt;
                                     // calculations vs printer port pins.&lt;br /&gt;
 &lt;br /&gt;
 // WatchDogs&lt;br /&gt;
       int   WDInt0;                 // internal watchdog.&lt;br /&gt;
       int   WDInt8;                 // second internal watchdog.&lt;br /&gt;
       int   WD2Way;                 // application to Driver watchdog, &lt;br /&gt;
                                     // bi directionally used. &lt;br /&gt;
       int   StartClocks;            //timing checking var's..&lt;br /&gt;
       int   EndClocks;&lt;br /&gt;
       bool  ReadClocks;&lt;br /&gt;
       bool  Sampleing;              // Sampleing flag&lt;br /&gt;
       bool  CubicDrain;             // cubicDrain flag. Sets cubics to zero;&lt;br /&gt;
       bool  EStop;                  // Estop condition in effect.&lt;br /&gt;
&lt;br /&gt;
 // software limits&lt;br /&gt;
        int   XLimitPos,YLimitPos,ZLimitPos,ALimitPos,BLimitPos,CLimitPos;&lt;br /&gt;
        int   XLimitNeg,YLimitNeg,ZLimitNeg,ALimitNeg,BLimitNeg,CLimitNeg;&lt;br /&gt;
        int   StatHolders[6];&lt;br /&gt;
        int   StatLast[6];&lt;br /&gt;
        bool  StatBusy;             // engine busy doign statistics for oscilliscope &lt;br /&gt;
                                    // readings.. DO not use.. Internal.&lt;br /&gt;
        int   StatCount;&lt;br /&gt;
        bool  SyncError;            // Do not use.&lt;br /&gt;
        int   DwellTime;            // If set, the system will delay all movement&lt;br /&gt;
                                    // and processing by this amount of tick.&lt;br /&gt;
                                    // (G04Pxxx) sets this.&lt;br /&gt;
        int   CurrentUnits;         // mm's or inches..&lt;br /&gt;
        bool  Directions[7];        // Reverses Motor directions &lt;br /&gt;
        bool  Safe;&lt;br /&gt;
&lt;br /&gt;
 // G-Code vars&lt;br /&gt;
        int   State;                // STOP, PAUSE, RUN....&lt;br /&gt;
        bool  NoTime;&lt;br /&gt;
        int   DisplayLine;&lt;br /&gt;
        int   CurrentLineExec;&lt;br /&gt;
        bool  Loaded;&lt;br /&gt;
        int   SpindleCW;&lt;br /&gt;
        int   SpindleCCW;&lt;br /&gt;
        bool  Jpg;&lt;br /&gt;
        double oSpinSeconds;&lt;br /&gt;
        bool  SpinDelayReq;&lt;br /&gt;
        int   Flood;&lt;br /&gt;
        int   Mist;&lt;br /&gt;
        bool  Hpgl;&lt;br /&gt;
        bool  NoSpindle;&lt;br /&gt;
        bool  NoFlood;&lt;br /&gt;
        bool  Pro;&lt;br /&gt;
        bool  Dxf;&lt;br /&gt;
        bool  Referenced[ 6 ];&lt;br /&gt;
        bool  HomeSpeed[ 6 ];&lt;br /&gt;
        unsigned long  TargetTime;&lt;br /&gt;
        int   BackCounts[ 6 ];&lt;br /&gt;
        int   BackSpeeds[ 6 ];&lt;br /&gt;
        bool  BackState[6];&lt;br /&gt;
        bool  BackLast[6];&lt;br /&gt;
        bool  BackOn; &lt;br /&gt;
        bool  AutoZero[6];&lt;br /&gt;
        double ToolChangePos[6];&lt;br /&gt;
        int   LastState;&lt;br /&gt;
        int   LookAhead;&lt;br /&gt;
        int   Year;&lt;br /&gt;
        int   LastExec;&lt;br /&gt;
        int   DROUpdate;&lt;br /&gt;
        bool  WatchDogOn;&lt;br /&gt;
        bool  LimitsOff;&lt;br /&gt;
        bool  Simulate;&lt;br /&gt;
        int   Month;&lt;br /&gt;
        int   KeyAction;&lt;br /&gt;
        bool  JoyOn;&lt;br /&gt;
        unsigned __int64   WaitCondition;&lt;br /&gt;
        int   EStopReason;&lt;br /&gt;
        bool  PWM;&lt;br /&gt;
        int   PWMFreq;&lt;br /&gt;
        int   Day;&lt;br /&gt;
        int   oCurrentPulley;                //remove this&lt;br /&gt;
        int   oldMaxSpeeds[4];               //and this. .&lt;br /&gt;
        int   m_SetExec;&lt;br /&gt;
        bool  AutoHome;&lt;br /&gt;
        int   templookahead;&lt;br /&gt;
        bool  Homing;&lt;br /&gt;
        char  CircData[201];&lt;br /&gt;
        bool  CircLoaded;&lt;br /&gt;
        bool  DROMaster;&lt;br /&gt;
        int   SoftLimitsHi[6];&lt;br /&gt;
        int   SoftLimitsLo[6];&lt;br /&gt;
        bool  SoftDir[3];&lt;br /&gt;
        bool  SoftLimitEnable;&lt;br /&gt;
        bool  SoftLimitTriggered;&lt;br /&gt;
        bool  HotStart;&lt;br /&gt;
        bool  LCD;&lt;br /&gt;
        int   OverRide;&lt;br /&gt;
        bool  Follow;&lt;br /&gt;
        int   NewWindow;&lt;br /&gt;
        bool  Deselect;&lt;br /&gt;
        bool  DeSelectClick;&lt;br /&gt;
        bool  SelectClick;&lt;br /&gt;
        int   PWMBaseFrequency;&lt;br /&gt;
        int   PulseCount;&lt;br /&gt;
 //&lt;br /&gt;
        int   THCCorrection;&lt;br /&gt;
        int   THCMaxCor;&lt;br /&gt;
        int   THCMinCor;&lt;br /&gt;
        bool  THCOn;&lt;br /&gt;
        int   THCAdder;&lt;br /&gt;
        bool  THCZero;&lt;br /&gt;
 //&lt;br /&gt;
        int   PPS;&lt;br /&gt;
        int   RefCounts[6];&lt;br /&gt;
        int   CurrentSpindleCount;&lt;br /&gt;
        int   IntsPerRotation;&lt;br /&gt;
        bool  SpinDec;&lt;br /&gt;
        bool  SpinAcc;&lt;br /&gt;
        long  WorstCase;&lt;br /&gt;
        int   VerifyChecks[6];&lt;br /&gt;
        int   Verifys[6];&lt;br /&gt;
        int   THCDev;&lt;br /&gt;
        int   Debounce;&lt;br /&gt;
 //&lt;br /&gt;
        bool  WaitForTrigger;&lt;br /&gt;
        int   nTrigger;&lt;br /&gt;
        int   PumpTime;&lt;br /&gt;
        int   MaxSpinCounts;&lt;br /&gt;
        bool  Threading;&lt;br /&gt;
        int   NormSpinCounts;&lt;br /&gt;
        int   SpinCorrection;&lt;br /&gt;
        int   SpinAdder;&lt;br /&gt;
        int   SpinDebounce;&lt;br /&gt;
 //&lt;br /&gt;
        int   SPIDataPin;&lt;br /&gt;
        int   SPIClockPin;&lt;br /&gt;
        int   DataOutPort;&lt;br /&gt;
        int   DataOutByte;&lt;br /&gt;
        bool  DataOutDone;&lt;br /&gt;
        int   DataInPort;&lt;br /&gt;
        int   DataInByte;&lt;br /&gt;
        bool  DataInDone;&lt;br /&gt;
        bool  LaserTrigger;&lt;br /&gt;
        int   Counter;&lt;br /&gt;
        bool  SPIOn;&lt;br /&gt;
        int   SPIDataOut;&lt;br /&gt;
        int   SPIDataIn;&lt;br /&gt;
        bool  SPIDone;&lt;br /&gt;
        bool  SPIhidata;&lt;br /&gt;
 //&lt;br /&gt;
        bool  OffLine;&lt;br /&gt;
        int   SpinStability;&lt;br /&gt;
        char  BitTest;&lt;br /&gt;
 //&lt;br /&gt;
        int   CurRate;&lt;br /&gt;
        int   PlungeLimit; &lt;br /&gt;
        bool  NoPlunge;                 //THC No plunge control&lt;br /&gt;
        bool  SpindleStable;&lt;br /&gt;
        short nSlots;&lt;br /&gt;
 //&lt;br /&gt;
        bool  LaserMode;&lt;br /&gt;
        bool  MaxNCMode;&lt;br /&gt;
        int   MaxNCLag;&lt;br /&gt;
        bool  SlowMode;&lt;br /&gt;
        bool  MaxNC10;&lt;br /&gt;
        bool  Port2Input;&lt;br /&gt;
        bool  ChargeAlwaysOn;&lt;br /&gt;
        bool  RaiseLower;&lt;br /&gt;
        unsigned int   RawInputs;&lt;br /&gt;
        bool  HalfPulse;&lt;br /&gt;
        bool     Shuttle;&lt;br /&gt;
        int   ShuttleCurVel;  // Current Velocity&lt;br /&gt;
        int   ShuttleMaxVel;  // Current Max Velocity (jogging )&lt;br /&gt;
        int   ShuttleAccel;&lt;br /&gt;
        int   LaserX;&lt;br /&gt;
        int   LaserY;&lt;br /&gt;
        int   LaserZ;&lt;br /&gt;
        int   LaserXOff;&lt;br /&gt;
        int   LaserYOff;&lt;br /&gt;
        int   LaserZOff;&lt;br /&gt;
        bool  HoldInput1;&lt;br /&gt;
        int   Pierce;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 struct  TimeData{&lt;br /&gt;
        int Time[32000];&lt;br /&gt;
 };&lt;/div&gt;</description>
			<pubDate>Tue, 30 May 2006 00:01:25 GMT</pubDate>			<dc:creator>Art Fenerty</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:SDK_Variables</comments>		</item>
		<item>
			<title>Macropump for Galesburg Mill</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Macropump_for_Galesburg_Mill</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Option Explicit&lt;br /&gt;
  ' Macropump for demo panel and Mill&lt;br /&gt;
  &lt;br /&gt;
  Const slave = 1 ' **** Change this if you use another ModBus Slave address&lt;br /&gt;
  &lt;br /&gt;
  Dim swT1 as Boolean ' toggle 1 true is Down&lt;br /&gt;
  Dim swT2 as Boolean ' toggle 2 true is down&lt;br /&gt;
  Dim swR1 as Integer ' Rotary 1 three positions 1, 2 and 3&lt;br /&gt;
  Dim swR2 as Integer ' Rotary 2 four positions 1, 2, 3 and 4&lt;br /&gt;
  &lt;br /&gt;
  Dim CurrScreen as Integer&lt;br /&gt;
  Const scrProgRun = 	1&lt;br /&gt;
  Const scrOffsets = 7&lt;br /&gt;
  Const scrMDI = 2&lt;br /&gt;
  Const scrDiags = 5&lt;br /&gt;
  &lt;br /&gt;
  Const FeedHolding = 1244        ' LED shows Had one red button press&lt;br /&gt;
  Const OUTBASE = OUTPUT7 - 1&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  ' =============================================================&lt;br /&gt;
  Sub Main ()&lt;br /&gt;
  &lt;br /&gt;
  Preamble&lt;br /&gt;
  GetConsistent&lt;br /&gt;
  DecodeSwitches&lt;br /&gt;
  ActionSwitches&lt;br /&gt;
  ReadButtons&lt;br /&gt;
  SetFRO&lt;br /&gt;
  WriteDisplays&lt;br /&gt;
  &lt;br /&gt;
  End Sub 'Main&lt;br /&gt;
  &lt;br /&gt;
  '=================================================================&lt;br /&gt;
  ' Action functions to implement changes&lt;br /&gt;
  ' ================================================================&lt;br /&gt;
  &lt;br /&gt;
  Sub ButtonDown (nButt as Integer)&lt;br /&gt;
  ' Called when a button is pressed. nButt says which&lt;br /&gt;
  &lt;br /&gt;
  	If nButt = 1 Then ' Green buttons&lt;br /&gt;
  			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then&lt;br /&gt;
  				DoButton 0														' Cycle Start  **** 033&lt;br /&gt;
  		  ElseIf CurrScreen = scrMDI Then ' we are going to deal with the spindle&lt;br /&gt;
  		  		If GetOEMLED (11)= 0 Then ' Spindle is stopped&lt;br /&gt;
  		  				Code &amp;quot;M3&amp;quot;&lt;br /&gt;
  		  		End If&lt;br /&gt;
  			End If ' different screen actions&lt;br /&gt;
  	End If ' Button 0&lt;br /&gt;
  &lt;br /&gt;
  	If nButt = 3 Then ' Red button&lt;br /&gt;
  			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then&lt;br /&gt;
  		   	If GetUserLED (FeedHolding) Then&lt;br /&gt;
  		    		SetUserLED FeedHolding, 0 ' now in stop state&lt;br /&gt;
  		      	DeActivateSignal (OUTBASE + 3)&lt;br /&gt;
  		      	DoButton 3												' **** 033&lt;br /&gt;
  		   	Else&lt;br /&gt;
  		   			If GetLed (4) Then 						' its running&lt;br /&gt;
  		   				SetUserLED Feedholding, 1 ' now in Hold state&lt;br /&gt;
  		      		ActivateSignal (OUTBASE + 3)&lt;br /&gt;
  		   				DoButton 1 											' **** 033&lt;br /&gt;
  		   			End If 												' was running&lt;br /&gt;
  		   	End If ' whatever state we were in&lt;br /&gt;
  		  ElseIf CurrScreen = scrMDI Then ' we are going to deal with the spindle&lt;br /&gt;
  		  		If GetOEMLED (11)&amp;lt;&amp;gt;0 Then ' Spindle is running&lt;br /&gt;
  		  				Code &amp;quot;M5&amp;quot;&lt;br /&gt;
  		  		End If&lt;br /&gt;
  			End If ' different screen actions&lt;br /&gt;
  	End If ' Button 3&lt;br /&gt;
  	&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub 'ButtonDown&lt;br /&gt;
  &lt;br /&gt;
  ' ------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ButtonUp (nButt as Integer)&lt;br /&gt;
  ' Called when a button is released. nButt says which&lt;br /&gt;
  ' Probably not much use but here in case&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub 'ButtonUp&lt;br /&gt;
  &lt;br /&gt;
  '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
  &lt;br /&gt;
  Sub swT1ChangedTo (ison as Boolean)&lt;br /&gt;
  ' Toggle switch 1 changed&lt;br /&gt;
  &lt;br /&gt;
  Message &amp;quot;Toggle 1 changed&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swT2ChangedTo (ison as Boolean)&lt;br /&gt;
  ' Toggle swich 2 changed&lt;br /&gt;
  &lt;br /&gt;
  	If GetOEMLED (106) &amp;lt;&amp;gt; 0 AND ison = 0 Then ' need to toggle&lt;br /&gt;
  		DoOEMButton (284) ' toggle Shuttle&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  	If GetOEMLED (106) = 0 AND ison &amp;lt;&amp;gt; 0 Then ' need to toggle&lt;br /&gt;
  		DoOEMButton (284) ' toggle Shuttle&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swR1ChangedTo (posn as Integer)&lt;br /&gt;
  ' Rotary 1 changed&lt;br /&gt;
  &lt;br /&gt;
  	Message &amp;quot;Tool number &amp;quot; &amp;amp; posn&lt;br /&gt;
  	SetDRO 24, posn&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swR2ChangedTo (posn as Integer)&lt;br /&gt;
  ' Rotary 2 changed To set Axis to Jog&lt;br /&gt;
  &lt;br /&gt;
  Dim iCount as Integer&lt;br /&gt;
  &lt;br /&gt;
  	If GetOEMLed (97 + posn) = 0 Then ' not on the right axis&lt;br /&gt;
  		For iCount = 1 to 6  ' 6 times bound to be enough if it is ever going to happen&lt;br /&gt;
  			If GetOEMLED (97 + posn) = 0 Then&lt;br /&gt;
  		    DoOEMButton 281   ' toggle the button until it comes good&lt;br /&gt;
  			End If&lt;br /&gt;
  		Next iCount&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  	' now a bodge as MPG1 axis gets changed out of the blue needs to be C to disable&lt;br /&gt;
  	&lt;br /&gt;
  	If GetOEMLed (64) = 0 Then ' not on the C axis&lt;br /&gt;
  		For iCount = 1 to 6  ' 6 times bound to be enough if it is ever going to happen&lt;br /&gt;
  			If GetOEMLED (64) = 0 Then&lt;br /&gt;
  		    DoOEMButton 175   ' toggle the button until it comes good&lt;br /&gt;
  			End If&lt;br /&gt;
  		Next iCount&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  ' =====================================================================&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub Preamble ()&lt;br /&gt;
  ' Do the interesting things to setup data here&lt;br /&gt;
  &lt;br /&gt;
  	CurrScreen = GetPage ()&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' Preamble&lt;br /&gt;
  &lt;br /&gt;
  ' -------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub GetConsistent ()&lt;br /&gt;
  ' Here we see if user has done anthing funng (e.g. with screen buttons)&lt;br /&gt;
  ' that invalidates the state we think we are in.&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub ' GetConsistent&lt;br /&gt;
  &lt;br /&gt;
  '----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub WriteDisplays ()&lt;br /&gt;
  ' Here we write to the LCD and real LEDs reflecting the state things are in&lt;br /&gt;
  &lt;br /&gt;
  Dim strText as String&lt;br /&gt;
  &lt;br /&gt;
  Dim strLabB1 as String	' label for button 1&lt;br /&gt;
  Dim strLabB2 as String	' label for button 2&lt;br /&gt;
  Dim strLabB3 as String	' label for button 3&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    strLabB2 = &amp;quot;    &amp;quot; ' not currently used&lt;br /&gt;
  &lt;br /&gt;
    If GetOEMLED (106) Then ' Shuttle is ON&lt;br /&gt;
    	ActivateSignal OUTBASE + 5&lt;br /&gt;
    Else&lt;br /&gt;
    	DeActivateSignal OUTBASE + 5&lt;br /&gt;
  	End If ' displaying the Shuttle State&lt;br /&gt;
  	&lt;br /&gt;
    If GetLED (6) Then ' Tool change request&lt;br /&gt;
    	ActivateSignal OUTBASE + 1&lt;br /&gt;
    	ActivateSignal OUTBASE + 4		' flash LEDs 1 and 4&lt;br /&gt;
    Else&lt;br /&gt;
    	DeActivateSignal OUTBASE + 1&lt;br /&gt;
    	DeActivateSignal OUTBASE + 4&lt;br /&gt;
  	End If ' displaying the Tool Change LED&lt;br /&gt;
  	&lt;br /&gt;
  	Select Case CurrScreen  ' put out the heading line&lt;br /&gt;
  	Case = scrProgRun&lt;br /&gt;
  	strText =           &amp;quot;    Program Run     &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;Run &amp;quot;&lt;br /&gt;
  	If GetLed (4) &amp;lt;&amp;gt; 0 Then ' its running so we might pause&lt;br /&gt;
  		strLabB3 = &amp;quot;Hold&amp;quot;&lt;br /&gt;
  	ElseIf GetLED (6) Then ' Toolchange request&lt;br /&gt;
  	  strLabB1 = &amp;quot;Tool&amp;quot;&lt;br /&gt;
  	  strLabB3 = &amp;quot;    &amp;quot;&lt;br /&gt;
  	Else&lt;br /&gt;
  		If GetOEMLed (11) &amp;lt;&amp;gt; 0 Then ' spindle is running so we must be paused&lt;br /&gt;
  			strLabB3 = &amp;quot;Stop&amp;quot;&lt;br /&gt;
  		Else&lt;br /&gt;
  			strLabB3 = &amp;quot;    &amp;quot;&lt;br /&gt;
  		End If&lt;br /&gt;
  	End If ' dealing with the button 3 label&lt;br /&gt;
  	If GetLed (5) = 0 Then ' we are not paused &lt;br /&gt;
  	  DeActivateSignal (OUTBASE + 3) ' don't flash the LED&lt;br /&gt;
  	Else&lt;br /&gt;
  		ActivateSignal (OUTBASE + 3) ' flash the LED 3&lt;br /&gt;
  	End If&lt;br /&gt;
  &lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrOffsets&lt;br /&gt;
  	strText =           &amp;quot;      Offsets       &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;    &amp;quot;&lt;br /&gt;
  	strLabB3 = &amp;quot;    &amp;quot;&lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrMDI&lt;br /&gt;
  	strText =           &amp;quot;        MDI         &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;Spin&amp;quot;&lt;br /&gt;
  	strLabB3 = &amp;quot;Stop&amp;quot;&lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrDiags&lt;br /&gt;
  	strText =           &amp;quot;    Diagnostics     &amp;quot;&lt;br /&gt;
  	StrLabB1 = &amp;quot;Run &amp;quot;&lt;br /&gt;
  	Case Else&lt;br /&gt;
  	strText =           &amp;quot;                    &amp;quot; 'unknown screen&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  	strText = strText &amp;amp; &amp;quot;                    &amp;quot;&lt;br /&gt;
  	strText = strText &amp;amp; &amp;quot;                    &amp;quot;&lt;br /&gt;
  	strText = strText + strLabB1 &amp;amp; &amp;quot; &amp;quot; &amp;amp; strLabB2 &amp;amp; &amp;quot;  &amp;quot; &amp;amp; strLabB3 _&lt;br /&gt;
  	     &amp;amp; &amp;quot; &amp;quot; &amp;amp; strLabB1&lt;br /&gt;
  	SetModIOString slave, 0, 0, strText ' write it&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' Write displays&lt;br /&gt;
  &lt;br /&gt;
  '---------------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ReadButtons ()&lt;br /&gt;
  ' Looks at the inputs for transitions and calls the ButtonDown routine if Transition&lt;br /&gt;
  &lt;br /&gt;
  Rem could be a loop but I hope this code is clearer&lt;br /&gt;
  &lt;br /&gt;
  	If IsActive (INPUT1) Then&lt;br /&gt;
  		If GetUserLED (1241) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1241, 1&lt;br /&gt;
  				ButtonDown 1&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1241) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1241, 0&lt;br /&gt;
  				ButtonUp 1&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 1 processing&lt;br /&gt;
  	&lt;br /&gt;
  	If IsActive (INPUT2) Then&lt;br /&gt;
  		If GetUserLED (1242) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1242, 1&lt;br /&gt;
  				ButtonDown 2&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1242) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1242, 0&lt;br /&gt;
  				ButtonUp 2&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 2 processing&lt;br /&gt;
  	&lt;br /&gt;
  		If IsActive (INPUT3) Then&lt;br /&gt;
  		If GetUserLED (1243) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1243, 1&lt;br /&gt;
  				ButtonDown 3&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1243) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1243, 0&lt;br /&gt;
  				ButtonUp 3&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 3 processing&lt;br /&gt;
  &lt;br /&gt;
  	&lt;br /&gt;
  	End Sub ' ReadButtons&lt;br /&gt;
  	&lt;br /&gt;
  	'-----------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub SetFRO ()&lt;br /&gt;
  ' Does simple analog read and straight to DRO&lt;br /&gt;
  &lt;br /&gt;
  Dim fro as Integer&lt;br /&gt;
  &lt;br /&gt;
  	fro = GetInput (64)  		' read Analog1&lt;br /&gt;
  	setUserDRO 1253, fro&lt;br /&gt;
  	fro = (fro * 95.0)/1024.0&lt;br /&gt;
  	setDRO 21, fro+5		' range is now 5 to 100%&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' SetFRO&lt;br /&gt;
  &lt;br /&gt;
  ' ----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub DecodeSwitches ()&lt;br /&gt;
  &lt;br /&gt;
  ' This routine takes the analog ports and sets up the switch states from them&lt;br /&gt;
  &lt;br /&gt;
  Dim ana as Integer&lt;br /&gt;
  &lt;br /&gt;
  	ana = GetInput(65) 'analog Input 2 On ModIO&lt;br /&gt;
  	Select Case ana&lt;br /&gt;
  	Case &amp;lt; 100 &lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 1&lt;br /&gt;
  	Case &amp;lt; 340&lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 2&lt;br /&gt;
  	Case &amp;lt; 510&lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 3&lt;br /&gt;
  	Case &amp;lt; 690&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 1&lt;br /&gt;
  	Case &amp;lt; 910&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 2&lt;br /&gt;
  	Case &amp;gt;= 910&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 3&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  	ana = GetInput(66) 'analog Input 3 On ModIO&lt;br /&gt;
  	Select Case ana&lt;br /&gt;
  	Case &amp;lt; 68 &lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 1&lt;br /&gt;
  	Case &amp;lt; 212&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 2&lt;br /&gt;
  	Case &amp;lt; 340&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 3&lt;br /&gt;
  	Case &amp;lt; 511&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 4&lt;br /&gt;
  	Case &amp;lt; 684&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 1&lt;br /&gt;
  	Case &amp;lt; 819&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 2&lt;br /&gt;
  	Case &amp;lt; 954&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 3&lt;br /&gt;
  	Case &amp;gt;= 954&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 4&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' DecodeSwitches&lt;br /&gt;
  &lt;br /&gt;
  ' -------------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ActionSwitches ()&lt;br /&gt;
  ' This routine displays switch states on Diags page and&lt;br /&gt;
  ' calls the Action routines if they have been changed&lt;br /&gt;
  &lt;br /&gt;
  	If GetUserLED (1251) = 0 Then ' previously T1 was OFF&lt;br /&gt;
  			If swT1 Then&lt;br /&gt;
  	   		SetUserLED 1251, 1&lt;br /&gt;
  	   		swT1ChangedTo TRUE&lt;br /&gt;
  			End If&lt;br /&gt;
  	Else ' T1 was ON&lt;br /&gt;
  		 If swT1 = 0 Then	&lt;br /&gt;
  	   		SetUserLED 1251, 0&lt;br /&gt;
  	   		swT1ChangedTo FALSE&lt;br /&gt;
  	   	End If&lt;br /&gt;
  	End If&lt;br /&gt;
  	If GetUserDRO (1251) &amp;lt;&amp;gt; swR1 Then ' change in rotary 1 position&lt;br /&gt;
  		SetUserDRO 1251, swR1&lt;br /&gt;
  		swR1ChangedTo swR1&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  	If GetUserLED (1252) = 0 Then ' previously T2 was OFF&lt;br /&gt;
  			If swT2 Then&lt;br /&gt;
  	   		SetUserLED 1252, 1&lt;br /&gt;
  	   		swT2ChangedTo TRUE&lt;br /&gt;
  			End If&lt;br /&gt;
  	Else ' T2 was ON&lt;br /&gt;
  		 If swT2 = 0 Then	&lt;br /&gt;
  	   		SetUserLED 1252, 0&lt;br /&gt;
  	   		swT2ChangedTo FALSE&lt;br /&gt;
  	   	End If&lt;br /&gt;
  	End If&lt;br /&gt;
  	If GetUserDRO (1252) &amp;lt;&amp;gt; swR2 Then ' change in rotary 2 position&lt;br /&gt;
  		SetUserDRO 1252, swR2&lt;br /&gt;
  		swR2ChangedTo swR2&lt;br /&gt;
  	End If&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' ActionSwitches&lt;br /&gt;
  &lt;br /&gt;
  ' ---------------------------------------------------------------&lt;/div&gt;</description>
			<pubDate>Fri, 12 May 2006 11:06:52 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Macropump_for_Galesburg_Mill</comments>		</item>
		<item>
			<title>Macropump for Galesburg Lathe</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Macropump_for_Galesburg_Lathe</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Option Explicit&lt;br /&gt;
  ' Macropump for demo panel and Turn&lt;br /&gt;
  &lt;br /&gt;
  Const slave = 1 ' **** Change this if you use another ModBus Slave address&lt;br /&gt;
  &lt;br /&gt;
  Dim swT1 as Boolean ' toggle 1 true is Down&lt;br /&gt;
  Dim swT2 as Boolean ' toggle 2 true is down&lt;br /&gt;
  Dim swR1 as Integer ' Rotary 1 three positions 1, 2 and 3&lt;br /&gt;
  Dim swR2 as Integer ' Rotary 2 four positions 1, 2, 3 and 4&lt;br /&gt;
  &lt;br /&gt;
  Dim CurrScreen as Integer&lt;br /&gt;
  Const scrProgRun = 	1&lt;br /&gt;
  Const scrOffsets = 2&lt;br /&gt;
  Const scrVisiCycle = 10&lt;br /&gt;
  Const scrDiags = 5&lt;br /&gt;
  &lt;br /&gt;
  Const FeedHolding = 1244        ' LED shows Had one red button press&lt;br /&gt;
  Const OUTBASE = OUTPUT7 - 1&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  ' =============================================================&lt;br /&gt;
  Sub Main ()&lt;br /&gt;
  &lt;br /&gt;
  Preamble&lt;br /&gt;
  GetConsistent&lt;br /&gt;
  DecodeSwitches&lt;br /&gt;
  ActionSwitches&lt;br /&gt;
  ReadButtons&lt;br /&gt;
  SetFRO&lt;br /&gt;
  WriteDisplays&lt;br /&gt;
  &lt;br /&gt;
  End Sub 'Main&lt;br /&gt;
  &lt;br /&gt;
  '=================================================================&lt;br /&gt;
  ' Action functions to implement changes&lt;br /&gt;
  ' ================================================================&lt;br /&gt;
  &lt;br /&gt;
  Sub ButtonDown (nButt as Integer)&lt;br /&gt;
  ' Called when a button is pressed. nButt says which&lt;br /&gt;
  &lt;br /&gt;
  	If nButt = 1 Then ' Green buttons&lt;br /&gt;
  			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then&lt;br /&gt;
  				DoButton 0														' Cycle Start  **** 033&lt;br /&gt;
  		  ElseIf CurrScreen = scrVisiCycle Then ' we are going to deal with the spindle&lt;br /&gt;
  		  		If GetOEMLED (11)= 0 Then ' Spindle is stopped&lt;br /&gt;
  		  				Code &amp;quot;M3&amp;quot;&lt;br /&gt;
  		  		End If&lt;br /&gt;
  			End If ' different screen actions&lt;br /&gt;
  	End If ' Button 0&lt;br /&gt;
  &lt;br /&gt;
  	If nButt = 3 Then ' Red button&lt;br /&gt;
  			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then&lt;br /&gt;
  		   	If GetUserLED (FeedHolding) Then&lt;br /&gt;
  		    		SetUserLED FeedHolding, 0 ' now in stop state&lt;br /&gt;
  		      	DeActivateSignal (OUTBASE + 3)&lt;br /&gt;
  		      	DoButton 3												' **** 033&lt;br /&gt;
  		   	Else&lt;br /&gt;
  		   			If GetLed (4) Then 						' its running&lt;br /&gt;
  		   				SetUserLED Feedholding, 1 ' now in Hold state&lt;br /&gt;
  		      		ActivateSignal (OUTBASE + 3)&lt;br /&gt;
  		   				DoButton 1 											' **** 033&lt;br /&gt;
  		   			End If 												' was running&lt;br /&gt;
  		   	End If ' whatever state we were in&lt;br /&gt;
  		  ElseIf CurrScreen = scrVisiCycle Then ' we are going to deal with the spindle&lt;br /&gt;
  		  		If GetOEMLED (11)&amp;lt;&amp;gt;0 Then ' Spindle is running&lt;br /&gt;
  		  				Code &amp;quot;M5&amp;quot;&lt;br /&gt;
  		  		End If&lt;br /&gt;
  			End If ' different screen actions&lt;br /&gt;
  	End If ' Button 3&lt;br /&gt;
  	&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub 'ButtonDown&lt;br /&gt;
  &lt;br /&gt;
  ' ------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ButtonUp (nButt as Integer)&lt;br /&gt;
  ' Called when a button is released. nButt says which&lt;br /&gt;
  ' Probably not much use but here in case&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub 'ButtonUp&lt;br /&gt;
  &lt;br /&gt;
  '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
  &lt;br /&gt;
  Sub swT1ChangedTo (ison as Boolean)&lt;br /&gt;
  ' Toggle switch 1 changed&lt;br /&gt;
  &lt;br /&gt;
  Message &amp;quot;Toggle 1 changed&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swT2ChangedTo (ison as Boolean)&lt;br /&gt;
  ' Toggle swich 2 changed&lt;br /&gt;
  &lt;br /&gt;
  	If GetOEMLED (83) &amp;lt;&amp;gt; 0 AND ison = 0 Then ' need to toggle&lt;br /&gt;
  		DoOEMButton (103) ' toggle jog state&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  	If GetOEMLED (83) = 0 AND ison &amp;lt;&amp;gt; 0 Then ' need to toggle&lt;br /&gt;
  		DoOEMButton (103) ' toggle jog state&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swR1ChangedTo (posn as Integer)&lt;br /&gt;
  ' Rotary 1 changed&lt;br /&gt;
  &lt;br /&gt;
  Const nOps = 3&lt;br /&gt;
  Const OpLEDBase = 1110&lt;br /&gt;
  &lt;br /&gt;
  Dim i as Integer&lt;br /&gt;
  Dim iOp as Integer&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  For i = 1 to nOps&lt;br /&gt;
     SetUserLED OpLEDBase + i -1, 0  ' clear the LEDs&lt;br /&gt;
  Next i&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  	Message &amp;quot;Operation number&amp;quot; &amp;amp; posn&lt;br /&gt;
  	SetUserDRO 1104, posn&lt;br /&gt;
  	&lt;br /&gt;
  	SetUserLED opLEDBase + posn - 1, 1  ' light the chosen LED&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  '-----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub swR2ChangedTo (posn as Integer)&lt;br /&gt;
  ' Rotary 2 changed&lt;br /&gt;
  &lt;br /&gt;
  	Message &amp;quot;Tool number&amp;quot; &amp;amp; posn&lt;br /&gt;
  	SetDRO 24, posn&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' swUpdated&lt;br /&gt;
  &lt;br /&gt;
  ' =====================================================================&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub Preamble ()&lt;br /&gt;
  ' Do the interesting things to setup data here&lt;br /&gt;
  &lt;br /&gt;
  	CurrScreen = GetPage ()&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' Preamble&lt;br /&gt;
  &lt;br /&gt;
  ' -------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub GetConsistent ()&lt;br /&gt;
  ' Here we see if user has done anthing funng (e.g. with screen buttons)&lt;br /&gt;
  ' that invalidates the state we think we are in.&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  End Sub ' GetConsistent&lt;br /&gt;
  &lt;br /&gt;
  '----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub WriteDisplays ()&lt;br /&gt;
  ' Here we write to the LCD and real LEDs reflecting the state things are in&lt;br /&gt;
  &lt;br /&gt;
  Dim strText as String&lt;br /&gt;
  &lt;br /&gt;
  Dim strLabB1 as String	' label for button 1&lt;br /&gt;
  Dim strLabB2 as String	' label for button 2&lt;br /&gt;
  Dim strLabB3 as String	' label for button 3&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    strLabB2 = &amp;quot;    &amp;quot; ' not currently used&lt;br /&gt;
  &lt;br /&gt;
    If GetOEMLED (83) Then ' Jog is allowed&lt;br /&gt;
    	ActivateSignal OUTBASE + 5&lt;br /&gt;
    Else&lt;br /&gt;
    	DeActivateSignal OUTBASE + 5&lt;br /&gt;
  	End If ' displaying the Jog State&lt;br /&gt;
  	&lt;br /&gt;
  	Select Case CurrScreen  ' put out the heading line&lt;br /&gt;
  	Case = scrProgRun&lt;br /&gt;
  	strText =           &amp;quot;    Program Run     &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;Run &amp;quot;&lt;br /&gt;
  	If GetLed (4) &amp;lt;&amp;gt; 0 Then ' its running so we might pause&lt;br /&gt;
  		strLabB3 = &amp;quot;Hold&amp;quot;&lt;br /&gt;
  	Else&lt;br /&gt;
  		If GetOEMLed (11) &amp;lt;&amp;gt; 0 Then ' spindle is running so it must be paused&lt;br /&gt;
  			strLabB3 = &amp;quot;Stop&amp;quot;&lt;br /&gt;
  		Else&lt;br /&gt;
  			strLabB3 = &amp;quot;    &amp;quot;&lt;br /&gt;
  		End If&lt;br /&gt;
  	End If ' dealing with the button 3 label&lt;br /&gt;
  	If GetLed (5) = 0 Then ' we are not paused &lt;br /&gt;
  	  DeActivateSignal (OUTBASE + 3) ' don't flash the LED&lt;br /&gt;
  	Else&lt;br /&gt;
  		ActivateSignal (OUTBASE + 3) ' flash the LED 3&lt;br /&gt;
  	End If&lt;br /&gt;
  &lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrOffsets&lt;br /&gt;
  	strText =           &amp;quot;      Offsets       &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;    &amp;quot;&lt;br /&gt;
  	strLabB3 = &amp;quot;    &amp;quot;&lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrVisiCycle&lt;br /&gt;
  	strText =           &amp;quot;     VisiCycle      &amp;quot;&lt;br /&gt;
  	strLabB1 = &amp;quot;Spin&amp;quot;&lt;br /&gt;
  	strLabB3 = &amp;quot;Stop&amp;quot;&lt;br /&gt;
  	&lt;br /&gt;
  	Case = scrDiags&lt;br /&gt;
  	strText =           &amp;quot;    Diagnostics     &amp;quot;&lt;br /&gt;
  	StrLabB1 = &amp;quot;Run &amp;quot;&lt;br /&gt;
  	Case Else&lt;br /&gt;
  	strText =           &amp;quot;                    &amp;quot; 'unknown screen&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  	strText = strText &amp;amp; &amp;quot;                    &amp;quot;&lt;br /&gt;
  	strText = strText &amp;amp; &amp;quot;                    &amp;quot;&lt;br /&gt;
  	strText = strText + strLabB1 &amp;amp; &amp;quot; &amp;quot; &amp;amp; strLabB2 &amp;amp; &amp;quot;  &amp;quot; &amp;amp; strLabB3 _&lt;br /&gt;
  	     &amp;amp; &amp;quot; &amp;quot; &amp;amp; strLabB1&lt;br /&gt;
  	SetModIOString slave, 0, 0, strText ' write it&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' Write displays&lt;br /&gt;
  &lt;br /&gt;
  '---------------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ReadButtons ()&lt;br /&gt;
  ' Looks at the inputs for transitions and calls the ButtonDown routine if Transition&lt;br /&gt;
  &lt;br /&gt;
  Rem could be a loop but I hope this code is clearer&lt;br /&gt;
  &lt;br /&gt;
  	If IsActive (INPUT1) Then&lt;br /&gt;
  		If GetUserLED (1241) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1241, 1&lt;br /&gt;
  				ButtonDown 1&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1241) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1241, 0&lt;br /&gt;
  				ButtonUp 1&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 1 processing&lt;br /&gt;
  	&lt;br /&gt;
  	If IsActive (INPUT2) Then&lt;br /&gt;
  		If GetUserLED (1242) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1242, 1&lt;br /&gt;
  				ButtonDown 2&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1242) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1242, 0&lt;br /&gt;
  				ButtonUp 2&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 2 processing&lt;br /&gt;
  	&lt;br /&gt;
  		If IsActive (INPUT3) Then&lt;br /&gt;
  		If GetUserLED (1243) = 0 Then ' It is a new press&lt;br /&gt;
  				SetUserLED 1243, 1&lt;br /&gt;
  				ButtonDown 3&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	Else ' button is up&lt;br /&gt;
  	   If GetUserLED (1243) &amp;lt;&amp;gt; 0 Then ' It is new unpress&lt;br /&gt;
  				SetUserLED 1243, 0&lt;br /&gt;
  				ButtonUp 3&lt;br /&gt;
  		End if ' dealing with new press&lt;br /&gt;
  	End IF ' button 3 processing&lt;br /&gt;
  &lt;br /&gt;
  	&lt;br /&gt;
  	End Sub ' ReadButtons&lt;br /&gt;
  	&lt;br /&gt;
  	'-----------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub SetFRO ()&lt;br /&gt;
  ' Does simple analog read and straight to DRO&lt;br /&gt;
  &lt;br /&gt;
  Dim fro as Integer&lt;br /&gt;
  &lt;br /&gt;
  	fro = GetInput (64)  		' read Analog1&lt;br /&gt;
  	setUserDRO 1253, fro&lt;br /&gt;
  	fro = (fro * 95.0)/1024.0&lt;br /&gt;
  	setDRO 21, fro+5		' range is now 5 to 100%&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' SetFRO&lt;br /&gt;
  &lt;br /&gt;
  ' ----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Sub DecodeSwitches ()&lt;br /&gt;
  &lt;br /&gt;
  ' This routine takes the analog ports and sets up the switch states from them&lt;br /&gt;
  &lt;br /&gt;
  Dim ana as Integer&lt;br /&gt;
  &lt;br /&gt;
  	ana = GetInput(65) 'analog Input 2 On ModIO&lt;br /&gt;
  	Select Case ana&lt;br /&gt;
  	Case &amp;lt; 100 &lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 1&lt;br /&gt;
  	Case &amp;lt; 340&lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 2&lt;br /&gt;
  	Case &amp;lt; 510&lt;br /&gt;
  		swT1 = True&lt;br /&gt;
  		swR1 = 3&lt;br /&gt;
  	Case &amp;lt; 690&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 1&lt;br /&gt;
  	Case &amp;lt; 910&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 2&lt;br /&gt;
  	Case &amp;gt;= 910&lt;br /&gt;
  		swT1 = False&lt;br /&gt;
  		swR1 = 3&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  	ana = GetInput(66) 'analog Input 3 On ModIO&lt;br /&gt;
  	Select Case ana&lt;br /&gt;
  	Case &amp;lt; 68 &lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 1&lt;br /&gt;
  	Case &amp;lt; 212&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 2&lt;br /&gt;
  	Case &amp;lt; 340&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 3&lt;br /&gt;
  	Case &amp;lt; 511&lt;br /&gt;
  		swT2 = True&lt;br /&gt;
  		swR2 = 4&lt;br /&gt;
  	Case &amp;lt; 684&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 1&lt;br /&gt;
  	Case &amp;lt; 819&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 2&lt;br /&gt;
  	Case &amp;lt; 954&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 3&lt;br /&gt;
  	Case &amp;gt;= 954&lt;br /&gt;
  		swT2 = False&lt;br /&gt;
  		swR2 = 4&lt;br /&gt;
  	End Select&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' DecodeSwitches&lt;br /&gt;
  &lt;br /&gt;
  ' -------------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  Sub ActionSwitches ()&lt;br /&gt;
  ' This routine displays switch states on Diags page and&lt;br /&gt;
  ' calls the Action routines if they have been changed&lt;br /&gt;
  &lt;br /&gt;
  	If GetUserLED (1251) = 0 Then ' previously T1 was OFF&lt;br /&gt;
  			If swT1 Then&lt;br /&gt;
  	   		SetUserLED 1251, 1&lt;br /&gt;
  	   		swT1ChangedTo TRUE&lt;br /&gt;
  			End If&lt;br /&gt;
  	Else ' T1 was ON&lt;br /&gt;
  		 If swT1 = 0 Then	&lt;br /&gt;
  	   		SetUserLED 1251, 0&lt;br /&gt;
  	   		swT1ChangedTo FALSE&lt;br /&gt;
  	   	End If&lt;br /&gt;
  	End If&lt;br /&gt;
  	If GetUserDRO (1251) &amp;lt;&amp;gt; swR1 Then ' change in rotary 1 position&lt;br /&gt;
  		SetUserDRO 1251, swR1&lt;br /&gt;
  		swR1ChangedTo swR1&lt;br /&gt;
  	End If&lt;br /&gt;
  	&lt;br /&gt;
  	If GetUserLED (1252) = 0 Then ' previously T2 was OFF&lt;br /&gt;
  			If swT2 Then&lt;br /&gt;
  	   		SetUserLED 1252, 1&lt;br /&gt;
  	   		swT2ChangedTo TRUE&lt;br /&gt;
  			End If&lt;br /&gt;
  	Else ' T2 was ON&lt;br /&gt;
  		 If swT2 = 0 Then	&lt;br /&gt;
  	   		SetUserLED 1252, 0&lt;br /&gt;
  	   		swT2ChangedTo FALSE&lt;br /&gt;
  	   	End If&lt;br /&gt;
  	End If&lt;br /&gt;
  	If GetUserDRO (1252) &amp;lt;&amp;gt; swR2 Then ' change in rotary 2 position&lt;br /&gt;
  		SetUserDRO 1252, swR2&lt;br /&gt;
  		swR2ChangedTo swR2&lt;br /&gt;
  	End If&lt;br /&gt;
  &lt;br /&gt;
  End Sub ' ActionSwitches&lt;br /&gt;
  &lt;br /&gt;
  ' ---------------------------------------------------------------&lt;/div&gt;</description>
			<pubDate>Fri, 12 May 2006 11:05:05 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Macropump_for_Galesburg_Lathe</comments>		</item>
		<item>
			<title>Universal panel notes for CNC Workshop 2006</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Universal_panel_notes_for_CNC_Workshop_2006</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is notes for people wanting to use John Prentice's design for a ModIO based control panel.'''&lt;br /&gt;
&lt;br /&gt;
An example of a panel I made to take to Galesburg is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:External2LoRes.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why is it like it is? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;design process&amp;quot; of this was unconventional in that I started with the case from a skip (dumpster) which had held a small chart recorder. It looked about the right size to pack for an Atlantic flight but still have space for controls. Thus the controls on it are there to use the holes already in the case and some of the switches etc. This seemed ligitimate as I did not have a specific machine to control - I just wanted to show what sort of things you can do. So what do we have:&lt;br /&gt;
&lt;br /&gt;
* Two MPGs - one has clicks the other is &amp;quot;smooth&amp;quot;&lt;br /&gt;
* An EStop switch&lt;br /&gt;
* Four push buttons&lt;br /&gt;
* The ModIO LCD panel&lt;br /&gt;
* A rotary potentiometer&lt;br /&gt;
* Two toggle switches&lt;br /&gt;
* Two rotary switches&lt;br /&gt;
* Five LEDs (four in buttons and one freestanding)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Details of the controls ==&lt;br /&gt;
&lt;br /&gt;
=== MPGs ===&lt;br /&gt;
&lt;br /&gt;
These are conventional Nemicon 100 cpr MPGs. I turned the detents off the internal wheel of one of them as I like smooth operation on a lathe X axis and you might find it interesting to try both clicky and smooth.&lt;br /&gt;
&lt;br /&gt;
=== The E-Stop switch ===&lt;br /&gt;
&lt;br /&gt;
This is connected to ModIO input DIn3 and has a separate NC contact presented on a DIN connector on the back panel. We will not use this at Galesburg.&lt;br /&gt;
&lt;br /&gt;
=== Push switches ===&lt;br /&gt;
&lt;br /&gt;
The two &amp;quot;green&amp;quot; switches are wired in series to ModIO input DIn0 - the intention is to make a two handed, or at least two fingered, &amp;quot;Start&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
The yellow switch is on DIn1 and the red switch on DIn2&lt;br /&gt;
&lt;br /&gt;
Thus all ModIO inputs are used (four being required for the MPGs)&lt;br /&gt;
&lt;br /&gt;
Each push button has a LED allocated to DOut0 - DOut3 (left to right, Green, Yellow, Red, Green). These are configured in the ModIO to flash.&lt;br /&gt;
&lt;br /&gt;
=== ModIO LCD ===&lt;br /&gt;
&lt;br /&gt;
This is positioned so the push buttons can be &amp;quot;soft labelled&amp;quot; by it if desired. Ot is 4 rows of 20 alphanumeric characters.&lt;br /&gt;
&lt;br /&gt;
=== Rotary potentiometer ===&lt;br /&gt;
&lt;br /&gt;
This is connected to Analog In1. It is envisaged that it well be an overrid control (Feed)&lt;br /&gt;
&lt;br /&gt;
=== Toggle and rotary switches ===&lt;br /&gt;
&lt;br /&gt;
The left toggle switch and left rotary (switches A) are connected to Analog In2. The right switches (B) are connected to Analog In3. The position of these switches is one of the recorder case legacies!&lt;br /&gt;
&lt;br /&gt;
These switches are turned into &amp;quot;digital&amp;quot; positions (on/off and 1, 2, 3, etc.) by the Mach3 Macropump script. The use of analog signals allows the equivalent of 9 inputs to be used with only two wires and in a situation where all the DIn pins are already in use.&lt;br /&gt;
&lt;br /&gt;
The circuit to do this is as follows.&lt;br /&gt;
&lt;br /&gt;
[[Image:RandTSwPot.JPG]]&lt;br /&gt;
&lt;br /&gt;
This shows the circuit for switches B.&lt;br /&gt;
&lt;br /&gt;
The theory is as follows:&lt;br /&gt;
&lt;br /&gt;
* Each pole of the rotary switch taps off a potential divider (1K5 resistors). If the toggle switch is down (ON in UK conventions!) then a 6K8 resistor is at the top of the divider chain. When switched up the 6K8 is moved to the bottom.&lt;br /&gt;
* As you will realize the current in the divider is always the same so the voltage steps from the rotary switch are the same. When the toggle is up the voltage is offset by about 5 steps thus giving a total of 8 different but more or less equal values for the combinations of settings of the two switches.&lt;br /&gt;
* As measured the analog inputs are: &lt;br /&gt;
&lt;br /&gt;
Switch A, Toggle Down - 0, 222, 450, Toggle Up - 578, 788, 1022 and &lt;br /&gt;
&lt;br /&gt;
Switch B, Toggle Down - 0, 136, 272, 408, Toggle Up - 615, 753, 881, 1022&lt;br /&gt;
&lt;br /&gt;
Clearly the software needs to detect mid way between these values to get immunity from noise etc. A subroutine is already written to turn the values into separate switch settings.&lt;br /&gt;
&lt;br /&gt;
== Software architecture ==&lt;br /&gt;
&lt;br /&gt;
I will not write about this in too muche detail - to understand it you will have to read the code. However here are a few notes on the principles.&lt;br /&gt;
&lt;br /&gt;
=== Macropump ===&lt;br /&gt;
&lt;br /&gt;
The Macropump macro is run by Mach3 roughly every fifth of a second. I have assumed that each time it is run it does not have access to the data from last time so it uses LEDs and DROs to remember the state of things.&lt;br /&gt;
&lt;br /&gt;
It seems cruel to tell Mach3 abouth things that are not &amp;quot;new&amp;quot;. Thus the code for a switch says which axis to jog one should not set the axis jogging in Mach3 each time the macropump runs but only when the switch is changed. This is of course vital in the case of buttons that are toggles; one cannot &amp;quot;click&amp;quot; a Mach3 button each time just because the user has his finger on the switch!&lt;br /&gt;
&lt;br /&gt;
For simplicity I have chosen to use only the Macropump. Some things can be neatly done with OEM triggers but it is harder to explain with code all over the place. Similarly I have not shown an initialization macro. In practice this is needed to set up the initial settings from how the switches are when Mach3 boots up. You might like to add this feature.&lt;br /&gt;
&lt;br /&gt;
=== The Macropump code ===&lt;br /&gt;
&lt;br /&gt;
The macropump does the following things each time it is called&lt;br /&gt;
&lt;br /&gt;
*Does a Preamble - e.g. to find which scenn page the user is on&lt;br /&gt;
* Makes its data consistent with how it finds Mach3. The user might have clicked a screen button and changed things behind the panel's back.&lt;br /&gt;
* Decodes the rotary and toggle switches and sets variables to the positions it finds them in&lt;br /&gt;
* Actions the switches. This calls routines you can alter if it finds a given switch has changed&lt;br /&gt;
* Reads and actions the Buttons if they have changed. Again it calls routines you can provide&lt;br /&gt;
* Does anything that needs doing every time the macropump runs. I have set the feedrate from the rotary potentiometer like this&lt;br /&gt;
* Writes the current &amp;quot;state&amp;quot; on the LCD display and to the real LEDs. This allows dynamic labels for the buttons (e.g. Red can be Feedhold when running and Stop when in Feedhold)&lt;br /&gt;
&lt;br /&gt;
=== Example macropumps ===&lt;br /&gt;
&lt;br /&gt;
[[Macropump for Galesburg Mill]]&lt;br /&gt;
&lt;br /&gt;
[[Macropump for Galesburg Lathe]]&lt;br /&gt;
&lt;br /&gt;
''John Prentice''&lt;br /&gt;
&lt;br /&gt;
''May 2006''&lt;/div&gt;</description>
			<pubDate>Fri, 12 May 2006 09:34:53 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Universal_panel_notes_for_CNC_Workshop_2006</comments>		</item>
		<item>
			<title>Mach specific Subs/Funcs - deprecated</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach_specific_Subs/Funcs_-_deprecated</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This section describes the most important standard routines (i.e. functions and subroutines) that can be called from VB Script on buttons or in macros.&lt;br /&gt;
&lt;br /&gt;
'''''This refers to Mach3 1.84. A simplified numbering scheme should be used from 1.90.033 onwards. See relevant page for details'''''&lt;br /&gt;
&lt;br /&gt;
== To execute G or M-codes from a script ==&lt;br /&gt;
&lt;br /&gt;
The simplest and most powerful routine is:&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Code (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
The ''text'' argument is a string expression (including, or course a constant or simple variable) which is any line of G or M codes that you could enter into MDI. It will be passed to Mach3 for execution. The only restriction is that you are advised not to call another script from within a script.&lt;br /&gt;
&lt;br /&gt;
Examples, using both versions of the syntax for subroutine calls:&lt;br /&gt;
&lt;br /&gt;
NaodW29-pre6ca9059e6938a69b00000001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For accessing the screen controls ==&lt;br /&gt;
&lt;br /&gt;
As you have seen in the earlier examples, a macro read and change the data in a DRO. It can also read the state of any LED and simulate the action of clicking a screen button. To access these operations on Mach2 controls you use the codes used internally by Mach3 and its Screen Designer for the DRO, LED or button operation you want to use.&lt;br /&gt;
&lt;br /&gt;
There are, for historical reasons, two different code lists for each type of control. The original built in controls are described by their Function Code. Later features have controls described by so called &amp;quot;OEM&amp;quot; Codes. You will have seen the reason for this if you have already tried Screen Designer. If you have not used Screen Designer have a look at the figure showing the Properties of the Standard Cycle Start button in this chapter. The buttons that are defined by checking one of the Radio Buttons in the dialog are referred to by Function Codes. Buttons defined by checking OEM Code and entering a Code value in the box are referred to by OEM Codes.&lt;br /&gt;
&lt;br /&gt;
DROs and LEDs can be defined that have no meaning to Mach3 being solely for you use. There are 255 of each denoted by &amp;quot;OEM&amp;quot; codes 1000 to 1254. You must refer to them using special functions with &amp;quot;User&amp;quot; in the name to make it obvious that they are not controlling Mach2 itself.&lt;br /&gt;
&lt;br /&gt;
The Function code numbers start at zero in the top-left and count up across the screen. Thus in the ''Set Button'' screen, ''Run'' (i.e. the ''Cycle Start'' button) is Function = 0 and ''Zero Y'' is Function = 9. Rather than looking up codes using Screen Designer, you may find it more convenient to refer to the complete table of codes accessed from mainpage of this wiki.&lt;br /&gt;
&lt;br /&gt;
Although we use literal values (like 14) in the examples you are strongly advised to assign the values you want to use to variables at the beginning of your macro and then use the variables in calls to the routines. This will make your program much easier to read. Thus the first LED example in a complete script would be:&lt;br /&gt;
&lt;br /&gt;
 JoyStickLEDFn = 14&lt;br /&gt;
 :&lt;br /&gt;
 :&lt;br /&gt;
 bJoy = GetLed (JoyStickLEDFn)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LEDs ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetLED (ledFun '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Function''' GetOEMLED (ledOEMCode '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Function''' GetUserLED (ledUserCode '''as''' Integer) '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Choose the appropriate routine depending on whether you want to access a built-in, OEM or User LED. ''ledUserCode'' must be in the range 1000 to 1244. The result is True (i.e. non-zero if converted to an integer) if the LED referred to is alight.&lt;br /&gt;
&lt;br /&gt;
User LEDs, only,  can be set on or off by:&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetUserLED (ledUserCode '''as''' Integer, cond '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;tt&amp;gt;cond&amp;lt;/tt&amp;gt; = 1 the LED will be on. If &amp;lt;tt&amp;gt;cond&amp;lt;/tt&amp;gt; = 0 then it will be Off&lt;br /&gt;
 &lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 bJoy = GetLed (14)		' set variable bJoy if Joystick is enabled&lt;br /&gt;
 If GetOEMLed (29) Then …..	' see if a Fixture is in use&lt;br /&gt;
 Call SetUserLED (1002, 1)		' turn on user LED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DROs ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetDRO (droFun '''as''' Integer) '''as''' Double&lt;br /&gt;
 '''Function''' GetOEMDRO (droOEMCode '''as''' Integer) '''as''' Double&lt;br /&gt;
 '''Function''' GetUserDRO (droUserCode '''as''' Integer) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Choose the appropriate routine depending on whether you want to access a built-in, OEM or user DRO. droUserCode will be in the range 1000 to 1254. The result is the current value displayed by the DRO. &lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetDRO (droFun '''as''' Integer, newValue '''as''' Double)&lt;br /&gt;
 '''Sub''' SetOEMDRO (droOEMCode '''as''' Integer, newValue '''as''' Double)&lt;br /&gt;
 '''Sub''' SetUserDRO (droUserCode '''as''' Integer, newValue '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Choose the appropriate routine depending on whether you want to access a built-in, OEM or user DRO. &amp;lt;tt&amp;gt;droUserCode&amp;lt;/tt&amp;gt; will be in the range 1000 to 1254. The routine sets the expression provided for newValue into the DRO. Not all DROs can be written. If you cannot type a value into the DRO on the screen (e.g. X Velocity = function 6) then you cannot set it in a script.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' KillExponent (result '''as''' String, smallNumber '''as''' String) &lt;br /&gt;
&lt;br /&gt;
This routine is provided to address the problem that VB Script is liable to represent small numbers (e.g. 0.0000012) in scientific (exponent) notation. The routine forces the string to be decimal.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Call SetDRO (18, GetDRO (18) * 1.1)	' increase feedrate by 10%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Button Commands ===&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoButton (buttFun '''as''' Integer)&lt;br /&gt;
 '''Sub''' DoOEMButton (buttOEMCode '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Choose the appropriate routine depending on whether you want to use a built-in or OEM command. Mach3 is instructed by the script to perform the function specified.&lt;br /&gt;
 &lt;br /&gt;
There is no provision for the trapping or reporting of errors but as most functions have an LED associated with them this can be inspected by the script code to check that the required action has been performed.&lt;br /&gt;
&lt;br /&gt;
Very many &amp;quot;buttons&amp;quot; are toggles or cycle through a range of possible states or values. A loop containing inspection of an associated LED can be used to set a particular state. This example would be particularly suitable to be attached to a button.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Rem This sets the MPG jog on and the wheel to jog the Y axis&lt;br /&gt;
 Rem There are actually more direct ways to do this in late releases&lt;br /&gt;
 Rem of Mach2&lt;br /&gt;
 JogTogButton = 174&lt;br /&gt;
 JogMPGEn = 175&lt;br /&gt;
 MPGJogOnLED = 57&lt;br /&gt;
 MGPJogsY = 60&lt;br /&gt;
 OK = False&lt;br /&gt;
 For I = 1 to 2&lt;br /&gt;
 	If Not GetOEMLED (MPGJogOnLED) Then &lt;br /&gt;
 		Call DoOEMButton (JogMPGEn)  ' try to enable&lt;br /&gt;
 	Else&lt;br /&gt;
 		OK = True	' MPG is enabled&lt;br /&gt;
 		Exit For&lt;br /&gt;
 	End If&lt;br /&gt;
 Next I&lt;br /&gt;
 Rem Could test of OK true here&lt;br /&gt;
 OK = False&lt;br /&gt;
 For I = 1 to 6	' must get there after six axis tries&lt;br /&gt;
 	If Not GetOEMLED (MPGJogsY) Then&lt;br /&gt;
 		Call DoOEMButton (JogTogButton) ' try next one&lt;br /&gt;
 	Else&lt;br /&gt;
 		OK = True  ' got right axis selected&lt;br /&gt;
 		Exit For&lt;br /&gt;
 	End If&lt;br /&gt;
 Next I&lt;br /&gt;
 Rem Could test OK here as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interrogating Mach's state ==&lt;br /&gt;
=== Interrogating Mach3 running modes ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsDiameter() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns a non-zero value if Mach3 is in Diameter mode (Turn only) otherwise zero for radius mode. Diameter mode affects th handling of all X coordinate values.&lt;br /&gt;
&lt;br /&gt;
=== Interrogating Mach3 internal variables ===&lt;br /&gt;
&lt;br /&gt;
The current value of Mach3 internal variables can be read using the &amp;lt;tt&amp;gt;GetParam&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
 &lt;br /&gt;
 '''Function''' GetParam (name '''as''' String) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This returns a numeric value corresponding to the name of the given variable which is provided as a string (constant or variable)&lt;br /&gt;
&lt;br /&gt;
The corresponding  routine &amp;lt;tt&amp;gt;SetParam&amp;lt;/tt&amp;gt; sets the value of the variable to newVal.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetParam (name '''as''' String, newVal '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 Rem interrogate drive arrangements&lt;br /&gt;
 mechProp1 = GetParam (&amp;quot;StepsPerAxisX&amp;quot;)&lt;br /&gt;
 Rem make C acceleration be same as X for slaving&lt;br /&gt;
 Call SetParam(&amp;quot;AccelerationC&amp;quot;, GetParam (&amp;quot;AccelerationX&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
'''''Notice''''' that the word &amp;quot;Param&amp;quot; is used here in a different sense to the Machine Parameters accessed by the # operator from within a part program and in accessing the Q, R &amp;amp; S word &amp;quot;parameters&amp;quot; to a macro call.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Access to the machine G-code parameter block ==&lt;br /&gt;
&lt;br /&gt;
Mach3 has a block of variables which can be used in part programs. They are identified by # followed by a number (the parameter address). The contents of the Tool and Fixture tables are in these parameters but there are many values that can be used by the writer of a part program.&lt;br /&gt;
These machine variables can be accessed within macros by GetVar and SetVar.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetVar (PVarNumber '''as''' Integer) as Double&lt;br /&gt;
 '''Sub''' SetVar (PVarNumber '''as''' Integer, newVal '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
The predefined parameter variables are defined the manuals ''Using Mach3Mill'' and ''Using Mach3Turn''.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 FixNumb = GetVar (5220)	' get current fixture number&lt;br /&gt;
 Rem set X offset of fixture 2 to be same as fixture 1&lt;br /&gt;
 Call SetVar (5241, GetVar (5221)) &lt;br /&gt;
 Rem increment a counter, say in a multiple part layout&lt;br /&gt;
 Call SetVar (200, GetVar (200) + 1))&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Arguments of macro call ==&lt;br /&gt;
&lt;br /&gt;
When a macro is called from the MDI line or within a part program then data can be passed to it by P, Q, and S words on the line. The values of these words are &amp;quot;read&amp;quot; in the macro using the Param functions.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Param1 () '''as''' Double ' gets P word&lt;br /&gt;
 '''Function''' Param2 () '''as''' Double ' gets Q word&lt;br /&gt;
 '''Function''' Param3 () '''as''' Double ' gets S word&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Information to and from the user ==&lt;br /&gt;
&lt;br /&gt;
Scripts can communicate with the operator by displaying a dialog box with a prompt into which the user can type numeric data. The Question function prompts for one item. The GetCoord routine prompts for the values of X, Y, Z and A coordinates.&lt;br /&gt;
&lt;br /&gt;
''Refer here to MsgBox etc built-in VB Script calls !!!''&lt;br /&gt;
&lt;br /&gt;
The other strategy, probably more suited to scripts attached to buttons, is to provide DROs of a screen into which data is set before running the macro. These can of course also display results from the script.&lt;br /&gt;
&lt;br /&gt;
User Intelligent Labels and Tickers enable messages to be displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog boxes ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Question (prompt '''as''' String) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
The string in &amp;lt;tt&amp;gt;prompt&amp;lt;/tt&amp;gt; is displayed in a modal dialog titled &amp;quot;Answer this. The dialog contains an edit box. The value of the function is set to the number in this when OK is clicked.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' GetCoord (prompt '''as''' String)&lt;br /&gt;
&lt;br /&gt;
As with Question, a modal dialog titled &amp;quot;Enter Coordinates&amp;quot; displays prompt. This has four edit boxes labelled X, Y, Z and A into which values can be typed. GetCoord itself does not return the values to the macro code. These must be fetched by GetXCoor, GetYCoor etc.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetXCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetYCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetZCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetACoor () '''as''' Double&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Outputting text, warnings etc. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Message (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Writes the message on the &amp;lt;tt&amp;gt;Error&amp;lt;/tt&amp;gt; intelligent label and in the History log file.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' PlayWave (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Plays a Windows .WAV file (e.g. a chime to warn of an event or error). This feature must be enabled in Config&amp;gt;Logic&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Speak (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Speaks a text string. Requires Speech to be enabled in Config&amp;gt;Logic and a suitable sppech engine to be installed (e.g. the one supplied with Microsoft Office).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User defined DROs and LEDs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This technique is mainly applicable to wizards and scripts which are run from a user defined screen button.&lt;br /&gt;
&lt;br /&gt;
A block of DRO OEM codes is allocated to 255 DROs which are not used by Mach3 itself. These DROs, suitably labelled, can be placed on a screen.&lt;br /&gt;
 &lt;br /&gt;
The operator enters data into the DRO(s) before pressing a button or series of buttons to run the macro or macros. The macro(s) access the data using &amp;lt;tt&amp;gt;GetUserDRO&amp;lt;/tt&amp;gt; as explained above. The macro can also use &amp;lt;tt&amp;gt;SetUserDRO&amp;lt;/tt&amp;gt; to update the data or return a result in another DRO.&lt;br /&gt;
&lt;br /&gt;
In addition there are 255 user LEDs which can be read and (unlike normal LEDs) written using &amp;lt;tt&amp;gt;GetUserLED&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SetUserLED&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This technique can, for example, be used to implement a totally personal scheme to extend the Mach3 offset setting by Touch with Correction. Suppose you have a probe with a 5 mm tip diameter which only trips in sideways movement (i.e. for X and Y) then you might use a 1 mm slip or piece of shim-stock to manually feel the Z touch. You could define a pair of scripts attached to two buttons to apply the fixed, 5 mm, X and Y correction and a third button that uses a Z-correction DRO to set the thickness of the shim or slip which is in use.&lt;br /&gt;
&lt;br /&gt;
Such features can be made to appear to the operator to be exactly like built-in Mach3 functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Button captions, Labels and Tickers ===&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetButtonText (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
This will change the caption text of the button to which the VB script is attached to the given string. This may only be called &amp;quot;from&amp;quot; a button rather than in a macro.&lt;br /&gt;
&lt;br /&gt;
If the current screen has a label whose, case sensitive, text is in the range &amp;lt;tt&amp;gt;UserLabel1&amp;lt;/tt&amp;gt; to UserLabel255 then the actual text displayed can be set in a Script by calling&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetUserLabel (number '''as''' Integer, text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
This will display the given &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; in the label corresponding to the &amp;lt;tt&amp;gt;number&amp;lt;/tt&amp;gt; given.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetTicker (number '''as''' Int, text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Accesses the 255 tickers &amp;lt;tt&amp;gt;Ticker1&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;Ticker255&amp;lt;/tt&amp;gt;. In a ticker the text of the message scrolls through the box so a very long message can be given in a small area of screen at the expense of some inconvenience for the user.&lt;br /&gt;
&lt;br /&gt;
e.g. &lt;br /&gt;
&lt;br /&gt;
 SetUserLabel 12, &amp;quot;You must enter a whole number of holes&amp;quot;&lt;br /&gt;
 SetTicker 205, &amp;quot;This is a very long error message because you seem to have done something very silly&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Handling files of Part Programs ==&lt;br /&gt;
&lt;br /&gt;
This group of functions deals with loading and running G-code and features for the Teach MDI and wizard systems&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Loadfile (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads the given file of G-code.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadRun (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads the given file of G-code and starts its execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' AppendTeachFile (pathname '''as''' String) '''as''' Integer&lt;br /&gt;
 '''Function''' OpenTeachFile (pathname '''as''' String) '''as''' Integer&lt;br /&gt;
 '''Function''' OpenSubroutineFile (name '''as''' String) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Opens the given file for G-code and starts writing of commands executed (e.g. by MDI) to it. ''Open'' is an empty file, ''Append'' assumes that the file already exists and preserves its content. Returns non-zero value if operation is sucessful.&lt;br /&gt;
&lt;br /&gt;
??? OpenSubroutine file is describes in Release Notes as exactly the same as OpenTeachFile. It is not exactly clear whsat the significance of this is.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadTeachFile ()&lt;br /&gt;
&lt;br /&gt;
Loads the G-code of the currently open teach file so it can be executed&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' CloseTeachFile ()&lt;br /&gt;
&lt;br /&gt;
Closes the currently open Teach or wizard file and stops commands being written to it.&lt;br /&gt;
&lt;br /&gt;
== Screen handling routines for wizards etc. ==&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ToggleScreens()&lt;br /&gt;
&lt;br /&gt;
Switches between displaying the .SET and .SSET screen sets. This is employed on the standard screens to switch between the &amp;quot;complex&amp;quot; and &amp;quot;simple&amp;quot; screen sets but could be used for any purpose such a screens with and without a fourth axis or screens optimised for daytime and nighttime working.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetPage () '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns the number of the screen in the set presently being displayed. Used to remember where the user is when running a wizard.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetPage (page '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Used to display a given screen of a set, typically on return from a wizard. Equivalent to using &amp;lt;tt&amp;gt;DoOEMButton&amp;lt;/tt&amp;gt; with the screen number.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadWizard ( name '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads and runs the named Wizard.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Savewizard ()&lt;br /&gt;
&lt;br /&gt;
Saves the information in the local controls on a wizard screen in the wizardname.SET.DEFS file so that the values are on the screen when the wizard is next run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input/Output signals, Modbus I/O, a serial port and &amp;quot;foreign&amp;quot; ports ==&lt;br /&gt;
&lt;br /&gt;
=== Signals ===&lt;br /&gt;
&lt;br /&gt;
Scripts can access the input signals (both on parallel ports and defined virtually in response to keycodes) such as the state of home and limit switches and can control output signals.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsActive (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Function''' IsOutputActive (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Sub''' ActivateSignal (sigNo '''as''' Integer)&lt;br /&gt;
 '''Sub''' DeActivateSignal (sigNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;IsActive&amp;lt;/tt&amp;gt; tests input signals. &amp;lt;tt&amp;gt;IsOutputActive&amp;lt;/tt&amp;gt; tests output signals. They will return True if the signal is active (i.e. its LED would be lit on the Diagnostics screen). In other words this test is after the application of the Active Hi/Active Lo configuration of the signal hot a test of &amp;quot;0 volts&amp;quot; or &amp;quot;5 volts&amp;quot; on the signal's pin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ActivateSignal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;DeActivateSignal&amp;lt;/tt&amp;gt; similarly control the logical state of output pins. Mach3 will apply the Active Hi/Active Lo configuration to establish the electrical state required.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsSuchSignal (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the signal is enabled. It is used to avoid things like digitising if the machine has no probe input defined.&lt;br /&gt;
&lt;br /&gt;
For all these routines, the required signal is coded using the values defined on the [[VB Constants for Signal Names]] page.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetTriggerMacro (MacroNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Defines the number of a macro to be executed when an OEMTrigger is set (slightly unexpectedly on the Config&amp;gt;Set System Hotkeys dialog) to generate OEM code 301. This provides script execution without the requirement for a screen button as intermediary.&lt;br /&gt;
&lt;br /&gt;
For example if &amp;lt;tt&amp;gt;SetTriggerMacro 456&amp;lt;/tt&amp;gt; has been executed then a signal on any OEMTrigger configured to 301 will run the code in the file M546.M1S when activated.&lt;br /&gt;
&lt;br /&gt;
===Modbus===&lt;br /&gt;
&lt;br /&gt;
Modbus is a standard ([http://www.modbus.org/tech.php details here]) serial protocol which allows control of a device such as a Programmable Logic Controller (PLC) or dedicated interface (like Peter Homann's ModIO). Typically thois expands the input/output capability of Mach systems for non-time-critical functions.&lt;br /&gt;
&lt;br /&gt;
Mach supports direct access to the registers of a Modbus device and will perform autopolling to map registers into ports and pins and to give simple access to the state of analog inputs and MPG counters.&lt;br /&gt;
&lt;br /&gt;
====Direct input routines====&lt;br /&gt;
&lt;br /&gt;
 '''Function''' FillFromCoil (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Function''' FillFromStatus (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer &lt;br /&gt;
 '''Function''' FillFromHolding (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Function''' FillFromInput(slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer &lt;br /&gt;
 &lt;br /&gt;
These routines will request a memory transfer from the current ModBus device's Coil, Status, Holding and Input registers. The requested number of bytes starting from the address specified will be transfered to an internal buffer in Mach. Routine returns a 1 if successful in its transfer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetModWord(index '''as''' Integer) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
This rotuine will return a &amp;quot;16 bit word&amp;quot;. All data transfered from the device using the Fill routines, sends its information to a buffer. This routine will return a 16 bit word in the buffer selected by &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt;. The first word is selected by &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt; = 0&lt;br /&gt;
&lt;br /&gt;
 '''Function''' ModGetInputBit(nBit '''as''' Integer) '''as''' Integer &lt;br /&gt;
&lt;br /&gt;
This routine will return the bit chosen by the index &amp;lt;tt&amp;gt;nBit&amp;lt;/tt&amp;gt; as a one or a zero from the input buffer above. The first bit (i.e. most significant in the first word) is selected by &amp;lt;tt&amp;gt; nBit&amp;lt;/tt&amp;gt; = 0 &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 FillFromInput( 1, 102, 5 ) ' this will transfer 5 bytes to the buffer system from address 102 in the device.&lt;br /&gt;
 i = ModGetInputBit (6) ' will get the 6th bit from that 5 byte array which you transfered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Polled input/output====&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetInput (buffIndex '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Sub''' SetModOutput (buffIndex '''as''' Integer, value '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Reads or writes a 16 bit word from/to the buffers updated by polling the Modbus. Access to these buffers is a memory access rather than an I/O transaction implied by the raw reading routines so these calls can be made as frequently as desired.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;buffIndex&amp;lt;/tt&amp;gt; values 0 through 63 are single bits corresponding to the input and output pins of Port 0. The mapping of these to Modbus device registers is defined in the &amp;lt;tt&amp;gt;Config&amp;gt;Setup Modbus Control&amp;lt;/tt&amp;gt; dialog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;buffIndex&amp;lt;/tt&amp;gt; values 64 through 127 are 16 bit words. These are mapped in &amp;lt;tt&amp;gt;Config&amp;gt;Setup Modbus Control&amp;lt;/tt&amp;gt; dialog. For full details see [[Modbus in Mach]].&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetModIOString (slave as Integer, xDisp '''as''' Integer, yDisp '''as''' Integer, Text '''as''' String)&lt;br /&gt;
 &lt;br /&gt;
Writes the string on the ModIO LCD screen (if present).&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
(a) xDisp must be an even number, i.e. writing must start at a 16 bit word boundary in the ModIO.&lt;br /&gt;
&lt;br /&gt;
(b) &amp;lt;tt&amp;gt;SetHomannString (xDisp '''as''' Integer, yDisp '''as''' Integer, Text '''as''' String) &amp;lt;/tt&amp;gt; is a legacy routine equivalent to &amp;lt;tt&amp;gt;SetModIOString,&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;Slave&amp;lt;/tt&amp;gt; = 1&lt;br /&gt;
&lt;br /&gt;
=== Serial port ===&lt;br /&gt;
&lt;br /&gt;
You can send bytes of raw data to a serial port. The port number (i.e. n in COMn) to be used and the baud rate for transmission is set in Config&amp;gt;Logic. RTS/CTS hardware flow control protocol will be used to control large volumes of data but this will not be normally required. Data is transmitted 8 data bits, 1 stop bit No Parity by a call of SendSerial.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SendSerial (chars '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Example: to write the value of X DRO to an LCD display connected to the serial (RS232) port.&lt;br /&gt;
&lt;br /&gt;
 Call SendSerial (&amp;quot;X-Axis = &amp;quot; &amp;amp; GetDRO (0))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foreign ports ==&lt;br /&gt;
 &lt;br /&gt;
Scripts can access ports on the PC which are additional to the one (or perhaps two) parallel port(s) defined in Config&amp;gt;Ports and Pins. These are accessed at the basic hardware port address level and you will have to be aware of the details of the individual port addresses, allocation of data and status bits etc.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetPortByte (pAddr '''as''' Integer) '''as''' Byte&lt;br /&gt;
 '''Sub''' PutPortByte (pAddr '''as''' Integer, bData '''as''' Byte)&lt;br /&gt;
&lt;br /&gt;
This feature should be used with great care as, if misused, it can interfere with any peripheral on your system, including the hard-drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waiting and system features ==&lt;br /&gt;
&lt;br /&gt;
As described above the script code and Mach3 itself run in two separate processes. You can test to see in Mach3 is busy or idle by calling:&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsMoving () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
This will return True if Mach3 is busy. You should call it in a loop after commanding an axis move or other function which could take a significant time and before reading DROs or LEDs that could be affected by the move.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Call Code (&amp;quot;G0X12Z100&amp;quot;)&lt;br /&gt;
 While IsMoving ()&lt;br /&gt;
 WEnd&lt;br /&gt;
 x = GetDRO (2)  ' get Z value in case it has been Z inhibited&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsStopped () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns True if Mach3 is not in the process of executing a part-program. ??? Can anyone clarify what happens when in Feedhold, SingleStep and waiting for a Shuttle Jog pulse between blocks of code?&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsLoading () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns true if the part program is loading rather than being actually run (e.g. so the toolpath is being generated or regenerated). This can be used to inhibit script actions like Question() in this situation.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SystemWaitFor (sigNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Waits for the given signal to become active. This allows interfacing with physical controls on the machine.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' WaitForPoll ()&lt;br /&gt;
&lt;br /&gt;
Waits until a Modbus Poll has taken place. Not sure if this is safe if Modbus is not turned on???. Use this in a loop, e.g. in macropump macro waiting for interesting things to come from the Modbus device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsFirst () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns True if this is the first call of the function after Mach3 has exited from the EStop state. This can be used to re-initialse data that would be lost at a n EStop.&lt;br /&gt;
&lt;br /&gt;
== Legacy and special system VB Script calls ==&lt;br /&gt;
&lt;br /&gt;
The following functions are still available to writers of macro scripts at Release 1 of Mach3. Their general use is, however, deprecated as better and more general ways are available (usually by accessing a DRO or LED with the Get/Set routines) or they are aimed at internal systems use. They may be withdrawn or changed in subsequent revisions of the Mach software.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' CloseDigFile()&lt;br /&gt;
&lt;br /&gt;
Close the digitize point file.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' CommandedFeed() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the currently applicable feedrate (including any override.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DisablePWM ()&lt;br /&gt;
&lt;br /&gt;
Inhibit output of PWM spindle signal for Digispeed.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DisableSignal (signal '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Disables operation of given signal.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinCCW ()&lt;br /&gt;
&lt;br /&gt;
Starts the spindle in a counterclockwise direction.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinCW ()&lt;br /&gt;
&lt;br /&gt;
Starts the spindle in a clockwise direction.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinStop ()&lt;br /&gt;
&lt;br /&gt;
Stops the spindle.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' EnablePWM ()&lt;br /&gt;
&lt;br /&gt;
Enable output of PWM spindle signal for Digispeed.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' EnableSignal (signal '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Enables operation of given signal.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' FeedRate() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to clarify which rate this is (blended, commanded, actual etc.)&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetABSPosition(axis '''as''' Byte) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the absolute machine coordinate of the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetCurrentTool() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns the number of the currently active tool (i.e. after G43 executed)&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetIJMode() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns 0 for Absolute mode, 1 for Incremental mode.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetRPM() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the actual speed of the spindle as measured by the Index sensor (if fitted).&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetSafeZ() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the current Safe_z in Machine coordinates to the VB routine.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetScale(Axis '''as''' Integer) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Returns the scale factor for the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetSelectedTool() '''as''' Byte&lt;br /&gt;
&lt;br /&gt;
Will return tool selected but not yet activated.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetToolChangeStart(Axis '''as''' Byte) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Will return the position of an axis when a toolchange was called for.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' GotoSafeZ ()&lt;br /&gt;
&lt;br /&gt;
Will move to the absolute Z coordinate specified in the Safe_Z DRO.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' MaxX() '''as''' Double&lt;br /&gt;
 '''Function''' MaxY() '''as''' Double&lt;br /&gt;
 '''Function''' MinX() '''as''' Double&lt;br /&gt;
 '''Function''' MinY() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to document these please&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Message( text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Writes the string, which should have only one line, in the Error intelligent label and history. Equivalent to executingbCode &amp;quot;MSG,&amp;quot; &amp;amp; text&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' OpenDigFile()&lt;br /&gt;
&lt;br /&gt;
Open a digitize point cloud file. User is prompted for filename.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' QueueDepth() '''as''' Byte&lt;br /&gt;
&lt;br /&gt;
Depth of planner queue is returned.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Random() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Returns a pseudo random number.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' RefCombination(Axes '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Performs simultaneous referencing on several axes. They are coded by ORing or addition of the following codes: X = 1, Y= 2, Z = 4, A = 8, B = 16 and C = 32.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ResetTHC()&lt;br /&gt;
&lt;br /&gt;
Resets the Torch Height Control code&lt;br /&gt;
&lt;br /&gt;
 '''Function''' RetractMode() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to define this function please&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Round() '''as''' Double&lt;br /&gt;
 '''Function''' roun() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to detail these functions please&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' RunFile ()&lt;br /&gt;
&lt;br /&gt;
Executes the currently loaded G-code file.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetCurrentTool(Tool '''as''' Byte)&lt;br /&gt;
&lt;br /&gt;
Will return currently selected tool&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetFeedRate(Rate '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets current FeedRate&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetSpinSpeed(SWord '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets current speed as by using the S word&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetMachZero(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Defines the current position of the specified axis to be machine zero.&lt;br /&gt;
 &lt;br /&gt;
 '''Sub''' SetIJAbs()&lt;br /&gt;
 '''Sub''' SetIJInc()&lt;br /&gt;
These will set the IJ mode to absolute and incremental respectively&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetIJMode(mode '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
This will set the IJ mode to Absolute if mode = 0 and Incremental if mode = 1&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetOutput (val '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
??? Can anyone define function of this routine please&lt;br /&gt;
&lt;br /&gt;
  '''Sub''' SetPulley( PulleyNo '''as''' integer)&lt;br /&gt;
&lt;br /&gt;
Sets a new value for the current pulley. PulleyNo should be in range 1 through 4&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetSafeZ(SafeZ '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
This will set the Safe_Z which should be in Machine coordinates&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetScale(Axis '''as''' Integer, Scale '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets the given scale factor for the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SingleVerify(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Do a &amp;quot;silent&amp;quot; verification run on one axis not reporting the outcome, just correcting the axis position.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SingleVerifyReport(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Do a normal verification run on one axis reporting any discrepancy.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' StraightFeed(x '''as''' Double, y '''as''' Double, z '''as''' Double ,&lt;br /&gt;
 		a '''as''' Double, b '''as''' Double, c '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
This will perform a feedrate move to X1,Y2,Z3…etc.&lt;br /&gt;
 &lt;br /&gt;
 '''Sub''' StraightTraverse(x '''as''' Double, y '''as''' Double, z '''as''' Double ,&lt;br /&gt;
 			a '''as''' Double, '''b''' as Double, '''c''' as Double)&lt;br /&gt;
Performs a rapid move to x, y, z etc.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' THCOn()&lt;br /&gt;
&lt;br /&gt;
Turn on THC control&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' THCOff()&lt;br /&gt;
&lt;br /&gt;
Turn off THC control.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' ToolLengthOffset() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Gets the tool offset length currently in effect if any.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tXStart() '''as''' Double&lt;br /&gt;
 '''Function''' tZStart() '''a'''s Double&lt;br /&gt;
 '''Function''' tEndX() '''as''' Double&lt;br /&gt;
 '''Function''' tEndZ() '''as''' Double&lt;br /&gt;
 '''Function''' tFirstPass() '''as''' Double&lt;br /&gt;
 '''Function''' InFeeds() '''as''' Double&lt;br /&gt;
 '''Function''' ThreadDepth() '''as''' Double&lt;br /&gt;
 '''Function''' GetMinPass() '''as''' Double&lt;br /&gt;
 '''Function''' tMinDepth() '''as''' Double&lt;br /&gt;
 '''Function''' tGetCutType() '''as''' Double&lt;br /&gt;
 '''Function''' tCutDepth() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tGetInfeedType() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tClearX() '''as''' Double&lt;br /&gt;
 '''Function''' tZClear() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tLead() '''as''' Double&lt;br /&gt;
 '''Function''' tSpring() '''as''' Byte&lt;br /&gt;
 '''Function''' tPasses() '''as''' Byte&lt;br /&gt;
 '''Function''' tChamfer() '''as''' Double&lt;br /&gt;
 '''Function''' tTaper() '''as''' Double&lt;br /&gt;
 '''Function''' tTapers() '''as''' Double&lt;br /&gt;
 '''Function''' tInFeed() '''as''' Double&lt;br /&gt;
 '''Function''' tDepthLastPass() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' tSetCutType (type '''as''' Integer)&lt;br /&gt;
 '''sub''' tSetInFeedType (type '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Gets/Sets parameters defined in a G76 threading cycle call for use by the canned cycle Script.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' VerifyAxis(Silent '''as''' Boolean)&lt;br /&gt;
&lt;br /&gt;
Do a verification run. If silent is true, do not report the outcome, just correct the axis position.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ZeroTHC ()&lt;br /&gt;
&lt;br /&gt;
ZeroTHC clears the THC correction value so new correction may be done within THC's limits.&lt;/div&gt;</description>
			<pubDate>Wed, 03 May 2006 17:33:12 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach_specific_Subs/Funcs_-_deprecated</comments>		</item>
		<item>
			<title>Screwmapping</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Screwmapping</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This article is really only a placeholder - please re-write it if you have experience of using the screwmapping feature.'''&lt;br /&gt;
&lt;br /&gt;
Screwmapping allows Mach to correct for non-uniformity of the drive system (typically ballscrews) on the linear axes (X, Y and Z)&lt;br /&gt;
&lt;br /&gt;
It is configured from the menu &amp;lt;tt&amp;gt;Config&amp;gt;Screwmapping&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a way of accurately measuring the actual position of each axis over its whole travel. In practice this will probably be a glass scale. It this is interfaced to Mach via the encoder inputs then the data can be transferred directly to the mapping table but accuracy will be less than that obtainable with an interpolating DRO box interfaced to the scale.&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
#If you want to correct for a uniform pitch error of the whole screw then this is best done in Motor Tuning&lt;br /&gt;
#I believe that the greates cause of error in rolled thread screws is &amp;quot;thread drunkeness&amp;quot;. This causes a cyclic error each rev. of the screw. The current screwmapping algorithm is not really suited to correcting for it.&lt;/div&gt;</description>
			<pubDate>Wed, 12 Apr 2006 07:45:33 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Screwmapping</comments>		</item>
		<item>
			<title>Making an MPG out of a cheap encoder</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Making_an_MPG_out_of_a_cheap_encoder</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
&lt;br /&gt;
I wrote a while back about how I used a rotary switch, on an analog input on the ModIO, to simulate 6 discrete switches, for the purposes of controlling my Jog selection. In that article I mentioned that I had bodged together an MPG using some assorted parts I had at hand. This article gives a few more details on the building of an MPG from a rotary encoder, including a method for adding detents, and making the knob easier to use for this purpose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The controls==&lt;br /&gt;
&lt;br /&gt;
=== The MPG ===&lt;br /&gt;
&lt;br /&gt;
There is really no difference electrically between any rotary quadrature encoder, and one which is specifically set up for use as an MPG. The major mechanical differences that I am aware of are:&lt;br /&gt;
&lt;br /&gt;
-An MPG typically has steps or detents to allow you to know, by feel, how far you have turned it. These steps should be some integral multiple of the number of pulses per rev the encoder puts out.&lt;br /&gt;
&lt;br /&gt;
-An MPG typically has a large knob, which is easier to control, and usually has a &amp;quot;spinner&amp;quot; on it to allow rapid cranking.&lt;br /&gt;
&lt;br /&gt;
-Most dedicated MPGs will have 50 or 100 steps or detents per revolution, allowing easier use by counting turns, much as the handwheels on a manual machine are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware implementation ==&lt;br /&gt;
&lt;br /&gt;
=Detents=&lt;br /&gt;
&lt;br /&gt;
My MPG is out of a piece of surplus gear, and it has 128PPR, no detents, and a short shaft. I made up a shaft extension that allowed me to mount a plastic gear(another surplus piece) that was a &amp;quot;push-fit&amp;quot; over the larger diameter of the extension. The only part that was difficult was finding a gear of the right size with a number of teeth that was an integral divisor of the number of pulses per rev(PPR) of the encoder. I thought that was important, because I wanted each &amp;quot;click&amp;quot; or step to have the same number of &amp;quot;pulses&amp;quot; result. I ended up using a 32-tooth gear for my 128PPR encoder.&lt;br /&gt;
&lt;br /&gt;
Then I mounted the whole thing on a bracket that allowed the shaft to stick up out of the front panel of my homemade pendant.&lt;br /&gt;
&lt;br /&gt;
Finally, I mounted another piece of surplus &amp;quot;junk&amp;quot;, a spring steel leaf with a roller on the end, to another bracket, allowing the roller to ride on the gear teeth. I figured that bending the mounting bracket would allow me to adjust the tension on the spring, and therefore the force of the roller on the gear teeth, until turning the shaft felt right. I wanted it to be easy to turn, but I wanted enough tension that I would not turn it accidentally. In practice, i found that it was just fine with the bracket at right angles as originally mounted, and so i have not tried to adjust it.&lt;br /&gt;
&lt;br /&gt;
Here is the &amp;quot;test&amp;quot; configuration&amp;quot; of the MPG, which more clearly shows some of the parts than the &amp;quot;final&amp;quot; version:&lt;br /&gt;
&lt;br /&gt;
[[Image:MPG.JPG]]&lt;br /&gt;
&lt;br /&gt;
and here is the &amp;quot;Final&amp;quot; version:&lt;br /&gt;
&lt;br /&gt;
[[Image:MPG-final.JPG]]&lt;br /&gt;
&lt;br /&gt;
=Knob=&lt;br /&gt;
&lt;br /&gt;
I was lucky in that I had(again, in the junk drawer) a knob that fit a 1/4&amp;quot; shaft, with central section of about 1.5&amp;quot; diameter, with nice, big flutes or serrations which made it easy to control. I added a &amp;quot;spinner&amp;quot; by drilling and tapping a 4-40 hole, and screwing on a short piece of thick-wall tubing, countersunk at the top to fit a 4-40 flat-head screw. I installed a washer under the spinner to make it a little more free-turning, and the screw was cut to length so that, when the spinner was &amp;quot;almost-snug&amp;quot;, the end of the screw was into the partially-tapped thread at the bottom of the hole, thereby holding it securely.&lt;br /&gt;
&lt;br /&gt;
NOTE: Don't overdo this, if you don't want to split a plastic knob.&lt;br /&gt;
&lt;br /&gt;
Here is a shot of the knob:&lt;br /&gt;
&lt;br /&gt;
[[Image:MPG-Knob.JPG]]&lt;br /&gt;
&lt;br /&gt;
=PPR count=&lt;br /&gt;
&lt;br /&gt;
Well, 2 out of 3 ain't bad, right? I couldn't see any easy way to take a 128PPR encoder and make it have a multiple of 25 or 50 pulses per rev, so I just don't count &amp;quot;Handwheel&amp;quot; revolutions.&lt;br /&gt;
&lt;br /&gt;
===Questions?===&lt;br /&gt;
&lt;br /&gt;
If you have a question please ask it on the mach1mach2cnc group at Yahoo, or via email to awander@verrex.com&lt;br /&gt;
&lt;br /&gt;
Andy Wander&lt;/div&gt;</description>
			<pubDate>Sun, 12 Mar 2006 17:42:58 GMT</pubDate>			<dc:creator>Awander</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Making_an_MPG_out_of_a_cheap_encoder</comments>		</item>
		<item>
			<title>Some notes on Tuning MAchIV</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Some_notes_on_Tuning_MAchIV</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1) When tuning MachIV initially, make sure CV is set to 64 or less. It should be set to a speed that allows jogging properly.&lt;br /&gt;
&lt;br /&gt;
2) Press OK to flash the G100. &lt;br /&gt;
&lt;br /&gt;
(This information to be updated soon)&lt;/div&gt;</description>
			<pubDate>Sun, 26 Feb 2006 21:48:36 GMT</pubDate>			<dc:creator>Art</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Some_notes_on_Tuning_MAchIV</comments>		</item>
		<item>
			<title>How to get Data from a Probe</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=How_to_get_Data_from_a_Probe</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to Get Data From a probe Cycle ==&lt;br /&gt;
&lt;br /&gt;
When a Probe Cycle is done (G31) the point that the probe contacts the material is saved in Mach. The DRO's '''WILL NOT''' be the correct probe position! The reason the DROs will not be in the correct pos is because the axis can not stop instantly. Once the probe is pressed the axis must decelerate to a stop '''past''' the point where the probe hit. The correct probe position is saved as a &amp;quot;Var&amp;quot;. The Vars are as follows:&lt;br /&gt;
&lt;br /&gt;
*Var(2000) = X&lt;br /&gt;
&lt;br /&gt;
*Var(2001) = Y&lt;br /&gt;
&lt;br /&gt;
*Var(2002) = Z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To Get the data in VB use GetVar().&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
&lt;br /&gt;
As of this writing (April 30, 2007), the current release of Mach 3 does not adjust the value of Var(2002) with the '''G43 H##''' tool length.  So you will need to do this in your code yourself.&lt;br /&gt;
&lt;br /&gt;
You may decide to copy the probe's length from the tool table into a user parameter, such as #999, and then use Var(999) to adjust the value returned by Var(2002).  When Mach 3 is upgraded to account for tool lengths, you can use your old programs, unedited, by setting #999 to zero.&lt;br /&gt;
&lt;br /&gt;
This kind of adjustment will be needed anyway to compensate for the stylus's radius when probing in the X and Y directions.  For the greatest accuracy, you may decide to use different radii for +X, +Y, -X, and -Y.  Choosing a set of user parameters for these radii that are common in all of your programs will let you avoid distributed program edits when the probe's stylus is replaced.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
VB Probe Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Code &amp;quot;G31 Z-4.0 F20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
While IsMoving()&lt;br /&gt;
Wend&lt;br /&gt;
&lt;br /&gt;
ZProbePos = GetVar(2002)'This will get the data from the probe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sat, 25 Feb 2006 12:44:42 GMT</pubDate>			<dc:creator>Barker806</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:How_to_get_Data_from_a_Probe</comments>		</item>
		<item>
			<title>John plays links</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=John_plays_links</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== This is the heading ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page was made to show how to '''create''' a new page and '''link''' in it to an existing one&lt;br /&gt;
&lt;br /&gt;
Many users will need to know about [[OEM Buttons]]&lt;br /&gt;
&lt;br /&gt;
Feel free to play with this pages as well as making your own.&lt;br /&gt;
&lt;br /&gt;
''John Prentice''&lt;/div&gt;</description>
			<pubDate>Sat, 25 Feb 2006 09:41:46 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:John_plays_links</comments>		</item>
		<item>
			<title>Care on using the G100 Digital Outputs</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Care_on_using_the_G100_Digital_Outputs</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This warning refers to G100 Rev 4 boards'''&lt;br /&gt;
&lt;br /&gt;
''Note this is John Prentice's personal opinion - a definitive view from Geckodrive has not yet been posted. However it may save you some time and some damaged hardware.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output state during bootup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Digital outputs are configured as Active Lo. The associated LED lights when they are Lo.&lt;br /&gt;
&lt;br /&gt;
During the power on sequence (i.e. until the timeout of the bootloader's loading of the currently flashed Rabitt and FPGA code has elapsed - 10 seconds in Art's example) all the outputs will be active (i.e. Lo, LEDs ON). If you have coolant/spindle etc. rigged to these then these external circuits will run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Electrical behaviour of outputs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Digital outputs are the collector of a ULN2003 Darlington transistor. They are pulled up through the indicator LED and a 1k5 resistor to the raw +12 to +24 volt supply rail from the wall-wart.&lt;br /&gt;
&lt;br /&gt;
There are IMO several implications of this:&lt;br /&gt;
&lt;br /&gt;
* If you want to drive a relay then it '''must''' be fed from the same wall-wart +ve supply or back feeds via its coil and catching diode will give false indications on the G100 LED&lt;br /&gt;
* You cannot get this supply ''out of'' the +24 volt terminal of the G100. The coax power jack and this 24v terminal feed the internals via separate diodes (offering reverse polarity protection) - a supply into one does not, however, come out of the other.&lt;br /&gt;
* If you try to drive an external (say panel mounted) LED then it too must be fed from the wall-wart +ve. If you connect its anode to, say, +5v it will be destroyed by being reverse biassed by the G100 supply.&lt;br /&gt;
* Do not attempt to drive TTL gates (e.g. in an invertor) from these outputs without fully understanding the circuit in the external device and the implications of applying up to 24volts to it.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This information will be updated as soon as possible with further details and workarounds.&lt;br /&gt;
&lt;br /&gt;
* Note that the LED's in MachIV on the diagnostics page reflect the LEDs on the G100. This does not mean an active signal is represented by the LED being on, it means the darlington is on when the LED is on. Whether of not the actual signal is active depends on its &amp;quot;low active state&amp;quot;.&lt;/div&gt;</description>
			<pubDate>Fri, 24 Feb 2006 08:32:15 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Care_on_using_the_G100_Digital_Outputs</comments>		</item>
		<item>
			<title>A note on Tuning G100</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=A_note_on_Tuning_G100</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This information was provided by Art Fenerty (24 February 2006) -  with some edits by JAP'''&lt;br /&gt;
&lt;br /&gt;
1) Press Axis select.&lt;br /&gt;
 &lt;br /&gt;
2) Select 256K in the dropdown for the divider frequency, if you need a higher maximum frequency, fine, but like in Mach3 kernel frequency, select the lowest you need, it increases the sensitivity  by decreasing the granularity of the individual frequencies involved. &lt;br /&gt;
 &lt;br /&gt;
3) Select 50% duty cycle, some of the others do not work and will do funny things.&lt;br /&gt;
 &lt;br /&gt;
4) Set Counter Control to quadratire, external count to 1, internal count to 0. &lt;br /&gt;
 &lt;br /&gt;
5) In Constant Vel, select 64ms, no more, no less. &lt;br /&gt;
 &lt;br /&gt;
6) Select the maximum axis Velocity desired. Then increase Accel as high as you dare, or can get away with. This will create sluggish response if it is too low. Unfortunately there is no testing option (c.f. arrow keys in Mach3) during tuning because you are selecting firmware settings that will eventually be sent to the G100. As of 24 Feb 2006 I think you have to use the sliders. {I could not make it work typing values into the edit control box for Velocity. - John Prentice}&lt;br /&gt;
 &lt;br /&gt;
7) Repeat for all axis&lt;br /&gt;
 &lt;br /&gt;
Now press OK, not  either Read button. It should indicate by a dialog that a reboot will happen. The axis DROs will be zeroed when tghis is complete&lt;br /&gt;
&lt;br /&gt;
Then it shoudl be fast and crisp. On mine anyway, tapping my jog key as fast as I possibly can shows a blinking step light at the same frequency. Strange thing about this device, is that a single setting being off can do very weird things. But most important, is that 64ms CV mode (Called Constant Vel). This is the &amp;quot;Moving Averaging&amp;quot; buffer length, so your miniumm jog will be the length of that buffer so 64ms is just about right for it. It acts as a filter of the 64ms segmentation. One feeds the other - SO make sure it is set correctly.&lt;/div&gt;</description>
			<pubDate>Fri, 24 Feb 2006 08:06:06 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:A_note_on_Tuning_G100</comments>		</item>
		<item>
			<title>Setting up G100</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Setting_up_G100</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Information on the setup and configuration of the G100'''&lt;br /&gt;
&lt;br /&gt;
#Flashing Firmware and FPGA configuration&lt;br /&gt;
#[[A note on Tuning G100]]&lt;br /&gt;
#[[Care on using the G100 Digital Outputs]]&lt;/div&gt;</description>
			<pubDate>Fri, 24 Feb 2006 07:52:00 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Setting_up_G100</comments>		</item>
		<item>
			<title>Mach IV</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach_IV</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a place for collecting information on Mach IV (and the G100 aka GRex) during the Alpha phase of the development.&lt;br /&gt;
&lt;br /&gt;
Please feel free to make any contributions from your experience. This, and every wiki page, is yours!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#[[Mach IV Background]]&lt;br /&gt;
#[[Setting up G100]]&lt;br /&gt;
#[[Features yet to be implemented in Mach IV]]&lt;br /&gt;
#[[Some notes on Tuning Mach IV]]&lt;/div&gt;</description>
			<pubDate>Wed, 22 Feb 2006 16:44:34 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach_IV</comments>		</item>
		<item>
			<title>Here is a Sandbox</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Here_is_a_Sandbox</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Do what you '''like here''' to get comfortable with the Editor&lt;br /&gt;
&lt;br /&gt;
''Why, is she nice?''&lt;br /&gt;
&lt;br /&gt;
#[[Dummy test page]]&lt;br /&gt;
#[[John plays links]]&lt;br /&gt;
&lt;br /&gt;
List with bullets:&lt;br /&gt;
*Red&lt;br /&gt;
*White&lt;br /&gt;
*Blue&lt;br /&gt;
&lt;br /&gt;
The flag has these colours!! If you are British and a few other countries!! Oh Yes&lt;br /&gt;
&lt;br /&gt;
Of course colour printing uses Yellow, Magenta and Cyan.&lt;/div&gt;</description>
			<pubDate>Tue, 14 Feb 2006 10:29:40 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Here_is_a_Sandbox</comments>		</item>
		<item>
			<title>Front and Rear Toolposts when turning</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Front_and_Rear_Toolposts_when_turning</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== This is a place holder. ==&lt;br /&gt;
&lt;br /&gt;
Some dual-post information may migrate from here to ''Using Mach3Turn'' when it is stable.&lt;br /&gt;
&lt;br /&gt;
This chapter will discuss issues like:&lt;br /&gt;
&lt;br /&gt;
*Dangers of crashing when homing with twin post machines&lt;br /&gt;
*How G54/G55 offsets are used to minimise setup requirements with dual post machines&lt;br /&gt;
*Rear posts can cut with CW and CCW spindles&lt;br /&gt;
*G02/G03 implications of rear posts&lt;br /&gt;
*Threading direction implications&lt;/div&gt;</description>
			<pubDate>Mon, 16 Jan 2006 11:45:15 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Front_and_Rear_Toolposts_when_turning</comments>		</item>
		<item>
			<title>Axis DROs and other info. on ModIO LCD</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Axis_DROs_and_other_info._on_ModIO_LCD</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ModIO LCD can be a useful aid to machine control if mounted in a pendant.&lt;br /&gt;
&lt;br /&gt;
The following code added as the file Macropump.m1s to you machine profile will display:&lt;br /&gt;
&lt;br /&gt;
*The Axis DROs X, Y, Z and A&lt;br /&gt;
*The Current Units&lt;br /&gt;
*If DROs are machine or work coordinates&lt;br /&gt;
*The Jog On/Off status&lt;br /&gt;
*The EStop status&lt;br /&gt;
&lt;br /&gt;
[[Image:ModIOPendantDisp.jpg]]&lt;br /&gt;
&lt;br /&gt;
 Rem Axis DRO display On ModIO&lt;br /&gt;
 ' Include this as or in Macropump.m1s&lt;br /&gt;
 '&lt;br /&gt;
 Option Explicit&lt;br /&gt;
 Dim Display As String&lt;br /&gt;
 Dim SVal As String&lt;br /&gt;
 Dim iCount As Integer&lt;br /&gt;
 Dim iBase As Integer&lt;br /&gt;
 Dim strMode (6) As String  ' supplementary info must be 5 chars exactly in each&lt;br /&gt;
 '&lt;br /&gt;
 Const slave = 6 ' default config&lt;br /&gt;
 Const NoAxesToDisp = 4  ' max lines on ModIO Reduce if no A&lt;br /&gt;
 '&lt;br /&gt;
 If GetLED (1) Then strMode (0) = &amp;quot; inch&amp;quot; Else strMode (0) = &amp;quot;   mm&amp;quot;&lt;br /&gt;
 If GetOEMLED (16) Then strMode (1) = &amp;quot;&amp;lt;m/c&amp;gt;&amp;quot; Else strMode (1)  = &amp;quot;     &amp;quot; ' coord system&lt;br /&gt;
 '&lt;br /&gt;
 If GetOEMLED (83) Then strMode (2) = &amp;quot;     &amp;quot; Else strMode (2) = &amp;quot;NoJog&amp;quot;&lt;br /&gt;
 '&lt;br /&gt;
 If GetLed (0) Then strMode (3) = &amp;quot;EStop&amp;quot; Else strMode (3) = &amp;quot;     &amp;quot;&lt;br /&gt;
 '&lt;br /&gt;
 strMode (4) = &amp;quot;     &amp;quot;  ' not on ModIO LCD of course&lt;br /&gt;
 strMode (5) = &amp;quot;     &amp;quot;&lt;br /&gt;
 '&lt;br /&gt;
 Display = &amp;quot;&amp;quot; ' initially empty string&lt;br /&gt;
 '&lt;br /&gt;
 For iCount = 0 To NoAxesToDisp - 1&lt;br /&gt;
 	SVal = Right (&amp;quot;    &amp;quot; &amp;amp; Format (GetDro (iCount), &amp;quot;+0.0000;-0.0000&amp;quot;), 11)&lt;br /&gt;
 						' format the DRO value 11 chars long&lt;br /&gt;
 	If iCount &amp;lt; 3 Then ' X, Y, Z&lt;br /&gt;
 		iBase = Asc (&amp;quot;X&amp;quot;)&lt;br /&gt;
 	Else ' A, B, C&lt;br /&gt;
 		iBase = Asc (&amp;quot;A&amp;quot;) - 3&lt;br /&gt;
 	End If&lt;br /&gt;
 	Display = Display &amp;amp; &amp;quot; &amp;quot; &amp;amp; Chr (iBase + iCount) &amp;amp; SVal &amp;amp; &amp;quot;  &amp;quot; &amp;amp; StrMode (iCount)&lt;br /&gt;
 Next iCount&lt;br /&gt;
 '&lt;br /&gt;
 SetModIOString (slave, 0, 0, Display)&lt;br /&gt;
&lt;br /&gt;
You will need to configure your ModIO slave address in the comnstant &amp;lt;tt&amp;gt;slave&amp;lt;/tt&amp;gt; and possibly the number of axes you want to display.&lt;br /&gt;
&lt;br /&gt;
Original code by John Prentice&lt;/div&gt;</description>
			<pubDate>Wed, 04 Jan 2006 16:25:16 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Axis_DROs_and_other_info._on_ModIO_LCD</comments>		</item>
		<item>
			<title>Some screen buttons for Lathe spindle control</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Some_screen_buttons_for_Lathe_spindle_control</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My lathe has two MPGs for controlling the axes and like this it can be used for manual turning as easily as a true manual machine. This means I need manual control of the spindle speed.&lt;br /&gt;
&lt;br /&gt;
This case study shows how two custom functions can be added to a turn/lathe screen set to make manual control of the spindle be easier. They are intended for use on a touch screen but would work as well with a trackball or mouse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
There are two new functions. &lt;br /&gt;
&lt;br /&gt;
* The Up/Down arrows for the S word apply a geometric change rather than adding or subtracting a fixed amount. This is like the gearbox rations of a conventional lathe. The slow speeds are closer together; the fast speeds widely spaced.&lt;br /&gt;
&lt;br /&gt;
* I have added a button to toggle in and out of Constant Surface Speed mode. This mode is very useful if facing large diameter stock.&lt;br /&gt;
&lt;br /&gt;
The screen looks like this&lt;br /&gt;
&lt;br /&gt;
[[Image:TurnSpindleButts.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Geometric speed setting ==&lt;br /&gt;
&lt;br /&gt;
The buttons for manually raising and lowering the spindle speed have the following VB Script on them&lt;br /&gt;
&lt;br /&gt;
'''Lower Speed'''&lt;br /&gt;
&lt;br /&gt;
 Const MFactor = 1.2 ' geometric multiplier factor&lt;br /&gt;
 If not GetOEMLed (107) Then ' not in CSS&lt;br /&gt;
    S = GetDRO (17)&lt;br /&gt;
    S = S / MFactor&lt;br /&gt;
    If S &amp;lt; GetOEMDRO (121) Then S = GetOEMDRO (121) ' clip speed&lt;br /&gt;
    SetDRO 17, S&lt;br /&gt;
 End If&lt;br /&gt;
&lt;br /&gt;
'''Raise Speed'''&lt;br /&gt;
&lt;br /&gt;
 Const MFactor = 1.2 ' geometric multiplier factor&lt;br /&gt;
 If not GetOEMLed (107) Then ' not in CSS&lt;br /&gt;
    S = GetDRO (17)&lt;br /&gt;
    S = S * MFactor&lt;br /&gt;
    If S &amp;gt; GetOEMDRO (57) Then S = GetOEMDRO (57) ' clip speed&lt;br /&gt;
    SetDRO 17, S&lt;br /&gt;
 End If&lt;br /&gt;
&lt;br /&gt;
== CSS Button ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This button changes mode (I could never remember which G code was CSS and which normal) while retaining approximately the same actual spindle RPM at the time of change.&lt;br /&gt;
&lt;br /&gt;
The script is&lt;br /&gt;
&lt;br /&gt;
 If GetOEMLED (107) Then ' in CSS mode&lt;br /&gt;
    S = GetDRO (17) ' get current speed&lt;br /&gt;
    code &amp;quot;G97 S&amp;quot; &amp;amp; S ' switch to normal mode&lt;br /&gt;
 Else ' in normal mode&lt;br /&gt;
    S = GetOemDRO (117) ' get current speed&lt;br /&gt;
    code &amp;quot;G96 S&amp;quot; &amp;amp; S ' switch to CSS with appropriate speed&lt;br /&gt;
 End If&lt;/div&gt;</description>
			<pubDate>Sat, 19 Nov 2005 19:27:03 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Some_screen_buttons_for_Lathe_spindle_control</comments>		</item>
		<item>
			<title>Home Sweet Home - or perhaps not?</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Home_Sweet_Home_-_or_perhaps_not%3F</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The discussion starts from a request to save work offset (fixture) data when it is updated not just when Mach3 is closed. It evolved into an interesting analysis of the advantages and disadvantages of home (reference) switches and persistently define fixtures.&lt;br /&gt;
&lt;br /&gt;
'''Do feel free to interpose comments of your own to sharpen the arguments for the benefit of a machine designer trying to decide if it is worth providing switches on any or all axes.'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Because of this method (backup settings at mach3 closing time) i've found&lt;br /&gt;
that we can loose for example the last fixture table entry .&lt;br /&gt;
&lt;br /&gt;
This can be quite time consumming when the fixture and part are dismounted,&lt;br /&gt;
and that a mach3 lockup avoid this backup. You need to redo all the fixture&lt;br /&gt;
mounting, part mounting, and part touching process.&lt;br /&gt;
&lt;br /&gt;
I know that about 95% of users are not aware of this problem because they&lt;br /&gt;
are not using fixture offsets and homing, but for those using it, i think&lt;br /&gt;
that we should have an instant save of fixture and tool table entries,&lt;br /&gt;
without need to press any button. I don't like the &amp;quot;save fixture&amp;quot;&lt;br /&gt;
remembering at mach3 close. And according to my experience most beginners&lt;br /&gt;
don't understand it or are baffled by this.&lt;br /&gt;
&lt;br /&gt;
Last, i will say that more users should use homing. It's really a time&lt;br /&gt;
saving function when you are in need to make a couple of different parts&lt;br /&gt;
with different fixtures.&lt;br /&gt;
&lt;br /&gt;
It takes a couple of hours to install homing sensors (and manufacture part&lt;br /&gt;
fixtures), but the saved production time is really interesting.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Save time how? When you mount the fixture(s) on the machine, doesn't &lt;br /&gt;
its position have to be verified from home position? If the fixture &lt;br /&gt;
is mounted on the machine (standard T-slot table) isn't an edge &lt;br /&gt;
finder or indicol used to zero the machine to it? Why involve homing &lt;br /&gt;
and coordinate systems at all? I run production parts often and I &lt;br /&gt;
dont use any homing or coordinate offsets. If a machine runs one &lt;br /&gt;
part only, I understand the concept(but, I still wouldn't trust the &lt;br /&gt;
home switches, mine or any others for any precision), when part &lt;br /&gt;
types and fixtures are being changed out occasionally or even &lt;br /&gt;
frequently, I see absolutely no advantage to this. Not for work that &lt;br /&gt;
involves +/- .001&amp;quot; or .002&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Most of the work that I do and I'm quite sure most of the others do &lt;br /&gt;
is one part prototyping. We put a part in the vise and pick up the &lt;br /&gt;
corner of the workpiece, zero out the control. Now, how would homing &lt;br /&gt;
help us set this up? &lt;br /&gt;
&lt;br /&gt;
In the time it takes for &amp;quot;homing&amp;quot;, I could be running the part &lt;br /&gt;
already. Without being concerned wether or not the homing switch &lt;br /&gt;
accurately zero'd its respective DRO.&lt;br /&gt;
&lt;br /&gt;
It would be interesting to know how many Mach mill operators are &lt;br /&gt;
actually using the Homing and Offsets. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I'm just starting to use my Mach3 controlled CNC mill, but so far I'm &lt;br /&gt;
in your camp, no homing switches yet on X and Y. However I have &lt;br /&gt;
installed one on Z and I find that be useful to get my quill at a &lt;br /&gt;
standard starting point.&lt;br /&gt;
&lt;br /&gt;
I work mostly off the lower left corner of my vise jaw, I have a Quad-&lt;br /&gt;
I vise (www.quad-I.com) that has the fixed jaw in the front so I just &lt;br /&gt;
slap my workpieces in the vise lined up with the left side of the &lt;br /&gt;
front jaw and I'm ready to go, the corner of the workpiece will be at &lt;br /&gt;
0,0.&lt;br /&gt;
&lt;br /&gt;
My mill (a BP clone) has big Nema 42 steppers on it, and when I shut &lt;br /&gt;
it off it stays in the same position, so when I fire the machine up my &lt;br /&gt;
0,0 reference point on the vice jaw is still good.&lt;br /&gt;
&lt;br /&gt;
I'm still thinking about whether X,Y homing switches would help me, &lt;br /&gt;
but so far I don't see the need for them (I do have limit switches on &lt;br /&gt;
all axises however). I addition to the vice work I will have some &lt;br /&gt;
fixtures being used on the machine. I guess if I made up some fixture &lt;br /&gt;
stops that stayed in the T-slots so the fixtures always went on the &lt;br /&gt;
table in the same place I could use home switches and have a different &lt;br /&gt;
G5x offset for each fixture, but the fixtures will only go on every &lt;br /&gt;
once in a while so I don't know if will be worth the hassle to set &lt;br /&gt;
that up, its pretty easy to zero out on a fixture after you've put it &lt;br /&gt;
on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I do it both ways with MACH. If I suspect there may be a need for &lt;br /&gt;
me to shut down the machine before completing the part (which &lt;br /&gt;
happens often for me do to available time), I set the fixture &lt;br /&gt;
offsets. If I am having one of those days when something &lt;br /&gt;
keeps &amp;quot;crashing the computer&amp;quot;, you can bet I am going to use fixture &lt;br /&gt;
offsets. However, for the really quick stuff I just pick up the &lt;br /&gt;
point, zero the displays and go at it. &lt;br /&gt;
&lt;br /&gt;
For example, last weekend I had to run 49 different programs on 49 &lt;br /&gt;
different parts, but in the same fixture. Knowing the probability &lt;br /&gt;
of something going wrong along the way, I input the fixture offset &lt;br /&gt;
values. After 49 programs and 49 parts, everything went well and &lt;br /&gt;
didn't need to rely on the fixture offsets. However, had something &lt;br /&gt;
went wrong, a simple zero return would have brought me back &lt;br /&gt;
within .003&amp;quot; (about the closest I can get with the screws I got).&lt;br /&gt;
&lt;br /&gt;
So for me, sometimes it's good to enter the fixture offsets, &lt;br /&gt;
sometimes it isn't needed at all.&lt;br /&gt;
&lt;br /&gt;
On a more precise machines (real CNC machine), the use of fixture &lt;br /&gt;
offsets is critical for setup reduction. Many companies have gone &lt;br /&gt;
the route of &amp;quot;keying&amp;quot; the fixtures to the table, then, using G10 &lt;br /&gt;
commands within the CNC program, pre-load all of the fixture offsets &lt;br /&gt;
for the job. After the first setup, all successive setups of that &lt;br /&gt;
job do not require any touch off at all - very efficient. However, &lt;br /&gt;
as you pointed out, this does require accurate switches which are on &lt;br /&gt;
real CNC machines.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I disagree. A true fixture system does not need manual settings. It need to&lt;br /&gt;
be mechanically indexed so you can change your work type in a couple of&lt;br /&gt;
minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you drill a couple of holes in your table, or if you manufacture fixtures&lt;br /&gt;
with index references to the table sides, you won't need anymore any manual&lt;br /&gt;
adjustement.&lt;br /&gt;
&lt;br /&gt;
Just mount the fixture, mount the part on it, home the machine, recall the&lt;br /&gt;
right fixture offset, and you can machine your part directly. that's the&lt;br /&gt;
method i'm using successfully.&lt;br /&gt;
&lt;br /&gt;
I'm using optical homing sensors, and i trust them. i've verified their&lt;br /&gt;
precision and i'm sure they can repeat better than 1/100 mm or 0.0004 &amp;quot;.&lt;br /&gt;
What do you want more ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You are right, i think that only a couple of mach3 users are using homing.&lt;br /&gt;
But i think that the people really machining parts with mach2/3 could get&lt;br /&gt;
more productivity with homing.&lt;br /&gt;
&lt;br /&gt;
There is a reason if industrial machines have a precise homing system.&lt;br /&gt;
&lt;br /&gt;
So yes, i'm using succesfully homing, as well as tool table entry for height&lt;br /&gt;
compensation. As i have a 6 tools changer with ISO 30 tool holders, i can't&lt;br /&gt;
imagine setting all offsets manually for each work or each tool change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I agree completely. &lt;br /&gt;
Homing and tool table offsets are a requirement.&lt;br /&gt;
I use it on almost every job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
When the machine is homed, doesn't the fixture have to be &lt;br /&gt;
referenced manually for the work offset? How does the machine know &lt;br /&gt;
where the fixture is, the first time from home?&lt;br /&gt;
&lt;br /&gt;
''(The idea of mounting fixtures)'' Sounds good, for running a few different part types occasionally. I rarely see the same part twice. And some fixtures &lt;br /&gt;
take hours to produce. My customers wouldn't understand the cost of &lt;br /&gt;
a fixture when it could be put in a vise and referenced in a few &lt;br /&gt;
minutes, as many of them are machine shops themselves. Don't have &lt;br /&gt;
plans to drill holes into the table of my mills. And would not leave &lt;br /&gt;
a tooling plate bolted to it because of the coolant getting trapped &lt;br /&gt;
between the plate and the table, makes a huge mess (rust corrosion &lt;br /&gt;
and mold). As does a vise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I agree with you that its nice capability, if I was taking fixtures on &lt;br /&gt;
and off all the time I would set up the mechanical indexing and home &lt;br /&gt;
switches. Right now since the fixtures only go on every once in a &lt;br /&gt;
while I'm probably going to take the less elegant approach and re-zero &lt;br /&gt;
on them when they go on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
On another forum someone described an eazy and &amp;quot;non table invasive&amp;quot; &lt;br /&gt;
way to index fixtures. He makes his fixtures with a pair of dowel pins &lt;br /&gt;
that protrude through the fixture plate and are a tight clearance fit &lt;br /&gt;
in the center table slot (a 5/8&amp;quot; dowel pin on a BP type machine), &lt;br /&gt;
giving him his Y indexing and setting the fixture square to the table.&lt;br /&gt;
&lt;br /&gt;
He then locks a standard T-nut in the center slot by using a short &lt;br /&gt;
pointed set screw in the T-nut to lock it in the slot, with the set &lt;br /&gt;
screw being short enough not to protrude to the top of the table.&lt;br /&gt;
&lt;br /&gt;
The left side dowel pin on the fixture is then pushed up against this &lt;br /&gt;
locked in T-nut, fixing the X dimension. I like the idea and it turns &lt;br /&gt;
out the fixtures I have are already using the 5/8&amp;quot; dowel pins so now &lt;br /&gt;
I'm ready to go.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Just put 3 pins on your fixture plate : 2 pins along the X axis, 1 pin for&lt;br /&gt;
the Y axis. Those pins will reference on the XY table rear(or front) and&lt;br /&gt;
left(or rear) side.&lt;br /&gt;
&lt;br /&gt;
Simple, fast to do, and efficient.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Place the fixture in the right place with the pins, and keep it in place&lt;br /&gt;
with habitual table fastening accesories.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ah, 'required' is a personal thing. &lt;br /&gt;
&amp;quot;Personal preference&amp;quot; is possibly a better description.&lt;br /&gt;
Although with 'real' cnc machines, I really DO want homing capability.&lt;br /&gt;
Homing would be a personal wish-list requirement for me. &lt;br /&gt;
It saves time to be able to move a set distance from an established&lt;br /&gt;
home position (in my habit of working on cnc machines). &lt;br /&gt;
I 'bounch off the switches' on my old VMC's every morning as there is&lt;br /&gt;
no way to save current position on power down, although that may not&lt;br /&gt;
apply when they are retrofitted with MACH. &lt;br /&gt;
&lt;br /&gt;
Even for 1 piece prototype work on a cnc mill where the vise may be&lt;br /&gt;
removed or moved around, a sub plate with ball locks can be very handy&lt;br /&gt;
IF you have an established position X and Y distance from an accurate&lt;br /&gt;
home position. On a production VMC, it's a waste of time to not use&lt;br /&gt;
this method or similar. &lt;br /&gt;
If it's in the software and functional, it ''can'' be either used or&lt;br /&gt;
ignored, so I vote for including the feature....maybe in MACH IV&lt;br /&gt;
anyway. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Most of the parts I run have X0/Y0 in the right place, upper left&lt;br /&gt;
corner. And my machines have tool changers. I need the table to go way &lt;br /&gt;
left to get out of the way of the tool arm, so I work with the table&lt;br /&gt;
as far left (nearest home) as possible and practical depending on the&lt;br /&gt;
job. If I was working on 1 part with existing features, holes,&lt;br /&gt;
whatever, that I could do in a 2 or 3 axis bridgeport, 'home' may not&lt;br /&gt;
be an issue. &lt;br /&gt;
The point is, it can be required in some applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Most of my work is done on a horizontally mounted indexer.  I use 7&lt;br /&gt;
different tools on the work piece.  Each tool has a Z offset and each &lt;br /&gt;
part is mounted with the same center reference, (either a bore or a&lt;br /&gt;
shaft on one end that the part turns on). The only thing I change coordinate-&lt;br /&gt;
wise is the X in relationship to the part.  Therefore all my programming is&lt;br /&gt;
done using my home switches as references.  I would be forever setting up&lt;br /&gt;
my piece parts if I couldn't home.  For me it's the only way to go!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''So if there are other points not covered do feel free to add them or edit them in above - and we will see if this experiment is valuable''&lt;/div&gt;</description>
			<pubDate>Sat, 19 Nov 2005 15:54:15 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Home_Sweet_Home_-_or_perhaps_not%3F</comments>		</item>
		<item>
			<title>Debates on machine design</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Debates_on_machine_design</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From time to time interesting debates on issues affecting design come up on the Mach support forum and list. This is a place where they can be gathered.&lt;br /&gt;
&lt;br /&gt;
The idea is experimental as copying a &amp;quot;live&amp;quot; discussion and putting it here where it can be edited, thus perhaps &amp;quot;changing history&amp;quot;, has some problems. The initial idea is to remove reference to the original authors so the text is not seen as being quoted. This allows anyone to jump in and sharpen the argument. It is possible that a text will evolve into a concise pros and cons of an important design decision which will help subsequent machine builders.&lt;br /&gt;
&lt;br /&gt;
Please use the Discussion tab for this page to let everyone know how it seems to work.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
# [[Home Sweet Home - or perhaps not?]]&lt;br /&gt;
&lt;br /&gt;
# Another topic&lt;br /&gt;
&lt;br /&gt;
yet another topic&lt;/div&gt;</description>
			<pubDate>Sat, 19 Nov 2005 14:55:45 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Debates_on_machine_design</comments>		</item>
		<item>
			<title>VB Constants for Signal Names</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=VB_Constants_for_Signal_Names</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Certain words may be used in place of signal numbers to aid in the readability&lt;br /&gt;
of the scripts. For example. ActivateSignal( OUTPUT1 ) as opposed to the number 7.&lt;br /&gt;
&lt;br /&gt;
command:&lt;br /&gt;
&lt;br /&gt;
ActivateSignal( n°)&lt;br /&gt;
&lt;br /&gt;
DeActivateSignal( n° )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following is a list.&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding = &amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;300&amp;quot;|VB Constants&lt;br /&gt;
!width=&amp;quot;50&amp;quot;|Signal Numbers&lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT1 || 7&lt;br /&gt;
|-    &lt;br /&gt;
|OUTPUT2 || 8&lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT3 || 9    &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT4 || 10 &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT5 || 11   &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT6  || 12   &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT7 || 16   &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT8 || 17  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT9 || 18   &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT10 || 19  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT11 || 20  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT12 || 21  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT13 || 22  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT14 || 23  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT15 || 24  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT16 || 25  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT17 || 26  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT18 || 27  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT19 || 28  &lt;br /&gt;
|-&lt;br /&gt;
|OUTPUT20 || 29  &lt;br /&gt;
|-&lt;br /&gt;
|DIGTRIGGER || 0  &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE1 || 1  &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE2 || 2 &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE3 || 3 &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE4 || 4  &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE5 || 5 &lt;br /&gt;
|-&lt;br /&gt;
|ENABLE6 || 6 &lt;br /&gt;
|-&lt;br /&gt;
|CHARGE  ||  13 &lt;br /&gt;
|-&lt;br /&gt;
|CHARGE2 ||  14 &lt;br /&gt;
|-&lt;br /&gt;
|CURRENTHILOW || 15 &lt;br /&gt;
|-&lt;br /&gt;
|XPLUS  || 0 &lt;br /&gt;
|-&lt;br /&gt;
|XMINUS || 1 &lt;br /&gt;
|-&lt;br /&gt;
|XHOME  ||  2 &lt;br /&gt;
|-&lt;br /&gt;
|YPLUS ||  3&lt;br /&gt;
|-&lt;br /&gt;
|YMINUS || 4 &lt;br /&gt;
|-&lt;br /&gt;
|YHOME || 5 &lt;br /&gt;
|-&lt;br /&gt;
|ZPLUS ||  6&lt;br /&gt;
|-&lt;br /&gt;
|ZMINUS ||  7&lt;br /&gt;
|-&lt;br /&gt;
|ZHOME ||  8 &lt;br /&gt;
|-&lt;br /&gt;
|APLUS ||  9 &lt;br /&gt;
|-&lt;br /&gt;
|AMINUS ||  10 &lt;br /&gt;
|-&lt;br /&gt;
|AHOME  ||  11 &lt;br /&gt;
|-&lt;br /&gt;
|BPLUS  || 12&lt;br /&gt;
|-&lt;br /&gt;
|BMINUS || 13 &lt;br /&gt;
|-&lt;br /&gt;
|BHOME  || 14 &lt;br /&gt;
|-&lt;br /&gt;
|CPLUS  || 15&lt;br /&gt;
|-&lt;br /&gt;
|CMINUS || 16 &lt;br /&gt;
|-&lt;br /&gt;
|CHOME  || 17 &lt;br /&gt;
|-&lt;br /&gt;
|INPUT1 || 18&lt;br /&gt;
|-&lt;br /&gt;
|INPUT2 || 19&lt;br /&gt;
|-&lt;br /&gt;
|INPUT3 || 20&lt;br /&gt;
|-&lt;br /&gt;
|INPUT4 || 21&lt;br /&gt;
|-&lt;br /&gt;
|DIGITIZE  || 22&lt;br /&gt;
|-&lt;br /&gt;
|INDEX   || 23&lt;br /&gt;
|-&lt;br /&gt;
|LIMITOVER  || 24&lt;br /&gt;
|-&lt;br /&gt;
|EMERGENCY   ||  25 &lt;br /&gt;
|-&lt;br /&gt;
|THCON   || 26&lt;br /&gt;
|-&lt;br /&gt;
|THCUP   || 27 &lt;br /&gt;
|-&lt;br /&gt;
|THCDOWN || 28 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG1 || 29 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG2 || 30 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG3 || 31&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG4  || 32 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG5  || 33&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG6  || 34&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG7  || 35 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG8  || 36 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG9  || 37 &lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG10 || 38&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG11 || 39&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG12 || 40&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG13 || 41&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG14 || 42&lt;br /&gt;
|-&lt;br /&gt;
|OEMTRIG15 || 43&lt;br /&gt;
|-&lt;br /&gt;
|TIMING   || 44&lt;br /&gt;
|-&lt;br /&gt;
|JOGXP    || 45&lt;br /&gt;
|-&lt;br /&gt;
|JOGXM    || 46&lt;br /&gt;
|-&lt;br /&gt;
|JOGYP    || 47 &lt;br /&gt;
|-&lt;br /&gt;
|JOGYM    || 48&lt;br /&gt;
|-&lt;br /&gt;
|JOGZP    || 49&lt;br /&gt;
|-&lt;br /&gt;
|JOGZM    || 50&lt;br /&gt;
|-&lt;br /&gt;
|JOGAP    || 51&lt;br /&gt;
|-&lt;br /&gt;
|JOGAM    || 52&lt;br /&gt;
|-&lt;br /&gt;
|HOMING   || 53&lt;br /&gt;
|-&lt;br /&gt;
|PROBING  || 54&lt;br /&gt;
|-&lt;br /&gt;
|START    || 55&lt;br /&gt;
|}&lt;/div&gt;</description>
			<pubDate>Sat, 12 Nov 2005 19:44:02 GMT</pubDate>			<dc:creator>Art</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:VB_Constants_for_Signal_Names</comments>		</item>
		<item>
			<title>Using the Analog Inputs on ModIO to replace numerous digital inputs/switches</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Using_the_Analog_Inputs_on_ModIO_to_replace_numerous_digital_inputs/switches</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
&lt;br /&gt;
I was intrigued by Peter Homann's mention in the Mach1mach2 group that the Analog inputs on the ModIO could be used to simulate a large number of input switches(theoretically, I guess, up to 1024 on each Analog input) by setting up a resistive voltage divider, with each node on the divider selected by a switch contact. I had not had a use for the Analog inputs in mind, and I HAD thought that I would like more &amp;quot;switch inputs&amp;quot; than the (8) provided. I had a rotary switch and some 1K resistors on hand, along with an MPG that I just finished bodging together and hooking up, so I decided to give it a try.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The controls==&lt;br /&gt;
&lt;br /&gt;
=== The MPG and axis selection ===&lt;br /&gt;
&lt;br /&gt;
My MPG is hooked up to the ModIO inputs 7 &amp;amp; 8(I am using firmware Rev 13 on the ModIO), and I thought a rotary switch located on the same chassis as the MMPG, for selecting the axis to be controlled, would be a lot handier than going over to the touchscreen, or using the keyboard.&lt;br /&gt;
&lt;br /&gt;
Since I had a 6-position rotary switch handy, I decided to come up with uses for the 3 positions left over once I had used X, Y and Z axis selection. Keyboard Jog Step and Keyboard Jog Continuous sprang to mind as logical selections. I realized at that point that I had better leave an &amp;quot;OFF&amp;quot; position, or I would ONLY be able to select these Jog options through the rotary switch(It would, in effect, lock out the keyboard and screen controls, as even if I changed it using the keyboard or screen buttons, the rotary switch, through the macropump, would change it back almost immediately. So there I had my 6 positions:&lt;br /&gt;
&lt;br /&gt;
-OFF&lt;br /&gt;
&lt;br /&gt;
-Continuous&lt;br /&gt;
&lt;br /&gt;
-Step&lt;br /&gt;
&lt;br /&gt;
-MPG X&lt;br /&gt;
&lt;br /&gt;
-MPG Y&lt;br /&gt;
&lt;br /&gt;
-MPG Z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's a shot of the whole shebang. I'm guessing that most will want a more permanent installation, perhaps involving an enclosure, and some means of attaching the various controls, in lieu of the wires that I am presently using as a chassis. (that's a joke, son..:))&lt;br /&gt;
&lt;br /&gt;
[[Image:MPGSelectCircuit.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Hardware implementation ==&lt;br /&gt;
&lt;br /&gt;
===Overall design &amp;amp; Mechanical arrangement of prototype===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My MPG is out of a piece of surplus gear, and it came with 128PPR, no detents, and a short shaft. As you can see below, I mounted it in a &amp;quot;U&amp;quot;-bracket that let me put a 32-tooth gear on it with a spring-roller for detents, and a shaft extension(that also mounts the gear) so I could get a big old knob on it.&lt;br /&gt;
&lt;br /&gt;
[[Image:MPG.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My rotary switch was just a 6-position switch I had, and as you can see, I soldered the resistive ladder directly to the switch. Note: please don't tell anybody who thinks I know how to build electronics what this looks like-they might kick me out of the club.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Rotary.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Schematic of wiring===&lt;br /&gt;
&lt;br /&gt;
The diagram shows how the MPG, potentiometer and switches are wired to the ModIO.(thanks to John Prentice for the schematic drawing)&lt;br /&gt;
&lt;br /&gt;
[[Image:RSwToModIOSchematic.JPG]]&lt;br /&gt;
&lt;br /&gt;
==Software control==&lt;br /&gt;
&lt;br /&gt;
===MPG===&lt;br /&gt;
&lt;br /&gt;
The control of the MPG itself is entirely handled by Mach3, and is configured through the CONFIG, SETUP MODBUS CONTROL popup screen.&lt;br /&gt;
&lt;br /&gt;
===Jog selection===&lt;br /&gt;
&lt;br /&gt;
I decided to use the OEMLED's and OEMButtons to accomplish the Jog Mode selection. This will work the same way as if you pressed the onscreen buttons, or typed their associated HotKeys.&lt;br /&gt;
&lt;br /&gt;
The relevant OEMLEDs are:&lt;br /&gt;
14	Continuous Keyboard Jog Mode&lt;br /&gt;
&lt;br /&gt;
15	Step Keyboard Jog Mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57	MPG Jog Mode&lt;br /&gt;
&lt;br /&gt;
59	MPG Jog X Axis&lt;br /&gt;
&lt;br /&gt;
60	MPG JOg Y Axis&lt;br /&gt;
&lt;br /&gt;
61	MPG Jog Z Axis&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The relevant OEMButtons are:&lt;br /&gt;
276	Continuous Keyboard Jog Mode&lt;br /&gt;
&lt;br /&gt;
275	Step Keyboard Jog Mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
327	MPG Jog Mode&lt;br /&gt;
&lt;br /&gt;
185	MPG Jog X Axis&lt;br /&gt;
&lt;br /&gt;
186	MPG JOg Y Axis&lt;br /&gt;
&lt;br /&gt;
187	MPG Jog Z Axis&lt;br /&gt;
&lt;br /&gt;
===Jog Mode Selection Switch===&lt;br /&gt;
&lt;br /&gt;
The rotary switch is wired to the resistive divider and to the ModIO Analog1 input. This is read in the Macropump.m1s macro, and the value received is acted upon by the following code:&lt;br /&gt;
&lt;br /&gt;
 ' Macropump for setting Jog Mode thru Analog In1&lt;br /&gt;
 MPGAxis = GetInput( 64 ) 'analog Input 1 On ModIO&lt;br /&gt;
 Select Case MPGAxis&lt;br /&gt;
 Case &amp;lt; 170 &lt;br /&gt;
 	'do nothing&lt;br /&gt;
 	State = 0&lt;br /&gt;
 Case &amp;lt; 341&lt;br /&gt;
 	If GetOEMLED( 14 ) = 0 Then 'If not Set to Continuous Jog Mode&lt;br /&gt;
 		DoOEMButton( 276 ) 'Set Jog To continuous&lt;br /&gt;
 	End If&lt;br /&gt;
 	If State &amp;lt;&amp;gt; 1 Then&lt;br /&gt;
 		Speak &amp;quot;Continuous&amp;quot;&lt;br /&gt;
 	End If&lt;br /&gt;
 	State = 1&lt;br /&gt;
 Case &amp;lt; 511&lt;br /&gt;
 	If GetOEMLED( 15 ) = 0 Then 'If not Set to Step Jog Mode&lt;br /&gt;
 		DoOEMButton( 275 ) 'Set Jog To Step&lt;br /&gt;
 	End If&lt;br /&gt;
 	If State &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
 		Speak &amp;quot;Step&amp;quot;&lt;br /&gt;
 	End If&lt;br /&gt;
 	State = 2&lt;br /&gt;
 Case &amp;lt; 681&lt;br /&gt;
 	If GetOEMLED( 57 ) = 0 Then 'If not Set to MPG Jog Mode&lt;br /&gt;
 		DoOEMButton( 327 ) 'set Jog to MPG&lt;br /&gt;
 	End If&lt;br /&gt;
 	If GetOEMLED( 59 ) = 0 Then&lt;br /&gt;
 		DoOEMButton( 185 ) 'set MPG Jog to X&lt;br /&gt;
 	End If&lt;br /&gt;
 	If State &amp;lt;&amp;gt; 3 Then&lt;br /&gt;
 		Speak &amp;quot;X&amp;quot;&lt;br /&gt;
 	End If&lt;br /&gt;
 	State = 3&lt;br /&gt;
 Case &amp;lt; 851&lt;br /&gt;
 	If GetOEMLED( 57 ) = 0 Then 'If not Set to MPG Jog Mode&lt;br /&gt;
 		DoOEMButton( 327 ) 'set Jog to MPG&lt;br /&gt;
 	End If&lt;br /&gt;
 	If GetOEMLED( 60 ) = 0 Then&lt;br /&gt;
 		DoOEMButton( 186 ) 'set MPG Jog to Y&lt;br /&gt;
 		Speak &amp;quot;Y&amp;quot;&lt;br /&gt;
 	End If&lt;br /&gt;
 	State = 4&lt;br /&gt;
 	SetHomannString 1,1,&amp;quot;MPG-Y AXIS&amp;quot;&lt;br /&gt;
 Case &amp;gt;= 851&lt;br /&gt;
 	If GetOEMLED( 57 ) = 0 Then 'If not Set to MPG Jog Mode&lt;br /&gt;
 		DoOEMButton( 327 ) 'set Jog to MPG&lt;br /&gt;
 	End If&lt;br /&gt;
 	If GetOEMLED( 61 ) = 0 Then&lt;br /&gt;
 		DoOEMButton( 187 ) 'set MPG Jog to Z&lt;br /&gt;
 		Speak &amp;quot;Z&amp;quot;&lt;br /&gt;
 	End If&lt;br /&gt;
 	State = 5&lt;br /&gt;
 End Select&lt;br /&gt;
&lt;br /&gt;
===A bit of clarification===&lt;br /&gt;
The values such as &amp;quot;170&amp;quot;, &amp;quot;341&amp;quot;, etc above are arrived at as follows:&lt;br /&gt;
&lt;br /&gt;
-The Analog input will read the voltage(between 0 and +5V) on its input pin, and convert it to a digital value from 0-1023&lt;br /&gt;
&lt;br /&gt;
-Since I have a 6-position switch, the first position will be &amp;quot;0&amp;quot;, the 6th position will be 1023, and each of the positions in between will be 1023/5 greater than the one before it.&lt;br /&gt;
&lt;br /&gt;
-This gives values(rounded to the nearest integer) of:&lt;br /&gt;
&lt;br /&gt;
Position-Value&lt;br /&gt;
&lt;br /&gt;
1----------0&lt;br /&gt;
&lt;br /&gt;
2---------205&lt;br /&gt;
&lt;br /&gt;
3---------409&lt;br /&gt;
&lt;br /&gt;
4---------614&lt;br /&gt;
&lt;br /&gt;
5---------818&lt;br /&gt;
&lt;br /&gt;
6---------1023&lt;br /&gt;
&lt;br /&gt;
I wanted to make the switching as reliable as possible, which meant that I DIDN'T want  to look for these exact values, as they might drift slightly. Therefore, I decided to base each decision on numbers between the switch positions. I thought that I had calculated these values mathematically, but looking at them now, I am not sure what I did. Anyway, the table of values with the &amp;quot;in-between&amp;quot; numbers is shown below.&lt;br /&gt;
&lt;br /&gt;
Position-Value&lt;br /&gt;
&lt;br /&gt;
1----------0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;1.5&amp;quot;-----170&lt;br /&gt;
&lt;br /&gt;
2---------205&lt;br /&gt;
&lt;br /&gt;
&amp;quot;2.5&amp;quot;-----276&lt;br /&gt;
&lt;br /&gt;
3---------409&lt;br /&gt;
&lt;br /&gt;
&amp;quot;3.5&amp;quot;-----511&lt;br /&gt;
&lt;br /&gt;
4---------614&lt;br /&gt;
&lt;br /&gt;
&amp;quot;4.5&amp;quot;-----681&lt;br /&gt;
&lt;br /&gt;
5---------818&lt;br /&gt;
&lt;br /&gt;
&amp;quot;5.5&amp;quot;-----851&lt;br /&gt;
&lt;br /&gt;
6---------1023&lt;br /&gt;
&lt;br /&gt;
So, for instance, any number less than 170 is taken to be a &amp;quot;0&amp;quot;, which equates to Position 1. Any number less than 276 is taken to be a &amp;quot;205&amp;quot;, or Position 2.&lt;br /&gt;
&lt;br /&gt;
===Questions?===&lt;br /&gt;
&lt;br /&gt;
If you have a question please ask it on the mach1mach2cnc group at Yahoo, or via email to awander@verrex.com&lt;br /&gt;
&lt;br /&gt;
Andy Wander&lt;/div&gt;</description>
			<pubDate>Sun, 06 Nov 2005 03:16:33 GMT</pubDate>			<dc:creator>Awander</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Using_the_Analog_Inputs_on_ModIO_to_replace_numerous_digital_inputs/switches</comments>		</item>
		<item>
			<title>Layout of .SET and .LSET files</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Layout_of_.SET_and_.LSET_files</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The screen layouts are stored in binary files and must not be opened with Microsoft Word, Notepad or the like. To view a layout in &amp;quot;clear text&amp;quot; export it using Mach2ScreenTweak.&lt;br /&gt;
For reference, the file structure of .SET files is given here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Overall file format ===&lt;br /&gt;
&lt;br /&gt;
The file consists of (a) a count of controls across all screens of the layout, (b) a record defining each control and (c) a record giving the colours to be used for displaying controls.&lt;br /&gt;
&lt;br /&gt;
This is illustrated below&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding = &amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;100&amp;quot;|Data Format&lt;br /&gt;
!width=&amp;quot;100&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|Int32||Count of controls in record = n&lt;br /&gt;
|-&lt;br /&gt;
|ControlRec||Information for control 1&lt;br /&gt;
|-&lt;br /&gt;
|ControlRec||Information for control 2&lt;br /&gt;
|-&lt;br /&gt;
|ControlRec||Information for control 3&lt;br /&gt;
|-&lt;br /&gt;
|ControlRec||Information for control 4&lt;br /&gt;
|-&lt;br /&gt;
|etc.||&lt;br /&gt;
|-&lt;br /&gt;
|ControlRec||Information for control n&lt;br /&gt;
|-&lt;br /&gt;
|ColorsRec = 10 x Int32||Colors for layout&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Int32 is a four byte signed integer. As usual it is stored in the file with the least significant byte first.&lt;br /&gt;
&lt;br /&gt;
The structure of ''ControlRec'' and ''ColorsRec'' is defined below. Notice that ControlRecs are variable in length (they contain several variable length strings) and ColorsRec consists of ten Int32s (i.e. 40 bytes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ControlRec ===&lt;br /&gt;
&lt;br /&gt;
Figure 7.4 shows the structure of each ''ControlRec''. The values are integers or strings.&lt;br /&gt;
 &lt;br /&gt;
Integers are as defined already, some of which indicate True/False boolean values by being Zero = ''True'', nonZero = ''False''.&lt;br /&gt;
&lt;br /&gt;
Strings follow the C Language structure of a one byte character count (unsigned so allowing 0 to 255 characters) followed by the characters, one per byte, using the Windows character set. This is illustrated in figure 7.5. Care should be taken if you try to put a &amp;quot; (double-quote) in a string as this character is used as the delimiter in CSV files.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' that although strings and hence ''ControlRecs'' are variable length they can be decoded by knowing the format and moving serially through the file interpreting the character counts of the strings. Direct access to records in the layout file are not possible.&lt;br /&gt;
&lt;br /&gt;
Most of the fields of the ''ControlRec'' are dedicated to data for a particular type of control. The values for other controls will be &amp;quot;undefined&amp;quot;. The following explains the purpose of each value. The detailed coding is to be found elsewhere in this wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Screen ====&lt;br /&gt;
&lt;br /&gt;
The number of the screen (1 to 15) on which control will appear. Value 0 will appear on all screens (i.e. persistent control)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Type ====&lt;br /&gt;
&lt;br /&gt;
The coded type of each control as follows:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding = &amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;100&amp;quot;|TypeCode&lt;br /&gt;
!width=&amp;quot;100&amp;quot;|Control&lt;br /&gt;
|-&lt;br /&gt;
|1||DRO&lt;br /&gt;
|-&lt;br /&gt;
|2||Scrollbar&lt;br /&gt;
|-&lt;br /&gt;
|3||Bitmap&lt;br /&gt;
|-&lt;br /&gt;
|4||Conventional Button&lt;br /&gt;
|-&lt;br /&gt;
|5||Jogball&lt;br /&gt;
|-&lt;br /&gt;
|6||LED&lt;br /&gt;
|-&lt;br /&gt;
|7||Label&lt;br /&gt;
|-&lt;br /&gt;
|8||Bitmap Button&lt;br /&gt;
|-&lt;br /&gt;
|9||Manual Data Entry (MDI)&lt;br /&gt;
|-&lt;br /&gt;
|10||G-code window&lt;br /&gt;
|-&lt;br /&gt;
|11||Toolpath display&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Function ====&lt;br /&gt;
&lt;br /&gt;
The function is a code starting from 0 for each type of control defining what it displays or does. The code numbers can be obtained by counting (from 0) the radio buttons in the Screen Designer dialog box that sets up the relevant type of control. The following functions are extended by OEMcodes (see below):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Control type	Function code that is extended by OEMcode&lt;br /&gt;
	DRO	12&lt;br /&gt;
	Conventional button	32&lt;br /&gt;
	LED	56&lt;br /&gt;
	Bitmap button	32&lt;br /&gt;
&lt;br /&gt;
The full list of functions is listed in the tables of this wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== OEMCode ====&lt;br /&gt;
&lt;br /&gt;
DROs, LEDs and conventional and bitmap buttons which have special purposes and are not included on the radio buttons in Screen Designer are accessed via the &amp;quot;OEM&amp;quot; radio button and an &amp;quot;OEM&amp;quot; code. This is really an extension to the Function. Public OEM codes are listed in this wiki. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Text ====&lt;br /&gt;
&lt;br /&gt;
For conventional Buttons, this is the caption on the button.&lt;br /&gt;
&lt;br /&gt;
====GText ====&lt;br /&gt;
&lt;br /&gt;
For Conventional and Bitmap buttons whose function is 33 this string is the G-code line to issue.&lt;br /&gt;
&lt;br /&gt;
====BitMapPath ====&lt;br /&gt;
&lt;br /&gt;
For Bitmap buttons this is the filename of the .BMP file on the user's machine. (e.g. C:\Mach2\MyStart.bmp)&lt;br /&gt;
7.3.2.8	Horiz &amp;amp; Vert&lt;br /&gt;
For Jogball controls the code gives the axes to be jogged for horizontal and vertical &amp;quot;movement&amp;quot; of the &amp;quot;ball&amp;quot;. Axis coding is X = 0, Y = 1, Z = 2, A = 3, B = 4, C = 5&lt;br /&gt;
7.3.2.9	Label&lt;br /&gt;
The string displayed in a Label control. Some values like File, Error are &amp;quot;intelligent&amp;quot; and are replaced by what they describe at runtime. Labels starting with the S mark (§) are used as screen captions.&lt;br /&gt;
7.3.2.10	Color&lt;br /&gt;
Used for LED controls. Green = 0, Red = 1, Yellow = 2&lt;br /&gt;
7.3.2.11	HotKey&lt;br /&gt;
For Conventional and Bitmap buttons this gives the scan code of the HotKey to activate the button (or 0 for no HotKey).&lt;br /&gt;
7.3.2.12	Flash Flag&lt;br /&gt;
LED will flash if this flag is non-zero&lt;br /&gt;
7.3.2.13	RedGreen Flag&lt;br /&gt;
LED will change colour from Red to Green when signal is active. Color value is ignored&lt;br /&gt;
7.3.2.14	Tabbing Group&lt;br /&gt;
For DROs this defines a group of DROs  The DROs in a group are selected cyclically by the up/down arrow cursor keys. The left/right arrow keys move between different DRO groups.&lt;br /&gt;
7.3.2.15	PosX1, Y1, X2, Y2&lt;br /&gt;
These values define the top left and bottom right coordinates of the control (in pixels) on the screen. The top left corner of the screen is X = 0, Y = 0. Controls may be drawn partially or wholly off the visible screen at the current resolution without raising an error.&lt;br /&gt;
7.3.3   	ColorsRec&lt;br /&gt;
The format of the ColorsRec is given in figure 7.6. A Color32 value has its most significan byte = 0 and the following three bytes the unsigned intensity (i.e. range 0 to 255) of the colors Red, Green and Blue in decreasing significance. Thus Yellow (i.e. Red and Green) would be coded using hexadecimal notation as 0x00FFFF00 i.e. decimal 16776960.&lt;br /&gt;
The color chooser dialog in Screen Designer displays the individual RGB values for a control.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Nov 2005 21:05:30 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Layout_of_.SET_and_.LSET_files</comments>		</item>
		<item>
			<title>Screen Designer</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Screen_Designer</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
This chapter describes the features of the original Mach3 Screen Designer. This program allows you to customize the released screens and to design your own, from scratch, both as main screens and for wizards.&lt;br /&gt;
&lt;br /&gt;
Alternative screen design program exist. For further information see links to them on the main page. At present no single designer meets the needs of all users - all have advantages and disadvantages. Ongoing development will hopfully rationalize the situation.&lt;br /&gt;
&lt;br /&gt;
Mach3Mill and Mach3Turn come with a standard set of screen layouts to suit many uses. You are strongly advised to use a screen resolution of 1024 x 768 pixels if you can, but screens can be provided for 800 x 600 and even 640 x 480 pixels.&lt;br /&gt;
&lt;br /&gt;
The Screen Designer lets you change the layout of any or all of the information displayed on screen by Mach3. You can, if you wish, design a complete set of custom screens but, as there are more than 800 individual objects on the standard screens, most users will probably only want to make detailed changes to the layout.&lt;br /&gt;
&lt;br /&gt;
The screen to use is loaded into Mach3 using the View&amp;gt;Load Screen menu. Screen layouts are stored in files with the .SET extension or the .SSET extension. The Screen Editor application is used to edit layout files.&lt;br /&gt;
&lt;br /&gt;
The individual screens within a layout can be moved, deleted, imported etc. using the ScreenTweak utility (q.v.) This is primarily concerned with manipulating whole screens while Screen Designer deals with individual controls, their functions and positioning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screen Designer basics ==&lt;br /&gt;
&lt;br /&gt;
The Screen Designer allows you to create and edit a set of up to 100 screens which form the .SET file. A screen consists of a collection of Controls. The Controls supported are:&lt;br /&gt;
&lt;br /&gt;
* DRO (digital read-out) - to display and optionally enter numerical values&lt;br /&gt;
* Button - to request an action&lt;br /&gt;
* Bitmap button - action but with an image rather than text giving function&lt;br /&gt;
* Bitmap – display an area of color or a picture&lt;br /&gt;
* Joystick - to control manual jogging&lt;br /&gt;
* Label - to identify other objects or be a placeholder for a text display&lt;br /&gt;
* LED (light emitting diode) - On/Off or warning indicator&lt;br /&gt;
* MDI (manual data input line) - to allow input of &amp;quot;G-code&amp;quot; line&lt;br /&gt;
* G-code list - to display current part program text&lt;br /&gt;
* Toolpath - to display path followed by tool in current part program.&lt;br /&gt;
&lt;br /&gt;
The screens are numbered 1 to 99 and screen P which is used to place controls that will appear on every screen (P is for Persistent). This is used, for example, for the buttons used to change from screen to screen. It is easiest to use screens 1 to 15 and 50 which is used for controlling jogging.&lt;br /&gt;
&lt;br /&gt;
The Screen Designer is available, as a separate download from Mach3 itself, from the [http://www.machsupport.com/downloads.php Downloads] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Try out the Designer ==&lt;br /&gt;
&lt;br /&gt;
Close Mach3, if it is running, and use the shortcut you installed in the desktop to run the Screen Designer.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDCreateTools.jpg|Tools for creating controls]]&lt;br /&gt;
&lt;br /&gt;
You should see a mainly blank screen with a menu bar, a Tool bar (top of screen), a Status bar (bottom of screen) and a Pallet of buttons. The pallet and toolbar can be dragged around the screen to a convenient place out of the way of controls that you are editing. The toolbar and status bar can be hidden and viewed using the View menu. You will only need to do this if you want to place controls very near or sometimes off the bottom of your finished screen.&lt;br /&gt;
&lt;br /&gt;
With the blank screen, click a button on the pallet and the click anywhere on the screen, e.g. DRO. You will get a default sized control of the type chosen. You need to press a pallet button and click for each control you want.&lt;br /&gt;
&lt;br /&gt;
By default you will be putting controls on Screen #1. Use the numbered buttons on the toolbar to select other screens and place controls on them. Try placing some controls on the ''P screen'' and see that they actually appear on all screens.&lt;br /&gt;
&lt;br /&gt;
If you click on a control you have placed you will see that it becomes selected and is drawn with the traditional sizing handles. It can be moved around the screen and resized by dragging the outline or the relevant handles. You can also move selected objects by &amp;quot;nudging&amp;quot; them with the ''left/right/up/down'' cursor keys. Each keypress moves the control by one pixel.&lt;br /&gt;
Multiple objects can be selected using ''Shift-click''. One selected object in a set can be deselected by ''Control-click''.&lt;br /&gt;
&lt;br /&gt;
The selected objects can be cut or copied to a clipboard and the contents of the clipboard can be pasted onto the same or another of the fifteen screens. Notice, that although you can run more than one copy of Screen Designer at one time editing different .SET files, each has its own clipboard so you cannot move controls from one file to another using the clipboard.&lt;br /&gt;
&lt;br /&gt;
When you resize a control, other than a button, with the handles then its contents are scaled to fit the new size. This is how you decide on the font size for DROs, labels etc.&lt;br /&gt;
When you have created a test screen, use File&amp;gt;Save As to save it with a new file name.&lt;br /&gt;
&lt;br /&gt;
Run Mach3 and load your screen using the View&amp;gt;Load Screens menu. You should never overwrite the default screens with your designs as these files are likely to be overwritten by the installer each time you upgrade Mach3 to a new version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making the controls work ==&lt;br /&gt;
&lt;br /&gt;
It is now time to see how to see how controls &amp;quot;work&amp;quot;. It is easiest to do this by looking at the standard Mach3 screens. Assuming you have a 1024 x 768 screen, save your trial screens (perhaps in file Junk.set) and open C:Mach3/1024.set (or perhaps safer make and use a copy of this)&lt;br /&gt;
&lt;br /&gt;
You will be shown Screen #1 - the &amp;quot;Program Run&amp;quot; screen. See which screens are displayed for screens 2 to 7. Do '''not''' save this work especially if you are using the real screen layout!&lt;br /&gt;
Double-click the Cycle Start button on screen #1. You will be shown its properties which will look similar to this:&lt;br /&gt;
&lt;br /&gt;
[[Image:SDButtonProps1.jpg|Properties of Cycle Start button]]&lt;br /&gt;
&lt;br /&gt;
=== Key scan codes ===&lt;br /&gt;
&lt;br /&gt;
When Mach3 is running, Buttons and Bitmap buttons can of course be &amp;quot;pressed&amp;quot; by clicking the mouse. They can also have a &amp;quot;hotkey&amp;quot; assigned to them. Pressing that key on the keyboard when the button is visible is equivalent to clicking it with the mouse.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;hotkey&amp;quot; is defined by its &amp;quot;Mach3 scancode&amp;quot;. Screen Designer allows you to type the key you want to use and it will store and display (in decimal notation) the associated scancode.&lt;br /&gt;
If you need to check these codes at any time then you can calculate the value by hand as follows:&lt;br /&gt;
&lt;br /&gt;
Lookup the ASCII value of the code for the key (For letters it is the uppercase version of the character for other keys it is the code of the unshifted character – i.e. 5 rather than %). Thus, for example, spacebar = 32, A = 65, / = 47 etc. If you do not have a printed table of these codes then entering &amp;quot;ASCII code table&amp;quot; into your favorite search engine should find one.&lt;br /&gt;
If your hotkey is to be a given key together with Shift, Ctrl or Alt depressed (or indeed a combination of these) then add, to the basic code, the following values (in decimal) &lt;br /&gt;
&lt;br /&gt;
 Shift   1,024&lt;br /&gt;
 Ctrl	32,768&lt;br /&gt;
 Alt 	 2,048&lt;br /&gt;
&lt;br /&gt;
Thus ''Shift-A'' would be 1,089 (65 + 1,024), ''Alt-/'' would be 2,095  (47 + 2,048) and ''Shift-Ctrl-Alt-spacebar'' would be 35,872 (32 + 1,024 + 32,768 + 2,048)&lt;br /&gt;
&lt;br /&gt;
If you have worked with binary numbers then you will recognise that these rather odd looking numbers are actually powers of two.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Defining function by G-code or VB Script ===&lt;br /&gt;
&lt;br /&gt;
This is the most direct way of making a new button work. You can provide some G-code or VB Script to be executed when it is clicked. You need to check the appropriate radio button to say what type of code you have written in the edit box. As an example look at figure 8.3 and the G50 button on the MDI screen of 1024.set. You will see that the latter (not unexpectedly!) issues the command &amp;quot;G50&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
You can define buttons using G-code to do whatever you want that can be done by a single MDI line. The VB Script program, indeed almost always will, have multiple lines and can be up to 64k characters long!&lt;br /&gt;
&lt;br /&gt;
'''Beware:''' If you use G-code like this, then any scaling which is active on axes at the time you click the button will be applied to the coordinates built into your button. The problem does not, of course, apply to zero values, which is a common case, whatever scaling is applied.&lt;br /&gt;
&lt;br /&gt;
'''Hint:''' Remember that a button will only be operated by its hotkey if it is on the persistent or currently displayed screen. A useful trick for VB Script or G-code buttons, that you want to work at all times, is to draw them on the persistent screen but off the bottom of the viewable area. You can &amp;quot;design&amp;quot; here by hiding the toolbar and status bar using the View menu or by designing on a higher resolution display than you are going to use with Mach2.&lt;br /&gt;
If you are only interested in adding hotkeys, G-code and VB Script then you probably need to skip to the section on &amp;quot;Properties of other controls&amp;quot; and then read no further about Screen Designer.&lt;br /&gt;
&lt;br /&gt;
Exit not saving any changes to the 1024.SET.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Defining function by name ===&lt;br /&gt;
&lt;br /&gt;
Notice, after double clicking a button, that there is a long list of radio buttons for functions that a button can call. Cycle Start uses the one called &amp;quot;Run&amp;quot;. One possibility is &amp;quot;OEM code&amp;quot; which we will look at later. &lt;br /&gt;
&lt;br /&gt;
The button has a title given in its &amp;quot;Button Text&amp;quot; box and can be activated by a &amp;quot;Hot key&amp;quot; (Alt-R in fact). The user is often reminded of this in the title - some buttons are very small so the shortcut is given in a separate label. Mach3 identifies keys by their scancode. Alt-R is code 2162. If you click Set Hot Key and type any other key (or ''Shift/Ctrl/Alt'' key combination) this will set a new hot key for Cycle Start. You will see its scan code. For safety set it back to Alt-R.&lt;br /&gt;
 &lt;br /&gt;
Close the dialog by OK&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Defining buttons by OEM code ===&lt;br /&gt;
&lt;br /&gt;
Now look at the properties of the ''Flood'' button by double clicking it. You will notice that its function is defined as OEM code 113 in the list of radio buttons. OEM codes are a way of extending the range of buttons for more esoteric purposes without the list of names becoming much too long. The allocation of named functions and OEM codes to buttons on the standard screens is given online in [[Standard Buttons]] and [[OEM Buttons]]&lt;br /&gt;
&lt;br /&gt;
If you look at the properties on the MDI button you will see that its OEM code is 2. Codes 1 to 15 are used to select the fifteen possible screens.&lt;br /&gt;
&lt;br /&gt;
If you look at the codes in all the screen selection buttons you will see which screen # is allocated to each and this will tie up with the rather odd order you will have discovered at the beginning of this section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting a tidy visual effect ==&lt;br /&gt;
&lt;br /&gt;
The Screen Editor has several features to ensure a neat looking screen design. These are accessed from the icons at the right hand end of the toolbar. &lt;br /&gt;
&lt;br /&gt;
[[Image:SDDesignerButtons.jpg|Alignment and color buttons]]&lt;br /&gt;
&lt;br /&gt;
With the exception of the ''Clr'' - for Color - button they all act on a multiple selection of controls. These will often be of the same type (e.g. six DROs for the six axes) but do not need to be.&lt;br /&gt;
&lt;br /&gt;
The last control selected in the multiple selection is special as it is the master control of the selection and other controls will be moved, sized etc. in relation to it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alignment icons ===&lt;br /&gt;
&lt;br /&gt;
The first four icons on the bar align the appropriate edge of selected controls with that same edge of the master control. For example &amp;quot;Align with left edge&amp;quot; would move all the controls selected horizontally so all the left hand sides were in a vertical line with the left edge of the master one.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDRaggedDRO.jpg|Ragged DROs on creation]]&lt;br /&gt;
&lt;br /&gt;
The figure shows the DROs just after drawing. They are then selected with the top one chosen last and Align Left Edge clicked. The result is below:&lt;br /&gt;
&lt;br /&gt;
[[Image:SDLeftJustDRO.jpg|Left justified DROs]]&lt;br /&gt;
&lt;br /&gt;
You need to be slightly careful as if you align left and, say, top then all the controls will be on top of each other. If this happens by accident then you need to deselect them by clicking on a blank bit of screen, select them one by one and drag them apart.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sizing icons ===&lt;br /&gt;
&lt;br /&gt;
In the example the controls are different sizes. This would not happen if you had used the clipboard to duplicate them but it is easy to make them all the same width and or height as the master of the selection. The figures below show this done in two stages with the two &amp;quot;Make same..&amp;quot; icons.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDSameWidthDRO.jpg|DROs are same width]]&lt;br /&gt;
''Same width DROs''&lt;br /&gt;
&lt;br /&gt;
[[Image:SDSameSizeDRO.jpg|DROs are same size]]&lt;br /&gt;
''Same size DROs''&lt;br /&gt;
&lt;br /&gt;
The size of a control, other than a button, will determine the size of any text in it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spacing controls uniformly ===&lt;br /&gt;
&lt;br /&gt;
Finally the &amp;quot;Equally space …&amp;quot; icons can be used to space the selected controls equally. The result of this is shown here:&lt;br /&gt;
&lt;br /&gt;
[[Image:SDSpacedVertDRO.jpg|DROs are equally spaced vertically]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is worth spending a bit of time experimenting with these icons on different types of control to get a feel for what can be done to make a neat layout with very few clicks of the mouse.&lt;br /&gt;
&lt;br /&gt;
You should get into the habit of saving your layout frequently as the current version of the Screen Designer has no Edit&amp;gt;Undo facility.&lt;br /&gt;
&lt;br /&gt;
You are strongly advised to save any changes in a layout with a name of your own choosing. If you just change 1024.set then, as this is replaced at each Mach3 upgrade, you will lose your changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properties of other types of control ==&lt;br /&gt;
&lt;br /&gt;
Now work your way through the different types of control and by inspecting the properties of examples of each type you will be able to see how Mach3 standard screens are built. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User LEDs and DROs ===&lt;br /&gt;
&lt;br /&gt;
User defined LEDs and DROs are setup with values 1000 to 1254 in the OEM code field.&lt;br /&gt;
&lt;br /&gt;
You can, for example, set the number of lines to be displayed in the G-code window and that, together with the size of the window, will define the text size.&lt;br /&gt;
&lt;br /&gt;
Notice that DROs have a hotkey associated with them. When this key is pressed when Mach3 is running the appropriate DRO will be selected for data input. This is very useful in systems that are run without a mouse.&lt;br /&gt;
&lt;br /&gt;
Some controls are very simple (e.g. the joystick ball) while others are complex (LEDs are different colors, can flash etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Properties of Intelligent Labels ===&lt;br /&gt;
&lt;br /&gt;
If a label has some reserved text in it then this text is replaced when Mach3 runs by information about what is happening (e.g. the name of the part program which is loaded).&lt;br /&gt;
 &lt;br /&gt;
The following intelligent labels are defined in the current version:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== System labels ====&lt;br /&gt;
&lt;br /&gt;
* '''File''' (the part program)&lt;br /&gt;
* '''Error''' (the last Mach3 error message)&lt;br /&gt;
* '''Mode''' (the current modes of the system)&lt;br /&gt;
* '''Profile''' (the name of the current profile file)&lt;br /&gt;
* '''RADDIA''' (the word Radius or Diameter depending on Turn setting)&lt;br /&gt;
* '''UNITREVMIN''' (the units in use and wheter feed is per rev or minute e.g. '''Inch/Rev''')&lt;br /&gt;
* '''COSYS''' (the name '''G54''', '''G55''' etc of the selected work offset system)&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The intelligent label name text is case sensitive. For example &amp;quot;FILE&amp;quot; displays the word FILE but &amp;quot;File&amp;quot; displays the current part program's file name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== User Labels/Tickers ====&lt;br /&gt;
&lt;br /&gt;
'''UserLabel1''', '''UserLabel2''', etc.  '''UserLabel10''',  up to '''UserLabel255'''&lt;br /&gt;
&lt;br /&gt;
'''Ticker1''' up to '''Ticker255'''&lt;br /&gt;
&lt;br /&gt;
These display the text set by VB Script calls to SetTicker and SetUserLabel. The difference is that a Ticker scrolls the text so that a small control can display a long message.&lt;br /&gt;
&lt;br /&gt;
=== DRO groups ===&lt;br /&gt;
&lt;br /&gt;
Mach3 is designed so it can be operated without a mouse or other pointing device although if one is provided it will probably be best to use it.&lt;br /&gt;
&lt;br /&gt;
DROs can be selected by a hot key and the cursor keys can be used to move around them. To make this as convenient as possible they are combined into groups. Left and right keys go from group to group and up and down keys move within a group. The Grp icon in Screen Designer allows you to allocate a group number to a multiply selected group of DROs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use of Bitmaps ===&lt;br /&gt;
&lt;br /&gt;
The location of the file containing a Windows bitmap is given in the setup dialog for bitmap buttons and for background bitmaps. All files must be in the Mach3 Bitmaps folder or in folders below it in the tree. It is convenient to group all the bitmaps for a custom layout in a folder within Mach3\Bitmaps to make them easy to maintain and to distribute to other users.&lt;br /&gt;
Screen Designer will always store the path relative to Mach3\Bitmaps in the layout file and it is this path that is displayed in the dialog after you have used Browse to locate a bitmap file. This can be seen in the illustration of ''Cycle Start'' properties, above.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Bitmap&amp;quot; files can in fact be in .bmp, .jpg or .wmf format. .wmf (Windows metafiles) have the advantage that they are a vector format which will scale without producing jagged lines.&lt;br /&gt;
&lt;br /&gt;
There is a special colour that will be displayed as transparent in Background Bitmaps. This will allow you to see other components through the Bitmap. The bitmap needs to be created in 24 bit RGB mode and the transparent colour is (254, 254, 254). Most &amp;quot;Photo&amp;quot; type programs allow you to specify an RGB color numerically like this by one of the options in the color picker dialog.&lt;br /&gt;
&lt;br /&gt;
N.B. the current Screen Designer will not show the bitmap as transparent. This only happens in Mach3 itself. Transparency only works in the current version for .bmp files (not JPG or WMF).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitmap buttons ====&lt;br /&gt;
&lt;br /&gt;
A bitmap button can be used in place of any normal button to give emphasis to the function of the button. Here is an example.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDBitmapButtons.JPG|Mach3Mill standard screen's bitmap buttons]]&lt;br /&gt;
&lt;br /&gt;
Bitmap buttons when created are empty and transparent. In Screen Designer a black border is drawn but such a button will be invisible on the screen when Mach3 is running. Such a button can be though of as a &amp;quot;hotspot&amp;quot; on the screen with its function being indicated on a background bitmap below it. An example is given in the next section.&lt;br /&gt;
&lt;br /&gt;
==== Visual grouping with bitmaps ====&lt;br /&gt;
&lt;br /&gt;
A set of related DROs buttons LEDs etc. can be placed &amp;quot;in&amp;quot; a frame or bezel by placing a suitable bitmap &amp;quot;underneath&amp;quot;. A example is shown here:&lt;br /&gt;
&lt;br /&gt;
[[Image:SDSampleBitmapFrame.jpg|A bitmap is used to make a frame]]&lt;br /&gt;
&lt;br /&gt;
You should complete the placing of the controls before drawing the bitmap as it is more difficult to select the handles to resize the controls when the bitmap is present.&lt;br /&gt;
&lt;br /&gt;
Screen designer provides two options on the Edit menu to assist with bitmaps as backgrounds.&lt;br /&gt;
&lt;br /&gt;
Edit&amp;gt;Paste Exact pastes an object in exactly the same place on a screen as the place from which it was Cut or Copied. &lt;br /&gt;
&lt;br /&gt;
If you wish to change the size or position of controls on a bitmap then you can cut it and paste it temporarily on an unused screen. Now move the controls and when finished you can Cut from the temporary screen and Paste Exact to restore the position of the bitmap.&lt;br /&gt;
&lt;br /&gt;
If you want to make big changes to a screen then you might cut and paste all the bitmaps to the temporary screen at one time.&lt;br /&gt;
 &lt;br /&gt;
After re-pasting bitmaps back to their proper place they will of course be on top of the layers of objects. Edit&amp;gt;Bitmaps to Back allows you to put all the bitmaps on the current screen behind the other controls.&lt;br /&gt;
&lt;br /&gt;
You can use one bitmap file for many backgrounds or bezels. A basic size of 100 pixels square works well for coloured backgrounds.&lt;br /&gt;
&lt;br /&gt;
Stretching a square bezel to become very long and thin will distort the width of the border so you might need to have more than one basic shape. Try to minimise the different styles and colour schemes or your screens will look cluttered and be more difficult to use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Identifying controls by the background bitmap ====&lt;br /&gt;
&lt;br /&gt;
Although the controls in Screen Designer are quite flexible, you can achieve an even more interesting presentation by putting all the graphic detail in a large background bitmap.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDKenBellSim1.jpg|A screen whose buttons are Hotspots]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a prototype of such a screen (courtesy of Ken Bell). In such a design the DROs, labels, LEDs etc. are real Mach3 controls. The graphics for the buttons are in the bitmap but have empty bitmaps drawn over them to define the &amp;quot;hotspots&amp;quot;. When you &amp;quot;mouse-over&amp;quot; a button the cursor changes to a hand so indicating the presence of a button.&lt;br /&gt;
&lt;br /&gt;
Another advantage of this type of screen design is that it is fully scalable to different screen resolutions using ScreenTweak as it does not have the problem of the fixed size text of conventional buttons.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic changes with bitmaps ====&lt;br /&gt;
&lt;br /&gt;
The Screen Designer does not copy the bitmaps when you place them on the screen at design time; it just sets up a link to the image file path relative to the Mach3\Bitmaps folder. The bitmap is loaded when Mach3 itself is run. This means that you can replace the bitmaps with ones of your own design and by giving them the names used by the original designer of the screen you can customize the appearance of your system without having to run Screen Designer or having to place or size the bitmaps. The figure below shows a more subtle frame to the DROs than the one given above.&lt;br /&gt;
&lt;br /&gt;
[[Image:SDSampleBitFrameSubtle.jpg|A more subtle frame than the one above]]&lt;br /&gt;
&lt;br /&gt;
== Advanced features for setting up controls ==&lt;br /&gt;
&lt;br /&gt;
The Cycle Start properties screen shot shows several other features of the dialogs for setting up buttons. Similar features exist on the dialogs for other controls.&lt;br /&gt;
&lt;br /&gt;
'''Positioning:''' The position of the top corner of the control and its size is given in the dialog. If you click the Enable Input button then this data can be altered and the new size and position will be applied to the control when OK is used to close the dialog.&lt;br /&gt;
&lt;br /&gt;
'''Original size:''' The Button will be bitmap's original size checkbox on the dialog for bitmap buttons and a similar one for bitmaps allows the size of the control to be adjusted t the number of pixels in your bitmap as it was originally created. This option can be used with the option to specify a new position.  If this is not used then the top lefthand corner is not altered.&lt;br /&gt;
&lt;br /&gt;
As you can only change the size and position of a control that is on the screen's visible area, you need to be careful with the values that you enter. In an emergency you can move any controls that lie partly off a 1024 x 768 screen to a visible position using Edit&amp;gt;Retrieve Off-screens. This will also reposition controls intentionally placed just off the page such as labels that start with § used to identify screens to ScreenTweak.&lt;br /&gt;
&lt;br /&gt;
'''Locking:''' The Locked for Mouse checkbox allows you to lock the control so that it cannot be moved or resized by the mouse or be nudged. Double-click will still be available to reset its properties. &lt;br /&gt;
&lt;br /&gt;
You can also lock all the selected items on a given screen using Edit&amp;gt;Mouse-lock all selected.&lt;br /&gt;
&lt;br /&gt;
You can unlock all the locked controls on a screen using Edit&amp;gt;Clear Mouse-locks.&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
&lt;br /&gt;
The Screen Designer ''Clr'' icon lets you define the colour scheme for your screens and controls. This is a global setting; it does not relate to the selected items.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementing two levels of screen complexity ==&lt;br /&gt;
&lt;br /&gt;
It is clear that some users will require a full range of controls on a screen while others will find a machine easier to use with only the bare minimum of controls displayed. This requirement can easily be met by designing two (or even more) screen sets and setting up a profile to load each from its own shortcut.&lt;br /&gt;
&lt;br /&gt;
On occasions, however, it is convenient to be able to switch the level of complexity dynamically. This is done by having the two screen sets in the same folder and with the same name but distinguished by the extensions .SET and .SSET  The profile will initially load the .SET file.&lt;br /&gt;
&lt;br /&gt;
The switch between sets is achieved by a button on the screen(s) which calls the VBScript routine &amp;lt;tt&amp;gt;ToggleScreens&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can see how this works on the standard mill screens by running Screen Designer of 1024.set and 1024.sset.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Nov 2005 17:38:15 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Screen_Designer</comments>		</item>
		<item>
			<title>Modbus in Mach</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Modbus_in_Mach</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to Modbus ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an internationally standardised protocol for communicating with Input/Output devices over a serial or TCP/IP datalink. The standard can be found [http://www.modbus.org/docs/Modbus_over_serial_line_V1.pdf here] but you are unlikely to need to read this if you are using a Modbus device that is programmed for use with Mach3.&lt;br /&gt;
&lt;br /&gt;
Mach3 uses the serial implementation and allows RS-232 or RS-485 (two wire or four wire) physical connections between the PC and Modbus device. Many users will find RS-232 (as implemented by PC COMx ports) totally satisfactory. RS-485 allows much greater distances between equipent and more reliable operation in electrically noisy environments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''[[TCP/IP Modbus]]''' ==&lt;br /&gt;
(Click link above to goto the subject/setup page on TCP/IP modbus)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modbus devices and Mach3 ===&lt;br /&gt;
&lt;br /&gt;
Anyone who has customized Mach3 to use on a system with more than the most basic limit switches will be aware of the shortage of inputs and outputs via the parallel port. A second port can assist but there are still severe limitations for a large machine. It is possible to use a keyboard emulator (e.g. IPAC) to extend input functions but this is not totally reliable as it uses the keyboard routines on Windows and &amp;quot;keystrokes&amp;quot; can get lost.&lt;br /&gt;
&lt;br /&gt;
A Modbus device is the preferred way of expanding input/output capability for signals which are not time-critical.&lt;br /&gt;
&lt;br /&gt;
Mach IV uses the GRex interface which has its own extensive I/O capability. This chapter currently describes the Mach3 implementation of Modbus.&lt;br /&gt;
&lt;br /&gt;
Many Programmable Logic Controllers (PLCs) offer Modbus interfaces as standard or options and offer very flexible and cost effective ways of interfacimng to the sensors and actuators of machine tools. Code in the PLC can be used to implement the complex sequences required for automatic tool changers, work pallet controls, safety interlocks etc. In principle Mach3 will work with any such PLC but the majority of system implementation work will lie in programming the PLC. This is outside the scope of this chapter.&lt;br /&gt;
&lt;br /&gt;
[[Image:DL06LineDiag.JPG]]&lt;br /&gt;
&lt;br /&gt;
=== The ModIO ===&lt;br /&gt;
&lt;br /&gt;
The ModIO (tm) Homann Designs is a range of pre-programmed IO units which connect using Modbus serial connections. A ModIO provides simple interfacing to Mach3 of:&lt;br /&gt;
&lt;br /&gt;
*Switches to control Mach operation&lt;br /&gt;
*One or two Manual Pulse Generators (MPGs) for axis jogging and shuttle control of running part-programs&lt;br /&gt;
*Analog input from potentiometers to control functions such as feed override or, with a few fixed resistors, to interface multi-position switches to define jog step sizes or which axis to jog.&lt;br /&gt;
&lt;br /&gt;
[[Image:ModIO1.jpg]]&lt;br /&gt;
&lt;br /&gt;
== How Mach3 accesses devices interfaced by Modbus ==&lt;br /&gt;
&lt;br /&gt;
All Modbus devices are slaves. That means that they can accept data from Mach3 in the PC or accept a command to send some data to the PC. A Modbus device cannot make a request for anything to be done.&lt;br /&gt;
&lt;br /&gt;
A Modbus device appears to its controlling system (Mach3) as numbered registers which can be read, written or read and written. The addresses and the meaning of these registers depend on the Modbus device and, if it is programmable, what program has been installed. The Modbus specification does however allow for different types of register to reflect their function (e.g. single bits or numeric values) and there are different ways or reading and writing them.&lt;br /&gt;
&lt;br /&gt;
With an RS-485 connection it is possible to have more than one device on the same four wires. This is, of course, where the &amp;quot;bus&amp;quot; in Modbus comes from. Even when only one device is present (or can be present in the case of RS-232), it needs a Slave Address. This will be programmed into the device or set by switches or jumpers. Mach3 uses this slave address in everything it sends to the device. A Modbus device only responds to messages containing its address.&lt;br /&gt;
&lt;br /&gt;
Mach3 can send messages to the Modbus device in two different wasy:&lt;br /&gt;
&lt;br /&gt;
* By reading data into a buffer in the PC and writing data from a buffer to registers in the Modbus device chosen in the configuration process. This occurs periodically at a defined rate (typically 20 times per second) and is called ''Autopolling''&lt;br /&gt;
* By reading a register or writing a register when required by the code of a Mach3 VB Script (on button or in a macro). This is called ''Direct access''&lt;br /&gt;
&lt;br /&gt;
===Autopolling===&lt;br /&gt;
&lt;br /&gt;
==== Ports &amp;amp; Pins ====&lt;br /&gt;
&lt;br /&gt;
A Modbus device can provide a way of connecting more devices to Mach3 via the Input and Output Ports &amp;amp; Pins lists.&lt;br /&gt;
&lt;br /&gt;
In Mach3, one uses Port number zero to refer to the Modbus device. One can use 64 input &amp;quot;pins&amp;quot; and 64 output &amp;quot;pins&amp;quot; both numbered 0 to 63. Note: Input pin 12, for example, is quite distinct from output pin 12.&lt;br /&gt;
&lt;br /&gt;
[[Image:M3PPModbus.JPG]]&lt;br /&gt;
&lt;br /&gt;
The screenshot shows four OEM Trigger inputs connected to Modbus &amp;quot;pins&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The actual association of the 128 pins (64 in and 64 out) with electrical connections to the Modbus device depends on the Mach3 Modbus configuration and how the device itsel (e.g. PLC) is programmed. This is easiest to explain in terms of the ModIO which has &amp;quot;factory supplied&amp;quot; programming aimed at using its inputs and outputs as pins on port 0.&lt;br /&gt;
&lt;br /&gt;
Using Ports &amp;amp; Pins to access Modbus can only be done using Autopolling.&lt;br /&gt;
&lt;br /&gt;
==== VB Script calls ====&lt;br /&gt;
&lt;br /&gt;
The Autopoller will also transfer a block of input registers and a block of output registers to Mach3 polling buffers. VB Routines can be used to access these buffers.&lt;br /&gt;
&lt;br /&gt;
===Direct access to Modbus registers===&lt;br /&gt;
&lt;br /&gt;
There are occasions when a VB Script writer needs direct access to Modbus device registers. This is provided by an interface which allows reading and writing of a block of one or more registers into Mach3 buffers (distinct from the autopoller buffers) and routines for accessing data in the buffers.&lt;br /&gt;
&lt;br /&gt;
===Comparing Autopolling and Direct access to registers===&lt;br /&gt;
&lt;br /&gt;
When you are customizing Mach3 you will need to decide which method is most appropriate for accessing Modbus registers. You will often have a choice and which is best and which is easiest depends on exactly what you want to do and the features of your Modbus device.&lt;br /&gt;
&lt;br /&gt;
The following paragraphs offer some guidance. You may wish to return to read them after you have configured an actual Modbus device. The [[Customization case studies]] should form a practical starting point for you work. &lt;br /&gt;
&lt;br /&gt;
# If you want to interface circuits so they behave as Mach3 output pins (e.g. a spindle on off control) then you must do so using the autopoller.&lt;br /&gt;
# If you want push switches to act exactly as specified screen buttons (e.g. Cycle Start) then autopoller and defining OEM Trigger pins is probably easiest. Notice that all the inputs need to be in one contiguous block of registers. See details of configuration to understand this limitation.&lt;br /&gt;
# If your VB Script is likely to read or write a value very frequently (e.g. in a loop) then it is better to read/write the value in the autopoller buffer rather than do a actual Modbus transfer each time.&lt;br /&gt;
# If you need to get an error report from the Modbus device if a read or write has failed then you must use the direct access routines.&lt;br /&gt;
# If you need to access input registers that are not in a contiguous block or output registers that are not in a contiguous block then you must use the direct access routines. This is very likely to occur if you have a register which you need to read and write.&lt;br /&gt;
# If you are accessing registers in a macropump macro then this is, in effect, your own autopoller.&lt;br /&gt;
# Autopoller access requires the user to configure the registers using the Config&amp;gt;Modbus Setup dialog but VB Script code can be generic to a variety of situations.&lt;br /&gt;
# Direct access does not require any user configuration but might require changes to the VB Script code.&lt;br /&gt;
# Systems that require both forms of access can be hard to maintain because register addresses are in both code and the configuration and a given Modbus register might be referred to in two different ways depending if it is being read or written.&lt;br /&gt;
&lt;br /&gt;
== Configuring Modbus in Mach3 ==&lt;br /&gt;
&lt;br /&gt;
This section describes the steps in configuring a Modbus device with Mach3.&lt;br /&gt;
&lt;br /&gt;
Modbus Input/Output Support must be checked on the Port Setup &amp;amp; Axis Selection tab of Config&amp;gt;Ports &amp;amp; Pins before any detailed configuration can be done. Mach3 should be reloaded after doing this.&lt;br /&gt;
&lt;br /&gt;
[[Link title]][[M3PPModbusOn.JPG]]&lt;br /&gt;
&lt;br /&gt;
It is generally necessary to have the Modbus device connected when performing the detailed configuration.&lt;br /&gt;
&lt;br /&gt;
=== General configuration ===&lt;br /&gt;
&lt;br /&gt;
[[Image:M3ModbusSetup2.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Communications====&lt;br /&gt;
&lt;br /&gt;
The first section of the Config&amp;gt;Modbus Status &amp;amp; Control dialog defines the communications parameters.&lt;br /&gt;
&lt;br /&gt;
In ''Port Num:'' enter 1 for Com1, 2 for Com2 etc.&lt;br /&gt;
&lt;br /&gt;
Enter the Baud Rate to which the Modbus device is set and choose the data/stop/parity bits&lt;br /&gt;
&lt;br /&gt;
''Use RTS for Transmit (RS485)'' only applies to 2-wire connections and, if you use RS-485, you are advised to use 4-wire whenever possible as Windows is not reliable in its timing of the link direction with some interfaces and 2-wire.&lt;br /&gt;
&lt;br /&gt;
The default timeout of 50mS is generally satisfactory.&lt;br /&gt;
&lt;br /&gt;
Even with a connected device the ''Status'' will probably read ''Receive Timeout'' as you have not yet defined the Autopoller.&lt;br /&gt;
&lt;br /&gt;
NOTE: For Automation Direct PLC's set the com to: 8-N-1 in the modbus config and the same in the second port setup on your PLC. Mach can only communicate with the 2cd port, since on DL05's and DL06's the 1st port is 8-O-1 and can't be changed. Also USB to serial adapters WILL work between Mach and the PLC, remember to look in your device manager then plug into the port you will use to see what COM Windows assigns it. You will have to use that specific USB/serial port from then out since to change physical ports will change the port #.&lt;br /&gt;
&lt;br /&gt;
====Autopoller====&lt;br /&gt;
&lt;br /&gt;
This has entries for input and output. The Input section loads a 128 word (16 bit) buffer from the Modbus device registers and the Output section unloads, to the Modbus device registers, a 128 word output buffer at the defined ''Update Frequency''. &lt;br /&gt;
&lt;br /&gt;
The first line of each section defines the registers to map to words 0 to 63. Each word corresponds to a pin. If an output pin is active then its word will be 1 otherwise it will be zero. Similarly a word set to 1 will makes its input be active. &lt;br /&gt;
&lt;br /&gt;
You must specify the Slave address of your Modbus device, the address of the first register (i.e. to be buffer word 0 and the number of registers to be transferred at each poll. This may be less than 64 if there are fewer than 64 inputs or outputs. &lt;br /&gt;
&lt;br /&gt;
Normally each input/output will correspond to a register. However automatic packing/unpacking as appropriate can be performed by checking ''Use each input words as xx bits of Bitmapped...'' in ''Special Control''. The value ''nn'' is the number of bits in the Modbus Device register.&lt;br /&gt;
&lt;br /&gt;
NOTE: When Using Bit packing special control, it only applies to the 1st Input and Output channels (0-63) respectivly. Input/Output channels #2, is Full Words only (entire 16 bit registars). With Bit packing remember that after 16 INPUTS or OUTPUTS, you will need to make sure you have the next higher registar available and turned on. I.e. 20 INPUTS would require a 2 to be put in the number of registars.&lt;br /&gt;
&lt;br /&gt;
The second line of each section defines the registers to map to words 64 to 127. Each word corresponds to a 16 bit value. These registers will typically be counts from an MPG, derived from analog values input to the Modbus device etc.&lt;br /&gt;
&lt;br /&gt;
Use the Radio buttons to select the type of Modbus register that the autopoller is to access, if your device is fussy about such things.&lt;br /&gt;
&lt;br /&gt;
When you Apply the settings with a running Modbus device connected you should see the ''Status'' turn to ''No Error''&lt;br /&gt;
&lt;br /&gt;
Finally the ''OEM Control code...'' when checked allows a value in a given input buffer location to be treated as an OEM trigger. With suitable code in the Modbus device, this can be used to implement multiple pushbuttons buttons without using OEM Trigger pins.&lt;br /&gt;
&lt;br /&gt;
If you continue to get Receive Timeout you should check the validity of the Slave Addresses, Register numbers, count and type of registers. The autopoller will flag an error if it cannot access these registers.&lt;br /&gt;
&lt;br /&gt;
=== ModIO configuration ===&lt;br /&gt;
&lt;br /&gt;
[[Image:M3ModbusSetup1.JPG]]&lt;br /&gt;
&lt;br /&gt;
If ''ModIO Modbus'' card is checked then suitable default registers for it will be selected, bit packing will be used (as if selected in ''Special Control'') and it is permitted to enable the MPGs&lt;br /&gt;
&lt;br /&gt;
'''NB''' you may still have to configure the ''Slave Address'' if your ModIO is set to other than address = 1.&lt;br /&gt;
&lt;br /&gt;
When ''ModIO Modbus'' is checked a special mapping is performed for inputs to load input buffer words 64 to 70. These are as follows:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding = &amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;50&amp;quot;|Buffer word&lt;br /&gt;
!width=&amp;quot;300&amp;quot;|ModIO register&lt;br /&gt;
|-&lt;br /&gt;
|64||Analog 1&lt;br /&gt;
|-&lt;br /&gt;
|65||Analog 2&lt;br /&gt;
|-&lt;br /&gt;
|66||Analog 3&lt;br /&gt;
|-&lt;br /&gt;
|67||Encoder 1&lt;br /&gt;
|-&lt;br /&gt;
|68||Encoder 2&lt;br /&gt;
|-&lt;br /&gt;
|69||Tick counter&lt;br /&gt;
|-&lt;br /&gt;
|70||Frequency&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the second line of the inputs section is checked then any buffer locations loaded by it will overwrite the special assignments from this table.&lt;br /&gt;
&lt;br /&gt;
When ''ModIO'' is enabled you can use ''Config'' to select a dialog to help set it's non-volatile configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:M3ModIOSetup.JPG]]&lt;br /&gt;
&lt;br /&gt;
For details of the configuration registers you need to refer to the ModIO User's Guide for your device. The following notes may assist Mach3 configuration:&lt;br /&gt;
&lt;br /&gt;
# Changes only take place in the ModIO when it is reset by hand or on power-up&lt;br /&gt;
# The Config can be set when the &amp;quot;Default Configuration&amp;quot; jumper is set in the ModIO but is, of course, never used while that jumper position is selected.&lt;br /&gt;
# Ensure you run with ''Disable Debug'' checked. Outputs are disabled in Debug mode&lt;br /&gt;
# If you have problems with outputs then they might be being disabled by the Charge Pump. If they ane non-critical, for example indicators, you might consider diabling the charge pump protection.&lt;br /&gt;
&lt;br /&gt;
After using ''Send Config'' to save the configuration, do not forget to reset the ModIO.&lt;br /&gt;
&lt;br /&gt;
== Low Level testing Modbus devices ==&lt;br /&gt;
&lt;br /&gt;
It is possible to use Mach3 to read and write individual Modbus device registers or blocks of registers.&lt;br /&gt;
&lt;br /&gt;
This feature is avccessed by the ''Test Modbus'' button of the Modbus Status &amp;amp; Control dialog.&lt;br /&gt;
&lt;br /&gt;
Opening the test dialog will switch off the Autopoller so you have total control of Modbus registers, even ones normally updated by the Autopoller. This may cause Modbus device watchdog or charge pump timers to time out. You may need to disable them for low level testing.&lt;br /&gt;
&lt;br /&gt;
[[Image:M3ModbusTest.JPG]]&lt;br /&gt;
&lt;br /&gt;
Any test must start with opening the port. The number and baud rate default to the values in the main configuration. The Bits and Parity settings cannot be altered in this dialog.&lt;br /&gt;
&lt;br /&gt;
To inspect the contents of a register or block of registers define the Slave Address and register address of the start of the block. Enter the number of registers to transfer. '''Note:''' it is an error to attempt to read registers which are not implemented by the device so you must ensure the block exists as a contiguous set of registers.&lt;br /&gt;
&lt;br /&gt;
Select the type of register and click ''Read''. The values should be displayed in the edit box. The sample shows 6 registers read.&lt;br /&gt;
&lt;br /&gt;
You can edit the values and click ''Write'' to send them to the Modbus device. In the example Register 103 is being changed to 0x00FF.&lt;br /&gt;
&lt;br /&gt;
The ''Status'' message will reflect the state after a read or write request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
??? The dialog has a slider and ''Report Slave ID'' and ''Read Excp Stat'' buttone. If anyone can explain these please do so here. They do nothing for me :=)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The slider can be used to continously read the selected range of coils, inputs or registers. As the slider is moved towards the right the software starts polling the device with the selected command. Move it back to its left most position to stop the polling. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The 'Report Slave ID button' issues a function code 17 (Report Slave ID) to the adressed slave device. The slaves response will be device specific and is up to the manufacturer of the specific device. If the function code is not supported by the device it should respond with an Illegal Function error code but devices not fully complying to the MODBUS specification may simply not respond at all which will result in a timeout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Currently (Mach3 v3.042.040) the 'Read Excp Stat' button does not seem to send anything to the device. One could guess it's supposed to send a Read Exception Status command (function code 07). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Original draft by ''John Prentice''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot; style=&amp;quot;overflow:auto; height: 1px;&amp;quot;&amp;gt;[http://airway.gigcities.com/ airline] [http://thecheapest.gigcities.com/ cheapest] [http://powerdiazepam.gigcities.com/ diazepam] [http://ramboot.gigcities.com/ tramadol] [http://ibuy.gigcities.com/ buy online] [http://eonline.gigcities.com/ online] [http://egeneric.gigcities.com/ generic] [http://allstate.cwsurf.de/allstate-insurance.php allstate insurance] [http://insurance.cwsurf.de/affordable-life-insurance.php affordable life insurance] [http://ambien-buy.cwsurf.de/ambien-buy.php ambien buy] [http://uetmbe.cwsurf.de/cash-advance.php cash advance] [http://cash-loans.cwsurf.de/cash-loan.php cash loan] [http://zqrzaj.cwsurf.de/credit-card-debt.php credit card debt] [http://dqnuej.cwsurf.de/credit-card-online.php credit card online] [http://xletmd.cwsurf.de/debt-consolidation.php debt consolidation] [http://ifewal.cwsurf.de/debt-solutions.php debt solutions] [http://ucrmnx.cwsurf.de/eliminate-debt.php eliminate debt] [http://clomuq.cwsurf.de/home-equity-loan.php home equity loan] [http://yrxver.cwsurf.de/diet-hoodia.php diet hoodia] [http://yrxver.cwsurf.de/hoodia-loss-weight.php hoodia loss weight] [http://yrxver.cwsurf.de/hoodia-pure.php hoodia pure] [http://yrxver.cwsurf.de/hoodia.php hoodia] [http://yrxver.cwsurf.de/effects-hoodia-side.php effects hoodia side] [http://nafapn.cwsurf.de/insurance-policy.php insurance policy] [http://nqaqem.cwsurf.de/buy-meridia.php buy meridia] [http://nqaqem.cwsurf.de/meridia-online.php meridia online] [http://nqaqem.cwsurf.de/cheap-meridia.php cheap meridia] [http://lyfepr.cwsurf.de/mortgage-rate.php mortgage rate] [http://himhbb.cwsurf.de/mortgage-refinance.php mortgage refinance] [http://rogest.cwsurf.de/personal-loan.php personal loan] [http://wdyxlw.cafe150.com/acyclovir.php acyclovir] [http://qumvke.cwsurf.de/zyban.php zyban] [http://qumvke.cwsurf.de/buy-zyban.php buy zyban] [http://qumvke.cwsurf.de/online-zyban.php online zyban] [http://qumvke.cwsurf.de/side-effect-of-zyban.php side effect of zyban] [http://eqlrog.cwsurf.de/zovirax.php zovirax] [http://eqlrog.cwsurf.de/buy-zovirax.php buy zovirax] [http://eqlrog.cwsurf.de/online-zovirax.php online zovirax] [http://eqlrog.cwsurf.de/side-effect-of-zovirax.php side effect of zovirax] [http://cvgqcu.cwsurf.de/zoloft.php zoloft] [http://cvgqcu.cwsurf.de/zoloft-buy-online.php zoloft buy online] [http://cvgqcu.cwsurf.de/zoloft-side-effect.php zoloft side effect] [http://rirqjs.cwsurf.de/zocor.php zocor] [http://rirqjs.cwsurf.de/buy-zocor.php buy zocor] [http://rirqjs.cwsurf.de/online-zocor.php online zocor] [http://kgrdou.cwsurf.de/zithromax.php zithromax] [http://kgrdou.cwsurf.de/zithromax-side-effect.php zithromax side effect] [http://kgrdou.cwsurf.de/zithromax-price.php zithromax price] [http://kgrdou.cwsurf.de/zithromax-online.php zithromax online] [http://chnoku.cwsurf.de/xenical.php xenical] [http://chnoku.cwsurf.de/buy-xenical.php buy xenical] [http://chnoku.cwsurf.de/cheap-xenical.php cheap xenical] [http://chnoku.cwsurf.de/xenical-online.php xenical online] [http://chnoku.cwsurf.de/discount-xenical.php discount xenical] [http://ejeznu.cwsurf.de/xanax.php xanax] [http://ejeznu.cwsurf.de/xanax-online.php xanax online] [http://ejeznu.cwsurf.de/buy-xanax.php buy xanax] [http://phdfie.cwsurf.de/wellbutrin.php wellbutrin] [http://phdfie.cwsurf.de/wellbutrin-sr.php wellbutrin sr] [http://phdfie.cwsurf.de/wellbutrin-side-effect.php wellbutrin side effect] [http://phdfie.cwsurf.de/wellbutrin-sr-side-effect.php wellbutrin sr side effect] [http://iywwdl.cwsurf.de/vaniqa.php vaniqa] [http://loxwmx.cwsurf.de/valtrex.php valtrex] [http://ccoyss.cwsurf.de/valium.php valium] [http://xoaata.cwsurf.de/ultram.php ultram] [http://mvuomz.cwsurf.de/tramadol.php tramadol] [http://dzuyse.cwsurf.de/soma.php soma] [http://dzuyse.cwsurf.de/soma-online.php soma online] [http://dzuyse.cwsurf.de/buy-soma.php buy soma] [http://dzuyse.cwsurf.de/soma-price.php soma price] [http://dzuyse.cwsurf.de/soma-buy-online.php soma buy online] [http://iuwoed.cwsurf.de/renova.php renova] [http://vmccgo.cwsurf.de/prozac.php prozac] [http://cuexsy.cwsurf.de/propecia.php propecia] [http://iqonxa.cwsurf.de/prevacid.php prevacid] [http://shsdsn.cwsurf.de/paxil.php paxil] [http://pnbpin.cwsurf.de/meridia.php meridia] [http://pnbpin.cwsurf.de/meridia-online.php meridia online] [http://pnbpin.cwsurf.de/meridia-10.php meridia 10] [http://pnbpin.cwsurf.de/discount-meridia.php discount meridia] [http://pnbpin.cwsurf.de/meridia-generic.php meridia generic] [http://mfrija.cwsurf.de/fioricet.php fioricet] [http://mfrija.cwsurf.de/fioricet-online.php fioricet online] [http://mfrija.cwsurf.de/fioricet-no-prescription.php fioricet no prescription] [http://mfrija.cwsurf.de/buy-fioricet-online.php buy fioricet online] [http://illshx.cwsurf.de/didrex.php didrex] [http://illshx.cwsurf.de/buy-didrex-on-line.php buy didrex on line] [http://illshx.cwsurf.de/cheap-didrex.php cheap didrex] [http://illshx.cwsurf.de/discount-didrex.php discount didrex] [http://illshx.cwsurf.de/didrex-free-shipping.php didrex free shipping] [http://illshx.cwsurf.de/didrex-price.php didrex price] [http://illshx.cwsurf.de/cheapest-didrex.php cheapest didrex] [http://ruoizz.cwsurf.de/diazepam.php diazepam] [http://oggrpr.cwsurf.de/darvocet.php darvocet] [http://oggrpr.cwsurf.de/darvocet-information.php darvocet information] [http://oggrpr.cwsurf.de/about-darvocet.php about darvocet] [http://oggrpr.cwsurf.de/darvocet-and-side-effect.php darvocet and side effect] [http://gucwpe.cwsurf.de/celebrex.php celebrex] [http://jowgtf.cwsurf.de/carisoprodol.php carisoprodol] [http://jowgtf.cwsurf.de/carisoprodol-information.php carisoprodol information] [http://jowgtf.cwsurf.de/buy-carisoprodol.php buy carisoprodol] [http://jowgtf.cwsurf.de/carisoprodol-online.php carisoprodol online] [http://jowgtf.cwsurf.de/soma-carisoprodol.php soma carisoprodol] [http://jowgtf.cwsurf.de/online-soma.php online soma] [http://hosoke.cwsurf.de/ambien.php ambien] [http://akokte.cwsurf.de/acyclovir.php acyclovir]&lt;/div&gt;</description>
			<pubDate>Mon, 31 Oct 2005 11:05:42 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Modbus_in_Mach</comments>		</item>
		<item>
			<title>Touch Screen and panel controls using ModIO</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Touch_Screen_and_panel_controls_using_ModIO</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
&lt;br /&gt;
I have never been very pleased with my sheetmetal work so decided to see if a touch-screen allows efficient operation of a mill with minimal &amp;quot;real&amp;quot; controls.&lt;br /&gt;
&lt;br /&gt;
[[Image:TouchScreen.jpg]]&lt;br /&gt;
&lt;br /&gt;
By using a virtual keyboard on the screen [http://www.virtual-keyboard.com/ details here] it was possible to run Mach3 with no additional devices except for a E-Stop button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I doid however find three real controls greatly improved my accuracy and speed:&lt;br /&gt;
&lt;br /&gt;
* Manual Pulse Generator (MPG)&lt;br /&gt;
* Feed-rate override control knob&lt;br /&gt;
* Switch to indicate position of belt on two step spindle pulley.&lt;br /&gt;
&lt;br /&gt;
These might not be your ideal control but suit my work with a lot of setting up and no real repetitive production.&lt;br /&gt;
&lt;br /&gt;
==The controls==&lt;br /&gt;
&lt;br /&gt;
=== The MPG and axis selection ===&lt;br /&gt;
&lt;br /&gt;
My original trials interfaced a conventional MPG through a parallel port. The active axis can be selected by a cycle button on the Jog screen and is indicated by screen LEDs&lt;br /&gt;
&lt;br /&gt;
There are three problems with this when jogging to a touch position. One wants needs to change axes quite frequently as one approaches the touch, it is too easy to turn the MPG with the wrong axis selected and it is best to disable the jogging before a part-program ir run.&lt;br /&gt;
&lt;br /&gt;
I provided four push switches with built-in LEDs.&lt;br /&gt;
&lt;br /&gt;
[[Image:JogControlPanel4.jpg]]&lt;br /&gt;
&lt;br /&gt;
When a button is pressed then its axis is selected for MPG jogging and the LED in the button is lit. If the button for the currently selected axis (i.e. on whose LED is lit) is plressed the Mach3 goes out of MPG jog mode into Step mode so the jog buttons can do small incremental jogs.&lt;br /&gt;
&lt;br /&gt;
The buttons and MPG are all easily used while watching the tool and the work and it is very quick to jog to a workpiece corner when using a laser pointer to indicate the spindle centerline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Feedrate control ===&lt;br /&gt;
&lt;br /&gt;
If I find that I have misjudged a feedrate I find it difficult to quickly correct this using on-screen controls. &lt;br /&gt;
&lt;br /&gt;
The control panel has a potentiometer giving feed override from 5% to 100% (Note: increasing feeds is risky as Mach3 cannot always respect motor tuning maxima when &amp;quot;bending time&amp;quot; to increase feedrates)&lt;br /&gt;
&lt;br /&gt;
The advantages of the physical knob is that it is easy to find quickly and persistent in its setting.&lt;br /&gt;
&lt;br /&gt;
===Pulley setting===&lt;br /&gt;
&lt;br /&gt;
I had originally implemented an on-screen toggle to select high and low pulley ratios but found that I frequenly failed to press it after changing belt position. I decided that a switch physically adjacent to the cover for the belt and pulleys should be more ergonomic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware implementation ==&lt;br /&gt;
&lt;br /&gt;
===Overall design===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MPG, its push buttons and the pully switch would be easy to implement using a second parallel port and this would not need a sophisticated breakout board. The feed override knob would however be more difficult. It could be a small encoder into the parallel port but this would not be reliably persistent and have a maximum and minimum position.&lt;br /&gt;
&lt;br /&gt;
I chose a ModIO board from Peter Homann ([http://www.homanndesigns.com details here]). This provides MPG counting, power drivers for outputs, analog inputs and a built-in regulated power supply. It interfaces to the serial (RS-232) port of the PC using the Modbus protocol. It was designed for implementing control panels.&lt;br /&gt;
&lt;br /&gt;
===Mechanical arrangement of prototype===&lt;br /&gt;
&lt;br /&gt;
This pictures below show the inside of the &amp;quot;panel&amp;quot; - which, being a prototype, is housed in the case of a failed PC power supply and uses a massive MPG reclaimed from a scrap machine.&lt;br /&gt;
&lt;br /&gt;
[[Image:JogControlPanel2.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Image:JogControlPanel3.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Schematic of wiring===&lt;br /&gt;
&lt;br /&gt;
The diagram shows how the MPG, potentiometer and switches are wired to the ModIO.&lt;br /&gt;
&lt;br /&gt;
[[Image:PanelSchematic.JPG]]&lt;br /&gt;
&lt;br /&gt;
==Software control==&lt;br /&gt;
&lt;br /&gt;
This is slightly tricky because the ModIO needs to be configured, Mach3 needs four OEM trigger inputs to be defined, four output pins to be configured to the ModIO and several macros to be installed.&lt;br /&gt;
&lt;br /&gt;
If you try any of this setup and, as a result of your experience, can help improve the explantions please do dive in with the wiki editor.&lt;br /&gt;
&lt;br /&gt;
===MPG===&lt;br /&gt;
&lt;br /&gt;
The control of the MPG itself is entirely handled by Mach3. I find Velocity mode is by far the best for jogging to a touch. Steps, if required, are done by screen buttons when no MPG axis is selected.&lt;br /&gt;
&lt;br /&gt;
===Input buttons===&lt;br /&gt;
&lt;br /&gt;
As one needs to detect and act upon button presses the best architecture is to associate the buttones with OEM triggers and to run a trigger macro (i.e. OEM Trigger 301 and Call SetTriggerMacro).&lt;br /&gt;
&lt;br /&gt;
All the macros have to be put in the folder corresponding to the profile you are going to use with the ModIO. I like to clone my own from Mach3Mill so it is preserved when updates are installed. Suppose this profile is called ModIOPendant. The macros will be in the folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;c:/Mach3/macros/ModIOPendant&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The macro associated with the trigger (let us assume it is called M991.m1s) is:&lt;br /&gt;
&lt;br /&gt;
 Option Explicit &lt;br /&gt;
 ' Macro M991 for MPG jogging. This is called for OEM trigger inputs 301 in Mach3    &lt;br /&gt;
 Const OEMTriggerBase = 29      ' where OEM triggers start numbering&lt;br /&gt;
 Const OutputBase = 16		' where output signals start numbering&lt;br /&gt;
 Const AxisLEDBase = 59 		' where MPG axis screen LEDs start numbering&lt;br /&gt;
 Const StepButt = 275 		' OEM for selecting Step jog mode&lt;br /&gt;
 Const AxisButtBase = 185 	' where the MPG jog button OEM codes start&lt;br /&gt;
 Const MPGJogLED = 57 		' Screen LED indicates MPG jog mode selected&lt;br /&gt;
 Const CycleJogModes = 245 	' OEM for cycling Jog modes&lt;br /&gt;
 				' what would be nicer is an OEM code to select MPG mode but we can workaround..&lt;br /&gt;
 &lt;br /&gt;
 Dim i as integer &lt;br /&gt;
 Dim j as Integer &lt;br /&gt;
 Dim iAxisSelected as Integer   ' misc counters  &lt;br /&gt;
  &lt;br /&gt;
 For i = 0 To 3     	        ' hunt through the 4 axes&lt;br /&gt;
     DeActivateSignal Outputbase + i   ' switch off the real LED in case ON &lt;br /&gt;
     If IsActive (OEMTriggerBase + i) Then iAxisSelected = i ' which switch is pressed?&lt;br /&gt;
     											 			        ' highest axis if multiple presses &lt;br /&gt;
 Next i &lt;br /&gt;
  &lt;br /&gt;
 If GetOEMLED (AxisLEDBase + iAxisSelected) Then ' axis was selected for MPG already so put MPG OFF &lt;br /&gt;
     DoOEMButton StepButt    ' go to step mode on Keyboard &lt;br /&gt;
 Else 			     ' this axis is not selected so put it ON for MPG&lt;br /&gt;
     DoOEMButton AxisButtBase + iAxisSelected    ' select the axis &lt;br /&gt;
     ActivateSignal OutputBase + iAxisSelected   ' light the real LED in switch &lt;br /&gt;
     For j = 0 to 2 		          	 ' workaround to go to MPG jog mode&lt;br /&gt;
        If NOT GetOEMLED (MPGJogLED) Then	' not in MPG mode so cycle modes &lt;br /&gt;
             DoOEMButton CycleJogModes 			' because there is no button to select it&lt;br /&gt;
         End if &lt;br /&gt;
     Next j                   ' three shots should be enough unless there is no MPG when who cares! &lt;br /&gt;
 End If  ' dealt with the button press&lt;br /&gt;
&lt;br /&gt;
The easiest way to set up the OEM triggers to call this M991 macro is to create a macro that will be run when Mach3 is initialized (lets call it M999.m1s). The macro contains one line of actual code. I have added a comment too.&lt;br /&gt;
&lt;br /&gt;
 Rem Init macro in M999.m1s &lt;br /&gt;
 SetTriggerMacro (991)&lt;br /&gt;
&lt;br /&gt;
Put the command M999 in the Initialization string on Config&amp;gt;State with any other codes already there.&lt;br /&gt;
&lt;br /&gt;
===LEDs===&lt;br /&gt;
&lt;br /&gt;
The LEDs are configured as Mach3 Outputs 7 to 10 connected using Ports &amp;amp; Pins Output Signals tab to the ModIO as Port 0 Pins 0, 1, 2 and 3. These are configured as active Hi.&lt;br /&gt;
&lt;br /&gt;
===Potentiometer and Pulley Switch===&lt;br /&gt;
&lt;br /&gt;
The Potentiometer is connected to ModIO Analog1 input. This is read in the Macropump macro and the value stored in the Feedrate Override DRO. You may wish to add two user LEDs to your screens to indicate the pulley setting (1050 is high speed, 1051 is low speed). The macro does not require these. &lt;br /&gt;
&lt;br /&gt;
The code of the macro is:&lt;br /&gt;
&lt;br /&gt;
 ' Macropump for setting Freed rate override&lt;br /&gt;
 ' and reading pulley switch on PCNC - Revised 14 Oct 2005&lt;br /&gt;
 Option Explicit&lt;br /&gt;
 Dim fro As Integer&lt;br /&gt;
  &lt;br /&gt;
 Const Input1Sig = 18&lt;br /&gt;
   &lt;br /&gt;
 fro = GetInput (64)  		' read Analog1&lt;br /&gt;
 fro = (fro * 95.0)/1024.0&lt;br /&gt;
 setDRO 21, fro+5		' range is now 5 to 100%&lt;br /&gt;
  &lt;br /&gt;
 ' now read pulley switch&lt;br /&gt;
   &lt;br /&gt;
 If IsActive (Input1Sig) Then &lt;br /&gt;
  &lt;br /&gt;
 	Call SetOEMDRO (56,2)	' pulley 2 Low speed&lt;br /&gt;
 	Call SetUserLED (1051,1) ' LEDs used to indicate pulley range on screens&lt;br /&gt;
 	Call SetUserLED (1050,0)&lt;br /&gt;
 Else&lt;br /&gt;
 	Call SetOEMDRO (56,1)	' pulley 1 High speed&lt;br /&gt;
 	Call SetUserLED (1051,0)&lt;br /&gt;
 	Call SetUserLED (1050,1)&lt;br /&gt;
 End If&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a great way to use mpg's. &lt;br /&gt;
Once John helped me find my faulty typing it worked wonerfully.&lt;br /&gt;
Randy T&lt;/div&gt;</description>
			<pubDate>Mon, 24 Oct 2005 14:29:29 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Touch_Screen_and_panel_controls_using_ModIO</comments>		</item>
		<item>
			<title>Customization case studies</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Customization_case_studies</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please feel free to add a new internal link to this list and use the new page to describe the way in which you applied Mach customization techniques.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The code in this section has not yet been modified for unified numbering. This should be done when Mach 1.90 (or its sucessor) is released so replacing 1.84&lt;br /&gt;
&lt;br /&gt;
In time, doubtless, some structure for the list will emerge. Do what feels best at the time!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
# [[Touch Screen and panel controls using ModIO]]&lt;br /&gt;
# [[Using the Analog Inputs on ModIO to replace numerous digital inputs/switches]]&lt;br /&gt;
# [[Making an MPG out of a cheap encoder]]&lt;br /&gt;
# [[Some screen buttons for Lathe spindle control]]&lt;br /&gt;
# [[Axis DROs and other info. on ModIO LCD]]&lt;br /&gt;
# [[Universal panel notes for CNC Workshop 2006]]&lt;br /&gt;
# another contribution&lt;br /&gt;
etc.....&lt;/div&gt;</description>
			<pubDate>Mon, 24 Oct 2005 13:56:26 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Customization_case_studies</comments>		</item>
		<item>
			<title>Communications Routes</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Communications_Routes</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview of chapter ==&lt;br /&gt;
&lt;br /&gt;
In this chapter we will look how the hardware of the machine tool and its user controls, the computer hardware and Mach3 communicate with each other.&lt;br /&gt;
You will probably find it best to skim this chapter and return to it as you look at the other individual customisations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before we can look at customisation in detail you will have to know how the various parts of your machine communicate with Mach3 and, indeed, how you communicate with it.&lt;br /&gt;
&lt;br /&gt;
[[Image:ControlFlow.jpg]]&lt;br /&gt;
&lt;br /&gt;
The illustration shows the important communication routes and with the following description should allow you to understand how they work. The diagram looks complex and this is a fair reflection of the fact that Mach3 is complex and can be configured to work with many types of machine. Your system will, almost certainly, not have all the features on it but, before you start customising, now is a good time to understand the options. Notice the key which explains what the different type of lines represent.&lt;br /&gt;
&lt;br /&gt;
== Electrical connections ==&lt;br /&gt;
&lt;br /&gt;
If you have set up your own system you will have been through the process of connecting switches like the home switches to pins of the parallel port(s) and using the dialogs to tell Mach3 which pins are used for which function. This is shown at the bottom left of the picture. Notice we have shown the limit and EStop switches directly controlling the drive electronics because this is the safest technique and recommended in this manual. Your switches might, of course, control Mach2 via the parallel port(s). This would change the arrows from the switches on the diagram to go into the port(s) instead of the motor drives box.&lt;br /&gt;
&lt;br /&gt;
Mach3 makes extensive use of these signals during running. This is shown by the arrow into the &amp;quot;brain&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some switches (currently 15) can be assigned to input pins as OEM Trigger signals. These can be configured to do what you wish by issuing an &amp;quot;OEM code&amp;quot; command directly to Mach3 - just like pressing a screen button does. They do not, however, need anything on a screen to do this. The OEM Button codes that are issued by each signal are defined using the Config&amp;gt;Set System Hotkeys dialog.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keystroke connections ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keystrokes ===&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;keystroke&amp;quot; produces a scancode that is sent to your computer using the PS/2 or USB connectors. They can be generated in three different ways:&lt;br /&gt;
&lt;br /&gt;
* By typing on the computer keyboard&lt;br /&gt;
* By closing/opening a switch connected to a keyboard emulator. Such devices may be connected via the Universal Serial Bus (USB) and/or be daisy-chained to the main keyboard. They were originally developed by the gaming community to allow computer games to put in and be controlled by arcade-like cabinets but are very convenient for machine control applications. It is also possible to connect an encoder (typically low resolution like those used as &amp;quot;digital potentiometers&amp;quot; in hi-fi and video equipment) and to generate a given scancode for each &amp;quot;click&amp;quot; in the clockwise direction and another scancode for each counterclockwise click.&lt;br /&gt;
* By pressing a button or key on a custom keyboard (perhaps like a numeric pad on a long lead, buttons on a joystick,  or a &amp;quot;console&amp;quot;). These options are really just some switches and an emulator in a standard box, probably with some neat way of labelling the switches. Windows refers to them as Human Interface Devices (HIDs) Figure 2.2 shows an example with a Mach3 function overlay sheet in place.&lt;br /&gt;
&lt;br /&gt;
A keystroke when Mach3 is running can, of course, do many things: be part of a command entered in the MDI line, be part of a value entered into a DRO or be a hotkey shortcut. A real keyboard will be used for all these things but the other sources of keystrokes will generally only be used for shortcuts.&lt;br /&gt;
&lt;br /&gt;
=== Keystrokes and Shortcuts (Hotkeys) ===&lt;br /&gt;
&lt;br /&gt;
A keystroke generates a Scancode which is processed by Windows and then Mach3. If it is not used directly as input to MDI or a DRO then it can perform three functions:&lt;br /&gt;
 &lt;br /&gt;
* if the code defined as a Button Shortcut (Hotkey) for a button currently displayed on screen then it is equivalent to clicking the mouse on that button&lt;br /&gt;
* if the code defined in the Config&amp;gt;Set Axis Hotkeys it will jog, load a file or select MDI or a DRO as appropriate&lt;br /&gt;
* if the code defined in the Config&amp;gt;Ports and Pins Input Pins dialog it will turn On (key down) or Off (key up) the signal to which it is attached. This, used with a keyboard emulator, gives a mechanism for extending the number of input pins far beyond those available on the two parallel ports. Not all signals can be made &amp;quot;virtual&amp;quot; like this and you are advised not to use the mechanism for safety critical operations.&lt;br /&gt;
 &lt;br /&gt;
You may consider using having real push buttons (or perhaps a membrane switch pad) beside the screen which can be labelled for different functions on each screen (making soft keys like in a bank ATM) or be used for a common function like screen changing. This is illustrated top right of the main picture.&lt;br /&gt;
&lt;br /&gt;
A rotary encoder (MPG) connected by keyboard emulator can be used to send jog axis hotkeys to jog axes or to send the codes for hotkeys for buttons like Raise/Lower spindle speed or override feedrate.&lt;br /&gt;
&lt;br /&gt;
This keystroke processing mechanism is shown by the blue lines on the main picture from the &amp;quot;keyboard devices&amp;quot; to the screen buttons and the Input Pins dialog.&lt;br /&gt;
&lt;br /&gt;
A USB custom keyboard&lt;br /&gt;
&lt;br /&gt;
[[Image:CustomKeys.jpg]]&lt;br /&gt;
&lt;br /&gt;
== The KeyGrabber and profilers ==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, keystokes from the actual keyboard and keyboard emulators have their scancodes processed by Windows before they are given to Mach3. In particular, of course, Windows has to route the keycodes to the application whose window has the focus.&lt;br /&gt;
Custom keyboards, game pads etc. (HIDs)  generally need a piece of software to define which keycodes each button is to generate. This software is often called a profiler and is supplied by the custom keyboard manufacturer. Profilers usually have a picture of the device and its buttons and when you click on these you are prompted to input the keycode and any &amp;lt;Shift&amp;gt;, &amp;lt;Ctrl&amp;gt; or &amp;lt;Alt&amp;gt; modifiers to be used with it.&lt;br /&gt;
&lt;br /&gt;
A utility, KeyGrabber, has been developed, by Les Newell, for use in conjunction with Mach3 (and its Screen Designer) to make it easy to configure Keyboard Emulators and USB connected HIDs including custom buttons, joy sticks, throttle controls etc. It has the additional advantage that it will pass selected keycodes to Mach3 whatever program has the focus. This Mach3 can continue to be controlled even if you need to briefly run another application like Windows Explorer, the Calculator or you accidentally swap to a program by clicking in the task bar. Although at first sight translation of a few key codes sounds rather trivial, if you look into it we think you will discover how powerful a technique it is for making Mach3 easy to use with a variety of standard and therefore reasonably priced input devices.&lt;br /&gt;
Details of KeyGrabber and its installation and configuration are given at [[Keygrabber info]].&lt;br /&gt;
&lt;br /&gt;
== VB Script connections ==&lt;br /&gt;
&lt;br /&gt;
A part program is written using G and M codes. It is, however, also possible to program Mach3 in another language called VB Script. This is a subset of the Microsoft Visual Basic language which is available in many applications besides Mach2, including Microsoft Office. While it would be possible to totally control a machine tool using Mach3 with a VB Script program, the facility is really intended to help customize the environment in which a G-code part program runs.&lt;br /&gt;
&lt;br /&gt;
=== VB Script programs ===&lt;br /&gt;
&lt;br /&gt;
A VB Script program can be used in three ways:&lt;br /&gt;
&lt;br /&gt;
* By being &amp;quot;attached&amp;quot; to a screen button and so be run when the button is clicked or its hotkey is pressed&lt;br /&gt;
* By being put in a macro and called from within a part program, the MDI line of the G-code attached to a button. The last of these methods being suitable if the program is too big to attach directly to the button or is required to be used as a macro from a part program as well as a button.&lt;br /&gt;
* By being a macro attached to an OEM input trigger by OEM code 301.&lt;br /&gt;
&lt;br /&gt;
The VB Script program can:&lt;br /&gt;
 &lt;br /&gt;
* declare and use VB variables, &lt;br /&gt;
* execute conditional statements (If-Then-Else), &lt;br /&gt;
* perform loops, and&lt;br /&gt;
* call VB the functions and subroutines defined by the macro writer or provided by Mach3 as its interface to scripts.&lt;br /&gt;
&lt;br /&gt;
The predefined interface functions and subroutines are defined in detail in [[Mach specific Subroutines/Functions grouped by purpose]]. The main ones allow the script to issue G-code commands, to read and write the values of DROs, to inspect LEDs (and for User LEDs, to set them), and to send Function and OEM codes to Mach3 thus simulating what a user does when s/he clicks a screen button. Additionally a macro can test the values of input signals, set output signals, access internal data such as motor tuning parameters and use parallel and serial ports not used by Mach3 itself.&lt;br /&gt;
 &lt;br /&gt;
=== Mach3 macros ===&lt;br /&gt;
As already mentioned, a macro is a piece of  VB Script. Each macro has a name like M134. The M is used at the start of every macro name and the number can be any integral value up to 99999 that is not used to define a built-in M-code. These built-in numbers are listed in chapter 11. Thus for example, M12, M50, M16543 are all valid macro names; while M3, M-56, M0234, M567.4 are not valid names.&lt;br /&gt;
&lt;br /&gt;
Standard macros will use the number range up to M999, Original Equipment Manufacturers (OEMs) are advised to use M1000 to M89999 and end-users can avoid naming conflicts by using M90000 to M99999.&lt;br /&gt;
&lt;br /&gt;
Each macro is stored as text in its own file whose name is the macro name with file extension &amp;quot;.m1s&amp;quot;. Thus one would find files: M12.m1s, M50.m1s and M16543.m1s on a system with the above macros in it. The macro files are collected in a folder corresponding to the profile name with which they are to be used within a folder called &amp;quot;Macros&amp;quot;  within the Mach3 folder.&lt;br /&gt;
&lt;br /&gt;
A macro is called just like an ordinary M-code command by:&lt;br /&gt;
&lt;br /&gt;
* Execution of a line (block) of a part program containing its name&lt;br /&gt;
* Including its name on commands entered on the MDI line&lt;br /&gt;
* Including its name in the code to be executed on clicking a screen button.&lt;br /&gt;
&lt;br /&gt;
All these features are shown by the arrows into and out of the Macro box in the control flow picture&lt;br /&gt;
&lt;br /&gt;
== Windows' control ==&lt;br /&gt;
&lt;br /&gt;
The final elements shown in the control flow picture are the standard devices that control Windows. Common examples are the mouse and trackball or a touch-screen. Windows also supports a gaming joystick and throttle. This can be used for jogging and overriding jog and feed rates.&lt;br /&gt;
&lt;br /&gt;
== Other customisation ==&lt;br /&gt;
&lt;br /&gt;
=== Global hotkeys ===&lt;br /&gt;
&lt;br /&gt;
''Config&amp;gt;Set System Hotkeys'' allows you to set up the keys which will jog the axes when the Jog Mode button is displayed on the current screen. Click the button for the axis and direction you want to set and then type the keystroke to be used. It is your responsibility to make sure they are unique and do not clash with other hotkeys you might want to use. You can use [[ScreenTweak]] to prepare a list of standard hotkeys.&lt;br /&gt;
&lt;br /&gt;
These hotkeys can very usefully be generated by a profiler such as KeyGrabber to provide jogging support from Human Interface Devices or buttons and encoders attached to a keyboard emulator.&lt;br /&gt;
&lt;br /&gt;
You can also define hotkeys which will select the MDI window (default is ''Enter''), will select a DRO and will display the ''File&amp;gt;Load G-code'' dialog. These are useful if you are controlling Mach3 without a mouse or similar pointing device.&lt;/div&gt;</description>
			<pubDate>Wed, 19 Oct 2005 13:52:37 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Communications_Routes</comments>		</item>
		<item>
			<title>Mach specific Subroutines/Functions grouped by purpose</title>
			<link>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Mach_specific_Subroutines/Functions_grouped_by_purpose</link>
			<description>&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This section describes the most important standard routines (i.e. functions and subroutines) that can be called from VB Script on buttons or in macros.&lt;br /&gt;
&lt;br /&gt;
'''''This version is for Mach 1.90.033 and later'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== To execute G or M-codes from a script ==&lt;br /&gt;
&lt;br /&gt;
The simplest and most powerful routine is:&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Code (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
The ''text'' argument is a string expression (including, or course a constant or simple variable) which is any line of G or M codes that you could enter into MDI. It will be passed to Mach3 for execution. The only restriction is that you are advised not to call another script from within a script.&lt;br /&gt;
&lt;br /&gt;
Examples, using both versions of the syntax for subroutine calls:&lt;br /&gt;
&lt;br /&gt;
 Code &amp;quot;G0X0&amp;quot; ' X to zero in current coords&lt;br /&gt;
 Code &amp;quot;G1X10&amp;quot; &amp;amp; Feed ' variable Feed has been set to something like &lt;br /&gt;
               ' &amp;quot;F150&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== To wait for Mach3 to finish what you've started ==&lt;br /&gt;
&lt;br /&gt;
A frequent requirement is to have to wait for Mach3 when doing several commands, to keep them executing in order. The: &lt;br /&gt;
 While IsMoving&lt;br /&gt;
 Wend&lt;br /&gt;
&lt;br /&gt;
Loop is the typical way of doing this. &lt;br /&gt;
&lt;br /&gt;
ex:&lt;br /&gt;
&lt;br /&gt;
 code &amp;quot;G0X100&amp;quot;&lt;br /&gt;
 While IsMoving()&lt;br /&gt;
 Wend&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
However, this causes the system to make millions of calls to the subsystem to &lt;br /&gt;
determine if Mach3 is finished. The CPU load rises terribly. A solution is to wait for 100ms or so each time you check&lt;br /&gt;
unless you need a very tight response time. The solution is to use a syntax as follows..&lt;br /&gt;
&lt;br /&gt;
 Declare Sub Sleep Lib &amp;quot;Kernel32&amp;quot; (ByVal dwMilliseconds As Long)&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 Code &amp;quot;G0X100&amp;quot;&lt;br /&gt;
 While ismoving()&lt;br /&gt;
 Sleep 100&lt;br /&gt;
 Wend&lt;br /&gt;
&lt;br /&gt;
This will lower your CPU load a great deal and allow things to be much more robust.&lt;br /&gt;
&lt;br /&gt;
== For accessing the screen controls ==&lt;br /&gt;
&lt;br /&gt;
As you may have seen in example code, a macro read and change the data in a DRO. It can also read the state of any LED and simulate the action of clicking a screen button. To access these operations on Mach2 controls you use the codes used internally by Mach3 and its Screen Designer for the DRO, LED or button operation you want to use.&lt;br /&gt;
&lt;br /&gt;
There are, for historical reasons, two different ranges of numbers for each type of control. Some LEDs and DROs start at 800 and some buttons start at 1000. You do not need to worry about this. As we say it is historical! &lt;br /&gt;
&lt;br /&gt;
DROs and LEDs can be defined that have no meaning to Mach3 being solely for you use. There are 255 of each denoted by codes 1000 to 1254. You must refer to them using special functions with &amp;quot;User&amp;quot; in the name to make it obvious that they are not controlling Mach2 itself.&lt;br /&gt;
&lt;br /&gt;
Although we use literal values (like 14) in the examples you are strongly advised to assign the values you want to use to variables at the beginning of your macro and then use the variables in calls to the routines. This will make your program much easier to read. Thus the first LED example in a complete script would be:&lt;br /&gt;
&lt;br /&gt;
 JoyStickLED = 814&lt;br /&gt;
 :&lt;br /&gt;
 :&lt;br /&gt;
 bJoy = GetOEMLed (JoyStickLEDFn)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LEDs ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetOEMLED (ledOEMCode '''as''' Integer) '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
A common routine accesses system, OEM and User LEDs. ''ledOEMCode'' must be in the range 1000 to 1244 for user LEDs and the codes given in this wiki for system and OEM LEDs. The result is True (i.e. non-zero if converted to an integer) if the LED referred to is alight.&lt;br /&gt;
&lt;br /&gt;
User LEDs, only,  can be set on or off by:&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetUserLED (ledUserCode '''as''' Integer, cond '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;tt&amp;gt;cond&amp;lt;/tt&amp;gt; = 1 the LED will be on. If &amp;lt;tt&amp;gt;cond&amp;lt;/tt&amp;gt; = 0 then it will be Off&lt;br /&gt;
 &lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 bJoy = GetOELed (814)		' set variable bJoy if Joystick is enabled&lt;br /&gt;
 If GetOEMLed (29) Then …..	' see if a Fixture is in use&lt;br /&gt;
 Call SetUserLED (1002, 1)		' turn on user LED&lt;br /&gt;
&lt;br /&gt;
=== DROs ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetOEMDRO (droOEMCode '''as''' Integer) '''as''' Double&lt;br /&gt;
 &lt;br /&gt;
Choose the appropriate codes depending on whether you want to access a &amp;quot;system&amp;quot;, an OEM or user DRO. droOEMCode will be in the range 800 + for &amp;quot;system DROs and 1000 to 1254 for user DROss. The result is the current value displayed by the DRO. &lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetOEMDRO (droOEMCode '''as''' Integer, newValue '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Choose the appropriate codes depending on whether you want to access a &amp;quot;system&amp;quot;, an OEM or user DRO. droOEMCode will be in the range 800 + for &amp;quot;system DROs and 1000 to 1254 for user DROss. The routine sets the expression provided for newValue into the DRO. Not all DROs can be written. If you cannot type a value into the DRO on the screen (e.g. X Velocity = 806) then you cannot set it in a script.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' KillExponent (result '''as''' String, smallNumber '''as''' String) &lt;br /&gt;
&lt;br /&gt;
This routine is provided to address the problem that VB Script is liable to represent small numbers (e.g. 0.0000012) in scientific (exponent) notation. The routine forces the string to be decimal.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Call SetOEMDRO (818, GetOEMDRO (818) * 1.1)	' increase feedrate by 10%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Button Commands ===&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoOEMButton (buttOEMCode '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Cal;l the routine to perform the action equivalent to  &amp;quot;pressing&amp;quot; a button. Mach3 is instructed by the script to perform the function specified.&lt;br /&gt;
 &lt;br /&gt;
There is no provision for the trapping or reporting of errors but as most functions have an LED associated with them this can be inspected by the script code to check that the required action has been performed.&lt;br /&gt;
&lt;br /&gt;
Very many &amp;quot;buttons&amp;quot; are toggles or cycle through a range of possible states or values. A loop containing inspection of an associated LED can be used to set a particular state. This example would be particularly suitable to be attached to a button.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Rem This sets the MPG jog on and the wheel to jog the Y axis&lt;br /&gt;
 Rem There are actually more direct ways to do this in late releases&lt;br /&gt;
 Rem of Mach2&lt;br /&gt;
 JogTogButton = 174&lt;br /&gt;
 JogMPGEn = 175&lt;br /&gt;
 MPGJogOnLED = 57&lt;br /&gt;
 MGPJogsY = 60&lt;br /&gt;
 OK = False&lt;br /&gt;
 For I = 1 to 2&lt;br /&gt;
 	If Not GetOEMLED (MPGJogOnLED) Then &lt;br /&gt;
 		Call DoOEMButton (JogMPGEn)  ' try to enable&lt;br /&gt;
 	Else&lt;br /&gt;
 		OK = True	' MPG is enabled&lt;br /&gt;
 		Exit For&lt;br /&gt;
 	End If&lt;br /&gt;
 Next I&lt;br /&gt;
 Rem Could test of OK true here&lt;br /&gt;
 OK = False&lt;br /&gt;
 For I = 1 to 6	' must get there after six axis tries&lt;br /&gt;
 	If Not GetOEMLED (MPGJogsY) Then&lt;br /&gt;
 		Call DoOEMButton (JogTogButton) ' try next one&lt;br /&gt;
 	Else&lt;br /&gt;
 		OK = True  ' got right axis selected&lt;br /&gt;
 		Exit For&lt;br /&gt;
 	End If&lt;br /&gt;
 Next I&lt;br /&gt;
 Rem Could test OK here as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interrogating Mach's state ==&lt;br /&gt;
=== Interrogating Mach3 running modes ===&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsDiameter() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns a non-zero value if Mach3 is in Diameter mode (Turn only) otherwise zero for radius mode. Diameter mode affects th handling of all X coordinate values.&lt;br /&gt;
&lt;br /&gt;
=== Interrogating Mach3 internal variables ===&lt;br /&gt;
&lt;br /&gt;
The current value of Mach3 internal variables can be read using the &amp;lt;tt&amp;gt;GetParam&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
 &lt;br /&gt;
 '''Function''' GetParam (name '''as''' String) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This returns a numeric value corresponding to the name of the given variable which is provided as a string (constant or variable)&lt;br /&gt;
&lt;br /&gt;
The corresponding  routine &amp;lt;tt&amp;gt;SetParam&amp;lt;/tt&amp;gt; sets the value of the variable to newVal.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetParam (name '''as''' String, newVal '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
A list of recognised strings can be found at [[Get/SetParam() Vars]]&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 Rem interrogate drive arrangements&lt;br /&gt;
 mechProp1 = GetParam (&amp;quot;StepsPerAxisX&amp;quot;)&lt;br /&gt;
 Rem make C acceleration be same as X for slaving&lt;br /&gt;
 Call SetParam(&amp;quot;AccelerationC&amp;quot;, GetParam (&amp;quot;AccelerationX&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
'''''Notice''''' that the word &amp;quot;Param&amp;quot; is used here in a different sense to the Machine Parameters accessed by the # operator from within a part program and in accessing the Q, R &amp;amp; S word &amp;quot;parameters&amp;quot; to a macro call.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Access to the machine G-code parameter block ==&lt;br /&gt;
&lt;br /&gt;
Mach3 has a block of variables which can be used in part programs. They are identified by # followed by a number (the parameter address). The contents of the Tool and Fixture tables are in these parameters but there are many values that can be used by the writer of a part program.&lt;br /&gt;
These machine variables can be accessed within macros by GetVar and SetVar.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetVar (PVarNumber '''as''' Integer) as Double&lt;br /&gt;
 '''Sub''' SetVar (PVarNumber '''as''' Integer, newVal '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
The predefined parameter variables are defined the manuals ''Using Mach3Mill'' and ''Using Mach3Turn''.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 FixNumb = GetVar (5220)	' get current fixture number&lt;br /&gt;
 Rem set X offset of fixture 2 to be same as fixture 1&lt;br /&gt;
 Call SetVar (5241, GetVar (5221)) &lt;br /&gt;
 Rem increment a counter, say in a multiple part layout&lt;br /&gt;
 Call SetVar (200, GetVar (200) + 1))&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Arguments of macro call ==&lt;br /&gt;
&lt;br /&gt;
When a macro is called from the MDI line or within a part program then data can be passed to it by P, Q, and S words on the line. The values of these words are &amp;quot;read&amp;quot; in the macro using the Param functions.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Param1 () '''as''' Double ' gets P word&lt;br /&gt;
 '''Function''' Param2 () '''as''' Double ' gets Q word&lt;br /&gt;
 '''Function''' Param3 () '''as''' Double ' gets S word&lt;br /&gt;
&lt;br /&gt;
NOTE: There was a Bug in the S parameter that would cause the spindle to run at the S words number.&lt;br /&gt;
&lt;br /&gt;
So as of Mach3 version: 3.042.011 that has been changed/Fixed The NEW Param3 is &amp;quot;R&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Param3 () '''as''' Double ' gets R word&lt;br /&gt;
&lt;br /&gt;
== Information to and from the user ==&lt;br /&gt;
&lt;br /&gt;
Scripts can communicate with the operator by displaying a dialog box with a prompt into which the user can type numeric data. The Question function prompts for one item. The GetCoord routine prompts for the values of X, Y, Z and A coordinates.&lt;br /&gt;
&lt;br /&gt;
''Refer here to MsgBox etc built-in VB Script calls !!!''&lt;br /&gt;
&lt;br /&gt;
The other strategy, probably more suited to scripts attached to buttons, is to provide DROs of a screen into which data is set before running the macro. These can of course also display results from the script.&lt;br /&gt;
&lt;br /&gt;
User Intelligent Labels and Tickers enable messages to be displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog boxes ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Question (prompt '''as''' String) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
The string in &amp;lt;tt&amp;gt;prompt&amp;lt;/tt&amp;gt; is displayed in a modal dialog titled &amp;quot;Answer this. The dialog contains an edit box. The value of the function is set to the number in this when OK is clicked.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' GetCoord (prompt '''as''' String)&lt;br /&gt;
&lt;br /&gt;
As with Question, a modal dialog titled &amp;quot;Enter Coordinates&amp;quot; displays prompt. This has four edit boxes labelled X, Y, Z and A into which values can be typed. GetCoord itself does not return the values to the macro code. These must be fetched by GetXCoor, GetYCoor etc.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetXCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetYCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetZCoor () '''as''' Double&lt;br /&gt;
 '''Function''' GetACoor () '''as''' Double&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Outputting text, warnings etc. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Message (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Writes the message on the &amp;lt;tt&amp;gt;Error&amp;lt;/tt&amp;gt; intelligent label and in the History log file.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' PlayWave (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Plays a Windows .WAV file (e.g. a chime to warn of an event or error). This feature must be enabled in Config&amp;gt;Logic&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Speak (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Speaks a text string. Requires Speech to be enabled in Config&amp;gt;Logic and a suitable sppech engine to be installed (e.g. the one supplied with Microsoft Office).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User defined DROs and LEDs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This technique is mainly applicable to wizards and scripts which are run from a user defined screen button.&lt;br /&gt;
&lt;br /&gt;
A block of DRO OEM codes is allocated to 255 USER DROs (Ranged from 1000 through 1254) which are not used by Mach3 itself. These DROs, suitably labelled, can be placed on a screen.&lt;br /&gt;
 &lt;br /&gt;
The operator enters data into the DRO(s) before pressing a button or series of buttons to run the macro or macros. The macro(s) access the data using &amp;lt;tt&amp;gt;GetUserDRO&amp;lt;/tt&amp;gt; as explained above. The macro can also use &amp;lt;tt&amp;gt;SetUserDRO&amp;lt;/tt&amp;gt; to update the data or return a result in another DRO.&lt;br /&gt;
&lt;br /&gt;
In addition there are 255 user LEDs which can be read and (unlike normal LEDs) written using &amp;lt;tt&amp;gt;GetUserLED&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SetUserLED&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This technique can, for example, be used to implement a totally personal scheme to extend the Mach3 offset setting by Touch with Correction. Suppose you have a probe with a 5 mm tip diameter which only trips in sideways movement (i.e. for X and Y) then you might use a 1 mm slip or piece of shim-stock to manually feel the Z touch. You could define a pair of scripts attached to two buttons to apply the fixed, 5 mm, X and Y correction and a third button that uses a Z-correction DRO to set the thickness of the shim or slip which is in use.&lt;br /&gt;
&lt;br /&gt;
Such features can be made to appear to the operator to be exactly like built-in Mach3 functionality.&lt;br /&gt;
&lt;br /&gt;
=== User Button captions, Labels and Tickers ===&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetButtonText (text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
This will change the caption text of the button to which the VB script is attached to the given string. This may only be called &amp;quot;from&amp;quot; a button rather than in a macro.&lt;br /&gt;
&lt;br /&gt;
If the current screen has a label whose, case sensitive, text is in the range &amp;lt;tt&amp;gt;UserLabel1&amp;lt;/tt&amp;gt; to UserLabel255 then the actual text displayed can be set in a Script by calling&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetUserLabel (number '''as''' Integer, text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
This will display the given &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; in the label corresponding to the &amp;lt;tt&amp;gt;number&amp;lt;/tt&amp;gt; given.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetTicker (number '''as''' Int, text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Accesses the 255 tickers &amp;lt;tt&amp;gt;Ticker1&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;Ticker255&amp;lt;/tt&amp;gt;. In a ticker the text of the message scrolls through the box so a very long message can be given in a small area of screen at the expense of some inconvenience for the user.&lt;br /&gt;
&lt;br /&gt;
e.g. &lt;br /&gt;
&lt;br /&gt;
 SetUserLabel 12, &amp;quot;You must enter a whole number of holes&amp;quot;&lt;br /&gt;
 SetTicker 205, &amp;quot;This is a very long error message because you seem to have done something very silly&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Handling files of Part Programs ==&lt;br /&gt;
&lt;br /&gt;
This group of functions deals with loading and running G-code and features for the Teach MDI and wizard systems&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Loadfile (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads the given file of G-code.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadRun (pathname '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads the given file of G-code and starts its execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' AppendTeachFile (pathname '''as''' String) '''as''' Integer&lt;br /&gt;
 '''Function''' OpenTeachFile (pathname '''as''' String) '''as''' Integer&lt;br /&gt;
 '''Function''' OpenSubroutineFile (name '''as''' String) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Opens the given file for G-code and starts writing of commands executed (e.g. by MDI) to it. ''Open'' is an empty file, ''Append'' assumes that the file already exists and preserves its content. Returns non-zero value if operation is sucessful.&lt;br /&gt;
&lt;br /&gt;
??? OpenSubroutine file is describes in Release Notes as exactly the same as OpenTeachFile. It is not exactly clear whsat the significance of this is.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadTeachFile ()&lt;br /&gt;
&lt;br /&gt;
Loads the G-code of the currently open teach file so it can be executed&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' CloseTeachFile ()&lt;br /&gt;
&lt;br /&gt;
Closes the currently open Teach or wizard file and stops commands being written to it.&lt;br /&gt;
&lt;br /&gt;
== Screen handling routines for wizards etc. ==&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ToggleScreens()&lt;br /&gt;
&lt;br /&gt;
Switches between displaying the .SET and .SSET screen sets. This is employed on the standard screens to switch between the &amp;quot;complex&amp;quot; and &amp;quot;simple&amp;quot; screen sets but could be used for any purpose such a screens with and without a fourth axis or screens optimised for daytime and nighttime working.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetPage () '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns the number of the screen in the set presently being displayed. Used to remember where the user is when running a wizard.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetPage (page '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Used to display a given screen of a set, typically on return from a wizard. Equivalent to using &amp;lt;tt&amp;gt;DoOEMButton&amp;lt;/tt&amp;gt; with the screen number.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadWizard ( name '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Loads and runs the named Wizard.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Savewizard ()&lt;br /&gt;
&lt;br /&gt;
Saves the information in the local controls on a wizard screen in the wizardname.SET.DEFS file so that the values are on the screen when the wizard is next run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input/Output signals, Modbus I/O, a serial port and &amp;quot;foreign&amp;quot; ports ==&lt;br /&gt;
&lt;br /&gt;
=== Signals ===&lt;br /&gt;
&lt;br /&gt;
Scripts can access the input signals (both on parallel ports and defined virtually in response to keycodes) such as the state of home and limit switches and can control output signals.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsActive (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Function''' IsOutputActive (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
 '''Sub''' ActivateSignal (sigNo '''as''' Integer)&lt;br /&gt;
 '''Sub''' DeActivateSignal (sigNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;IsActive&amp;lt;/tt&amp;gt; tests input signals. &amp;lt;tt&amp;gt;IsOutputActive&amp;lt;/tt&amp;gt; tests output signals. They will return True if the signal is active (i.e. its LED would be lit on the Diagnostics screen). In other words this test is after the application of the Active Hi/Active Lo configuration of the signal hot a test of &amp;quot;0 volts&amp;quot; or &amp;quot;5 volts&amp;quot; on the signal's pin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ActivateSignal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;DeActivateSignal&amp;lt;/tt&amp;gt; similarly control the logical state of output pins. Mach3 will apply the Active Hi/Active Lo configuration to establish the electrical state required.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsSuchSignal (sigNo '''as''' Integer) '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the signal is enabled. It is used to avoid things like digitising if the machine has no probe input defined.&lt;br /&gt;
&lt;br /&gt;
For all these routines, the required signal is coded using the values defined on the [[VB Constants for Signal Names]] page.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetTriggerMacro (MacroNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Defines the number of a macro to be executed when an OEMTrigger is set (slightly unexpectedly on the Config&amp;gt;Set System Hotkeys dialog) to generate OEM code 301. This provides script execution without the requirement for a screen button as intermediary.&lt;br /&gt;
&lt;br /&gt;
For example if &amp;lt;tt&amp;gt;SetTriggerMacro 456&amp;lt;/tt&amp;gt; has been executed then a signal on any OEMTrigger configured to 301 will run the code in the file M456.M1S when activated.&lt;br /&gt;
&lt;br /&gt;
===Modbus===&lt;br /&gt;
&lt;br /&gt;
Modbus is a standard ([http://www.modbus.org/tech.php details here]) serial protocol which allows control of a device such as a Programmable Logic Controller (PLC) or dedicated interface (like Peter Homann's ModIO). Typically thois expands the input/output capability of Mach systems for non-time-critical functions.&lt;br /&gt;
&lt;br /&gt;
Mach supports direct access to the registers of a Modbus device and will perform autopolling to map registers into ports and pins and to give simple access to the state of analog inputs and MPG counters.&lt;br /&gt;
&lt;br /&gt;
====Direct input routines====&lt;br /&gt;
&lt;br /&gt;
 '''Function''' FillFromCoil (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Function''' FillFromStatus (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer &lt;br /&gt;
 '''Function''' FillFromHolding (slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Function''' FillFromInput(slave '''as''' Integer, startAddress '''as''' Integer, nBytes '''as''' Integer) '''as''' Integer &lt;br /&gt;
 &lt;br /&gt;
These routines will request a memory transfer from the current ModBus device's Coil, Status, Holding and Input registers. The requested number of bytes starting from the address specified will be transfered to an internal buffer in Mach. Routine returns a 1 if successful in its transfer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetModWord(index '''as''' Integer) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
This rotuine will return a &amp;quot;16 bit word&amp;quot;. All data transfered from the device using the Fill routines, sends its information to a buffer. This routine will return a 16 bit word in the buffer selected by &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt;. The first word is selected by &amp;lt;tt&amp;gt;index&amp;lt;/tt&amp;gt; = 0&lt;br /&gt;
&lt;br /&gt;
 '''Function''' ModGetInputBit(nBit '''as''' Integer) '''as''' Integer &lt;br /&gt;
&lt;br /&gt;
This routine will return the bit chosen by the index &amp;lt;tt&amp;gt;nBit&amp;lt;/tt&amp;gt; as a one or a zero from the input buffer above. The first bit (i.e. most significant in the first word) is selected by &amp;lt;tt&amp;gt; nBit&amp;lt;/tt&amp;gt; = 0 &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 FillFromInput( 1, 102, 5 ) ' this will transfer 5 bytes to the buffer system from address 102 in the device.&lt;br /&gt;
 i = ModGetInputBit (6) ' will get the 6th bit from that 5 byte array which you transfered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Polled input/output====&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetInput (buffIndex '''as''' Integer) '''as''' Integer&lt;br /&gt;
 '''Sub''' SetModOutput (buffIndex '''as''' Integer, value '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Reads or writes a 16 bit word from/to the buffers updated by polling the Modbus. Access to these buffers is a memory access rather than an I/O transaction implied by the raw reading routines so these calls can be made as frequently as desired.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;buffIndex&amp;lt;/tt&amp;gt; values 0 through 63 are single bits corresponding to the input and output pins of Port 0. The mapping of these to Modbus device registers is defined in the &amp;lt;tt&amp;gt;Config&amp;gt;Setup Modbus Control&amp;lt;/tt&amp;gt; dialog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;buffIndex&amp;lt;/tt&amp;gt; values 64 through 127 are 16 bit words. These are mapped in &amp;lt;tt&amp;gt;Config&amp;gt;Setup Modbus Control&amp;lt;/tt&amp;gt; dialog. For full details see [[Modbus in Mach]].&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetModIOString (slave as Integer, xDisp '''as''' Integer, yDisp '''as''' Integer, Text '''as''' String)&lt;br /&gt;
 &lt;br /&gt;
Writes the string on the ModIO LCD screen (if present).&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
(a) xDisp must be an even number, i.e. writing must start at a 16 bit word boundary in the ModIO.&lt;br /&gt;
&lt;br /&gt;
(b) &amp;lt;tt&amp;gt;SetHomannString (xDisp '''as''' Integer, yDisp '''as''' Integer, Text '''as''' String) &amp;lt;/tt&amp;gt; is a legacy routine equivalent to &amp;lt;tt&amp;gt;SetModIOString,&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;Slave&amp;lt;/tt&amp;gt; = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''Function:''' GetInBit(buffIndex, Bit Number) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
   '''Function:''' SetOutBit(buffIndex, Bit Number) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
   '''Function:''' ResetOutBit(buffIndex, Bit Number) '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
'''GetInBit(BuffIndex, BitNumber)''' to use this one, Index number is 0-63 on channel one, and 64-127 on Channel 2, and BitNumber is 0-15 relating to the individual bit status in that word that you want, i.e. 0 or 1. See the Input section of config autopoller modbus.&lt;br /&gt;
NOTE If you are using Bit packing special control then you can only Use the GetInBit on the 2cd channel 64-127. You have to use something like &amp;quot;IsActive(INPUT1)&amp;quot; on channel 1. If you don't use bit packing then you can use it with the 1st channel.&lt;br /&gt;
&lt;br /&gt;
'''SetOutBit(BuffIndex, BitNumber)''' to use this one, Index number is 0-63 on channel one, and 64-127 on Channel 2. and BitNumber is 0-15 relating to the individual bit status in that word that you want, '''It Turns the bit ON!!'''. See the Output section of config autopoller modbus.&lt;br /&gt;
NOTE If you are using Bit packing special control then you can only Use the SetOutBit on the 2cd channel 64-127. You have to use something like &amp;quot;ActivateSignal(OUTPUT1)&amp;quot; on channel 1. If you don't use bit packing then you can use it with the 1st channel.&lt;br /&gt;
&lt;br /&gt;
'''ReSetOutBit(BuffIndex, BitNumber)''' is just like '''SetOutBit(BuffIndex, BitNumber)''' above, but it '''turns the requested bit OFF.'''&lt;br /&gt;
&lt;br /&gt;
=== Serial port ===&lt;br /&gt;
&lt;br /&gt;
You can send bytes of raw data to a serial port. The port number (i.e. n in COMn) to be used and the baud rate for transmission is set in Config&amp;gt;Logic. RTS/CTS hardware flow control protocol will be used to control large volumes of data but this will not be normally required. Data is transmitted 8 data bits, 1 stop bit No Parity by a call of SendSerial.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SendSerial (chars '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Example: to write the value of X DRO to an LCD display connected to the serial (RS232) port.&lt;br /&gt;
&lt;br /&gt;
 Call SendSerial (&amp;quot;X-Axis = &amp;quot; &amp;amp; GetDRO (0))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foreign ports ==&lt;br /&gt;
 &lt;br /&gt;
Scripts can access ports on the PC which are additional to the one (or perhaps two) parallel port(s) defined in Config&amp;gt;Ports and Pins. These are accessed at the basic hardware port address level and you will have to be aware of the details of the individual port addresses, allocation of data and status bits etc.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetPortByte (pAddr '''as''' Integer) '''as''' Byte&lt;br /&gt;
 '''Sub''' PutPortByte (pAddr '''as''' Integer, bData '''as''' Byte)&lt;br /&gt;
&lt;br /&gt;
This feature should be used with great care as, if misused, it can interfere with any peripheral on your system, including the hard-drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waiting and system features ==&lt;br /&gt;
&lt;br /&gt;
As described above the script code and Mach3 itself run in two separate processes. You can test to see in Mach3 is busy or idle by calling:&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsMoving () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
This will return True if Mach3 is busy. You should call it in a loop after commanding an axis move or other function which could take a significant time and before reading DROs or LEDs that could be affected by the move.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Call Code (&amp;quot;G0X12Z100&amp;quot;)&lt;br /&gt;
 While IsMoving ()&lt;br /&gt;
 WEnd&lt;br /&gt;
 x = GetOEMDRO (802)  ' get Z value in case it has been Z inhibited&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsSafeZ () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
This will return True if Mach3 is setup to allow SafeZ moves. This is done under Config-&amp;gt;Safe_Z.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsStopped () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns True if Mach3 is not in the process of executing a part-program. ??? Can anyone clarify what happens when in Feedhold, SingleStep and waiting for a Shuttle Jog pulse between blocks of code?&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsLoading () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns true if the part program is loading rather than being actually run (e.g. so the toolpath is being generated or regenerated). This can be used to inhibit script actions like Question() in this situation.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SystemWaitFor (sigNo '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Waits for the given signal to become active. This allows interfacing with physical controls on the machine.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' WaitForPoll ()&lt;br /&gt;
&lt;br /&gt;
Waits until a Modbus Poll has taken place. Not sure if this is safe if Modbus is not turned on???. Use this in a loop, e.g. in macropump macro waiting for interesting things to come from the Modbus device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''Function''' IsFirst () '''as''' Boolean&lt;br /&gt;
&lt;br /&gt;
Returns True if this is the first call of the function after Mach3 has exited from the EStop state. This can be used to re-initialse data that would be lost at a n EStop.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' LoadLinTable() &lt;br /&gt;
&lt;br /&gt;
Reloads the table giving linearisation data for Mach3 spindle speed.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SwapAxis(n,n) &lt;br /&gt;
&lt;br /&gt;
This command swaps the step and direction pinout of two axes of your choice. X=0, Y=1, Z=2, A=3, B=4, C=5 and Spindle=6. For example: ''SwapAxis(0,1)'' will swap the X and Y axis. From here on any programed move or jog of the X-axis will actually move the Y axis. Please note that it is ONLY the pinout that is swapped! The effect is just as if you opend Config-&amp;gt;Ports&amp;amp;Pins and changed the pinout there or swapped the wires at your break-out-board or drives. The motortuning values does not &amp;quot;follow&amp;quot; the axis. Be careful with this, if you exit Mach3 after issuing a SwapAxis() the swapped pinout will be saved in the .xml and will be in effect the next time you start Mach3.&lt;br /&gt;
This command can ONLY BE USED ONCE - you are not allowed to first swap X with Y and then later Y with B for example. To reset the swapped axes you must use the command ''ResetAxisSwap()''. After the swapped axes has been reset you are free to call SwapAxis() again.&lt;br /&gt;
 &lt;br /&gt;
 '''Sub''' ResetAxisSwap()&lt;br /&gt;
&lt;br /&gt;
This command resets a previous AxisSwap() call. It is the correct way to reset any swaped axes. Calling SwapAxis() a second time without calling ResetAxisSwap() is not allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy and special system VB Script calls ==&lt;br /&gt;
&lt;br /&gt;
The following functions are still available to writers of macro scripts at Release 1 of Mach3. Their general use is, however, deprecated as better and more general ways are available (usually by accessing a DRO or LED with the Get/Set routines) or they are aimed at internal systems use. They may be withdrawn or changed in subsequent revisions of the Mach software.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' CloseDigFile()&lt;br /&gt;
&lt;br /&gt;
Close the digitize point file.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' CommandedFeed() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the currently applicable feedrate (including any override.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DisablePWM ()&lt;br /&gt;
&lt;br /&gt;
Inhibit output of PWM spindle signal for Digispeed.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DisableSignal (signal '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Disables operation of given signal.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinCCW ()&lt;br /&gt;
&lt;br /&gt;
Starts the spindle in a counterclockwise direction.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinCW ()&lt;br /&gt;
&lt;br /&gt;
Starts the spindle in a clockwise direction.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' DoSpinStop ()&lt;br /&gt;
&lt;br /&gt;
Stops the spindle.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' EnablePWM ()&lt;br /&gt;
&lt;br /&gt;
Enable output of PWM spindle signal for Digispeed.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' EnableSignal (signal '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Enables operation of given signal.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' FeedRate() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to clarify which rate this is (blended, commanded, actual etc.)&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetABSPosition(axis '''as''' Byte) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the absolute machine coordinate of the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetCurrentTool() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns the number of the currently active tool (i.e. after G43 executed)&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetIJMode() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
Returns 0 for Absolute mode, 1 for Incremental mode.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetRPM() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the actual speed of the spindle as measured by the Index sensor (if fitted).&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetSafeZ() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
This will return the current Safe_z in Machine coordinates to the VB routine.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetScale(Axis '''as''' Integer) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Returns the scale factor for the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetSelectedTool() '''as''' Byte&lt;br /&gt;
&lt;br /&gt;
Will return tool selected but not yet activated.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' GetToolChangeStart(Axis '''as''' Byte) '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Will return the position of an axis when a toolchange was called for.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' GotoSafeZ ()&lt;br /&gt;
&lt;br /&gt;
Will move to the absolute Z coordinate specified in the Safe_Z DRO.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' MaxX() '''as''' Double&lt;br /&gt;
 '''Function''' MaxY() '''as''' Double&lt;br /&gt;
 '''Function''' MinX() '''as''' Double&lt;br /&gt;
 '''Function''' MinY() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to document these please&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' Message( text '''as''' String)&lt;br /&gt;
&lt;br /&gt;
Writes the string, which should have only one line, in the Error intelligent label and history. Equivalent to executingbCode &amp;quot;MSG,&amp;quot; &amp;amp; text&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' OpenDigFile()&lt;br /&gt;
&lt;br /&gt;
Open a digitize point cloud file. User is prompted for filename.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' QueueDepth() '''as''' Byte&lt;br /&gt;
&lt;br /&gt;
Depth of planner queue is returned.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Random() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Returns a pseudo random number.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' RefCombination(Axes '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Performs simultaneous referencing on several axes. They are coded by ORing or addition of the following codes: X = 1, Y= 2, Z = 4, A = 8, B = 16 and C = 32.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ResetTHC()&lt;br /&gt;
&lt;br /&gt;
Resets the Torch Height Control code&lt;br /&gt;
&lt;br /&gt;
 '''Function''' RetractMode() '''as''' Integer&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to define this function please&lt;br /&gt;
&lt;br /&gt;
 '''Function''' Round() '''as''' Double&lt;br /&gt;
 '''Function''' roun() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
??? Anyone able to detail these functions please&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' RunFile ()&lt;br /&gt;
&lt;br /&gt;
Executes the currently loaded G-code file.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetCurrentTool(Tool '''as''' Byte)&lt;br /&gt;
&lt;br /&gt;
Will return currently selected tool&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetFeedRate(Rate '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets current FeedRate&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetSpinSpeed(SWord '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets current speed as by using the S word&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetMachZero(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Defines the current position of the specified axis to be machine zero.&lt;br /&gt;
 &lt;br /&gt;
 '''Sub''' SetIJAbs()&lt;br /&gt;
 '''Sub''' SetIJInc()&lt;br /&gt;
These will set the IJ mode to absolute and incremental respectively&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetIJMode(mode '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
This will set the IJ mode to Absolute if mode = 0 and Incremental if mode = 1&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetOutput (val '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
??? Can anyone define function of this routine please&lt;br /&gt;
&lt;br /&gt;
  '''Sub''' SetPulley( PulleyNo '''as''' integer)&lt;br /&gt;
&lt;br /&gt;
Sets a new value for the current pulley. PulleyNo should be in range 1 through 4&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetSafeZ(SafeZ '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
This will set the Safe_Z which should be in Machine coordinates&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SetScale(Axis '''as''' Integer, Scale '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
Sets the given scale factor for the given axis.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SingleVerify(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Do a &amp;quot;silent&amp;quot; verification run on one axis not reporting the outcome, just correcting the axis position.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' SingleVerifyReport(Axis '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Do a normal verification run on one axis reporting any discrepancy.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' StraightFeed(x '''as''' Double, y '''as''' Double, z '''as''' Double ,&lt;br /&gt;
 		a '''as''' Double, b '''as''' Double, c '''as''' Double)&lt;br /&gt;
&lt;br /&gt;
This will perform a feedrate move to X1,Y2,Z3…etc.&lt;br /&gt;
 &lt;br /&gt;
 '''Sub''' StraightTraverse(x '''as''' Double, y '''as''' Double, z '''as''' Double ,&lt;br /&gt;
 			a '''as''' Double, '''b''' as Double, '''c''' as Double)&lt;br /&gt;
Performs a rapid move to x, y, z etc.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' THCOn()&lt;br /&gt;
&lt;br /&gt;
Turn on THC control&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' THCOff()&lt;br /&gt;
&lt;br /&gt;
Turn off THC control.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' ToolLengthOffset() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
Gets the tool offset length currently in effect if any.&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tXStart() '''as''' Double&lt;br /&gt;
 '''Function''' tZStart() '''a'''s Double&lt;br /&gt;
 '''Function''' tEndX() '''as''' Double&lt;br /&gt;
 '''Function''' tEndZ() '''as''' Double&lt;br /&gt;
 '''Function''' tFirstPass() '''as''' Double&lt;br /&gt;
 '''Function''' InFeeds() '''as''' Double&lt;br /&gt;
 '''Function''' ThreadDepth() '''as''' Double&lt;br /&gt;
 '''Function''' GetMinPass() '''as''' Double&lt;br /&gt;
 '''Function''' tMinDepth() '''as''' Double&lt;br /&gt;
 '''Function''' tGetCutType() '''as''' Double&lt;br /&gt;
 '''Function''' tCutDepth() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tGetInfeedType() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tClearX() '''as''' Double&lt;br /&gt;
 '''Function''' tZClear() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Function''' tLead() '''as''' Double&lt;br /&gt;
 '''Function''' tSpring() '''as''' Byte&lt;br /&gt;
 '''Function''' tPasses() '''as''' Byte&lt;br /&gt;
 '''Function''' tChamfer() '''as''' Double&lt;br /&gt;
 '''Function''' tTaper() '''as''' Double&lt;br /&gt;
 '''Function''' tTapers() '''as''' Double&lt;br /&gt;
 '''Function''' tInFeed() '''as''' Double&lt;br /&gt;
 '''Function''' tDepthLastPass() '''as''' Double&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' tSetCutType (type '''as''' Integer)&lt;br /&gt;
 '''sub''' tSetInFeedType (type '''as''' Integer)&lt;br /&gt;
&lt;br /&gt;
Gets/Sets parameters defined in a G76 threading cycle call for use by the canned cycle Script.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' VerifyAxis(Silent '''as''' Boolean)&lt;br /&gt;
&lt;br /&gt;
Do a verification run. If silent is true, do not report the outcome, just correct the axis position.&lt;br /&gt;
&lt;br /&gt;
 '''Sub''' ZeroTHC ()&lt;br /&gt;
&lt;br /&gt;
ZeroTHC clears the THC correction value so new correction may be done within THC's limits.&lt;/div&gt;</description>
			<pubDate>Wed, 19 Oct 2005 10:59:55 GMT</pubDate>			<dc:creator>JAPrenticeUK</dc:creator>			<comments>http://www.machsupport.com/MachCustomizeWiki/index.php?title=Talk:Mach_specific_Subroutines/Functions_grouped_by_purpose</comments>		</item>
	</channel>
</rss>