Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;------------------------------------------------------------------------------
- ; File: acorn-universal.src
- ; Programmer: Scott Pratt
- ; Date: 13 Dec 2017
- ; Purpose: PLC Mill&Lathe Template for ACORN BOARD
- ; Requires: Requires CNC12
- ; Mods: 13 Dec 2017 RSP Added parms 831-846 for tool turret position
- ; definitions when using absolute turret position sensors
- ; 15 Nov 2017 RSP Added ATC functions, AuxKeyOutputs
- ; moved all "output" membits to 300's, all "input" membits are now
- ; in 200's. Existing 300 range membits moved to 500's
- ;
- ;------------------------------------------------------------------------------
- ;Parameters:
- ;SV_MACHINE_PARAMETER_1 is used to determine axis jog layout
- ;SV_MACHINE_PARAMETER_6 is ATC on/off. 1 = ATC on, 0 = ATC off.
- ;SV_MACHINE_PARAMETER_219 if non-zero value, start VCP with CNC12
- ;SV_MACHINE_PARAMETER_800 = DB25 Enables pin mapping
- ;SV_MACHINE_PARAMETER_801 = DB25 remapping for pin 1
- ;SV_MACHINE_PARAMETER_802 = DB25 remapping for pin 2
- ;SV_MACHINE_PARAMETER_803 = DB25 remapping for pin 3
- ;SV_MACHINE_PARAMETER_804 = DB25 remapping for pin 4
- ;SV_MACHINE_PARAMETER_805 = DB25 remapping for pin 5
- ;SV_MACHINE_PARAMETER_806 = DB25 remapping for pin 6
- ;SV_MACHINE_PARAMETER_807 = DB25 remapping for pin 7
- ;SV_MACHINE_PARAMETER_808 = DB25 remapping for pin 8
- ;SV_MACHINE_PARAMETER_809 = DB25 remapping for pin 9
- ;SV_MACHINE_PARAMETER_810 = DB25 remapping for pin 10
- ;SV_MACHINE_PARAMETER_811 = DB25 remapping for pin 11
- ;SV_MACHINE_PARAMETER_812 = DB25 remapping for pin 12
- ;SV_MACHINE_PARAMETER_813 = DB25 Used for Header/Or screw terminal 1 = DB25
- ;SV_MACHINE_PARAMETER_814-819 available for use.
- ;SV_MACHINE_PARAMETER_820 = 0 = Mill, 1 = Router, 2 = Plasma(future).
- ;SV_MACHINE_PARAMETER_830 = ATC Type, 0 = none. 1 = incremental, 2 = incremental w/sync,
- ; 4 = absolute 3bit, 8 = absolute 4bit, 16 = switched reverse
- ; 32 = self reversing
- ;
- ;For parms 831-846, For each closed sensor while at a particular turret
- ;position, add sensor values to obtain a decimal value to insert in the
- ;parameter for that turret position. ToolTurretPosBit1 +1, ToolTurretPosBit2 +2,
- ;ToolTurretPosBit3 +4, ToolTurretPosBit4 +8. example: If turret is at position 1 and
- ;ToolTurretPosBit1 and ToolTurretPosBit4 are closed (green), a value of 9 should be
- ;entered into parm 831.
- ;
- ;SV_MACHINE_PARAMETER_831 = Tool Turret Position 1
- ;SV_MACHINE_PARAMETER_832 = Tool Turret Position 2
- ;SV_MACHINE_PARAMETER_833 = Tool Turret Position 3
- ;SV_MACHINE_PARAMETER_834 = Tool Turret Position 4
- ;SV_MACHINE_PARAMETER_835 = Tool Turret Position 5
- ;SV_MACHINE_PARAMETER_836 = Tool Turret Position 6
- ;SV_MACHINE_PARAMETER_837 = Tool Turret Position 7
- ;SV_MACHINE_PARAMETER_838 = Tool Turret Position 8
- ;SV_MACHINE_PARAMETER_839 = Tool Turret Position 9
- ;SV_MACHINE_PARAMETER_840 = Tool Turret Position 10
- ;SV_MACHINE_PARAMETER_841 = Tool Turret Position 11
- ;SV_MACHINE_PARAMETER_842 = Tool Turret Position 12
- ;SV_MACHINE_PARAMETER_843 = Tool Turret Position 13
- ;SV_MACHINE_PARAMETER_844 = Tool Turret Position 14
- ;SV_MACHINE_PARAMETER_845 = Tool Turret Position 15
- ;SV_MACHINE_PARAMETER_846 = Tool Turret Position 16
- ;
- ;SV_MACHINE_PARAMETER_847 = TurretSettleTimer. Default = 750
- ;SV_MACHINE_PARAMETER_848 = TurretReverseTimer. Default = 1500
- ;
- ;SV_MACHINE_PARAMETER_849 = ToolChangeTimeOutTimer, default = 10 seconds
- ;
- ; SV_MACHINE_PARAMETER_911 used to invert inps 1-16 during limit override function
- ; If limit override function is not active, it reverts to it reverts to inverting
- ; inputs based on the value stored in the parameter file.
- ;
- ;SV_MACHINE_PARAMETER_949 - 959 still available
- ;SV_MACHINE_PARAMETER_941 = ToolTurretPosBit1 (1) input#
- ;SV_MACHINE_PARAMETER_942 = ToolTurretPosBit2 (2) input#
- ;SV_MACHINE_PARAMETER_943 = ToolTurretPosBit3 (4) input#
- ;SV_MACHINE_PARAMETER_944 = ToolTurretPosBit4 (8) input#
- ;SV_MACHINE_PARAMETER_945 =
- ;SV_MACHINE_PARAMETER_946 =
- ;SV_MACHINE_PARAMETER_947 =
- ;SV_MACHINE_PARAMETER_948 =
- ;
- ;SV_MACHINE_PARAMETER_960* = divider for charge pump freq (hz) 1,200,000 / parm960 = freq. if parm 960 = 96 12,500 hz
- ;SV_MACHINE_PARAMETER_961 = inversion for step/direction/enable
- ;SV_MACHINE_PARAMETER_962 = disable alt-j jog panel (use usb jog device)
- ;SV_MACHINE_PARAMETER_963 = Inputs set as limits for limit override function.
- ;If inp1 is defined as a limit then 963 = 1, if inp1 & inp2 are limits 963 = 3 etc..
- ;Wizard will only slave axis 4 to axis 1, 2 or 3 therefore only param 967 is effected
- ;by Wizard slaving. If user selects axis 4 to be slaved to axis AND axis 4 is to run
- ;in same direction as axis 1, 1 is entered in parm 967. To run axis 4 in opposite direction
- ;of axis 1, the wizard will enter a value of -1. A 2 slaves 4th to axis 2 etc... To slave
- ;1 to 4, a 4 would need to be entered into parm964 -this is NOT the same as slaving 4 to 1
- ;and can't be done in wizard.
- ;SV_MACHINE_PARAMETER_964 = Axis Pairing Axis1 if = 4 then this axis1 is paired to 4
- ;SV_MACHINE_PARAMETER_965 = Axis Pairing Axis2 if = 4 then this axis2 is paired to 4
- ;SV_MACHINE_PARAMETER_966 = Axis Pairing Axis3 if = 4 then this axis3 is paired to 4
- ;SV_MACHINE_PARAMETER_967 = Axis Pairing Axis4 if = 4 then this axis4 is paired to 4
- ;
- ;SV_MACHINE_PARAMETER_968* = Step rate max frequency. 0 = 200Khz., 3 == 400Khz
- ;SV_MACHINE_PARAMETER_969* = pulse width settings????????????????????????????????
- ;
- ;
- ;SV_MACHINE_PARAMETER_990 == 0 THEN SpindleBrakeTimer = 250 (milliseconds)
- ;DriveFaultTimer = SV_MACHINE_PARAMETER_991 (in milliseconds)
- ;ChuckTimer = SV_MACHINE_PARAMETER_992 (in milliseconds)
- ;SpindleLockTimer = SV_MACHINE_PARAMETER_993 (in milliseconds)
- ;PartChuteTimer = SV_MACHINE_PARAMETER_994 (in milliseconds)
- ;CutOffTimer = SV_MACHINE_PARAMETER_995 (in milliseconds)
- ;Inputs available
- ;FirstAxisHomeLimitOk
- ;FirstAxisHomeOk
- ;FirstAxisMinusLimitOk
- ;FirstAxisPlusLimitOk
- ;SecondAxisHomeLimitOk
- ;SecondAxisHomeOk
- ;SecondAxisMinusLimitOk
- ;SecondAxisPlusLimitOk
- ;ThirdAxisHomeLimitOk
- ;ThirdAxisHomeOk
- ;ThirdAxisMinusLimitOk
- ;ThirdAxisPlusLimitOk
- ;FourthAxisHomeLimitOk
- ;FourthAxisHomeOk
- ;FourthAxisMinusLimitOk
- ;FourthAxisPlusLimitOk
- ;DriveOk
- ;SpindleOk
- ;ProbeDetect
- ;ProbeTripped
- ;EStopOk
- ;ChuckIsOpen
- ;ChuckIsClosed
- ;SpindleLowRange
- ;SpindleMedRange
- ;SpindleHighRange
- ;LubeOk
- ;BackGear
- ;SpindleIsLocked
- ;CutOffIsDown
- ;PartChuteIsIn
- ;ToolTurretPosBit1
- ;ToolTurretPosBit2
- ;ToolTurretPosBit3
- ;ToolTurretPosBit4
- ;ToolTurretCounter
- ;ToolTurretSyncBit
- ;ToolTurretIsLocked
- ;ToolTurretIsUnlocked
- ;ToolIsClamped
- ;ToolIsUnclamped
- ;ToolTurretIsIn
- ;ToolTurretIsOut
- ;SpindleIsOriented
- ;HomeAll
- ;Outputs available
- ;NoFaultOut
- ;Lube
- ;SpindleBrakeRelease
- ;ChargePump
- ;SpinFWD
- ;SpinREV
- ;G540SpinRevOff
- ;G540SpinFwdOff
- ;DriveResetOut
- ;Flood
- ;Mist
- ;TurnClampOn M10, M11
- ;OpenChuck M14, M15
- ;CloseChuck M16, M17
- ;WorkLight
- ;VacuumOn M33, M34
- ;DustCollectionOn M35, M36
- ;Custom M37, M38
- ;OUTPUT1 M61, M81
- ;OUTPUT2 M62, M82
- ;OUTPUT3 M63, M83
- ;OUTPUT4 M64, M84
- ;OUTPUT5 M65, M85
- ;OUTPUT6 M66, M86
- ;OUTPUT7 M67, M87
- ;OUTPUT8 M68, M88
- ;PartChute M22, M23
- ;LockSpindle M19, M20
- ;CutOff M27, M28
- ;RotateToolTurret
- ;ReverseToolTurret
- ;Aux1Out
- ;Aux2Out
- ;Aux3Out
- ;Aux4Out
- ;Aux5Out
- ;Aux6Out
- ;Aux7Out
- ;Aux8Out
- ;Aux9Out
- ;Aux10Out
- ;Aux11Out
- ;Aux12Out
- ;Available configurable aux keys
- ;AUX 1-12
- ;Rapid Over
- ;SET XY0
- ;SET XZ0
- ;SET Z0
- ;SPIN LOW
- ;SPIN MED
- ;SPIN HIGH
- ;SPIN BRAKE
- ;RESET HOME
- ;DEFEAT LIMITS
- ;OPEN CHUCK
- ;CLOSE CHUCK
- ;PART CHUTE
- ;Axes 1&2 jog key selection is determined by whether mill or lathe software
- ;is running and setting of parameter 1
- ;StandardSpindleStage
- ;G540SpindleStage
- ;The Gecko G540 requires that the spindle outputs for Fwd and Rev are inverted
- ;------------------------------------------------------------------------------
- ; CONSTANT DEFINITIONS
- ;------------------------------------------------------------------------------
- PLC_EXECUTOR_FLT_MSG IS 257; (1+256*1)
- MIN_FROR_PCT IS 1
- SPINDLE_LOCK_TIMEOUT IS 1025;(2+256*4)
- RAPID_OVERRIDE_ENABLED IS 1282;(2+256*5)
- RAPID_OVERRIDE_DISABLED IS 1538;(2+256*6)
- CHUCK_TIMEOUT IS 1793;(1+256*7)
- PART_CHUTE_TIMEOUT IS 2049;(1+256*8)
- CUT_OFF_TIMEOUT IS 2305;(1+256*9)
- PLC_INFLT IS 5634;(2+256*22)
- PLC_OUTFLT IS 5890;(2+256*23)
- PLC_FLT_CLR IS 6146;(2+256*24)
- SPINDLE_FAULT_MSG IS 7681;(1+256*30)
- DRIVE_FAULT_MSG IS 7937;(1+256*31)
- RESET_CLEARED IS 8194;(2+256*32)
- RESET_DETECTED IS 8449;(1+256*33)
- PROBE_FAULT_MSG IS 8705;(1+256*34)
- KB_JOG_MSG IS 8962;(2+256*35)
- LUBE_FAULT_MSG IS 9217;(1+256*36)
- PROBE_JOG_TRIP_MSG IS 9474;(2+256*37)
- MIN_SPEED_MSG IS 9730;(2+256*38)
- SOFTWARE_EXIT_MSG IS 9985;(1+256*39)
- AUTO_COOL_MSG IS 12802;(2+256*50)
- MAN_COOL_MSG IS 13058;(2+256*51)
- ; IS 13314;(2+256*52)
- AUTO_SPINDLE_PROMPT IS 13570;(2+256*53)
- AUTO_COOLANT_PROMPT IS 13826;(2+256*54)
- MSG_CLEARED_MSG IS 25345;(1+256*99)
- BAD_MESSAGE_MSG IS 25602;(2+256*100)
- ; #region
- ;------------------------------------------------------------------------------
- ; INPUT DEFINITIONS
- ; Closed = 1 (green) Open = 0 (red)
- ;------------------------------------------------------------------------------
- Unused1 IS INP1 ;&*;
- Unused2 IS INP2 ;&*;
- Unused3 IS INP3 ;&*;
- Unused4 IS INP4 ;&*;
- Unused5 IS INP5 ;&*;
- Unused6 IS INP6 ;&*;
- Unused7 IS INP7 ;&*;
- EStopOk IS INP8 ;&*;
- ; #endregion
- ;------------------------------------------------------------------------------
- ; INP769 - INP784 encompass the MPU11 onboard input connections
- ; which are generally used for MPG and probing functions.
- ;------------------------------------------------------------------------------
- ;ProbeTripped IS INP769
- DSPProbe IS INP770
- ;ProbeDetect IS INP771
- ProbeAux IS INP772
- MPG_Inc_X_1 IS INP773
- MPG_Inc_X_10 IS INP774
- MPG_Inc_X_100 IS INP775
- MPG_AXIS_1 IS INP776
- MPG_AXIS_2 IS INP777
- MPG_AXIS_3 IS INP778
- MPG_AXIS_4 IS INP779
- MPG_AXIS_5 IS INP780
- MPG_AXIS_6 IS INP781
- MPG_AXIS_7 IS INP782
- MPG_AXIS_8 IS INP783
- ;------------------------------------------------------------------------------
- ; Jog panel are mapped to INP1057-INP1312. Alternatively,
- ; jog panel inputs can also be referenced as JPI1 through JPI256.
- ;------------------------------------------------------------------------------
- ; Definitions follow JOGBOARD layout top to bottom, left to right
- SpinOverPlusKey IS INP1057 ; Row 1 Column 1
- SpinAutoManKey IS INP1058 ; Row 1 Column 2
- Aux1Key IS INP1059 ; Row 1 Column 3
- Aux2Key IS INP1060 ; Row 1 Column 4
- Aux3Key IS INP1061 ; Row 1 Column 5
- SpinOver100Key IS INP1062 ; Row 2 Column 1
- SpinCWKey IS INP1063 ; Row 2 Column 2
- Aux4Key IS INP1064 ; Row 2 Column 3
- Aux5Key IS INP1065 ; Row 2 Column 4
- Aux6Key IS INP1066 ; Row 2 Column 5
- SpinOverMinusKey IS INP1067 ; Row 3 Column 1
- SpinCCWKey IS INP1068 ; Row 3 Column 2
- Aux7Key IS INP1069 ; Row 3 Column 3
- Aux8Key IS INP1070 ; Row 3 Column 4
- Aux9Key IS INP1071 ; Row 3 Column 5
- SpinStopKey IS INP1072 ; Row 4 Column 1
- SpinStartKey IS INP1073 ; Row 4 Column 2
- Aux10Key IS INP1074 ; Row 4 Column 3
- Aux11Key IS INP1075 ; Row 4 Column 4
- Aux12Key IS INP1076 ; Row 4 Column 5
- CoolAutoManKey IS INP1077 ; Row 5 Column 1
- CoolFloodKey IS INP1078 ; Row 5 Column 2
- CoolMistKey IS INP1079 ; Row 5 Column 3
- Aux13Key IS INP1080 ; Row 5 Column 4
- Aux14Key IS INP1081 ; Row 5 Column 5
- IncrContKey IS INP1082 ; Row 6 Column 1
- x1JogKey IS INP1083 ; Row 6 Column 2
- x10JogKey IS INP1084 ; Row 6 Column 3
- x100JogKey IS INP1085 ; Row 6 Column 4
- MPGKey IS INP1086 ; Row 6 Column 5
- Ax4PlusJogKey IS INP1087 ; Row 7 Column 1
- UnusedR7C2Key IS INP1088 ; Row 7 Column 2
- Ax2PlusJogKey IS INP1089 ; Row 7 Column 3
- UnusedR7C4Key IS INP1090 ; Row 7 Column 4
- Ax3PlusJogKey IS INP1091 ; Row 7 Column 5
- UnusedR8C1Key IS INP1092 ; Row 8 Column 1
- Ax1MinusJogKey IS INP1093 ; Row 8 Column 2
- FastSlowKey IS INP1094 ; Row 8 Column 3
- Ax1PlusJogKey IS INP1095 ; Row 8 Column 4
- UnusedR8C5Key IS INP1096 ; Row 8 Column 5
- Ax4MinusJogKey IS INP1097 ; Row 9 Column 1
- UnusedR9C2Key IS INP1098 ; Row 9 Column 2
- Ax2MinusJogKey IS INP1099 ; Row 9 Column 3
- UnusedR9C4Key IS INP1100 ; Row 9 Column 4
- Ax3MinusJogKey IS INP1101 ; Row 9 Column 5
- CycleCancelKey IS INP1102 ; Row 10 Column 1
- SingleBlockKey IS INP1103 ; Row 10 Column 2
- ToolCheckKey IS INP1104 ; Row 10 Column 3
- FeedHoldKey IS INP1105 ; Row 10 Column 4
- CycleStartKey IS INP1106 ; Row 10 Column 5
- ;------------------------------------------------------------------------------
- ; Feedrate Override Knob
- ;------------------------------------------------------------------------------
- JpFeedOrKnobBit0 IS INP1249
- JpFeedOrKnobBit1 IS INP1250
- JpFeedOrKnobBit2 IS INP1251
- JpFeedOrKnobBit3 IS INP1252
- JpFeedOrKnobBit4 IS INP1253
- JpFeedOrKnobBit5 IS INP1254
- JpFeedOrKnobBit6 IS INP1255
- JpFeedOrKnobBit7 IS INP1256
- JpFeedOrKnobBit8 IS INP1257 ; Current jog panels send first 8 bits
- JpFeedOrKnobBit9 IS INP1258 ; unused
- JpFeedOrKnobBit10 IS INP1259 ; unused
- JpFeedOrKnobBit11 IS INP1260 ; unused
- JpFeedOrKnobBit12 IS INP1261 ; unused
- JpFeedOrKnobBit13 IS INP1262 ; unused
- JpFeedOrKnobBit14 IS INP1263 ; unused
- JpFeedOrKnobBit15 IS INP1264 ; unused
- ;------------------------------------------------------------------------------
- ; Output Definitions
- ; Logic 1 = OUTPUT ON (Green), 0 = OUTPUT OFF (Red)
- ;------------------------------------------------------------------------------
- NoFaultOut IS OUT1 ;&*;
- Lube IS OUT2 ;&*;
- SpindleBrakeRelease IS OUT3 ;&*;
- SpinFWD IS OUT4 ;&*;
- SpinREV IS OUT5 ;&*;
- DriveResetOut IS OUT6 ;&*;
- Flood IS OUT7 ;&*;
- TurnClampOn IS OUT8 ;&*;
- ;NOTE ALL OUTPUTS on DB25 and H5 are rated 50ma max. They are pulled to ground (24V)
- ;when turned on. Relay Outputs 1&2 on H7 are rated at 10A 125VAC, 5A 30VDC
- ; These bits control the actual analog hardware output
- ; Output = 12bit (0-4095) 0-10VDC.
- SpinAnalogOutBit0 IS OUT17
- SpinAnalogOutBit1 IS OUT18
- SpinAnalogOutBit2 IS OUT19
- SpinAnalogOutBit3 IS OUT20
- SpinAnalogOutBit4 IS OUT21
- SpinAnalogOutBit5 IS OUT22
- SpinAnalogOutBit6 IS OUT23
- SpinAnalogOutBit7 IS OUT24
- SpinAnalogOutBit8 IS OUT25
- SpinAnalogOutBit9 IS OUT26
- SpinAnalogOutBit10 IS OUT27
- SpinAnalogOutBit11 IS OUT28
- MPG_LED_OUT IS OUT769
- ;------------------------------------------------------------------------------
- ; Jog Panel Output (LED) Definitions
- ; Jog Panel LED's can be addressed as OUT1057 - OUT1312
- ; OR
- ; JPO1 - JPO256
- ;------------------------------------------------------------------------------
- ; Definitions follow JOGBOARD layout top to bottom, left to right
- ;
- SpinOverPlusLED IS OUT1057; Row 1 Column 1
- SpinAutoModeLED IS OUT1058; Row 1 Column 2
- Aux1LED IS OUT1059; Row 1 Column 3
- Aux2LED IS OUT1060; Row 1 Column 4
- Aux3LED IS OUT1061; Row 1 Column 5
- SpinOver100LED IS OUT1062; Row 2 Column 1
- SpindleCWLED IS OUT1063; Row 2 Column 2
- Aux4LED IS OUT1064; Row 2 Column 3
- Aux5LED IS OUT1065; Row 2 Column 4
- Aux6LED IS OUT1066; Row 2 Column 5
- SpinOverMinusLED IS OUT1067; Row 3 Column 1
- SpindleCCWLED IS OUT1068; Row 3 Column 2
- Aux7LED IS OUT1069; Row 3 Column 3
- Aux8LED IS OUT1070; Row 3 Column 4
- Aux9LED IS OUT1071; Row 3 Column 5
- SpinStopLED IS OUT1072; Row 4 Column 1
- SpinStartLED IS OUT1073; Row 4 Column 2
- Aux10LED IS OUT1074; Row 4 Column 3
- Aux11LED IS OUT1075; Row 4 Column 4
- Aux12LED IS OUT1076; Row 4 Column 5
- CoolAutoModeLED IS OUT1077; Row 5 Column 1
- CoolFloodLED IS OUT1078; Row 5 Column 2
- CoolMistLED IS OUT1079; Row 5 Column 3
- Aux13LED IS OUT1080; Row 5 Column 4
- Aux14LED IS OUT1081; Row 5 Column 5
- IncrContLED IS OUT1082 ; Row 6 Column 1
- x1JogLED IS OUT1083 ; Row 6 Column 2
- x10JogLED IS OUT1084 ; Row 6 Column 3
- x100JogLED IS OUT1085 ; Row 6 Column 4
- MPGLED IS OUT1086 ; Row 6 Column 5
- Ax4PlusJogLED IS OUT1087 ; Row 7 Column 1
- UnusedR7C2LED IS OUT1088 ; Row 7 Column 2
- Ax2PlusJogLED IS OUT1089 ; Row 7 Column 3
- UnusedR7C4LED IS OUT1090 ; Row 7 Column 4
- Ax3PlusJogLED IS OUT1091 ; Row 7 Column 5
- UnusedR8C1LED IS OUT1092 ; Row 8 Column 1
- Ax1MinusJogLED IS OUT1093 ; Row 8 Column 2
- FastSlowLED IS OUT1094 ; Row 8 Column 3
- Ax1PlusJogLED IS OUT1095 ; Row 8 Column 4
- UnusedR8C5LED IS OUT1096 ; Row 8 Column 5
- Ax4MinusJogLED IS OUT1097 ; Row 9 Column 1
- UnusedR9C2LED IS OUT1098 ; Row 9 Column 2
- Ax2MinusJogLED IS OUT1099 ; Row 9 Column 3
- UnusedR9C4LED IS OUT1100 ; Row 9 Column 4
- Ax3MinusJogLED IS OUT1101 ; Row 9 Column 5
- CycleCancelLED IS OUT1102 ; Row 10 Column 1
- SingleBlockLED IS OUT1103 ; Row 10 Column 2
- ToolCheckLED IS OUT1105 ; Row 10 Column 3
- FeedHoldLED IS OUT1104 ; Row 10 Column 4
- ;------------------------------------------------------------------------------
- ; Memory Bit Definitions
- ;------------------------------------------------------------------------------
- AtcPresent_M IS MEM1
- AtcIsAbsolute_M IS MEM2
- AtcIsIncremental_M IS MEM3
- AtcReversesToLock_M IS MEM4
- AtcIsGang_M IS MEM5
- AtcIsGrayCode3_M IS MEM6
- AtcIsGrayCode4_M IS MEM7
- AtcIsBidirectional_M IS MEM8
- Input1_IsLimit IS MEM140
- Input2_IsLimit IS MEM141
- Input3_IsLimit IS MEM142
- Input4_IsLimit IS MEM143
- Input5_IsLimit IS MEM144
- Input6_IsLimit IS MEM145
- Input7_IsLimit IS MEM146
- Input8_IsLimit IS MEM147
- WTF_Flag IS MEM148
- LimitOverrideEnabled IS MEM149
- JogKeyPressed_M IS MEM150
- SpindleForward_M IS MEM157
- SpindleReverse_M IS MEM158
- SpindleDisable_M IS MEM159
- True IS MEM161
- SpinRangeReversed_M IS MEM162
- SpindleDirection_M IS MEM163
- SpindlePause_M IS MEM164
- LimitTripped_M IS MEM165
- SpinStart_M IS MEM166
- SpinStop_M IS MEM167
- SpindleEnableOut_M IS MEM168
- SpindleDirectionOut_M IS MEM169
- ProbeMsgSent_M IS MEM170
- SpindleBrakeDisabled_M IS MEM171
- ;Used by Wizard to assign/unassigne when I/O is assigned
- ;If an input or output label has been assigned a label below, the Wizard will
- ;add a semi-colon in front of the matching to comment out the mem bit
- ;assignment. If the label has not been used, a the semi-colon is removed and a
- ;mem assigned to the unused I/O label
- FirstAxisHomeLimitOk IS MEM201 ;&*;
- FirstAxisMinusLimitOk IS MEM202 ;&*;
- FirstAxisPlusLimitOk IS MEM203 ;&*;
- FirstAxisHomeOk IS MEM204 ;&*;
- SecondAxisHomeLimitOk IS MEM205 ;&*;
- SecondAxisHomeOk IS MEM206 ;&*;
- SecondAxisMinusLimitOk IS MEM207 ;&*;
- SecondAxisPlusLimitOk IS MEM208 ;&*;
- ThirdAxisHomeLimitOk IS MEM208 ;&*;
- ThirdAxisHomeOk IS MEM209 ;&*;
- ThirdAxisMinusLimitOk IS MEM210 ;&*;
- ThirdAxisPlusLimitOk IS MEM211 ;&*;
- FourthAxisHomeLimitOk IS MEM212 ;&*;
- FourthAxisHomeOk IS MEM213 ;&*;
- FourthAxisMinusLimitOk IS MEM214 ;&*;
- FourthAxisPlusLimitOk IS MEM215 ;&*;
- BackGear IS MEM216 ;&*;
- ProbeTripped IS MEM217 ;&*;
- ProbeDetect IS MEM218 ;&*;
- ;EStopOk IS MEM219 ;&*;
- DriveOk IS MEM220 ;&*;
- LubeOk IS MEM221 ;&*;
- ChuckIsOpen IS MEM222 ;&*;
- ChuckIsClosed IS MEM223 ;&*;
- SpindleOk IS MEM224 ;&*;
- SpindleLowRange IS MEM225 ;&*;
- SpindleMedRange IS MEM226 ;&*;
- SpindleHighRange IS MEM228 ;&*;
- SpinLowInputDisabled_M IS MEM227 ;&*;
- SpinMedInputDisabled_M IS MEM228 ;&*;
- SpinHighInputDisabled_M IS MEM229 ;&*;
- ChuckIsOpenIs_M IS MEM230
- ChuckIsClosedIs_M IS MEM231
- ChuckOpenCloseComplete IS MEM232
- SpindleIsLocked IS MEM233 ;&*;
- CutOffIsDown IS MEM234 ;&*;
- SpindleIsLockedIs_M IS MEM235
- PartChuteIsIn IS MEM236 ;&*;
- CutOffIsDownIs_M IS MEM237
- PartChuteIsInIs_M IS MEM238
- SpindleLockComplete IS MEM240
- CutOffComplete IS MEM241
- PartChuteComplete IS MEM242
- ToolTurretPosBit1 IS MEM243 ;&*;
- ToolTurretPosBit2 IS MEM244 ;&*;
- ToolTurretPosBit3 IS MEM245 ;&*;
- ToolTurretPosBit4 IS MEM246 ;&*;
- ToolTurretCounter IS MEM247 ;&*;
- ToolTurretSyncBit IS MEM248 ;&*;
- ToolTurretIsLocked IS MEM249 ;&*;
- ToolTurretIsUnlocked IS MEM250 ;&*;
- ToolIsClamped IS MEM251 ;&*;
- ToolIsUnclamped IS MEM252 ;&*;
- ToolTurretIsIn IS MEM253 ;&*;
- ToolTurretIsOut IS MEM254 ;&*;
- SpindleIsOriented IS MEM255 ;&*;
- ToolRackIsUp IS MEM256 ;&*;
- ToolRackIsDown IS MEM257 ;&*;
- PotIsUp IS MEM258 ;&*;
- PotIsDown IS MEM259 ;&*;
- HomeAll IS MEM260 ;&*;
- ;NoFaultOut IS MEM301 ;&*;
- ;Lube IS MEM302 ;&*;
- ;SpindleBrakeRelease IS MEM303 ;&*;
- ;SpinFWD IS MEM304 ;&*;
- ;SpinREV IS MEM305 ;&*;
- ;DriveResetOut IS MEM306 ;&*;
- ;Flood IS MEM307 ;&*;
- ;TurnClampOn IS MEM308 ;&*;
- G540SpinRevOff IS MEM309 ;&*;
- G540SpinFwdOff IS MEM310 ;&*;
- Mist IS MEM311 ;&*;
- VacuumOn IS MEM312 ;&*; M33, M34
- DustCollectionOn IS MEM313 ;&*; M35, M36
- Custom IS MEM314 ;&*; M37, M38
- OpenChuck IS MEM315 ;&*; M14, M15
- CloseChuck IS MEM316 ;&*; M16, M17
- WorkLight IS MEM317 ;&*;
- PartChute IS MEM318 ;&*; M22, M23
- LockSpindle IS MEM319 ;&*; M19, M20
- CutOff IS MEM320 ;&*; M27, M28
- OUTPUT1 IS MEM321 ;&*; M61, M81
- OUTPUT2 IS MEM322 ;&*; M62, M82
- OUTPUT3 IS MEM323 ;&*; M63, M83
- OUTPUT4 IS MEM324 ;&*; M64, M84
- OUTPUT5 IS MEM325 ;&*; M65, M85
- OUTPUT6 IS MEM326 ;&*; M66, M86
- OUTPUT7 IS MEM327 ;&*; M67, M87
- OUTPUT8 IS MEM328 ;&*; M68, M88
- RotateToolTurret IS MEM329 ;&*;
- ReverseToolTurret IS MEM330 ;&*;
- LockToolTurret IS MEM331 ;&*;
- UnlockToolTurret IS MEM332 ;&*;
- ClampTool IS MEM333 ;&*;
- UnclampTool IS MEM334 ;&*;
- MoveToolTurretIn IS MEM335 ;&*;
- MoveToolTurretOut IS MEM336 ;&*;
- OrientSpindle IS MEM337 ;&*;
- AxisBrakeRelease IS MEM338 ;&*;
- MovePotUp IS MEM339 ;&*;
- MovePotDown IS MEM340 ;&*;
- MoveToolRackUp IS MEM341 ;&*;
- MoveToolRackDown IS MEM342 ;&*;
- Aux1Out IS MEM343 ;&*;
- Aux2Out IS MEM344 ;&*;
- Aux3Out IS MEM345 ;&*;
- Aux4Out IS MEM346 ;&*;
- Aux5Out IS MEM347 ;&*;
- Aux6Out IS MEM348 ;&*;
- Aux7Out IS MEM349 ;&*;
- Aux8Out IS MEM350 ;&*;
- Aux9Out IS MEM351 ;&*;
- Aux10Out IS MEM352 ;&*;
- Aux11Out IS MEM353 ;&*;
- Aux12Out IS MEM354 ;&*;
- KbCycleStart_M IS MEM400 ; "alt" + "s"
- KbCycleCancel_M IS MEM401 ; escape
- KbToolCheck_M IS MEM402 ; "Ctrl" + "t"
- KbTogSingleBlock_M IS MEM403 ; "Ctrl" + "b"
- KbIncreaseJogInc_M IS MEM404 ; "Insert"
- KbDecreaseJogInc_M IS MEM405 ; "Delete"
- KbIncFeedOver_M IS MEM406 ; "ctrl" + "keyboard "+" ("=")
- KbDecFeedOver_M IS MEM407 ; "ctrl" + "keyboard "-"
- KbFeedOver100_M IS MEM450 ; "ctrl" + "\"
- KbTogIncContJog_M IS MEM408 ; "ctrl" + "i"
- KbTogFastSlowJog_M IS MEM409 ; "ctrl" + "f"
- KbJogAx1Plus_M IS MEM411 ; right arrow + KbJpActive_M
- KbJogAx1Minus_M IS MEM412 ; left arrow + KbJpActive_M
- KbJogAx2Plus_M IS MEM413 ; up arrow + KbJpActive_M
- KbJogAx2Minus_M IS MEM414 ; down arrow + KbJpActive_M
- KbJogAx3Plus_M IS MEM415 ; page up + KbJpActive_M
- KbJogAx3Minus_M IS MEM416 ; page down + KbJpActive_M
- KbJogAx4Plus_M IS MEM417 ; "home"+ KbJpActive_M
- KbJogAx4Minus_M IS MEM418 ; "end" + KbJpActive_M
- KbAux1Key_M IS MEM419 ; "ctrl" + "F1"
- KbAux2Key_M IS MEM420 ; "ctrl" + "F2"
- KbAux3Key_M IS MEM421 ; "ctrl" + "F3"
- KbAux4Key_M IS MEM422 ; "ctrl" + "F4"
- KbAux5Key_M IS MEM423 ; "ctrl" + "F5"
- KbAux6Key_M IS MEM424 ; "ctrl" + "F6"
- KbAux7Key_M IS MEM425 ; "ctrl" + "F7"
- KbAux8Key_M IS MEM426 ; "ctrl" + "F8"
- KbAux9Key_M IS MEM427 ; "ctrl" + "F9"
- KbAux10Key_M IS MEM428 ; "ctrl" + "F10"
- KbAux11Key_M IS MEM429 ; "ctrl" + "F11"
- KbAux12Key_M IS MEM430 ; "ctrl" + "F12"
- KbTogRapidOver_M IS MEM431 ; "ctrl" + "r"
- KbTogSpinAutoMan_M IS MEM432 ; "ctrl" + "a"
- KbSpinCW_M IS MEM433 ; "ctrl" + "c"
- KbSpinCCW_M IS MEM434 ; "ctrl" + "w"
- KbSpinStart_M IS MEM435 ; "ctrl" + "s"
- KbSpinStop_M IS MEM436 ; "ctrl" + "q"
- KbFloodOnOff_M IS MEM437 ; "ctrl" + "n"
- KbMistOnOff_M IS MEM451 ; "ctrl" + "k"
- KbTogCoolAutoMan_M IS MEM438 ; "ctrl" + "m"
- KbFeedHold_M IS MEM439 ; space bar
- KbIncSpinOver_M IS MEM440 ; "ctrl" + ">" (.)
- KbDecSpinOver_M IS MEM441 ; "ctrl" + "<" (,)
- KbSpinOver100_M IS MEM442 ; "ctrl" + "?" (/)
- DisableKbInput_M IS MEM501 ;If 1, disable kb jogging
- AllowKbInput_M IS MEM502 ;If 1, allow kb jogging
- JogOverOnly_M IS MEM503
- KbOverOnly_M IS MEM504
- UsingFeedrateKnob_M IS MEM505
- WaitingForSleepTimer_M IS MEM506
- PLCBus_Oe_M IS MEM507
- X1_M IS MEM508
- X10_M IS MEM509
- X100_M IS MEM510
- PLCExecutorFault_M IS MEM511
- SoftwareNotReady_M IS MEM512 ; 0 = okay, 1 = CNC12 not running/ready
- MPGManOffFlag_M IS MEM513
- Ax1PlusJogDisabled_M IS MEM514
- Ax1MinusJogDisabled_M IS MEM515
- Ax2PlusJogDisabled_M IS MEM516
- Ax2MinusJogDisabled_M IS MEM517
- Ax3MinusJogDisabled_M IS MEM518
- KbJpActive_M IS MEM519 ; aka SV_PC_VIRTUAL_JOGPANEL_ACTIVE
- MasterEnable_M IS MEM520 ; 1 = enabled (echo of SV_MASTER_ENABLE)
- OnAtPowerUp_M IS MEM521
- LastProbeMode_M IS MEM522
- JogModeSaved_M IS MEM523
- ActivateFeedHold_M IS MEM525 ; 0 = idle, 1 = trigger feed hold on
- ErrorFlag_M IS MEM526 ; 0 = okay, 1 = error (but not a fault)
- Stop_M IS MEM527 ; 0 = okay, 1 = fault (echo of SV_STOP)
- Stall_M IS MEM528 ; 0 = okay, 1 = stall (echo of SV_STALL_ERROR)
- LubeFault_M IS MEM529 ; 0 = okay, 1 = lube fault
- PLCFault_M IS MEM530 ; 0 = okay, 1 = PLC fault
- AxisFault_M IS MEM531 ; 0 = okay, 1 = drive or drive fiber problem
- DriveComFltIn_M IS MEM532 ; 0 = okay, 1 = incoming drive fiber problem
- DriveComFltOut_M IS MEM533 ; 0 = okay, 1 = outgoing drive fiber problem
- ProbeFault_M IS MEM534 ; 0 = okay, 1 = tried to start spindle w/probe
- JogProbeFault_M IS MEM535 ; 0 = okay, 1 = tripped probe while jogging
- SpindleFault_M IS MEM536 ; 0 = okay, 1 = spindle drive fault
- OtherFault_M IS MEM537
- DriveFault_M IS MEM538
- InvertXJogKeys_M IS MEM539
- SwapAxes_M IS MEM540
- ;Virtual Jog Panel MEM Bits
- SkinSpinOverPlus_M IS MEM701 ; Row 1 Column 1
- SkinSpinAutoMan_M IS MEM702 ; Row 1 Column 2
- SkinAux1_M IS MEM703 ; Row 1 Column 3
- SkinAux2_M IS MEM704 ; Row 1 Column 4
- SkinAux3_M IS MEM705 ; Row 1 Column 5
- SkinSpin100_M IS MEM706 ; Row 2 Column 1
- SkinSpinCW_M IS MEM707 ; Row 2 Column 2
- SkinAux4_M IS MEM708 ; Row 2 Column 3
- SkinAux5_M IS MEM709 ; Row 2 Column 4
- SkinAux6_M IS MEM710 ; Row 2 Column 5
- SkinSpinOverMinus_M IS MEM711 ; Row 3 Column 1
- SkinSpinCCW_M IS MEM712 ; Row 3 Column 2
- SkinAux7_M IS MEM713 ; Row 3 Column 3
- SkinAux8_M IS MEM714 ; Row 3 Column 4
- SkinAux9_M IS MEM715 ; Row 3 Column 5
- SkinSpinStop_M IS MEM716 ; Row 4 Column 1
- SkinSpinStart_M IS MEM717 ; Row 4 Column 2
- SkinAux10_M IS MEM718 ; Row 4 Column 3
- SkinAux11_M IS MEM719 ; Row 4 Column 4
- SkinAux12_M IS MEM720 ; Row 4 Column 5
- SkinCoolAutoMan_M IS MEM721 ; Row 5 Column 1
- SkinCoolFlood_M IS MEM722 ; Row 5 Column 2
- SkinCoolMist_M IS MEM723 ; Row 5 Column 3
- SkinAux13_M IS MEM724 ; Row 5 Column 4
- SkinAux14_M IS MEM725 ; Row 5 Column 5
- SkinIncCont_M IS MEM726 ; Row 6 Column 1
- SkinX1_M IS MEM727 ; Row 6 Column 2
- SkinX10_M IS MEM728 ; Row 6 Column 3
- SkinX100_M IS MEM729 ; Row 6 Column 4
- SkinMPG_M IS MEM730 ; Row 6 Column 5
- SkinJogAx4Plus_M IS MEM731 ; Row 7 Column 1
- SkinR7C2_M IS MEM732 ; Row 7 Column 2
- SkinJogAx2Plus_M IS MEM733 ; Row 7 Column 3
- SkinR7C4_M IS MEM734 ; Row 7 Column 4
- SkinJogAx3Plus_M IS MEM735 ; Row 7 Column 5
- SkinR8C1_M IS MEM736 ; Row 8 Column 1
- SkinJogAx1Minus_M IS MEM737 ; Row 8 Column 2
- SkinFastSlowJog_M IS MEM738 ; Row 8 Column 3
- SkinJogAx1Plus_M IS MEM739 ; Row 8 Column 4
- SkinR8C5_M IS MEM740 ; Row 8 Column 5
- SkinJogAx4Minus_M IS MEM741 ; Row 9 Column 1
- SkinR9C2_M IS MEM742 ; Row 9 Column 2
- SkinJogAx2Minus_M IS MEM743 ; Row 9 Column 3
- SkinR9C4_M IS MEM744 ; Row 9 Column 4
- SkinJogAx3Minus_M IS MEM745 ; Row 9 Column 5
- SkinCycleCancel_M IS MEM746 ; Row 10 Column 1
- SkinSingleBlock_M IS MEM747 ; Row 10 Column 2
- SkinToolCheck_M IS MEM748 ; Row 10 Column 3
- SkinFeedHold_M IS MEM749 ; Row 10 Column 4
- SkinCycleStart_M IS MEM750
- SkinResetOk_M IS MEM751
- SkinFeedOverMinus_M IS MEM752
- SkinFeedOver100 IS MEM753
- SkinFeedOverPlus_M IS MEM754
- KeepAlive_M IS MEM755
- OverrideRapidsEnabled_M IS MEM758
- OverrideRapidsDisabled_M IS MEM759
- VirtualJpRunning_M IS MEM760
- UsingVirtualOverride_M IS MEM761
- ResetSet_M IS MEM762
- FeedOverLT100 IS MEM763
- FeedOverEQ100 IS MEM764
- FeedOverGT100 IS MEM765
- CncAndPlcActive_M IS MEM780
- EStopPressed_M IS MEM793
- UsingKbOverride_M IS MEM794
- SetMem_M IS MEM795 ;Used for skinning
- RstMem_M IS MEM796 ;Used for skinning
- SetOut_M IS MEM797 ;Used for skinning
- RstOut_M IS MEM798 ;Used for skinning
- SpinBrakeMode_M IS MEM799
- Input1_IsInverted IS MEM801
- Input2_IsInverted IS MEM802
- Input3_IsInverted IS MEM803
- Input4_IsInverted IS MEM804
- Input5_IsInverted IS MEM805
- Input6_IsInverted IS MEM806
- Input7_IsInverted IS MEM807
- Input8_IsInverted IS MEM808
- SkinMem809 IS MEM809
- SkinMem810 IS MEM810
- SkinMem811 IS MEM811
- SkinMem812 IS MEM812
- SkinMem813 IS MEM813
- SkinMem814 IS MEM814
- SkinMem815 IS MEM815
- SkinMem816 IS MEM816
- SkinMem817 IS MEM817
- SkinMem818 IS MEM818
- SkinMem819 IS MEM819
- SkinMem820 IS MEM820
- SkinMem821 IS MEM821
- SkinMem822 IS MEM822
- SkinMem823 IS MEM823
- SkinMem824 IS MEM824
- SkinMem825 IS MEM825
- SkinMem826 IS MEM826
- SkinMem827 IS MEM827
- SkinMem828 IS MEM828
- SkinMem829 IS MEM829
- SkinMem830 IS MEM830
- SkinMem831 IS MEM831
- SkinMem832 IS MEM832
- SkinMem833 IS MEM833
- SkinMem834 IS MEM834
- SkinMem835 IS MEM835
- SkinMem836 IS MEM836
- SkinMem837 IS MEM837
- SkinMem838 IS MEM838
- SkinMem839 IS MEM839
- SkinMem840 IS MEM840
- SkinMem841 IS MEM841
- SkinMem842 IS MEM842
- SkinMem843 IS MEM843
- SkinMem844 IS MEM844
- SkinMem845 IS MEM845
- SkinMem846 IS MEM846
- SkinMem847 IS MEM847
- SkinMem848 IS MEM848
- SkinMem849 IS MEM849
- SkinMem850 IS MEM850
- SkinMem851 IS MEM851
- SkinMem852 IS MEM852
- SkinMem853 IS MEM853
- SkinMem854 IS MEM854
- SkinMem855 IS MEM855
- SkinMem856 IS MEM856
- SkinMem857 IS MEM857
- SkinMem858 IS MEM858
- SkinMem859 IS MEM859
- SkinMem860 IS MEM860
- SkinMem861 IS MEM861
- SkinMem862 IS MEM862
- SkinMem863 IS MEM863
- SkinMem864 IS MEM864
- SkinMem865 IS MEM865
- SkinMem880 IS MEM880
- SkinMem893 IS MEM893
- SkinMem894 IS MEM894
- SkinMem895 IS MEM895
- SkinMem896 IS MEM896
- SkinMem897 IS MEM897
- SkinMem898 IS MEM898
- SkinMem899 IS MEM899
- ;------------------------------------------------------------------------------
- ; ---------SYSTEM VARIABLES--------
- ;
- ; For a complete list of System Variables and their functions, please see the
- ; MPU11 PLC manual.
- ;------------------------------------------------------------------------------
- ; MPU11 based systems provide the PLC with the ability to read/write to a
- ; limited number of "System Variables". While the use of System Variables
- ; greatly expands PLC functionality, it comes with additional reponsibility on
- ; the part of the PLC programmer. Functionality that was once implemented as
- ; default behavior such as jogging, spindle speed, feedrate override, spindle
- ; gear ranges etc... is now implemented through System Variables in the PLC
- ; program. It is now the sole responsibilty of the PLC program to provide a
- ; method to jog an axis, override the spindle speed or feedrates or even map a
- ; jog panel keypress to a specific function. Pressing a jog key or Aux key
- ; won't DO anything unless the PLC assigns an action to the keypress. All jog
- ; panel functions MUST be explicitly implemented in the PLC program.
- ; ----IMPORTANT----
- ; Menu navigation in the CNC software requires that the escape key or Cycle
- ; Cancel key is used to back out of menus and screens. You must use the PLC
- ; program to map a jog panel key and/or a keyboard key to the Cycle Cancel
- ; System Variable (SV_PLC_FUNCTION_1 has been declared as "DoCycleCancel")
- ; in order to use the control. For example:
- ; The following lines map the escape key and Jog Panel Cycle Cancel key to
- ; produce a Cycle Cancel event:
- ; 1. Map escape keypress event to identifier to describe what key was pressed.
- ; Kb_Escape IS SV_PC_Keyboard_Key_1
- ; 2. Map MEM bit to identifier that describes what the keypress is used for.
- ; KbCycleCancel_M IS MEM401
- ; 3. Logic to "SET" KbCycleCancel_M anytime the escape key is pressed.
- ; IF Kb_Escape THEN(KbCycleCancel_M)
- ; 4. Logic to cancel job if the escape key or cycle cancel key is pressed.
- ; IF (CycleCancelKey || KbCycleCancel_M) && SV_PROGRAM_RUNNING
- ; THEN (DoCycleCancel)
- ; Some of the information made available to the PLC through System Variables:
- ; 1. Encoder positions: SV_MPU11_ABS_POS_1 - SV_MPU11_ABS_POS_7
- ; 2. Parameter values: SV_MACHINE_PARAMETER_1 - SV_MACHINE_PARAMETER_999
- ; 3. Spindle Speed command from PC: SV_PC_DAC_SPINDLE_SPEED
- ; 4. PC Keyboard Keypress: SV_PC_FUNCTION_1 - SV_PC_FUNCTION_127
- ; 5. ...
- ; Some of the functionality controlled by the PLC through System Variables:
- ; 1. Axis jogging: SV_PLC_FUNCTION_12 - SV_PLC_FUNCTION_23
- ; 2. "Final" Spindle speed reported to PC: SV_PLC_SPINDLE_SPEED -provides nearly
- ; unlimited gear ranges
- ; 3. Feedrate (through override knob): SV_PLC_FeedrateKnob_W
- ; 4. Custom debounce, invert/force inputs: SV_PLC_DEBOUNCE_1-SV_PLC_DEBOUNCE_64
- ; 5. ...
- ;-------------------------------------------------------------------------------
- ; PLC Input manipulation - SV_PLC_DEBOUNCE_1 - SV_PLC_DEBOUNCE_64
- ; The System Variables in this section are used to modify the characteristics
- ; of PLC inputs 1-240. Each input can be inverted, forced or assigned a custom
- ; debounce time.
- ;-----------------------------Debounce Times-----------------------------------
- ; SV_PLC_DEBOUNCE_61 - SV_PLC_DEBOUNCE_64 are used to define up to seven custom
- ; debounce times which can be selected for each input.
- ; The 32 bit integer System Variables SV_PLC_DEBOUNCE_61 - SV_PLC_DEBOUNCE_64,
- ; are broken up into 8, 16 bit words, only 7 of which are used. The first word,
- ; the 16 MSB of SV_PLC_DEBOUNCE_61 is unused. Each 16 bit word can be used to
- ; store a debounce time of between 0-32767 (the MSB of each word is unused).
- ; Debounce times are in increments of 62.5 usecs which provides debounce times
- ; of up to ~2 secs.
- ; SV_PLC_DEBOUNCE_61
- ; Unused:Bits 0-15 (Selection 0)
- ; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- ; Debounce Time Selection #1
- ; MSB 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- ; SV_PLC_DEBOUNCE_62
- ; Debounce Time Selection #2
- ; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- ; Debounce Time Selection #3
- ; MSB 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- ;------------------------Configuring Input Behavior---------------------------
- ; Each System Variable from SV_PLC_DEBOUNCE_1 - SV_PLC_DEBOUNCE_60 is a 32 bit
- ; integer word broken up into 4 bit words to control the behavior of 4 inputs.
- ; Inputs 1-4 are configured using SV_PLC_DEBOUNCE_1, inputs 5-8 are handled
- ; using SV_PLC_DEBOUNCE_2 and so on to SV_PLC_DEBOUNCE_60 which controls inputs
- ; 237-240
- ; As mentioned above, each 32 bit word defines the charactersitics for 4 inputs.
- ; SV_PLC_DEBOUNCE_1 defines the characteristics of INP1, INP2, INP3 & INP4 and
- ; so on through SV_PLC_DEBOUNCE_60 which handles INP237, INP238, INP239&INP240.
- ; The behavior of an input is set as follows:
- ; Five new operators have been introduced to simplify bit operations:
- ; BITSET, BITRST, BITTST, LSHIFT & RSHIFT. Below we will use BITSET to
- ; invert an input. This is convenient to use when a device is normally
- ; open and the logic is written for a normally closed device. Inverting
- ; the input allows to reuse the existing logic rather than rewrite it.
- ; BITSET and BITRST can not operate directly on SV_PLC_DEBOUNCE_# system
- ; variables, they can only operate on W32 variables. In order to use BITSET and
- ; BITRST to manipulate the debounce variables you'll have to perform all
- ; operations on a w32 first:
- ; Declare a W32:
- ; Inputs_9_12_W IS W1
- ; use BITSET or BITRST
- ; if 1 == 1 THEN BITSET Inputs_9_12_W 14 ;invert INP10 (bit14)
- ; Set Debounce system variable = to W32 variable
- ; IF 1 == 1 THEN SV_PLC_DEBOUNCE_3 = Inputs_9_12_W
- ;---------------------System Variable = SV_PLC_DEBOUNCE_1---------------------
- ; Inp4 = bits 31-24 Inp3 = bits 23-16
- ; MSB 31 30 29 28 27 26 25 24| 23 22 21 20 19 18 17 16
- ; Inp2 = bits 15-8 Inp1 = bits 7-0
- ; 15 14 13 12 11 10 9 8| 7 6 5 4 3 2 1 0LSB
- ; Each 8 bit word from above
- ; MSB 7 6 5 4 3 2 1 0 LSB
- ; Force Invert Spare Spare Spare Debounce Select (7)
- ; selects 1 of 7
- ; debounce times
- ; (zero is invalid)
- ; Force (bit 7): Set this bit to force the input to a 1* (closed)
- ; Invert(bit 6): Set this to invert an input
- ; Spare(bit5-3): Not used
- ; Debounce(bit 0-2): Selects one of the 7 preset debounce times defined in
- ; SV_PLC_DEBOUNCE_61 - SV_PLC_DEBOUNCE_64
- ;
- ; *If you wish to force an input to 0, set the both invert AND force bits
- ; for the input.
- ;------------------------------------------------------------------------------
- ; PLC Jog Panel input manipulation - The System Variables in this section are
- ; used to modify the characteristics of the Jog Panel keys. The jog panel keys
- ; can be configured in the same manner as the PLC inputs and use debounce times
- ; as selected/set in SV_PLC_DEBOUNCE_61 - SV_PLC_DEBOUNCE_64.
- ;------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------
- ; System variables: Jog Panel Functions
- ;------------------------------------------------------------------------------
- ; Jog panel functions
- ;Invalid IS SV_PLC_FUNCTION_0
- DoCycleCancel IS SV_PLC_FUNCTION_1
- DoCycleStart IS SV_PLC_FUNCTION_2
- DoToolCheck IS SV_PLC_FUNCTION_3
- SelectSingleBlock IS SV_PLC_FUNCTION_4
- SelectX1JogInc IS SV_PLC_FUNCTION_5
- SelectX10JogInc IS SV_PLC_FUNCTION_6
- SelectX100JogInc IS SV_PLC_FUNCTION_7
- SelectUserJogInc IS SV_PLC_FUNCTION_8
- SelectIncContJog IS SV_PLC_FUNCTION_9
- SelectFastSlowJog IS SV_PLC_FUNCTION_10
- SelectMpgMode IS SV_PLC_FUNCTION_11
- DoAx1PlusJog IS SV_PLC_FUNCTION_12
- DoAx1MinusJog IS SV_PLC_FUNCTION_13
- DoAx2PlusJog IS SV_PLC_FUNCTION_14
- DoAx2MinusJog IS SV_PLC_FUNCTION_15
- DoAx3PlusJog IS SV_PLC_FUNCTION_16
- DoAx3MinusJog IS SV_PLC_FUNCTION_17
- DoAx4PlusJog IS SV_PLC_FUNCTION_18
- DoAx4MinusJog IS SV_PLC_FUNCTION_19
- DoAx5PlusJog IS SV_PLC_FUNCTION_20
- DoAx5MinusJog IS SV_PLC_FUNCTION_21
- DoAx6PlusJog IS SV_PLC_FUNCTION_22
- DoAx6MinusJog IS SV_PLC_FUNCTION_23
- DoAux1Key IS SV_PLC_FUNCTION_24
- DoAux2Key IS SV_PLC_FUNCTION_25
- DoAux3Key IS SV_PLC_FUNCTION_26
- DoAux4Key IS SV_PLC_FUNCTION_27
- DoAux5Key IS SV_PLC_FUNCTION_28
- DoAux6Key IS SV_PLC_FUNCTION_29
- DoAux7Key IS SV_PLC_FUNCTION_30
- DoAux8Key IS SV_PLC_FUNCTION_31
- DoAux9Key IS SV_PLC_FUNCTION_32
- DoAux10Key IS SV_PLC_FUNCTION_33
- SelectRapidOverride IS SV_PLC_FUNCTION_34
- SelectManAutoSpindle IS SV_PLC_FUNCTION_35
- DoSpindleStart IS SV_PLC_FUNCTION_37
- DoSpindleStop IS SV_PLC_FUNCTION_38
- DoAux11Key IS SV_PLC_FUNCTION_39
- DoAux12Key IS SV_PLC_FUNCTION_40
- ;SelectCoolantMan IS SV_PLC_FUNCTION_41 ;deprecated
- ;SelectCoolantAuto IS SV_PLC_FUNCTION_42 ;deprecated
- SelectCoolantFlood IS SV_PLC_FUNCTION_43
- SelectCoolantMist IS SV_PLC_FUNCTION_44
- DoFeedHold IS SV_PLC_FUNCTION_45
- SelectSpindleCCW IS SV_PLC_FUNCTION_98
- SelectSpindleCW IS SV_PLC_FUNCTION_99
- SelectCoolAutoMan IS SV_PLC_FUNCTION_104
- DoIncreaseSpindleOR IS SV_PLC_FUNCTION_106
- DoDecreaseSpindleOR IS SV_PLC_FUNCTION_107
- SelectSpinOR100 IS SV_PLC_FUNCTION_108
- ;------------------------------------------------------------------------------
- ; System variables: Keyboard jogging functions
- ;------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------
- ; Keyboard Jogging Keys - The System Variables in this section inform the PLC
- ; that a PC keyboard keypress has occured. Keep in mind that some key presses
- ; only come down while the keyboard jogging screen is enabled (alt-j) and that
- ; NONE of these keys not perform ANY default actions unless programmed to do so.
- ; The assignments provided below are for reference only. For an example of
- ; mapping a keyboard key press to an MPU11 action, see the logic assigned to
- ; KbCycleStart_M or KbCycleCancel_M.
- ;
- ;Note:
- ; Keypresses are sent down as individual keys. It is the responsibility of
- ; the PLC programmer to insure that a keypress is only acted on at the
- ; appropriate times.
- ; The "SV_PC_VIRTUAL_JOGPANEL_ACTIVE" system variable can be used to prevent
- ; a keypress form being acted on unless the keyboard jog screen is being
- ; displayed. NOTE The above,29 character sys variable is mapped to
- ; KbJpActive_M (MEM80) to make it a "little" shorter......
- ;------------------------------------------------------------------------------
- Kb_a IS SV_PC_KEYBOARD_KEY_60
- Kb_b IS SV_PC_KEYBOARD_KEY_79
- Kb_c IS SV_PC_KEYBOARD_KEY_77
- Kb_d IS SV_PC_KEYBOARD_KEY_62
- Kb_e IS SV_PC_KEYBOARD_KEY_41
- Kb_f IS SV_PC_KEYBOARD_KEY_63
- Kb_g IS SV_PC_KEYBOARD_KEY_64
- Kb_h IS SV_PC_KEYBOARD_KEY_65
- Kb_i IS SV_PC_KEYBOARD_KEY_46
- Kb_j IS SV_PC_KEYBOARD_KEY_66
- Kb_k IS SV_PC_KEYBOARD_KEY_67
- Kb_l IS SV_PC_KEYBOARD_KEY_68
- Kb_m IS SV_PC_KEYBOARD_KEY_81
- Kb_n IS SV_PC_KEYBOARD_KEY_80
- Kb_o IS SV_PC_KEYBOARD_KEY_47
- Kb_p IS SV_PC_KEYBOARD_KEY_48
- Kb_q IS SV_PC_KEYBOARD_KEY_39
- Kb_r IS SV_PC_KEYBOARD_KEY_42
- Kb_s IS SV_PC_KEYBOARD_KEY_61
- Kb_t IS SV_PC_KEYBOARD_KEY_43
- Kb_u IS SV_PC_KEYBOARD_KEY_45
- Kb_v IS SV_PC_KEYBOARD_KEY_78
- Kb_w IS SV_PC_KEYBOARD_KEY_40
- Kb_x IS SV_PC_KEYBOARD_KEY_76
- Kb_y IS SV_PC_KEYBOARD_KEY_44
- Kb_z IS SV_PC_KEYBOARD_KEY_75
- Kb_spacebar IS SV_PC_KEYBOARD_KEY_95
- Kb_L_Shift IS SV_PC_KEYBOARD_KEY_74
- Kb_R_Shift IS SV_PC_KEYBOARD_KEY_85
- Kb_L_Alt IS SV_PC_KEYBOARD_KEY_94
- Kb_R_Alt IS SV_PC_KEYBOARD_KEY_96
- Kb_L_Ctrl IS SV_PC_KEYBOARD_KEY_92
- Kb_R_Ctrl IS SV_PC_KEYBOARD_KEY_99
- Kb_Ins IS SV_PC_KEYBOARD_KEY_31
- Kb_Home IS SV_PC_KEYBOARD_KEY_32
- Kb_End IS SV_PC_KEYBOARD_KEY_53
- Kb_PgDown IS SV_PC_KEYBOARD_KEY_54
- Kb_PgUp IS SV_PC_KEYBOARD_KEY_33
- Kb_Del IS SV_PC_KEYBOARD_KEY_52
- Kb_Back IS SV_PC_KEYBOARD_KEY_30
- Kb_Tab IS SV_PC_KEYBOARD_KEY_38
- Kb_Up IS SV_PC_KEYBOARD_KEY_87
- Kb_Down IS SV_PC_KEYBOARD_KEY_101
- Kb_Left IS SV_PC_KEYBOARD_KEY_100
- Kb_Right IS SV_PC_KEYBOARD_KEY_102
- Kb_Escape IS SV_PC_KEYBOARD_KEY_1 ;Performs Cycle Cancel
- Kb_F1 IS SV_PC_KEYBOARD_KEY_2
- Kb_F2 IS SV_PC_KEYBOARD_KEY_3
- Kb_F3 IS SV_PC_KEYBOARD_KEY_4
- Kb_F4 IS SV_PC_KEYBOARD_KEY_5
- Kb_F5 IS SV_PC_KEYBOARD_KEY_6
- Kb_F6 IS SV_PC_KEYBOARD_KEY_7
- Kb_F7 IS SV_PC_KEYBOARD_KEY_8
- Kb_F8 IS SV_PC_KEYBOARD_KEY_9
- Kb_F9 IS SV_PC_KEYBOARD_KEY_10
- Kb_F10 IS SV_PC_KEYBOARD_KEY_11
- Kb_F11 IS SV_PC_KEYBOARD_KEY_12
- Kb_F12 IS SV_PC_KEYBOARD_KEY_13
- Kb_Prt_Scrn IS SV_PC_KEYBOARD_KEY_14
- Kb_Scrl_Lck IS SV_PC_KEYBOARD_KEY_15
- Kb_Break IS SV_PC_KEYBOARD_KEY_16
- Kb_Num_Lock IS SV_PC_KEYBOARD_KEY_34
- Kb_1 IS SV_PC_KEYBOARD_KEY_18
- Kb_2 IS SV_PC_KEYBOARD_KEY_19
- Kb_3 IS SV_PC_KEYBOARD_KEY_20
- Kb_4 IS SV_PC_KEYBOARD_KEY_21
- Kb_5 IS SV_PC_KEYBOARD_KEY_22
- Kb_6 IS SV_PC_KEYBOARD_KEY_23
- Kb_7 IS SV_PC_KEYBOARD_KEY_24
- Kb_8 IS SV_PC_KEYBOARD_KEY_25
- Kb_9 IS SV_PC_KEYBOARD_KEY_26
- Kb_0 IS SV_PC_KEYBOARD_KEY_27
- Kb_10_Key_Div IS SV_PC_KEYBOARD_KEY_35
- Kb_10_Key_Mlt IS SV_PC_KEYBOARD_KEY_36
- Kb_10_Key_Sub IS SV_PC_KEYBOARD_KEY_37
- Kb_10_Key_0 IS SV_PC_KEYBOARD_KEY_103
- Kb_10_Key_1 IS SV_PC_KEYBOARD_KEY_88
- Kb_10_Key_2 IS SV_PC_KEYBOARD_KEY_89
- Kb_10_Key_3 IS SV_PC_KEYBOARD_KEY_90
- Kb_10_Key_4 IS SV_PC_KEYBOARD_KEY_71
- Kb_10_Key_5 IS SV_PC_KEYBOARD_KEY_72
- Kb_10_Key_6 IS SV_PC_KEYBOARD_KEY_73
- Kb_10_Key_7 IS SV_PC_KEYBOARD_KEY_55
- Kb_10_Key_8 IS SV_PC_KEYBOARD_KEY_56
- Kb_10_Key_9 IS SV_PC_KEYBOARD_KEY_57
- Kb_10_Key_Dec_Pt IS SV_PC_KEYBOARD_KEY_104
- Kb_10_Key_Plus IS SV_PC_KEYBOARD_KEY_58
- Kb_Num_Enter IS SV_PC_KEYBOARD_KEY_91
- Kb_L_Sq_Bracket IS SV_PC_KEYBOARD_KEY_49
- Kb_R_Sq_Bracket IS SV_PC_KEYBOARD_KEY_50
- Kb_Hyphen IS SV_PC_KEYBOARD_KEY_28
- Kb_Equals IS SV_PC_KEYBOARD_KEY_29
- Kb_Comma IS SV_PC_KEYBOARD_KEY_82
- Kb_Period IS SV_PC_KEYBOARD_KEY_83
- Kb_Slash IS SV_PC_KEYBOARD_KEY_84
- Kb_Backslash IS SV_PC_KEYBOARD_KEY_86
- ;------------------------------------------------------------------------------
- ; M functions - The System Variables in this section inform the
- ; PLC that an M function has been requested.
- ;------------------------------------------------------------------------------
- M3 IS SV_M94_M95_1 ;(Spindle CW)
- M4 IS SV_M94_M95_2 ;(Spindle CCW)
- M8 IS SV_M94_M95_3 ;(Flood On)
- ; IS SV_M94_M95_4 ;
- M7 IS SV_M94_M95_5 ;(Mist)
- ; IS SV_M94_M95_6 ;
- ; IS SV_M94_M95_7 ;
- ; IS SV_M94_M95_8 ;
- ; IS SV_M94_M95_9 ;
- M10 IS SV_M94_M95_10; SET TurnClampOn, M11 RST TurnClampOn
- ; IS SV_M94_M95_11;
- ; IS SV_M94_M95_12;
- ; IS SV_M94_M95_13;
- M14 IS SV_M94_M95_14; Open Chuck
- ; IS SV_M94_M95_15; Turn off Open Chuck
- M16 IS SV_M94_M95_16; Close chuck
- ; IS SV_M94_M95_17; Turn off Close Chuck
- M19 IS SV_M94_M95_19; LockSpindle
- ; IS SV_M94_M95_20; Turn off LockSppindle
- M22 IS SV_M94_M95_22; Turn on PartChute, M23 off
- ; IS SV_M94_M95_23; Turn off
- M27 IS SV_M94_M95_27; Turn on Cutoff, M28 off
- ; IS SV_M94_M95_28; Turn off
- M33 IS SV_M94_M95_33; SET VacuumOn, M34 RST VacuumOn
- M35 IS SV_M94_M95_35; SET DustCollectionOn, M36 RST DustCollectionOn
- M37 IS SV_M94_M95_37; SET Custom, M38 RST Custom
- M41 IS SV_M94_M95_41 ;(Spindle Low Range)
- M42 IS SV_M94_M95_42 ;(Spindle Medium Low Range)
- M43 IS SV_M94_M95_43 ;(Spindle Medium High Range)
- M61 IS SV_M94_M95_61; OUTPUT1 (NOT the same as OUT1)
- M62 IS SV_M94_M95_62; OUTPUT2 (NOT the same as OUT2)
- M63 IS SV_M94_M95_63; OUTPUT3 (NOT the same as OUT3)
- M64 IS SV_M94_M95_64; OUTPUT4 (NOT the same as OUT4)
- M65 IS SV_M94_M95_65; OUTPUT5 (NOT the same as OUT5)
- M66 IS SV_M94_M95_66; OUTPUT6 (NOT the same as OUT6)
- M67 IS SV_M94_M95_67; OUTPUT7 (NOT the same as OUT7)
- M68 IS SV_M94_M95_68; OUTPUT8 (NOT the same as OUT8)
- ;TurnClampOn M10, M11
- ;OpenChuck M14, M15
- ;CloseChuck M16, M17
- ;LockSpindle M19, M20
- ;PartChute M22, M23
- ;CutOff M27, M28
- ;WorkLight
- ;VacuumOn M33, M34
- ;DustCollectionOn M35, M36
- ;Custom M37, M38
- ;OUTPUT1 M61, M81
- ;OUTPUT2 M62, M82
- ;OUTPUT3 M63, M83
- ;OUTPUT4 M64, M84
- ;OUTPUT5 M65, M85
- ;OUTPUT6 M66, M86
- ;OUTPUT7 M67, M87
- ;OUTPUT8 M68, M88
- ;------------------------------------------------------------------------------
- ; Word Definitions
- ;------------------------------------------------------------------------------
- SkinFeedOverride_W1 IS W1
- SkinningInt2_W IS W2
- SkinningInt3_W IS W3
- SkinningInt4_W IS W4
- SkinningInt5_W IS W5
- SkinningInt6_W IS W6
- SkinningInt7_W IS W7
- SkinningInt8_W IS W8
- SkinningInt9_W IS W9
- SkinningInt10_W IS W10
- SkinningInt11_W IS W11
- SkinningInt12_W IS W12
- TwelveBitSpeed_W IS W13
- FaultMsg_W IS W14
- ErrorMsg_W IS W15
- InfoMsg_W IS W16
- Inputs1_16_W IS W17
- InvertedInputs911_W IS W18
- SpinOverride_W IS W19
- Mem_W IS W20
- Out_W IS W21
- CurrentTurretPosition_W IS W22
- RequestedTurretPosition_W IS W23
- SpindleRange_W IS W24 ; 1 = low ... 4 = high
- PrevFeedOverride_W IS W25
- AtcType_W IS W28
- KbOverride_W IS W29
- FeedrateKnob_W IS W30
- FinalFeedOverride_W IS W31
- Last_FeedrateKnob_W IS W32
- LastKbOverride_W IS W33
- LastSkinFeedOverride_W IS W34
- Test_W IS W35
- P900Value_W IS W35
- MiniPLCStatus_W IS W36
- JogKeyCfg_W IS W37
- Lube_W IS W45
- P148Value_W IS W46
- P146Value_W IS W47
- P170Value_W IS W48
- LubeAccumTime_W IS W49
- LubeM_W IS W50
- LubeS_W IS W51
- CycloneStatus_W IS W56
- PLC_Fault_W IS W61
- PLCFaultAddr_W IS W62
- BadMsg_W IS W63
- ;------------------------------------------------------------------------------
- ; Word Definitions cont. (f32)
- ;------------------------------------------------------------------------------
- SkinningF1_FW IS FW1
- SkinningF2_FW IS FW2
- SkinningF3_FW IS FW3
- SkinningF4_FW IS FW4
- SkinningF5_FW IS FW5
- SkinningF6_FW IS FW6
- SkinningF7_FW IS FW7
- SkinningF8_FW IS FW8
- SkinningF9_FW IS FW9
- SkinningF10_FW IS FW10
- SkinningF11_FW IS FW11
- SpinRangeAdjust_FW IS FW13
- RPMPerBit_FW IS FW14
- CfgMinSpeed_FW IS FW15
- CfgMaxSpeed_FW IS FW16
- TwelveBitSpeed_FW IS FW17
- SpinSpeedCommand_FW IS FW18
- SkinningDF1_FW IS DFW1
- SkinningDF2_FW IS DFW2
- SkinningDF3_FW IS DFW3
- SkinningDF4_FW IS DFW4
- SkinningDF5_FW IS DFW5
- SkinningDF6_FW IS DFW6
- SkinningDF7_FW IS DFW7
- SkinningDF8_FW IS DFW8
- SkinningDF9_FW IS DFW9
- SkinningDF10_FW IS DFW10
- SkinningDF11_FW IS DFW11
- ;------------------------------------------------------------------------------
- ; One Shot Definitions
- ;------------------------------------------------------------------------------
- IncrContPD IS PD1
- SlowFastPD IS PD2
- MpgPD IS PD3
- SingleBlockPD IS PD4
- FeedHoldPD IS PD5
- SpinAutoManPD IS PD6
- SpindlePlusPD IS PD7
- SpinOverMinusPD IS PD8
- SpinOver100PD IS PD9
- ProbePD IS PD10
- SaveJogModePD IS PD11
- AutoSpindlePD IS PD12
- AutoCoolantPD IS PD13
- F9PD IS PD14
- x1JogPD IS PD15
- x10JogPD IS PD16
- x100JogPD IS PD17
- Aux11KeyPD IS PD18
- RapidOverPD IS PD19
- SkinResetOkPD IS PD20
- CoolantAutoManualPD IS PD21
- CoolantFloodPD IS PD22
- CoolantMistPD IS PD23
- ToolCheckPD IS PD24
- JogProbeFaultPD IS PD25
- RigidTapPD IS PD26
- SkinResetDetectedPD IS PD27
- SpindleBrakePD IS PD28
- PCSpindleStartStopPD IS PD30
- PCSpindleManualPD IS PD31
- PCSpindleCWPD IS PD32
- PCSpindleCCWPD IS PD33
- LimitOverridePD IS PD34
- StopRunningPD IS PD35
- SoftwareReadyPD IS PD36
- SkinFeedOverMinusPD IS PD37
- SkinFeedOverPlusPD IS PD38
- Aux1PD IS PD41
- Aux2PD IS PD42
- Aux3PD IS PD43
- Aux4PD IS PD44
- Aux5PD IS PD45
- Aux6PD IS PD46
- Aux7PD IS PD47
- Aux8PD IS PD48
- Aux9PD IS PD49
- ;------------------------------------------------------------------------------
- ; Timer Definitions
- ;------------------------------------------------------------------------------
- ; 1000 = 1 second for all timers.
- ;
- MsgClear_T IS T1
- SleepTimer IS T2
- CycloneStatus_T IS T3
- Initialize_T IS T4
- ErrorFlag_T IS T5
- TriggerPause_T IS T6
- SpindleBrakeTimer IS T7
- OverrideMsgTimer IS T8
- DriveFaultTimer IS T9
- SkinFeedOverTimer IS T10
- KeepAliveTimer IS T11
- OverrideLimitTimer IS T12
- LubeM_T IS T13
- LubeS_T IS T14
- ChuckTimer IS T15
- SpindleLockTimer IS T16
- PartchuteTimer IS T17
- CutOffTimer IS T18
- MessageTimer IS T19
- TurretReverseTimer IS T20
- TurretSettleTimer IS T21
- ToolChangeTimeOutTimer IS T22
- TestTimer IS T25
- ;------------------------------------------------------------------------------
- ; Stage Definitions
- ;------------------------------------------------------------------------------
- WatchDogStage IS STG1
- InitialStage IS STG2
- JogPanelStage IS STG3
- MainStage IS STG4
- AxesEnableStage IS STG5
- StandardSpindleStage IS STG6
- G540SpindleStage IS STG7
- SpindleBrakeStage IS STG8
- MPGStage IS STG9
- LoadParametersStage IS STG20
- KeyboardEventsStage IS STG21
- LubeUsePumpTimersStage IS STG23
- LubeUsePLCTimersStage IS STG24
- LimitOverrideStage IS STG25
- JogKeysNormalStage IS STG26
- JogKeysInvert2Stage IS STG27
- JogKeysSwappedStage IS STG28
- JogKeysSwapAndInvert2Stage IS STG29
- MonitorTurretPositionStage IS STG30
- ToolChangeStage IS STG31
- AtcGrayCode3Stage IS STG32
- AtcGrayCode4Stage IS STG33
- AtcIncrementalStage IS STG34
- IndexTurretStage IS STG35
- SetRequestedPositionStage IS STG36
- MessageStage IS STG90
- ShowFaultStage IS STG91
- ShowErrorStage IS STG92
- ShowInfoStage IS STG93
- BadMsgStage IS STG94
- ;#############################################################################
- ; Program Start
- ;#############################################################################
- ;==============================================================================
- WatchDogStage
- ;==============================================================================
- ; Handle PLC executor faults. The only way to reset a PLC executor fault
- ; is to reboot the MPU11.
- IF SV_PLC_FAULT_STATUS != 0
- THEN PLC_Fault_W = SV_PLC_FAULT_STATUS,
- PLCFaultAddr_W = SV_PLC_FAULT_ADDRESS,
- FaultMsg_W = PLC_EXECUTOR_FLT_MSG, MSG FaultMsg_W,
- SET PLCExecutorFault_M, RST MessageStage, SET SV_STOP
- ; Handle software exit.
- IF !SV_PC_SOFTWARE_READY ;&& (SV_PLC_FAULT_STATUS == 0)
- THEN SET SoftwareNotReady_M,
- SET SV_STOP,
- FaultMsg_W = SOFTWARE_EXIT_MSG
- IF SV_PC_SOFTWARE_READY && SoftwareNotReady_M && (!EstopOK || ResetSet_M)
- THEN RST SoftwareNotReady_M
- ; If the memory bit we call "True" is not yet true, it is because this is
- ; the first scan after power up. In that case execute InitialStage.
- IF !True THEN SET InitialStage
- ;==============================================================================
- InitialStage
- ;==============================================================================
- IF 1==1 THEN SET True,
- SET OnAtPowerUp_M,
- SET AxesEnableStage,
- SET MainStage,
- SET JogPanelStage,
- SET LoadParametersStage,
- SET MPGStage,
- SET PLCBus_Oe_M,
- RST DriveComFltIn_M,
- RST DriveComFltOut_M,
- RST PLCFault_M,
- CycloneStatus_T = 300,
- FaultMsg_W = MSG_CLEARED_MSG,
- RST BadMsgStage,
- SET MessageStage,
- Initialize_T = 1000, SET Initialize_T,
- ErrorFlag_T = 1000,
- MsgClear_T = 1000,
- RST InitialStage
- ;==============================================================================
- LoadParametersStage
- ;==============================================================================
- ; There are two methods of control for the lube pump and they are set by CNC12
- ; Machine Parameter 179, where the value is between 0 - 65535 and is formatted
- ; as MMMSS where MMM is a time in minutes and SS is a time in seconds.
- ;
- ; METHOD 1 (SS == 0) For lube pumps with internal timers.
- ; METHOD 2 (SS != 0) For lube pumps with no timers (controlled soley by PLC).
- ;
- ; Load lube pump times from P179 and convert to milliseconds.
- IF True THEN Lube_W = SV_MACHINE_PARAMETER_179,
- LubeM_W = (Lube_W / 100) * 60000,
- LubeS_W = (Lube_W % 100) * 1000
- ; Set the appropriate stage according to method of control
- IF LubeS_W == 0 THEN SET LubeUsePumpTimersStage, RST LubeUsePLCTimersStage
- IF LubeS_W != 0 THEN SET LubeUsePLCTimersStage, RST LubeUsePumpTimersStage
- IF True THEN P146Value_W = SV_MACHINE_PARAMETER_146, ; Feed hold threshold
- P148Value_W = SV_MACHINE_PARAMETER_148, ; Misc Jogging Options
- P170Value_W = SV_MACHINE_PARAMETER_170 ; Enable Keyboard Jogging
- if true then (SV_ENABLE_IO_OVERRIDE),
- SV_INVERT_INP17_32_BITS = SV_MACHINE_PARAMETER_912,
- SV_INVERT_INP33_48_BITS = SV_MACHINE_PARAMETER_913,
- SV_INVERT_INP49_64_BITS = SV_MACHINE_PARAMETER_914,
- SV_INVERT_INP65_80_BITS = SV_MACHINE_PARAMETER_915,
- SV_FORCE_INP1_16_BITS = SV_MACHINE_PARAMETER_916,
- SV_FORCE_INP17_32_BITS = SV_MACHINE_PARAMETER_917,
- SV_FORCE_INP33_48_BITS = SV_MACHINE_PARAMETER_918,
- SV_FORCE_INP49_64_BITS = SV_MACHINE_PARAMETER_919,
- SV_FORCE_INP65_80_BITS = SV_MACHINE_PARAMETER_920,
- SV_FORCE_ON_OUT1_16_BITS = SV_MACHINE_PARAMETER_921,
- SV_FORCE_ON_OUT17_32_BITS = SV_MACHINE_PARAMETER_922,
- SV_FORCE_ON_OUT33_48_BITS = SV_MACHINE_PARAMETER_923,
- SV_FORCE_ON_OUT49_64_BITS = SV_MACHINE_PARAMETER_924,
- SV_FORCE_ON_OUT65_80_BITS = SV_MACHINE_PARAMETER_925,
- SV_FORCE_OFF_OUT1_16_BITS = SV_MACHINE_PARAMETER_926,
- SV_FORCE_OFF_OUT17_32_BITS = SV_MACHINE_PARAMETER_927,
- SV_FORCE_OFF_OUT33_48_BITS = SV_MACHINE_PARAMETER_928,
- SV_FORCE_OFF_OUT49_64_BITS = SV_MACHINE_PARAMETER_929,
- SV_FORCE_OFF_OUT65_80_BITS = SV_MACHINE_PARAMETER_930,
- ; ,
- ; SV_FORCE_ON_MEM1_16_BITS = SV_MACHINE_PARAMETER_931,
- ; SV_FORCE_ON_MEM17_32_BITS = SV_MACHINE_PARAMETER_932,
- ; SV_FORCE_ON_MEM33_48_BITS = SV_MACHINE_PARAMETER_933,
- ; SV_FORCE_ON_MEM49_64_BITS = SV_MACHINE_PARAMETER_934,
- SV_FORCE_ON_MEM65_80_BITS = SV_MACHINE_PARAMETER_935,
- ; SV_FORCE_OFF_MEM1_16_BITS = SV_MACHINE_PARAMETER_936,
- ; SV_FORCE_OFF_MEM17_32_BITS = SV_MACHINE_PARAMETER_937,
- ; SV_FORCE_OFF_MEM33_48_BITS = SV_MACHINE_PARAMETER_938,
- ; SV_FORCE_OFF_MEM49_64_BITS = SV_MACHINE_PARAMETER_939,
- SV_FORCE_OFF_MEM65_80_BITS = SV_MACHINE_PARAMETER_940
- IF True THEN BITTST P148Value_W 1 DisableKbInput_M,
- BITTST P170Value_W 0 AllowKbInput_M,
- BITTST P170Value_W 1 JogOverOnly_M,
- BITTST P170Value_W 2 KbOverOnly_M
- IF TRUE THEN InvertedInputs911_W = SV_MACHINE_PARAMETER_911
- IF DisableKbInput_M THEN RST AllowKbInput_M
- IF JogOverOnly_M && KbOverOnly_M THEN RST KbOverOnly_M
- IF True THEN OverrideLimitTimer = 5000
- IF SV_MACHINE_PARAMETER_963 > 0 && SV_LIMIT_TRIPPED && SkinAux14_M && !WTF_Flag
- THEN Inputs1_16_W = SV_MACHINE_PARAMETER_963, SET OverrideLimitTimer,
- (LimitOverridePD), SET WTF_Flag, SET LimitOverrideEnabled
- If LimitOverrideEnabled THEN SET LimitOverrideStage
- If !LimitOverrideEnabled
- THEN RST LimitOverrideStage, SV_INVERT_INP1_16_BITS = SV_MACHINE_PARAMETER_911
- IF OverrideLimitTimer || !EStopOk || ResetSet_M
- THEN SV_INVERT_INP1_16_BITS = SV_MACHINE_PARAMETER_911, RST OverrideLimitTimer,
- RST WTF_Flag, RST LimitOverrideEnabled
- IF WTF_Flag THEN (Aux14LED)
- ;------------------------------------------------------------------------------
- LimitOverrideStage
- ;------------------------------------------------------------------------------
- IF (LimitOverridePD) && !OverrideLimitTimer
- THEN BITTST Inputs1_16_W 0 Input1_IsLimit,
- BITTST Inputs1_16_W 1 Input2_IsLimit,
- BITTST Inputs1_16_W 2 Input3_IsLimit,
- BITTST Inputs1_16_W 3 Input4_IsLimit,
- BITTST Inputs1_16_W 4 Input5_IsLimit,
- BITTST Inputs1_16_W 5 Input6_IsLimit,
- BITTST Inputs1_16_W 6 Input7_IsLimit,
- BITTST Inputs1_16_W 7 Input8_IsLimit
- ;After setting which inputs are limits, set value of Inputs1_16_W= SV_MACHINE_PARAMETER_911
- IF LimitOverridePD THEN Inputs1_16_W = SV_MACHINE_PARAMETER_911
- IF (LimitOverridePD) && !OverrideLimitTimer
- THEN BITTST InvertedInputs911_W 0 Input1_IsInverted,
- BITTST InvertedInputs911_W 1 Input2_IsInverted,
- BITTST InvertedInputs911_W 2 Input3_IsInverted,
- BITTST InvertedInputs911_W 3 Input4_IsInverted,
- BITTST InvertedInputs911_W 4 Input5_IsInverted,
- BITTST InvertedInputs911_W 5 Input6_IsInverted,
- BITTST InvertedInputs911_W 6 Input7_IsInverted,
- BITTST InvertedInputs911_W 7 Input8_IsInverted
- IF LimitOverridePD && Input1_IsLimit && (!INP1 ^ Input1_IsInverted)
- THEN BITSET Inputs1_16_W 0
- IF LimitOverridePD && Input1_IsLimit && (INP1 ^ Input1_IsInverted)
- THEN BITRST Inputs1_16_W 0
- IF LimitOverridePD && Input2_IsLimit && (!INP2 ^ Input2_IsInverted)
- THEN BITSET Inputs1_16_W 1
- IF LimitOverridePD && Input2_IsLimit && (INP2 ^ Input2_IsInverted)
- THEN BITRST Inputs1_16_W 1
- IF LimitOverridePD && Input3_IsLimit && (!INP3 ^ Input3_IsInverted)
- THEN BITSET Inputs1_16_W 2
- IF LimitOverridePD && Input3_IsLimit && (INP3 ^ Input3_IsInverted)
- THEN BITRST Inputs1_16_W 2
- IF LimitOverridePD && Input4_IsLimit && (!INP4 ^ Input4_IsInverted)
- THEN BITSET Inputs1_16_W 3
- IF LimitOverridePD && Input4_IsLimit && (INP4 ^ Input4_IsInverted)
- THEN BITRST Inputs1_16_W 3
- IF LimitOverridePD && Input5_IsLimit && (!INP5 ^ Input5_IsInverted)
- THEN BITSET Inputs1_16_W 4
- IF LimitOverridePD && Input5_IsLimit && (INP5 ^ Input5_IsInverted)
- THEN BITRST Inputs1_16_W 4
- IF LimitOverridePD && Input6_IsLimit && (!INP6 ^ Input6_IsInverted)
- THEN BITSET Inputs1_16_W 5
- IF LimitOverridePD && Input6_IsLimit && (INP6 ^ Input6_IsInverted)
- THEN BITRST Inputs1_16_W 5
- IF LimitOverridePD && Input7_IsLimit && (!INP7 ^ Input7_IsInverted)
- THEN BITSET Inputs1_16_W 6
- IF LimitOverridePD && Input7_IsLimit && (INP7 ^ Input7_IsInverted)
- THEN BITRST Inputs1_16_W 6
- IF LimitOverridePD && Input7_IsLimit && (!INP8 ^ Input8_IsInverted)
- THEN BITSET Inputs1_16_W 7
- IF LimitOverridePD && Input8_IsLimit && (INP8 ^ Input8_IsInverted)
- THEN BITRST Inputs1_16_W 7
- IF LimitOverridePD THEN SV_INVERT_INP1_16_BITS = Inputs1_16_W
- ;=============================================================================
- LubeUsePumpTimersStage
- ;=============================================================================
- ; METHOD 1 (SS == 0) For lube pumps with internal timers.
- ;
- ; When using this method, P179 should be set such that MMM is a
- ; value that is greater than the cycle time set on the internal timers and
- ; SS should be set to zero. How much greater MMM needs to be depends on the
- ; accuracy of the lube pump timers, but it is better to be on the long side
- ; to ensure proper operation.
- ;
- ; Example 1. The internal lube cycle interval is set to 60 minutes.
- ; Set P179 = 7500. In this example, as long as the accuracy
- ; of the lube timer interval causes the lube to turn on
- ; within 75 minutes, it will work. Note that the amount of time
- ; that lube is output is usually set with another timer control
- ; on the lube pump and it does not factor into the setting of P179.
- ;
- ; It should be noted that lube pumps with internal timers may differ on how
- ; they operate.
- ;
- ; (a) For pumps that lube immediately when power is applied and then start timing
- ; until the next cycle, it is possible to run out of lube quickly on short job
- ; runs if, after the program has been run, lube power is removed.
- ;
- ; (b) For pumps that do not lube until it has been turned on for the interval time,
- ; it is possible that lube never gets applied if, after the short program has been run,
- ; lube power is removed.
- ;
- ; A short program or job run is defined as a job that finishes before
- ; the interval setting (60 minutes in the above example).
- ;
- ; For the above mentioned reasons, we want the power to be applied for at least
- ; the amount of time set by the inteval timer, noting that if the user decides
- ; to engage the E-stop to remove power after short jobs, then they risk the
- ; above mentioned problems accoding to the type of pump.
- ;
- ; On the start of SV_PROGRAM_RUNNING, the lube pump turns on.
- ; The lube pump is turned off when a program has NOT been
- ; running continuously for MMM minutes or E-stop is engaged.
- ; The reason the lube pump is turned off after a program has NOT been
- ; running for MMM minutes is to prevent lubing when the user leaves for the
- ; weekend, leaving the machine on and E-stop disengaged.
- IF SV_PROGRAM_RUNNING THEN SET Lube, RST LubeM_T
- IF !SV_PROGRAM_RUNNING THEN LubeM_T = LubeM_W, SET LubeM_T
- IF LubeM_T || SV_STOP THEN RST Lube
- ;=============================================================================
- LubeUsePLCTimersStage
- ;=============================================================================
- ;
- ; METHOD 2 (SS != 0) For lube pumps that do not have internal timers.
- ;
- ; When using this method P179 should be set so the lube turns on
- ; every MMM minutes for SS seconds.
- ;
- ; Example 1.
- ; To set the lube pump power to come on for 5 seconds
- ; every 10 minutes, set P179 = 1005.
- ; MMMSS
- ; Example 2.
- ; To set the lube pump power to come on for 30 seconds
- ; every 2 hours, set P179 = 12030
- ; MMMSS
- ;
- ; This method will accumulate time while a program is running until
- ; it reaches MMM minutes, at which time it will apply power
- ; for SS seconds (unless E-stop is engaged) and then start over. It is
- ; possible with frequent use of E-stop that a lube cycle is cut short.
- ;
- IF SV_PROGRAM_RUNNING THEN LubeM_T = LubeM_W, SET LubeM_T
- IF !SV_PROGRAM_RUNNING THEN (StopRunningPD)
- IF StopRunningPD THEN LubeAccumTime_W = LubeAccumTime_W + LubeM_T, RST LubeM_T
- IF LubeM_T || (LubeAccumTime_W + LubeM_T > LubeM_W)
- THEN SET Lube, LubeS_T = LubeS_W, SET LubeS_T, RST LubeM_T, LubeAccumTime_W = 0
- IF LubeS_T || SV_STOP THEN RST Lube, RST LubeS_T
- ;==============================================================================
- KeyboardEventsStage
- ;==============================================================================
- ; This stage handles functions that are required for menu navigation
- ; by CNC12, require multiple keypresses and/or need to be interlocked
- ; with SV_PC_VIRTUAL_JOGPANEL_ACTIVE and/or AllowKbInput_M. Regarding
- ; "AllowKbInput_M": This PLC program reads a bit from a system parameter,
- ; in this case bit 0 of SV_MACHINE_PARAMETER_170, and sets "AllowKbInput_M"
- ; if the bit is a "0". If the operator wishes to allow keyboard input
- ; to trigger PLC events, they must set parameter 170 to a "1"
- ; (or any odd number for that matter). It should be mentioned that
- ; the programmer will not want to interlock all keyboard keys with
- ; SV_PC_VIRTUAL_JOGPANEL_ACTIVE and/or AllowKbInput_M. For example:
- ; The "escape" key must be echoed by the PLC to CNC12 to aid in menu
- ; navigation. NOTE: For backward comaptibility with CNC10, setting bit 1
- ; of SV_MACHINE_PARAMETER_148 OR clearing bit 0 of SV_MACHINE_PARAMETER_170
- ; will disable keyboard jogging.
- ;-------------------------Not interlocked--------------------------------------
- ; The code for cycle cancel has been moved to the main stage.
- ; It is commented out below but remains for reference
- ;Cycle Cancel
- ;IF Kb_Escape THEN (KbCycleCancel_M)
- ;Rapidoverride: Ctrl-r
- IF Kb_r && (Kb_L_Ctrl || Kb_R_Ctrl) THEN (KbTogRapidOver_M)
- ;----------------Interlocked with AllowKbInput_M-------------------------------
- ;KbCycle Start: alt-s
- IF Kb_s && (Kb_R_Alt || Kb_L_Alt) && AllowKbInput_M THEN (KbCycleStart_M)
- ;KbToolCheck_M: Ctrl-t
- IF Kb_t && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbToolCheck_M)
- ;KbTogSingleBlock_M: ctrl-b
- IF Kb_b && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbTogSingleBlock_M)
- ;KbTogSpinAutoMan_M: ctrl-a
- IF Kb_a && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbTogSpinAutoMan_M)
- ;KbSpinCW_M: ctrl-c
- IF Kb_c && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN SET KbSpinCW_M,
- RST KbSpinCCW_M
- ;KbSpinCCW_M: ctrl-w
- IF Kb_w && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN SET KbSpinCCW_M,
- RST KbSpinCW_M
- ;KbSpinStart_M: ctrl-s
- IF Kb_s && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbSpinStart_M)
- ;KbSpindle stop: Ctrl-q
- IF Kb_q && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbSpinStop_M)
- ;KbIncSpinOver_M: ctrl (">")
- IF Kb_Period && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbIncSpinOver_M)
- ;KbDecSpinOver_M: ctrl ("<")
- IF Kb_Comma && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbDecSpinOver_M)
- ;KbSpinOver100_M: ctrl + /
- IF Kb_Slash && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbSpinOver100_M)
- ;KbTogCoolAutoMan_M: Ctrl-m
- IF Kb_m && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbTogCoolAutoMan_M)
- ;KbFloodOnOff_M: Ctrl-n
- IF Kb_n && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbFloodOnOff_M)
- ;KbMistOnOff_M: Ctrl-k
- IF Kb_k && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbMistOnOff_M)
- ;KbTogIncContJog_M: "ctrl" + "i"
- IF Kb_i && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbTogIncContJog_M)
- ;KbTogFastSlowJog_M: "ctrl" + "f"
- IF Kb_f && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbTogFastSlowJog_M)
- ;KbAux1Key_M: "ctrl" + "F1"
- IF Kb_F1 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux1Key_M)
- ;KbAux2Key_M: "ctrl" + "F2"
- IF Kb_F2 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux2Key_M)
- ;KbAux3Key_M: "ctrl" + "F3"
- IF Kb_F3 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux3Key_M)
- ;KbAux4Key_M: "ctrl" + "F4"
- IF Kb_F4 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux4Key_M)
- ;KbAux5Key_M: "ctrl" + "F5"
- IF Kb_F5 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux5Key_M)
- ;KbAux6Key_M: "ctrl" + "F6"
- IF Kb_F6 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux6Key_M)
- ;KbAux7Key_M: "ctrl" + "F7"
- IF Kb_F7 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux7Key_M)
- ;KbAux8Key_M: "ctrl" + "F8"
- IF Kb_F8 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux8Key_M)
- ;KbAux9Key_M: "ctrl" + "F9"
- IF Kb_F9 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux9Key_M)
- ;KbAux10Key_M: "ctrl" + "F10"
- IF Kb_F10 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux10Key_M)
- ;KbAux11Key_M: "ctrl" + "F11"
- IF Kb_F11 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux11Key_M)
- ;KbAux12Key_M: "ctrl" + "F12"
- IF Kb_F12 && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M THEN (KbAux12Key_M)
- ;KbIncFeedOver_M: "ctrl" + "keyboard +" (actually "=")
- IF (Kb_Equals || Kb_10_Key_Plus) && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbIncFeedOver_M)
- ;KbDecFeedOver_M: "ctrl" + "keyboard -"
- IF (Kb_Hyphen || Kb_10_Key_Sub) && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbDecFeedOver_M)
- ;KbFeedOver100_M: "ctrl" + "keyboard \"
- IF Kb_Backslash && (Kb_L_Ctrl || Kb_R_Ctrl) && AllowKbInput_M
- THEN (KbFeedOver100_M)
- ;--------Interlocked with AllowKbInput_M && KbJpActive_M-----------------------
- ;KbIncreaseJogInc_M: "insert"
- IF Kb_Ins && AllowKbInput_M && KbJpActive_M
- THEN (KbIncreaseJogInc_M)
- IF KbIncreaseJogInc_M && x1JogLED && !X1_M && !X10_M && !X100_M
- THEN SET X10_M
- IF KbIncreaseJogInc_M && x10JogLED && !X1_M && !X10_M && !X100_M
- THEN SET X100_M
- ;KbDecreaseJogInc_M: "delete"
- IF Kb_Del && AllowKbInput_M && KbJpActive_M
- THEN (KbDecreaseJogInc_M)
- IF KbDecreaseJogInc_M && x10JogLED && !X1_M && !X10_M && !X100_M
- THEN SET X1_M
- IF KbDecreaseJogInc_M && x100JogLED && !X1_M && !X10_M && !X100_M
- THEN SET X10_M
- ;KbJogAx1Plus_M: Right arrow
- IF Kb_Right && AllowKbInput_M && KbJpActive_M THEN (KbJogAx1Plus_M)
- ;KbJogAx1Minus_M: Left arrow
- IF Kb_Left && AllowKbInput_M && KbJpActive_M THEN (KbJogAx1Minus_M)
- ;KbJogAx2Plus_M: Up arrow
- IF Kb_Up && AllowKbInput_M && KbJpActive_M THEN (KbJogAx2Plus_M)
- ;KbJogAx1Minus_M: Down arrow
- IF Kb_Down && AllowKbInput_M && KbJpActive_M THEN (KbJogAx2Minus_M)
- ;KbJogAx3Plus_M: Page up
- IF Kb_PgUp && AllowKbInput_M && KbJpActive_M THEN (KbJogAx3Plus_M)
- ;KbJogAx3Minus_M: Page Down
- IF Kb_PgDown && AllowKbInput_M && KbJpActive_M THEN (KbJogAx3Minus_M)
- ;KbAx4PlusJog: "home"
- IF Kb_Home && AllowKbInput_M && KbJpActive_M
- THEN (KbJogAx4Plus_M)
- ;KbAx4MinusJog: "end"
- IF Kb_End && AllowKbInput_M && KbJpActive_M
- THEN (KbJogAx4Minus_M)
- IF True THEN RST KeyboardEventsStage
- ;==============================================================================
- MPGStage
- ;==============================================================================
- ; MPG Functions
- ; Turn on/off Jog Panel MPG LED & on the MPG
- IF MPGKey || SkinMPG_M THEN (MpgPD)
- IF MpgPD && MPGLED THEN SET MPGManOffFlag_M
- IF !SV_MPG_1_ENABLED || (MpgPD && !MPGLED) THEN RST MPGManOffFlag_M
- IF (MpgPD && !MPGLED) || (SV_MPG_1_ENABLED && !MPGManOffFlag_M)
- THEN SET MPG_LED_OUT, SET MPGLED
- IF (!SV_MPG_1_ENABLED || (MpgPD && MPGLED))
- THEN RST MPG_LED_OUT, RST MPGLED
- ;x1, x10, x100 functions
- ;--X1
- IF x1JogKey || SkinX1_M THEN (x1JogPD)
- IF x1JogPD || OnAtPowerUp_M || X1_M || (MPG_Inc_X_1 && MPGLED)
- THEN SET x1JogLED, RST x10JogLED, RST x100JogLED
- ;--X10
- IF x10JogKey || SkinX10_M THEN (x10JogPD)
- IF x10JogPD || X10_M || (MPG_Inc_X_10 && MPGLED)
- THEN RST x1JogLED, SET x10JogLED, RST x100JogLED
- ;--X100
- IF x100JogKey || SkinX100_M THEN (x100JogPD)
- IF x100JogPD || X100_M || (MPG_Inc_X_100 && MPGLED)
- THEN RST x1JogLED, RST x10JogLED, SET x100JogLED
- IF !KbIncreaseJogInc_M && !KbDecreaseJogInc_M THEN RST X1_M, RST X10_M,
- RST X100_M
- ;--MPG 1 Enable
- IF MPG_AXIS_1 || MPG_AXIS_2 || MPG_AXIS_3 || MPG_AXIS_4 || MEM71 ||
- MPG_AXIS_5 || MPG_AXIS_6 || MPG_AXIS_7 || MPG_AXIS_8
- THEN (SV_MPG_1_ENABLED)
- ;IF true THEN SV_MPG_1_AXIS_SELECT = 0
- ; Select axis to move
- IF MPG_AXIS_1 THEN SV_MPG_1_AXIS_SELECT = 1
- IF MPG_AXIS_2 || MEM71 THEN SV_MPG_1_AXIS_SELECT = 2
- IF MPG_AXIS_3 THEN SV_MPG_1_AXIS_SELECT = 3
- IF MPG_AXIS_4 THEN SV_MPG_1_AXIS_SELECT = 4
- IF MPG_AXIS_5 THEN SV_MPG_1_AXIS_SELECT = 5
- ; Select MPG 1 Multiplier
- IF (MPG_Inc_X_100) THEN SV_MPG_1_MULTIPLIER = 100
- IF (MPG_Inc_X_10) THEN SV_MPG_1_MULTIPLIER = 10
- IF (MPG_Inc_X_1) THEN SV_MPG_1_MULTIPLIER = 1
- ; Disable "Windup" mode IF x100 selected
- IF (!MPG_Inc_X_100) THEN (SV_MPG_1_WINDUP_MODE)
- ;-------------------------------------------------------------------------------
- G540SpindleStage
- ;The Gecko G540 requires that the spindle outputs for Fwd and Rev are inverted
- ;-------------------------------------------------------------------------------
- IF OnAtPowerUp_M || SV_STOP || SpinStop_M THEN SET SpindleDisable_M
- IF SpinStart_M && !SpinStop_M THEN RST SpindleDisable_M
- IF SpindleDisable_M || SpinStop_M
- THEN SET SpindleDisable_M, RST SpindleForward_M, RST SpindleReverse_M
- ;Outputs must be OFF for spindle to run on G540
- ;Set some MEM bits if spindle should be on in forward or reverse direction
- IF !SpindleDisable_M && !SpindleDirectionOut_M THEN SET SpindleForward_M, RST SpindleReverse_M
- IF !SpindleDisable_M && SpindleDirectionOut_M THEN SET SpindleReverse_M, RST SpindleForward_M
- ;Set state of spindle direction outputs to the inverse of mem bits
- ;Set state of spindle direction outputs to the inverse of mem bits
- IF SpindleForward_M && SpindleBrakeTimer THEN RST G540SpinFwdOff, SET G540SpinRevOff
- IF SpindleReverse_M && SpindleBrakeTimer THEN RST G540SpinRevOff, SET G540SpinFwdOff
- IF !SpindleForward_M || !SpindleBrakeTimer THEN SET G540SpinFwdOff
- IF !SpindleReverse_M || !SpindleBrakeTimer THEN SET G540SpinRevOff
- IF (!SpindleForward_M && !SpindleReverse_M) || SpindleDisable_M THEN (DoSpindleStop)
- ;endregion G540SpindleStage
- ;region StandardSpindleStage
- ;------------------------------------------------------------------------------
- StandardSpindleStage
- ;------------------------------------------------------------------------------
- IF (SpindleEnableOut_M || SpinStart_M ) && !SpinStop_M
- THEN SET SpindleEnableOut_M
- IF !((SpindleEnableOut_M || SpinStart_M ) && !SpinStop_M) THEN RST SpindleEnableOut_M
- IF SpindleEnableOut_M && !SpindleDirectionOut_M && SpindleBrakeTimer THEN (SpinFWD)
- IF SpindleEnableOut_M && SpindleDirectionOut_M && SpindleBrakeTimer THEN (SpinREV)
- IF !SpindleEnableOut_M THEN (DoSpindleStop)
- ;endregion StandardSpindleStage}
- ;==============================================================================
- JogPanelStage
- ;==============================================================================
- ;--Select Incremental or Continuous Jog Mode
- IF IncrContKey || KbTogIncContJog_M || SkinIncCont_M THEN (IncrContPD)
- IF (IncrContPD && !IncrContLED) || OnAtPowerUp_M THEN SET IncrContLED
- IF (IncrContPD && IncrContLED) THEN RST IncrContLED
- ;--Select Fast or Slow Jog Mode
- IF FastSlowKey || KbTogFastSlowJog_M || SkinFastSlowJog_M THEN (SlowFastPD)
- IF (SlowFastPD && !FastSlowLED) || OnAtPowerUp_M
- THEN SET FastSlowLED
- IF (SlowFastPD && FastSlowLED) THEN RST FastSlowLED
- ;--Single Block Mode
- IF SingleBlockKey || KbTogSingleBlock_M || SkinSingleBlock_M THEN (SingleBlockPD)
- IF SingleBlockPD && !SingleBlockLED && !SV_PROGRAM_RUNNING
- THEN SET SingleBlockLED
- IF SingleBlockPD && SingleBlockLED THEN RST SingleBlockLED
- IF SingleBlockLED THEN (SelectSingleBlock)
- ;--Toolcheck
- IF (ToolCheckKey || KbToolCheck_M || SkinToolCheck_M) && EStopOk THEN (ToolCheckPD)
- IF ToolCheckPD THEN (DoToolCheck)
- ;--Feed Hold Mode
- ; Note: the feedrate override values used here for testing against P146
- ; are those calculated in the previous scan. There is no problem with that.
- IF (FeedHoldKey || KbFeedHold_M || SkinFeedHold_M) THEN (FeedHoldPD)
- IF FeedHoldPD || ActivateFeedHold_M ||
- (FinalFeedOverride_W < P146Value_W && !OnAtPowerUp_M)
- THEN SET FeedHoldLED
- IF DoCycleStart || DoCycleCancel || DoToolCheck ||
- (FinalFeedOverride_W >= P146Value_W &&
- PrevFeedOverride_W < P146Value_W)
- THEN RST FeedHoldLED
- IF True THEN PrevFeedOverride_W = FinalFeedOverride_W
- ; (FeedHoldLED will be used later to signal MPU11 to do Feed Hold)
- ;--Feedrate Override Section
- ;------------------------------------------------------------------------------
- ; Feedrate override works as follows:
- ;
- ; 1. The PLC reads the 8 bit value of the FeedrateKnob_W directly (0-255)
- ; 2. The PLC scales this value to a 0-200 value (0-200%) by dividing by
- ; the knob value by 127.5 and then multiplying the result by 100
- ; 3. If keyboard jogging is enabled, the PLC
- ; determines whether the operator is using the keyboard override or
- ; the FeedrateKnob_W to override the feedrate by watching which was changed
- ; most recently. The most recently changed value is saved as
- ; "FinalFeedOverride_W"
- ; 4. Parameter 39 in (From the "params" screen in CNC12 software) stores
- ; a value which the PLC program must use to limit the amount
- ; of override applied to the programmed feedrate. This value is specified
- ; as a percentage.
- ; 5. The PLC limits the override percentage by reading parameter 39 and, if
- ; the feedrate override percentage as read from the knob is greater than
- ; parameter 39, it sets the FinalFeedOverride_W value to the value of
- ; parameter 39.
- ; 6. Once the override percentage has been determined and limited (if needed)
- ; The PLC send this value up to the CNC12 software by setting
- ; SV_PLC_FEEDRATE_KNOB = FinalFeedOverride_W
- ; 7. CNC12 reads SV_PLC_FEEDRATE_KNOB, factors in its own override based
- ; on parameter 78 (see operators manual for more info on parm 78) and then
- ; returns an override value to the PLC in the system variable
- ; SV_PC_FEEDRATE_PERCENTAGE
- ; 8. The PLC reads SV_PC_FEEDRATE_PERCENTAGE and (typically) echoes the system
- ; variable to SV_PLC_FEEDRATE_OVERRIDE which the MPU11 uses as the final
- ; determination of the feedrate override percentage.
- ;------------------------------------------------------------------------------
- ; 1. The PLC reads the 8 bit value of the FeedrateKnob_W directly (0-255)
- ; NOTE: BTW = Bit To Word
- ; BTW reads the specified number of bits (if none is specified it defaults to 8)
- ; starting from a bit location and writes them to a word with the starting bit
- ; location being written to the LSB of the word used. Below, BTW reads the bit
- ; values from JpFeedOrKnobBit0 to JpFeedOrKnobBit7 and writes them into to the
- ; word "FeedrateKnob_W" which sets FeedrateKnob_W to a value of 0-255
- ;------------------------------------------------------------------------------
- IF OnAtPowerUp_M THEN KbOverride_W = 100, FinalFeedOverride_W = 100, SET UsingVirtualOverride_M
- ;------------------------------------------------------------------------------
- ; 2. Scale this value to a 0-200 value (0-200%)
- ;------------------------------------------------------------------------------
- IF True THEN SkinFeedOverTimer = 200
- IF SkinFeedOverMinus_M THEN (SkinFeedOverMinusPD), SET SkinFeedOverTimer
- IF SkinFeedOverPlus_M THEN (SkinFeedOverPlusPD), SET SkinFeedOverTimer
- IF !SkinFeedOverPlus_M && !SkinFeedOverMinus_M THEN RST SkinFeedOverTimer
- IF !WaitingForSleepTimer_M && ((KbIncFeedOver_M || SkinFeedOverPlusPD) || (SkinFeedOverTimer && SkinFeedOverPlus_M))
- THEN KbOverride_W = KbOverride_W + 1,
- RST UsingFeedrateKnob_M,
- SET WaitingForSleepTimer_M,
- SleepTimer = 30, SET SleepTimer
- IF !WaitingForSleepTimer_M && ((KbDecFeedOver_M || SkinFeedOverMinusPD) || (SkinFeedOverTimer && SkinFeedOverMinus_M))
- THEN KbOverride_W = KbOverride_W - 1, RST UsingFeedrateKnob_M,
- SET WaitingForSleepTimer_M, SleepTimer = 30, SET SleepTimer
- IF SleepTimer THEN RST WaitingForSleepTimer_M, RST SleepTimer
- IF SkinFeedOver100 || KbFeedOver100_M THEN KbOverride_W = 100
- IF KbOverride_W < 100 THEN(FeedOverLT100)
- IF KbOverride_W == 100 THEN(FeedOverEQ100)
- IF KbOverride_W > 100 THEN(FeedOverGT100)
- ;IF !OnAtPowerUp_M && (ABS(KbOverride_W - LastKbOverride_W) >=2)
- ; THEN FinalFeedOverride_W = KbOverride_W, (UsingKbOverride_M), LastKbOverride_W = KbOverride_W
- ;
- ;IF !OnAtPowerUp_M && !UsingKbOverride_M && VirtualJpRunning_M
- ; THEN (UsingVirtualOverride_M)
- ;
- ;IF UsingVirtualOverride_M && (ABS(SkinFeedOverride_W1 - LastSkinFeedOverride_W) > 0)
- ; THEN FinalFeedOverride_W = SkinFeedOverride_W1
- ;
- ;IF True THEN LastSkinFeedOverride_W = SkinFeedOverride_W1
- ;Limit keyboard override to parm 39. Allowing the FeedrateKnob_W to go past
- ;parm 39, but keeping the KbOverride_W limited keeps the "dead space"
- ;down and allows the PLC to respond to changes in the FeedrateKnob_W even if
- ;above 120. Overall override is still limited later but this gives better
- ;response in changing between KbOverride_W & the FeedrateKnob_W
- IF KbOverride_W > SV_MACHINE_PARAMETER_39
- THEN KbOverride_W = SV_MACHINE_PARAMETER_39
- IF KbOverride_W < MIN_FROR_PCT THEN KbOverride_W = MIN_FROR_PCT
- ;Limit keyboard override to parm 39. Allowing the FeedrateKnob_W to go past
- ;parm 39, but keeping the KbOverride_W limited keeps the "dead space"
- ;down and allows the PLC to respond to changes in the FeedrateKnob_W even if
- ;above 120. Overall override is still limited later but this gives better
- ;response in changing between KbOverride_W & the FeedrateKnob_W
- IF KbOverride_W > SV_MACHINE_PARAMETER_39
- THEN KbOverride_W = SV_MACHINE_PARAMETER_39
- IF True THEN FinalFeedOverride_W = KbOverride_W
- ;------------------------------------------------------------------------------
- ; 4 & 5. Limit override percentage to value set in Parameter 39
- ;------------------------------------------------------------------------------
- ;------------------Limit final override percentage to parm 39-------------------
- IF FinalFeedOverride_W > SV_MACHINE_PARAMETER_39
- THEN FinalFeedOverride_W = SV_MACHINE_PARAMETER_39
- IF FinalFeedOverride_W <= 1 THEN FinalFeedOverride_W = 1
- ;------------------------------------------------------------------------------
- ; Override Controls
- ; It is important that the plc program only writes to SV_PLC_FEEDRATE_KNOB once per pass
- ;------------------------------------------------------------------------------
- ; Override control bit for the feedrate override
- ; 1 == feedrate override knob will effect feedrate
- ; 0 == override knob has NO effect on feedrate
- IF !SV_PC_OVERRIDE_CONTROL_FEEDRATE_OVERRIDE THEN FinalFeedOverride_W = 100
- ;------------------------------------------------------------------------------
- ; 6. Send override percentage to CNC12
- ;------------------------------------------------------------------------------
- ;----------------Send override to PC for modification if needed---------------
- IF True THEN SV_PLC_FEEDRATE_KNOB = FinalFeedOverride_W
- ;------------------------------------------------------------------------------
- ; 7. Copy the feedrate override sent from the PC to the MPU11.
- ;------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------
- ; Normally a number from 0.0-2.0, no limitations although V will not exceed
- ; Vmax. A negative number in here would be extremely bad.
- ;------------------------------------------------------------------------------
- IF True THEN SV_PLC_FEEDRATE_OVERRIDE = SV_PC_FEEDRATE_PERCENTAGE/100.0
- ;--MPU11 Jog Panel Key Functions
- IF KbTogRapidOver_M || SV_PC_TOGGLE_RAPID_OVERRIDE || SkinAux1_M
- THEN (RapidOverPD), RST SV_PC_TOGGLE_RAPID_OVERRIDE
- IF RapidOverPD^ SelectRapidOverride THEN (SelectRapidOverride)
- IF OnAtPowerUp_M THEN SET SelectRapidOverride
- IF SelectRapidOverride THEN (Aux1LED), SET OverrideRapidsEnabled_M, RST OverrideRapidsDisabled_M
- IF !SelectRapidOverride THEN RST OverrideRapidsEnabled_M, SET OverrideRapidsDisabled_M
- IF RapidOverPD THEN OverrideMsgTimer = 100, SET OverrideMsgTimer
- IF RapidOverPD && OverrideRapidsEnabled_M THEN InfoMsg_W = RAPID_OVERRIDE_ENABLED
- IF RapidOverPD && OverrideRapidsDisabled_M THEN InfoMsg_W = RAPID_OVERRIDE_DISABLED
- IF ((InfoMsg_W == RAPID_OVERRIDE_ENABLED) || (InfoMsg_W == RAPID_OVERRIDE_DISABLED)) &&
- OverrideMsgTimer THEN InfoMsg_W = 0, RST OverrideMsgTimer, RST ShowInfoStage
- IF (CycleCancelKey || KbCycleCancel_M || SkinCycleCancel_M) && (SV_PROGRAM_RUNNING || SV_MDI_MODE)
- || ErrorFlag_M
- THEN (DoCycleCancel)
- IF (CycleStartKey || KbCycleStart_M || SkinCycleStart_M) THEN (DoCycleStart)
- IF True THEN RST JogKeysNormalStage,
- RST JogKeysInvert2Stage,
- RST JogKeysSwappedStage,
- RST JogKeysSwapAndInvert2Stage
- IF TRUE THEN JogKeyCfg_W = SV_MACHINE_PARAMETER_1
- IF TRUE THEN BITTST JogKeyCfg_W 0 InvertXJogKeys_M
- IF TRUE THEN BITTST JogKeyCfg_W 3 SwapAxes_M
- IF !(InvertXJogKeys_M || SwapAxes_M) THEN SET JogKeysNormalStage
- IF InvertXJogKeys_M && !SwapAxes_M THEN SET JogKeysInvert2Stage
- IF !InvertXJogKeys_M && SwapAxes_M THEN SET JogKeysSwappedStage
- IF InvertXJogKeys_M && SwapAxes_M THEN SET JogKeysSwapAndInvert2Stage
- ; First and second axis jogging is in configuration-specific
- ; stages following JogPanelStage
- IF (Ax3PlusJogKey || KbJogAx3Plus_M || SkinJogAx3Plus_M) &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx3PlusJog)
- IF (Ax3MinusJogKey || KbJogAx3Minus_M || SkinJogAx3Minus_M) &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx3MinusJog)
- IF (Ax4PlusJogKey || KbJogAx4Plus_M || SkinJogAx4Plus_M) &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx4PlusJog)
- IF (Ax4MinusJogKey || KbJogAx4Minus_M || SkinJogAx4Minus_M) &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx4MinusJog)
- IF (Aux1Key || KbAux1Key_M || SkinAux1_M) THEN (DoAux1Key)
- IF (Aux2Key || KbAux2Key_M || SkinAux2_M) THEN (DoAux2Key)
- IF (Aux3Key || KbAux3Key_M || SkinAux3_M) THEN (DoAux3Key)
- IF (Aux4Key || KbAux4Key_M || SkinAux4_M) THEN (DoAux4Key)
- IF (Aux5Key || KbAux5Key_M || SkinAux5_M) THEN (DoAux5Key)
- IF (Aux6Key || KbAux6Key_M || SkinAux6_M) THEN (DoAux6Key)
- IF (Aux7Key || KbAux7Key_M || SkinAux7_M) THEN (DoAux7Key)
- IF (Aux8Key || KbAux8Key_M || SkinAux8_M) THEN (DoAux8Key)
- IF (Aux9Key || KbAux9Key_M || SkinAux9_M) THEN (DoAux9Key)
- IF (Aux10Key || KbAux10Key_M || SkinAux10_M) THEN (DoAux10Key)
- IF (Aux11Key || KbAux11Key_M || SkinAux11_M) THEN (DoAux11Key)
- IF (Aux12Key || KbAux12Key_M || SkinAux12_M) THEN (DoAux12Key)
- IF x1JogLED THEN (SelectX1JogInc)
- IF x10JogLED THEN (SelectX10JogInc)
- IF x100JogLED THEN (SelectX100JogInc)
- IF IncrContLED THEN (SelectIncContJog)
- IF FastSlowLED THEN (SelectFastSlowJog)
- IF MPGLED THEN (SelectMpgMode)
- IF FeedHoldLED && SV_PC_OVERRIDE_CONTROL_FEEDHOLD THEN (DoFeedHold)
- ;--Coolant Functions
- ;--Toggle auto coolant mode
- IF CoolAutoManKey || KbTogCoolAutoMan_M || SkinCoolAutoMan_M THEN (CoolantAutoManualPD)
- IF (!CoolAutoModeLED && CoolantAutoManualPD) || OnAtPowerUp_M
- THEN SET CoolAutoModeLED
- IF (CoolAutoModeLED && CoolantAutoManualPD)
- THEN RST CoolAutoModeLED
- ;--Report coolant mode to CNC12
- IF CoolAutoModeLED THEN (SelectCoolAutoMan)
- ;--Display coolant mode message
- ;changing to auto coolant mode ;2050 Auto Coolant Selected 2 + 50*256
- IF (!CoolAutoModeLED && CoolantAutoManualPD && AllowKbInput_M)
- THEN InfoMsg_W = AUTO_COOL_MSG
- ;changing to manual coolant mode ;2051 Manual Coolant Selected 2 + 51*256
- IF (CoolAutoModeLED && CoolantAutoManualPD && AllowKbInput_M)
- THEN InfoMsg_W = MAN_COOL_MSG
- ;--Flood coolant on/off
- ;
- ; Toggle on/off or off/on if:
- ; In manual mode and a toggle key was pressed
- ; Turn on if:
- ; In auto mode and have M8
- ; Turn off if:
- ; Any fault or error
- ; In auto mode and don't have M8
- ; Doing tool check (?)
- IF CoolFloodKey || KbFloodOnOff_M || SkinCoolFlood_M THEN (CoolantFloodPD)
- IF ((Flood ^ (!CoolAutoModeLED && CoolantFloodPD))
- || CoolAutoModeLED && M8)
- && !(SV_STOP ||
- CoolAutoModeLED && !M8 ||
- ErrorFlag_M ||
- DoToolCheck)
- THEN (Flood), (CoolFloodLED), (SelectCoolantFlood)
- ;--Mist coolant on/off
- IF (CoolMistKey || KbMistOnOff_M || SkinCoolMist_M) THEN (CoolantMistPD)
- IF ((Mist ^ (!CoolAutoModeLED && CoolantMistPD))
- || CoolAutoModeLED && M7)
- && !(SV_STOP ||
- CoolAutoModeLED && !M7 ||
- ErrorFlag_M ||
- DoToolCheck)
- THEN (Mist), (CoolMistLED), (SelectCoolantMist)
- ;--Spindle Control
- ;------------------------------------------------------------------------------
- ; JOGBOARD SPINDLE CONTROL
- ; Spindle Auto Mode / Manual mode toggles via Auto/Man jog panel key
- ; CW/CCW jog keys determine spindle direction in manual mode
- ; M3/M4 system variables determine spindle direction in Auto mode
- ; Spindle can be stopped and restarted in auto mode using
- ; spin stop/start jog keys
- ;------------------------------------------------------------------------------
- ;--Select Auto or Manual Spindle Operation Mode
- ;Triggers to Toggle Auto/Manual Spindle Mode
- IF SpinAutoManKey || KbTogSpinAutoMan_M || SkinSpinAutoMan_M
- THEN (SpinAutoManPD)
- ;--Set spindle to auto mode on startup
- IF (SpinAutoManPD && !SpinAutoModeLED) || OnAtPowerUp_M
- THEN SET SpinAutoModeLED
- ;--Set spindle to manual mode
- IF SpinAutoManPD && SpinAutoModeLED THEN RST SpinAutoModeLED
- ;--Report the Spindle mode to CNC12
- IF SpinAutoModeLED THEN (SelectManAutoSpindle)
- ;--Set triggers to start and stop the spindle
- ; NOTE: SpindlePause_M allows the operator to start and stop the
- ; spindle with the spin start and stop keys while in a job. In
- ; this case, pressing the spindle start key will only restart
- ; the spindle if an M3 or M4 had previously been issued and is
- ; still active.
- IF (SpinAutoModeLED && (M3 || M4) && (SpinStopKey || KbSpinStop_M || SkinSpinStop_M))
- THEN SET SpindlePause_M
- IF ((M3 || M4) && (SpinStartKey || KbSpinStart_M || SkinSpinStart_M) ||
- !(SV_PROGRAM_RUNNING || SV_MDI_MODE))
- THEN RST SpindlePause_M
- IF ((SpinStartKey || KbSpinStart_M || SkinSpinStart_M) && !SpinAutoModeLED) ||
- (SpinAutoModeLED && (M3 || M4) && !SpindlePause_M) ||
- ((SpinStartKey || KbSpinStart_M || SkinSpinStart_M) && ((M3 || M4) && SpinAutoModeLED))
- THEN (SpinStart_M)
- IF (SpinStopKey || KbSpinStop_M || SkinSpinStop_M) ||
- (SpinAutoModeLED && !(M3 || M4)) ||
- (SV_PC_RIGID_TAP_SPINDLE_OFF && SpinAutoModeLED) ||
- ProbeDetect || SV_STOP || ErrorFlag_M || LimitTripped_M
- THEN (SpinStop_M)
- ;--Adjust spindle override when entering manual or auto spin mode
- ;Set the override value to 100% when spin auto mode is first selected
- IF SpinAutoManPD && !SpinAutoModeLED
- THEN SV_PLC_SPINDLE_KNOB = 100,
- SET SpinAutoModeLED
- ;Set the override value to 10% whenever manual mode is entered
- IF SpinAutoManPD && SpinAutoModeLED
- THEN SV_PLC_SPINDLE_KNOB = 10, RST SpinAutoModeLED
- ;--Set spindle direction
- ;------------------Set Clockwise direction
- IF ((KbSpinCW_M || SpinCWKey || SkinSpinCW_M) && !SpinAutoModeLED) || (M3 && SpinAutoModeLED)
- THEN RST SpindleDirection_M
- IF !SpindleDirection_M THEN (SpindleCWLED), (SelectSpindleCW)
- ;---------------Set Counterclockwise direction
- IF ((KbSpinCCW_M || SpinCCWKey || SkinSpinCCW_M) && !SpinAutoModeLED) || (M4 && SpinAutoModeLED)
- THEN SET SpindleDirection_M
- IF SpindleDirection_M THEN (SpindleCCWLED), (SelectSpindleCCW)
- ;IF (SpindleDirection_M ^ SpinRangeReversed_M) && !SpindleForwardOut THEN (SpindleDirectionOut)
- IF SpindleDirection_M ^ SpinRangeReversed_M THEN (SpindleDirectionOut_M)
- ;-------------------------------------------------------------------------------
- ; Turn spindle on/off
- ;-------------------------------------------------------------------------------
- IF ProbeDetect && SpinStart_M THEN SET ProbeFault_M
- ;------------------------------------------------------------------------------
- ; SPINDLE OVERRIDE CONTROL
- ; Jogboard (-, +, and 100% keys),
- ; Keyboard "ctrl" + "<", "ctrl" + ">", "ctrl" + "/"
- ;------------------------------------------------------------------------------
- IF SpinOverPlusKey || KbIncSpinOver_M || SkinSpinOverPlus_M
- THEN SV_PLC_SPINDLE_KNOB = SV_PLC_SPINDLE_KNOB + 1
- IF SpinOverMinusKey || KbDecSpinOver_M || SkinSpinOverMinus_M
- THEN SV_PLC_SPINDLE_KNOB = SV_PLC_SPINDLE_KNOB - 1
- IF SpinOver100Key || KbSpinOver100_M || OnAtPowerUp_M || SkinSpin100_M
- THEN SV_PLC_SPINDLE_KNOB = 100
- IF SV_PLC_SPINDLE_KNOB < 1 THEN SV_PLC_SPINDLE_KNOB = 1
- IF SV_PLC_SPINDLE_KNOB > 200 THEN SV_PLC_SPINDLE_KNOB = 200
- IF SV_PLC_SPINDLE_KNOB == 100 THEN
- (SpinOver100LED),
- (SelectSpinOr100)
- IF SV_PLC_SPINDLE_KNOB < 100 THEN
- (SpinOverMinusLED),
- (DoDecreaseSpindleOr )
- IF SV_PLC_SPINDLE_KNOB > 100 THEN
- (SpinOverPlusLED),
- (DoIncreaseSpindleOr)
- ;--Output 12-bit DAC value for spindle control
- ;-----------------------------------------------------------------------------
- ; Read spindle range inputs and/or range M codes
- ;
- ; NOTE: SV_SPINDLE_LOW_RANGE & SV_SPINDLE_MID_RANGE M are used to report the
- ; selected spindle range to CNC12
- ;-----------------------------------------------------------------------------
- ; 4 hi 3 med-high 2 med-low 1 low
- ; 0 1 1 0 SV_SPINDLE_MID_RANGE M
- ; 0 0 1 1 SV_SPINDLE_LOW_RANGE
- ; Use input switches, M functions, or other means to determine the gear
- ; range number (1-4). For basic mills, look for one low-range switch.
- ; Default to high range until proven otherwise (fail-safe choice)
- IF Aux4Key THEN (Aux4PD)
- IF Aux5Key THEN (Aux5PD)
- IF Aux6Key THEN (Aux6PD)
- IF M41 || Aux4PD || KbAux4Key_M || SkinAux4_M || (SpindleLowRange && !SpinLowInputDisabled_M)
- THEN SpindleRange_W = 1, SET Aux4LED, RST Aux5LED, RST Aux6LED, RST M42, RST M43
- IF M42 || Aux5PD || KbAux5Key_M || SkinAux5_M || (SpindleMedRange && !SpinMedInputDisabled_M)
- THEN SpindleRange_W = 2, RST Aux4LED, SET Aux5LED, RST Aux6LED, RST M41, RST M43
- IF OnAtPowerUp_M || (M43 || Aux6PD || KbAux6Key_M || SkinAux6_M || (SpindleHighRange && !SpinHighInputDisabled_M))
- THEN SpindleRange_W = 3, RST Aux4LED, RST Aux5LED, SET Aux6LED, RST M41, RST M42
- IF OnAtPowerUp_M || (SpindleRange_W == 0) THEN SpindleRange_W = 4, SET Aux6LED
- ; Use the gear range number to set the range flags and speed ratio.
- IF SpindleRange_W == 1 THEN SET SV_SPINDLE_LOW_RANGE,
- RST SV_SPINDLE_MID_RANGE,
- SpinRangeAdjust_FW = SV_MACHINE_PARAMETER_65
- IF SpindleRange_W == 2 THEN SET SV_SPINDLE_LOW_RANGE,
- SET SV_SPINDLE_MID_RANGE,
- SpinRangeAdjust_FW = SV_MACHINE_PARAMETER_66
- IF SpindleRange_W == 3 THEN RST SV_SPINDLE_LOW_RANGE,
- SET SV_SPINDLE_MID_RANGE,
- SpinRangeAdjust_FW = 1.0
- IF SpindleRange_W == 4 THEN RST SV_SPINDLE_LOW_RANGE,
- RST SV_SPINDLE_MID_RANGE,
- SpinRangeAdjust_FW = 1.0
- ; If the speed ratio parameter is negative, reverse the motor.
- ; Always use the absolute value of the parameter as the real ratio.
- IF SpinRangeAdjust_FW < 0.0 THEN (SpinRangeReversed_M),
- SpinRangeAdjust_FW = -SpinRangeAdjust_FW
- ; Force the ratio to be non-zero, because we are going to divide by it later.
- IF SpinRangeAdjust_FW < 0.001 THEN SpinRangeAdjust_FW = 0.001
- ;------------------------------------------------------------------------------
- ; Read commanded spindle speed, max & min
- ;
- ; ***NOTE*** SV_PC_COMMANDED_SPINDLE_SPEED already has override
- ; factored in.
- ;------------------------------------------------------------------------------
- IF True THEN CfgMinSpeed_FW = SV_PC_CONFIG_MIN_SPINDLE_SPEED,
- CfgMaxSpeed_FW = SV_PC_CONFIG_MAX_SPINDLE_SPEED
- ; Calculate #RPM's per bit of resolution
- IF CfgMaxSpeed_FW > 0.0 THEN RPMPerBit_FW = CfgMaxSpeed_FW/4095.0
- IF CfgMaxSpeed_FW <= 0.0 THEN RPMPerBit_FW = 1.0
- IF SpinAutoModeLED THEN SpinSpeedCommand_FW = SV_PC_COMMANDED_SPINDLE_SPEED
- IF SpinSpeedCommand_FW > 1 THEN SET MEM999
- IF SpinSpeedCommand_FW < 1 THEN RST MEM999
- IF !SpinAutoModeLED THEN SpinSpeedCommand_FW = CfgMaxSpeed_FW *
- SV_PLC_SPINDLE_KNOB / 200.0 *
- SpinRangeAdjust_FW
- IF SpindleDisable_M THEN SpinSpeedCommand_FW = 0.0
- ;------------------------------------------------------------------------------
- ; If commanded spindle speed is < Min Spin Speed * SpinRangeAdjust
- ; & commanded spindle speed > 0, force to commanded spindle speed
- ; = min spin speed value * SpinRangeAdjust.
- ;------------------------------------------------------------------------------
- IF (SpinSpeedCommand_FW > 0.0) &&
- (SpinSpeedCommand_FW < (CfgMinSpeed_FW * SpinRangeAdjust_FW))
- THEN SpinSpeedCommand_FW = (CfgMinSpeed_FW * SpinRangeAdjust_FW),
- InfoMsg_W = MIN_SPEED_MSG
- ;------------------------------------------------------------------------------
- ; If SpinSpeedCommand_FW > Max Spin Speed * SpinRangeAdjust, force
- ; SpinSpeedCommand_FW = max spin speed value * SpinRangeAdjust.
- ;------------------------------------------------------------------------------
- IF SpinSpeedCommand_FW > (CfgMaxSpeed_FW * SpinRangeAdjust_FW)
- THEN SpinSpeedCommand_FW = (CfgMaxSpeed_FW * SpinRangeAdjust_FW)
- ;------------------------------------------------------------------------------
- ; Convert Spindle "S" command to 12 bit value for output to DAC
- ;------------------------------------------------------------------------------
- ; Commanded Spindle speed (includes override factor) is sent down from CNC12
- ; in SV_PC_COMMANDED_SPINDLE_SPEED. This value needs to be converted to a
- ; 12 bit value (0-4095) where full scale = SV_PC_CONFIG_MAX_SPINDLE_SPEED.
- ;Convert RPM to 12 bit value
- IF True THEN TwelveBitSpeed_FW = SpinSpeedCommand_FW/RPMPerBit_FW
- ; Factor in gear range
- IF True THEN TwelveBitSpeed_FW = (TwelveBitSpeed_FW/SpinRangeAdjust_FW)
- ;Convert to integer word for DAC & I/O display
- IF True THEN TwelveBitSpeed_W = TwelveBitSpeed_FW
- ; Bound min to 0, max to 4095
- IF TwelveBitSpeed_W < 0 THEN TwelveBitSpeed_W = 0
- IF TwelveBitSpeed_W > 4095 THEN TwelveBitSpeed_W = 4095
- ; Output to DAC
- IF True THEN WTB TwelveBitSpeed_W SpinAnalogOutBit0 12
- ;Display calculated RPM value on PC
- IF True THEN SV_PLC_SPINDLE_SPEED = SpinSpeedCommand_FW
- IF True THEN SV_SPINDLE_DAC = SpinSpeedCommand_FW, SET SV_SPINDLE_RPM_MODE
- ;=============================================================================
- JogKeysNormalStage
- ;=============================================================================
- ; X+ LATHE MILL Y+ Z+
- ; | 4+ |
- ; Z- -- -- Z+ X- -- -- X+
- ; | |
- ; X- 4- Y- Z-
- IF (Ax1PlusJogKey || KbJogAx1Plus_M || SkinJogax1Plus_M) && !Ax1PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1PlusJog)
- IF (Ax1MinusJogKey || KbJogAx1Minus_M || SkinJogAx1Minus_M) && !Ax1MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1MinusJog)
- IF (Ax2PlusJogKey || KbJogAx2Plus_M || SkinJogAx2Plus_M) && !Ax2PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2PlusJog)
- IF (Ax2MinusJogKey || KbJogAx2Minus_M || SkinJogAx2Minus_M) && !Ax2MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2MinusJog)
- ;=============================================================================
- JogKeysInvert2Stage
- ;=============================================================================
- ; X- LATHE MILL Y- Z+
- ; | 4+ |
- ; Z- -- -- Z+ X- -- -- X+
- ; | |
- ; X+ 4- Y+ Z-
- IF (Ax1PlusJogKey || KbJogAx1Plus_M || SkinJogAx1Plus_M) && !Ax1PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1PlusJog)
- IF (Ax1MinusJogKey || KbJogAx1Minus_M || SkinJogAx1Minus_M) && !Ax1MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1MinusJog)
- IF (Ax2MinusJogKey || KbJogAx2Minus_M || SkinJogAx2Minus_M) && !Ax2PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2PlusJog)
- IF (Ax2PlusJogKey || KbJogAx2Plus_M || SkinJogAx2Plus_M) && !Ax2MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2MinusJog)
- ;=============================================================================
- JogKeysSwappedStage
- ;=============================================================================
- ; Z+ LATHE MILL X+ Z+
- ; | 4+ |
- ; X- -- -- X+ Y- -- -- Y+
- ; | |
- ; Z- 4- X- Z-
- IF (Ax2PlusJogKey || KbJogAx2Plus_M || SkinJogAx2Plus_M) && !Ax1PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1PlusJog)
- IF (Ax2MinusJogKey || KbJogAx2Minus_M || SkinJogAx2Minus_M) && !Ax1MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1MinusJog)
- IF (Ax1PlusJogKey || KbJogAx1Plus_M || SkinJogAx1Plus_M) && !Ax2PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2PlusJog)
- IF (Ax1MinusJogKey || KbJogAx1Minus_M || SkinJogAx1Minus_M) && !Ax2MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2MinusJog)
- ;=============================================================================
- JogKeysSwapAndInvert2Stage
- ;=============================================================================
- ; Z+ MILL Y+ Z+
- ; | 4+ |
- ; X+ -- -- X- X+ -- -- X-
- ; | |
- ; Z- 4- Y- Z-
- IF (Ax2PlusJogKey || KbJogAx2Plus_M || SkinJogAx2Plus_M) && !Ax1PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1PlusJog)
- IF (Ax2MinusJogKey || KbJogAx2Minus_M || SkinJogAx2Minus_M) && !Ax1MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx1MinusJog)
- IF (Ax1MinusJogKey || KbJogAx1Minus_M || SkinJogAx1Minus_M) && !Ax2PlusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2PlusJog)
- IF (Ax1PlusJogKey || KbJogAx1Plus_M || SkinJogAx1Plus_M) && !Ax2MinusJogDisabled_M &&
- !(IncrContLED && FinalFeedOverride_W == 0) THEN (DoAx2MinusJog)
- ;=============================================================================
- AxesEnableStage
- ;=============================================================================
- ;clear axis fault errors
- ;IF AxisFault_M && !(DriveComFltOut_M || DriveComFltIn_M) && !EStopOk
- ; THEN FaultMsg_W = AXIS_FLT_CLR, RST AxisFault_M
- ;IF !EStopOk THEN SET DriveAlarmReset
- ;IF EStopOk THEN RST DriveAlarmReset
- ;allow MPU11 to turn on drives if no drive or drive fiber errors
- IF !DriveComFltIn_M && !DriveComFltOut_M THEN SET SV_MASTER_ENABLE
- ; (SV_MASTER_ENABLE will be turned off by stalls and other
- ; errors in the Fault-handling section of MainStage, below.)
- ;(If there is any drive or drive fiber error, then AxisFault_M will have
- ; been set previously, which will cause SV_STOP to be set, and SV_MASTER_ENABLE
- ; to be reset, later in MainStage)
- ;=============================================================================
- MainStage
- ;=============================================================================
- ;Do gather if commanded (uncomment and recompile for debugging purposes)
- ;IF Aux11Key || ((SV_MPU11_ABS_POS_2 < SV_MACHINE_PARAMETER_45) && (SV_MACHINE_PARAMETER_45 < -1000)) THEN (Aux11KeyPD)
- ;IF Aux11KeyPD THEN (SV_TRIGGER_PLOT_DUMP), SET SV_STOP
- ;IF Aux11Key || OUT25 THEN (SV_TRIGGER_PLOT_DUMP)
- ;------------------------------------------------------------------------------
- ; Skinning Section
- ;------------------------------------------------------------------------------
- ;IF TRUE THEN Skinning_W1 = SV_SKINNING_DATA_W_1, Skinning_W12 = SV_SKINNING_DATA_W_12,
- ;Skinning_FW8 = SV_SKINNING_DATA_FW_1, Skinning_DFW8 = SV_SKINNING_DATA_DFW_1
- ;Set up skinning framework
- IF TRUE THEN SkinFeedOverride_W1 = SV_SKINNING_DATA_W_1
- IF TRUE THEN SkinningInt2_W = SV_SKINNING_DATA_W_2
- IF TRUE THEN SkinningInt3_W = SV_SKINNING_DATA_W_3
- IF TRUE THEN SkinningInt4_W = SV_SKINNING_DATA_W_4
- IF TRUE THEN SkinningInt5_W = SV_SKINNING_DATA_W_5
- IF True THEN SkinningInt12_W = SV_SKINNING_DATA_W_12
- ;Tell Virtual Jog Panel Cnc software and PLC are alive
- IF SV_PC_SOFTWARE_READY THEN (CncAndPlcActive_M)
- ;The following code uses SV_SKINNING_DATA_W_12 to SET and RST MEM and OUT bits
- ;using SetMemBit(), RstMemBit() and SetOutput(), RstOutput()
- ;Care should be taken to RST MEM and OUT bits on SV_STOP when appropriate.
- ;Grouped I/O can be SET/RST as follows:
- ;IF SV_STOP THEN RST OUT40..OUT50
- ;Resets (turns off) OUT40 through OUT50
- IF TRUE THEN SkinningInt12_W = SV_SKINNING_DATA_W_12
- ;If bit 12 is set, skinning is requesting a membit to be set
- ;If bit 13 is set, skinning is requesting a membit to be reset
- ;If bit 14 is set, skinning is requesting a output to be set
- ;If bit 15 is set, skinning is requesting a output to be reset
- IF TRUE THEN BITTST SkinningInt12_W 12 SetMem_M
- IF TRUE THEN BITTST SkinningInt12_W 13 RstMem_M
- IF TRUE THEN BITTST SkinningInt12_W 14 SetOut_M
- IF TRUE THEN BITTST SkinningInt12_W 15 RstOut_M
- IF SetMem_M THEN Mem_W = SkinningInt12_W - 4096, SET MEM[Mem_W]
- IF RstMem_M THEN Mem_W = SkinningInt12_W - 8192, RST MEM[Mem_W]
- IF SetOut_M THEN Out_W = SkinningInt12_W - 16384, SET OUT[Out_W]
- IF RstOut_M THEN Out_W = SkinningInt12_W - 32768, RST OUT[Out_W]
- IF True THEN SkinningInt12_W = 0, RST SetMem_M, RST RstMem_M,
- RST SetOut_M, RST RstOut_M, Mem_W = 0, Out_W = 0
- IF True THEN KeepAliveTimer = 1000
- IF SV_PC_SOFTWARE_READY && (KeepAliveTimer < 1) THEN SET KeepAliveTimer
- IF KeepAliveTimer > 500 THEN (KeepAlive_M)
- IF KeepAliveTimer THEN RST KeepAliveTimer
- IF !SkinResetOk_M THEN (SkinResetDetectedPD)
- IF !EStopOk || SkinResetDetectedPD THEN (EStopPressed_M)
- IF SkinResetDetectedPD THEN SET ResetSet_M
- IF ResetSet_M && SkinResetOk_M THEN (SkinResetOkPD)
- IF SkinResetOk_M THEN RST ResetSet_M
- ;IF SV_STOP THEN RST OUT40..OUT50
- ;------------------------------------------------------------------------------
- ;End Skinning section
- ;------------------------------------------------------------------------------
- ;region configurableIO
- ;------------------------------------------------------------------------------
- ; Configurable IO Section
- ;------------------------------------------------------------------------------
- ;Inputs
- ;IF True THEN SET X_HomeLimitOk ;&*;
- ;IF True THEN SET Y_HomeLimitOk ;&*;
- ;IF True THEN SET Z_HomeLimitOk ;&*;
- ;IF True THEN SET Fourth_HomeLimitOk ;&*;
- IF True THEN SET DriveOk ;&*;
- IF True THEN RST ProbeDetect ;&*;
- IF True THEN RST ProbeTripped ;&*;
- ;EStopOk MEM bit is NEVER Used. An Estop input is MANDATORY ; H1 Pin 2
- IF True THEN RST BackGear, SET SpinLowInputDisabled_M ;&*;
- IF True THEN SET LubeOk ;&*;
- IF True THEN SET SpindleOk ;&*;
- IF True THEN RST SpindleLowRange, SET SpinLowInputDisabled_M ;&*;
- IF True THEN RST SpindleMedRange, SET SpinMedInputDisabled_M ;&*;
- IF True THEN RST SpindleHighRange, SET SpinHighInputDisabled_M ;&*;
- IF TRUE THEN RST ChuckIsOpen, SET ChuckIsOpenIs_M ;&*;
- IF TRUE THEN RST ChuckIsClosed, SET ChuckIsClosedIs_M ;&*;
- IF TRUE THEN SET LubeOk ;&*;
- IF TRUE THEN RST SpindleIsLocked, SET SpindleIsLockedIs_M ;&*;
- IF TRUE THEN RST PartChuteIsIn, SET PartChuteIsInIs_M ;&*;
- IF TRUE THEN RST CutOffIsDown, SET CutOffIsDownIs_M ;&*;
- ;Outputs
- ;IF TRUE THEN RST NoFaultOut ;&*; MEM241
- ;IF TRUE THEN RST Lube ;&*; MEM242
- ;IF TRUE THEN SET SpindleBrakeRelease, SET SpindleBrakeDisabled_M ;&*; MEM243
- ;IF TRUE THEN RST SpinFWD ;&*; MEM244
- ;IF TRUE THEN RST SpinREV ;&*; MEM245
- ;IF TRUE THEN RST DriveResetOut ;&*; MEM246
- ;IF TRUE THEN RST Flood ;&*; MEM247
- ;IF TRUE THEN RST TurnClampOn ;&*; MEM248
- IF TRUE THEN RST G540SpinRevOff ;&*; MEM249
- IF TRUE THEN RST G540SpinFwdOff ;&*; MEM250
- IF TRUE THEN RST Mist ;&*; MEM251
- IF TRUE THEN RST VacuumOn ;&*; MEM252 M33
- IF TRUE THEN RST DustCollectionOn ;&*; MEM253 M34
- IF TRUE THEN RST Custom ;&*; MEM254 M35
- IF TRUE THEN RST OpenChuck ;&*; MEM255 M13
- IF TRUE THEN RST CloseChuck ;&*; MEM256 M14
- IF TRUE THEN RST WorkLight ;&*; MEM257 M15
- IF TRUE THEN RST PartChute ;&*; MEM258 M20
- IF TRUE THEN RST LockSpindle ;&*; MEM259 M19
- ;spare ;&*; MEM260
- IF TRUE THEN RST OUTPUT1 ;&*; MEM261 M61
- IF TRUE THEN RST OUTPUT2 ;&*; MEM262 M62
- IF TRUE THEN RST OUTPUT3 ;&*; MEM263 M63
- IF TRUE THEN RST OUTPUT4 ;&*; MEM264 M64
- IF TRUE THEN RST OUTPUT5 ;&*; MEM265 M65
- IF TRUE THEN RST OUTPUT6 ;&*; MEM266 M66
- IF TRUE THEN RST OUTPUT7 ;&*; MEM267 M67
- IF TRUE THEN RST OUTPUT8 ;&*; MEM268 M68
- IF TRUE THEN RST CutOff ;&*; MEM269
- ; MEM270
- IF TRUE THEN SET StandardSpindleStage, RST G540SpindleStage ;&*;
- ;IF TRUE THEN SET G540SpindleStage, RST StandardSpindleStage ;&*;
- ;Limits/Home switches
- IF SV_LIMIT_TRIPPED THEN (LimitTripped_M)
- ;---------------------------Spindle Brake Release------------------------------
- IF SpindleBrakeDisabled_M THEN SpindleBrakeTimer = 0
- IF !SpindleBrakeDisabled_M && SV_MACHINE_PARAMETER_990 == 0 THEN SpindleBrakeTimer = 250
- IF !SpindleBrakeDisabled_M && SV_MACHINE_PARAMETER_990 > 0 THEN SpindleBrakeTimer = SV_MACHINE_PARAMETER_990
- ; Toggle brake mode on and off
- If (Aux7Key || SkinAux7_M) && !SpindleBrakeDisabled_M THEN (SpindleBrakePD)
- If SpindleBrakePD ^ SpinBrakeMode_M THEN (SpinBrakeMode_M)
- IF !SpindleBrakeDisabled_M && !SpindleBrakeRelease THEN (Aux7LED)
- ; Set SpindleBrakeTimer if spindle is commanded to turn on.
- ; If SpindleBrake is disabled, SpindleBrakeTimer will = 0 and spindle will turn on right away.
- IF ((StandardSpindleStage && SpindleEnableOut_M) ||
- (G540SpindleStage && (SpindleForward_M || SpindleReverse_M)))
- THEN SET SpindleBrakeTimer
- ; Reset SpindleBrakeTimer if Spindle is not running
- IF ((StandardSpindleStage && !SpindleEnableOut_M) ||
- (G540SpindleStage && (!SpindleForward_M && !SpindleReverse_M)))
- THEN RST SpindleBrakeTimer
- ; Turn on SpindleBrakeRelease if SpindleBrake is enabled and when spindle is
- ; requested to turn on OR the SpinBrakeMode_M is off.
- IF !SpindleBrakeDisabled_M &&
- (((StandardSpindleStage && SpindleEnableOut_M) ||
- (G540SpindleStage && (SpindleForward_M || SpindleReverse_M))) || (!SpinBrakeMode_M))
- THEN SET SpindleBrakeRelease
- ; Turn off SpindleBrakeRelease if SpindleBrake is enabled and SpinBrakeMode_M is on
- ; and Spindle is not running
- IF !SpindleBrakeDisabled_M && SpinBrakeMode_M &&
- ((StandardSpindleStage && !SpindleEnableOut_M) ||
- (G540SpindleStage && (!SpindleForward_M && !SpindleReverse_M)))
- THEN RST SpindleBrakeRelease
- ; Turn on SpindleBrakeRelease if SpindleBrake is enabled and SpinBrakeMode_M is off
- ; and Spindle is not running
- ;------------------------------------------------------------------------------
- ;No Fault Out
- IF !SV_STOP THEN (NoFaultOut)
- ;Drive Reset
- IF !EStopOk || SkinResetOkPD THEN (DriveResetOut)
- ;--TurnClampOn
- IF M10 THEN (TurnClampOn) ; cleared by M11 or by program not running
- ;VacuumOn
- IF M33 && SV_PROGRAM_RUNNING THEN (VacuumOn)
- ;DustCollectionOn
- IF M35 && SV_PROGRAM_RUNNING THEN (DustCollectionOn)
- ;------------------------------------Chuck-------------------------------------
- ;Open Chuck
- IF TRUE THEN ChuckTimer = SV_MACHINE_PARAMETER_992
- IF M14 && !SpindleEnableOut_M THEN RST CloseChuck, SET OpenChuck, SET ChuckTimer
- IF !M14 THEN RST ChuckTimer, RST OpenChuck
- IF OpenChuck && (ChuckIsOpen || (ChuckIsOpenIs_M && ChuckTimer))
- THEN SET ChuckOpenCloseComplete
- ;OpenFault
- IF OpenChuck && (ChuckTimer && !ChuckIsOpenIs_M)
- THEN FaultMsg_W = CHUCK_TIMEOUT, Set OtherFault_M, RST ChuckTimer, RST OpenChuck, RST M14
- ;Close Chuck
- IF M16 && !SpindleEnableOut_M THEN SET CloseChuck, RST OpenChuck, SET ChuckTimer
- IF !M16 THEN RST ChuckTimer, RST CloseChuck
- IF CloseChuck && (ChuckIsClosed || (ChuckIsClosedIs_M && ChuckTimer))
- THEN SET ChuckOpenCloseComplete
- ;CloseFault
- IF CloseChuck && (ChuckTimer && !ChuckIsClosedIs_M)
- THEN FaultMsg_W = CHUCK_TIMEOUT, Set OtherFault_M, RST ChuckTimer, RST CloseChuck, RST M16
- ;Clear chuck bits
- IF (!M14 && !M16 && SV_PROGRAM_RUNNING) THEN RST OpenChuck, RST CloseChuck,
- RST ChuckOpenCloseComplete,
- RST ChuckTimer
- ;-----------------------------------End Chuck----------------------------------
- ;-----------------------------------PartChute----------------------------------
- IF TRUE THEN SpindleLockTimer = SV_MACHINE_PARAMETER_994
- IF M22 THEN SET PartChute, SET PartchuteTimer
- IF PartChuteIsIn || (PartChuteIsInIs_M && PartChuteTimer)
- THEN SET PartChuteComplete
- IF !M22 THEN RST PartChute, RST PartchuteTimer, RST PartChuteComplete
- ;Fault
- IF PartchuteTimer && !PartChuteIsInIs_M
- THEN FaultMsg_W = PART_CHUTE_TIMEOUT, SET OtherFault_M, RST PartChute, RST PartchuteTimer
- ;-----------------------------------End PartChute------------------------------
- ;LockSpindle 93
- IF TRUE THEN SpindleLockTimer = SV_MACHINE_PARAMETER_993
- IF M19 THEN SET LockSpindle, SET SpindleLockTimer
- IF SpindleIsLocked || (SpindleIsLockedIs_M && SpindleLockTimer)
- THEN SET SpindleLockComplete
- IF !M19 THEN RST LockSpindle, RST SpindleLockTimer, RST SpindleLockComplete
- ;Fault
- IF SpindleLockTimer && !SpindleIsLockedIs_M
- THEN FaultMsg_W = SPINDLE_LOCK_TIMEOUT, SET OtherFault_M, RST SpindleLockTimer
- ;Cutoff 95
- IF TRUE THEN CutOffTimer = SV_MACHINE_PARAMETER_995
- IF M27 THEN SET CutOff, SET CutOffTimer
- IF CutOffIsDown || (CutOffIsDownIs_M && CutOffTimer)
- THEN SET CutOffComplete
- IF !M27 THEN RST CutOff, RST CutOffTimer, RST CutOffComplete
- ;Fault
- IF CutOffTimer && !CutOffIsDownIs_M
- THEN FaultMsg_W = CUT_OFF_TIMEOUT, SET OtherFault_M, RST CutOff, RST CutOffTimer
- ;Custom
- IF M37 THEN (Custom)
- ;OUTPUT1-8
- IF M61 THEN (OUTPUT1)
- IF M62 THEN (OUTPUT2)
- IF M63 THEN (OUTPUT3)
- IF M64 THEN (OUTPUT4)
- IF M65 THEN (OUTPUT5)
- IF M66 THEN (OUTPUT6)
- IF M67 THEN (OUTPUT7)
- IF M68 THEN (OUTPUT8)
- ;}endregion configurableIO}
- ;------------------------------------------------------------------------------
- ; Probe protection while jogging
- ;------------------------------------------------------------------------------
- ; If the probe comes to be tripped while a jogging move is active,
- ; then trigger an error (stop jog and output message),
- ; and also disable jogging in the direction it was going.
- IF (Ax1PlusJogKey || KbJogAx1Plus_M || SkinJogax1Plus_M) ||
- (Ax1MinusJogKey || KbJogAx1Minus_M || SkinJogax1Minus_M) ||
- (Ax2PlusJogKey || KbJogAx2Plus_M || SkinJogax2Plus_M) ||
- (Ax2MinusJogKey || KbJogAx2Minus_M || SkinJogax2Minus_M) ||
- (Ax3PlusJogKey || KbJogAx3Plus_M || SkinJogax3Plus_M) ||
- (Ax3MinusJogKey || KbJogAx3Minus_M || SkinJogax3Minus_M) ||
- (Ax4PlusJogKey || KbJogAx4Plus_M || SkinJogax4Plus_M) ||
- (Ax4MinusJogKey || KbJogAx4Minus_M || SkinJogax4Minus_M)
- THEN (JogKeyPressed_M)
- IF ProbeTripped THEN (ProbePD)
- IF ProbePD && DoAx1PlusJog THEN SET Ax1PlusJogDisabled_M
- IF ProbePD && DoAx1MinusJog THEN SET Ax1MinusJogDisabled_M
- IF ProbePD && DoAx2PlusJog THEN SET Ax2PlusJogDisabled_M
- IF ProbePD && DoAx2MinusJog THEN SET Ax2MinusJogDisabled_M
- IF ProbePD THEN SET Ax3MinusJogDisabled_M
- IF ProbePD && !JogProbeFault_M && (DoAx1PlusJog || DoAx1MinusJog ||
- DoAx2PlusJog || DoAx2MinusJog || DoAx3PlusJog || DoAx3MinusJog ||
- DoAx4PlusJog || DoAx4MinusJog || DoAx5PlusJog || DoAx5MinusJog)
- THEN (JogProbeFaultPD)
- IF JogProbeFaultPD THEN SET JogProbeFault_M,
- SET ErrorFlag_M,
- ErrorMsg_W = PROBE_JOG_TRIP_MSG
- IF !ProbeTripped && !JogKeyPressed_M
- THEN RST JogProbeFault_M,
- RST Ax1PlusJogDisabled_M,
- RST Ax1MinusJogDisabled_M,
- RST Ax2PlusJogDisabled_M,
- RST Ax2MinusJogDisabled_M,
- RST Ax3MinusJogDisabled_M
- ; If the probe comes to be tripped while no program cycle is running,
- ; then save the previous jog mode (fast/slow) and force slow mode.
- IF ProbeTripped && !SV_PROGRAM_RUNNING && !JogModeSaved_M
- THEN (SaveJogModePD),
- SET JogModeSaved_M
- IF SaveJogModePD && FastSlowLED THEN SET LastProbeMode_M
- IF SaveJogModePD && !FastSlowLED THEN RST LastProbeMode_M
- IF ProbeTripped && !SV_PROGRAM_RUNNING THEN SET FastSlowLED
- ; Once the probe clears, restore the saved mode and reset
- IF !ProbeTripped && JogModeSaved_M && !LastProbeMode_M
- THEN RST FastSlowLED,
- RST JogModeSaved_M
- ;--Process important Keyboard keys all the time
- ;--Cycle Cancel (ESC)
- IF Kb_Escape THEN (KbCycleCancel_M)
- ;KbFeedHold_M (spacebar)
- IF Kb_spacebar && AllowKbInput_M && SV_PROGRAM_RUNNING THEN (KbFeedHold_M)
- IF SV_PC_VIRTUAL_JOGPANEL_ACTIVE THEN (KbJpActive_M)
- ;Call KeyboardEventsStage if needed
- IF Kb_L_Ctrl || Kb_R_Ctrl ||
- Kb_L_Shift || Kb_R_Shift ||
- Kb_R_Alt || Kb_L_Alt || KbJpActive_M
- THEN SET KeyboardEventsStage
- IF (Kb_L_Ctrl || Kb_R_Ctrl || Kb_L_Shift || Kb_R_Shift || Kb_R_Alt || Kb_L_Alt)
- && (Kb_j || Kb_f || Kb_a || Kb_s) && !AllowKbInput_M
- THEN InfoMsg_W = KB_JOG_MSG
- ;--Handle Faults
- IF !EStopOk || PLCFault_M || SV_STALL_ERROR || SpindleFault_M || ResetSet_M ||
- LubeFault_M || AxisFault_M || ProbeFault_M || OtherFault_M THEN SET SV_STOP
- IF SV_STOP THEN RST SV_MASTER_ENABLE
- IF Initialize_T && !SpindleOk
- THEN FaultMsg_W = SPINDLE_FAULT_MSG, SET SpindleFault_M, SET OtherFault_M
- IF TRUE THEN DriveFaultTimer = SV_MACHINE_PARAMETER_991, SET DriveFaultTimer
- IF DriveOK || !EStopOk || ResetSet_M || (!SV_PC_POWER_AXIS_1 && !SV_PC_POWER_AXIS_2 && !SV_PC_POWER_AXIS_3)
- THEN RST DriveFaultTimer
- IF Initialize_T && (!DriveOk && DriveFaultTimer) && EstopOK && (SV_PC_POWER_AXIS_1 || SV_PC_POWER_AXIS_2 || SV_PC_POWER_AXIS_3)
- THEN FaultMsg_W = DRIVE_FAULT_MSG, SET DriveFault_M, SET OtherFault_M
- IF !EstopOK THEN SET SkinResetOk_M, RST ResetSet_M
- IF !EStopOk || SkinResetOkPD
- THEN RST SV_STALL_ERROR,
- RST LubeFault_M,
- RST SpindleFault_M,
- RST OtherFault_M,
- RST ProbeFault_M,
- RST ProbeMsgSent_M,
- RST DriveFault_M
- ;IF Initialize_T && !LubeOk && !SV_PROGRAM_RUNNING
- ; THEN SET LubeFault_M, FaultMsg_W = LUBE_FAULT_MSG
- ; Echo some system variables to memory bits, for troubleshooting only
- IF SV_MASTER_ENABLE THEN (MasterEnable_M)
- IF SV_STALL_ERROR THEN (Stall_M)
- IF SV_STOP THEN (Stop_M)
- ; Reset faults if E-stop is released and no fault condition persists
- IF EStopOk && SkinResetOk_M &&
- !(PLCFault_M || SV_STALL_ERROR || SpindleFault_M || LubeFault_M ||
- AxisFault_M || OtherFault_M || SoftwareNotReady_M || PLCExecutorFault_M)
- THEN RST SV_STOP
- IF ResetSet_M && VirtualJpRunning_M
- THEN SET OtherFault_M, FaultMsg_W = RESET_DETECTED
- IF True THEN MessageTimer = 200
- IF SkinResetOkPD THEN SET MessageTimer
- IF MessageTimer THEN InfoMsg_W = RESET_CLEARED, RST MessageTimer
- IF ResetSet_M || !EstopOK THEN RST MessageTimer
- ; Automatically reset non-fault errors after a short time
- IF ErrorFlag_M THEN SET ErrorFlag_T
- IF ErrorFlag_T THEN RST ErrorFlag_M, RST ErrorFlag_T
- IF ProbeFault_M && !ProbeMsgSent_M
- THEN FaultMsg_W = PROBE_FAULT_MSG, SET ProbeMsgSent_M
- ;--M-Codes
- ; Reset these M-codes if not in CNC Program Running mode
- IF !(SV_PROGRAM_RUNNING || SV_MDI_MODE) || SV_STOP
- THEN RST M3,
- RST M4,
- RST M8,
- RST M7,
- RST M10
- ; Detect auto spindle and coolant requests during manual modes
- IF M3 || M4 THEN (AutoSpindlePD)
- IF AutoSpindlePD && !SpinAutoModeLED
- THEN SET ActivateFeedHold_M,
- InfoMsg_W = AUTO_SPINDLE_PROMPT
- IF M7 || M8 THEN (AutoCoolantPD)
- IF AutoCoolantPD && !CoolAutoModeLED
- THEN SET ActivateFeedHold_M,
- InfoMsg_W = AUTO_COOLANT_PROMPT
- IF ActivateFeedHold_M THEN TriggerPause_T=100, SET TriggerPause_T
- IF TriggerPause_T THEN RST TriggerPause_T, RST ActivateFeedHold_M
- ;IF AtcIsEnabled &&
- IF TRUE THEN Test_W = SV_MPU11_ABS_POS_0
- ;--turn off default setup variable
- IF True THEN RST OnAtPowerUp_M
- ;------------------------------------------------------------------------------
- SetRequestedPositionStage
- ;------------------------------------------------------------------------------
- IF 1 == 1 THEN SET MEM1000
- ;------------------------------------------------------------------------------
- MonitorTurretPositionStage
- ;------------------------------------------------------------------------------
- IF AtcIsGrayCode3_M THEN SET AtcGrayCode3Stage
- IF !AtcIsGrayCode3_M THEN RST AtcGrayCode3Stage
- IF AtcIsGrayCode4_M THEN SET AtcGrayCode4Stage
- IF !AtcIsGrayCode4_M THEN RST AtcGrayCode4Stage
- IF AtcIsIncremental_M THEN SET AtcIncrementalStage
- IF !AtcIsIncremental_M THEN SET AtcIncrementalStage
- ;------------------------------------------------------------------------------
- AtcGrayCode3Stage
- ;------------------------------------------------------------------------------
- IF TRUE THEN CurrentTurretPosition_W = 0
- IF ToolTurretPosBit1 && ToolTurretPosBit2 && !ToolTurretPosBit3 THEN CurrentTurretPosition_W = 1
- IF !ToolTurretPosBit1 && ToolTurretPosBit2 && !ToolTurretPosBit3 THEN CurrentTurretPosition_W = 2 ;**** Bit2
- IF !ToolTurretPosBit1 && !ToolTurretPosBit2 && !ToolTurretPosBit3 THEN CurrentTurretPosition_W = 3
- IF ToolTurretPosBit1 && !ToolTurretPosBit2 && !ToolTurretPosBit3 THEN CurrentTurretPosition_W = 4 ;**** Bit1
- IF ToolTurretPosBit1 && !ToolTurretPosBit2 && ToolTurretPosBit3 THEN CurrentTurretPosition_W = 5
- IF !ToolTurretPosBit1 && !ToolTurretPosBit2 && ToolTurretPosBit3 THEN CurrentTurretPosition_W = 6 ;**** Bit3
- IF !ToolTurretPosBit1 && ToolTurretPosBit2 && ToolTurretPosBit3 THEN CurrentTurretPosition_W = 7
- IF ToolTurretPosBit1 && ToolTurretPosBit2 && ToolTurretPosBit3 THEN CurrentTurretPosition_W = 8
- IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W
- ;------------------------------------------------------------------------------
- AtcGrayCode4Stage
- ;------------------------------------------------------------------------------
- IF 1 == 1 THEN SET MEM1000
- ;------------------------------------------------------------------------------
- AtcIncrementalStage
- ;------------------------------------------------------------------------------
- ;For incremental ATC's, ToolTurretPosBit1 is the tool counter and toggles each time the
- ;turret rotates to a tool position. If ToolTurretPosBit1 toggles while ReverseToolTurret is
- ;not on, then CurrentTurretPosition_W = CurrentTurretPosition_W + 1. If ToolTurretPosBit1
- ;toggles while ReverseToolTurret is on, then CurrentTurretPosition_W = CurrentTurretPosition_W -1.
- IF ToolTurretPosBit1 && RotateToolTurret && !ReverseToolTurret
- THEN CurrentTurretPosition_W = CurrentTurretPosition_W + 1
- IF ToolTurretPosBit1 && RotateToolTurret && !ReverseToolTurret
- THEN CurrentTurretPosition_W = CurrentTurretPosition_W - 1
- ;------------------------------------------------------------------------------
- IndexTurretStage
- ;------------------------------------------------------------------------------
- IF 1 == 1 THEN SET MEM1000
- ;==============================================================================
- MessageStage
- ;==============================================================================
- IF FaultMsg_W != 0 THEN SET ShowFaultStage
- IF FaultMsg_W == 0 && ErrorMsg_W != 0 THEN SET ShowErrorStage
- IF FaultMsg_W == 0 && ErrorMsg_W == 0 && InfoMsg_W != 0 THEN SET ShowInfoStage
- ;==============================================================================
- ShowFaultStage
- ;==============================================================================
- IF !((FaultMsg_W % 256 == 1) || (FaultMsg_W % 256 == 2))
- THEN JMP BadMsgStage
- IF True THEN MSG FaultMsg_W
- IF !EStopOk || (SkinResetOkPD) THEN FaultMsg_W = 0,
- InfoMsg_W = MSG_CLEARED_MSG,
- RST ShowFaultStage
- ;==============================================================================
- ShowErrorStage
- ;==============================================================================
- IF !((ErrorMsg_W % 256 == 1) || (ErrorMsg_W % 256 == 2))
- THEN JMP BadMsgStage
- IF True THEN MSG ErrorMsg_W, SET MsgClear_T
- IF MsgClear_T THEN ErrorMsg_W = 0,
- RST MsgClear_T,
- RST ShowErrorStage
- ;==============================================================================
- ShowInfoStage
- ;==============================================================================
- IF !((InfoMsg_W % 256 == 1) || (InfoMsg_W % 256 == 2))
- THEN JMP BadMsgStage
- IF True THEN MSG InfoMsg_W, SET MsgClear_T
- IF MsgClear_T THEN InfoMsg_W = 0,
- RST MsgClear_T,
- RST ShowInfoStage
- ;=============================================================================
- BadMsgStage
- ;=============================================================================
- IF True THEN FaultMsg_W = 0,
- ErrorMsg_W = 0,
- InfoMsg_W = BAD_MESSAGE_MSG,
- RST BadMsgStage
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement