Macropump for Galesburg Lathe

From MachCustomizeWiki

Option Explicit
 ' Macropump for demo panel and Turn
 
 Const slave = 1 ' **** Change this if you use another ModBus Slave address
 
 Dim swT1 as Boolean ' toggle 1 true is Down
 Dim swT2 as Boolean ' toggle 2 true is down
 Dim swR1 as Integer ' Rotary 1 three positions 1, 2 and 3
 Dim swR2 as Integer ' Rotary 2 four positions 1, 2, 3 and 4
 
 Dim CurrScreen as Integer
 Const scrProgRun = 	1
 Const scrOffsets = 2
 Const scrVisiCycle = 10
 Const scrDiags = 5
 
 Const FeedHolding = 1244        ' LED shows Had one red button press
 Const OUTBASE = OUTPUT7 - 1
 
 
 ' =============================================================
 Sub Main ()
 
 Preamble
 GetConsistent
 DecodeSwitches
 ActionSwitches
 ReadButtons
 SetFRO
 WriteDisplays
 
 End Sub 'Main
 
 '=================================================================
 ' Action functions to implement changes
 ' ================================================================
 
 Sub ButtonDown (nButt as Integer)
 ' Called when a button is pressed. nButt says which
 
 	If nButt = 1 Then ' Green buttons
 			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then
 				DoButton 0														' Cycle Start  **** 033
 		  ElseIf CurrScreen = scrVisiCycle Then ' we are going to deal with the spindle
 		  		If GetOEMLED (11)= 0 Then ' Spindle is stopped
 		  				Code "M3"
 		  		End If
 			End If ' different screen actions
 	End If ' Button 0
 
 	If nButt = 3 Then ' Red button
 			If CurrScreen = scrProgRun OR CurrScreen = scrDiags Then
 		   	If GetUserLED (FeedHolding) Then
 		    		SetUserLED FeedHolding, 0 ' now in stop state
 		      	DeActivateSignal (OUTBASE + 3)
 		      	DoButton 3												' **** 033
 		   	Else
 		   			If GetLed (4) Then 						' its running
 		   				SetUserLED Feedholding, 1 ' now in Hold state
 		      		ActivateSignal (OUTBASE + 3)
 		   				DoButton 1 											' **** 033
 		   			End If 												' was running
 		   	End If ' whatever state we were in
 		  ElseIf CurrScreen = scrVisiCycle Then ' we are going to deal with the spindle
 		  		If GetOEMLED (11)<>0 Then ' Spindle is running
 		  				Code "M5"
 		  		End If
 			End If ' different screen actions
 	End If ' Button 3
 	
 
 
 End Sub 'ButtonDown
 
 ' ------------------------------------------------------------------
 
 Sub ButtonUp (nButt as Integer)
 ' Called when a button is released. nButt says which
 ' Probably not much use but here in case
 
 
 End Sub 'ButtonUp
 
 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 Sub swT1ChangedTo (ison as Boolean)
 ' Toggle switch 1 changed
 
 Message "Toggle 1 changed"
 
 End Sub ' swUpdated
 
 '-----------------------------------------------------------------------
 
 Sub swT2ChangedTo (ison as Boolean)
 ' Toggle swich 2 changed
 
 	If GetOEMLED (83) <> 0 AND ison = 0 Then ' need to toggle
 		DoOEMButton (103) ' toggle jog state
 	End If
 	
 	If GetOEMLED (83) = 0 AND ison <> 0 Then ' need to toggle
 		DoOEMButton (103) ' toggle jog state
 	End If
 	
 
 End Sub ' swUpdated
 
 '-----------------------------------------------------------------------
 
 Sub swR1ChangedTo (posn as Integer)
 ' Rotary 1 changed
 
 Const nOps = 3
 Const OpLEDBase = 1110
 
 Dim i as Integer
 Dim iOp as Integer
 
 
 For i = 1 to nOps
    SetUserLED OpLEDBase + i -1, 0  ' clear the LEDs
 Next i
 
 
 	Message "Operation number" & posn
 	SetUserDRO 1104, posn
 	
 	SetUserLED opLEDBase + posn - 1, 1  ' light the chosen LED
 
 
 End Sub ' swUpdated
 
 '-----------------------------------------------------------------------
 
 Sub swR2ChangedTo (posn as Integer)
 ' Rotary 2 changed
 
 	Message "Tool number" & posn
 	SetDRO 24, posn
 
 End Sub ' swUpdated
 
 ' =====================================================================
 
 
 Sub Preamble ()
 ' Do the interesting things to setup data here
 
 	CurrScreen = GetPage ()
 
 End Sub ' Preamble
 
 ' -------------------------------------------------------------------
 
 Sub GetConsistent ()
 ' Here we see if user has done anthing funng (e.g. with screen buttons)
 ' that invalidates the state we think we are in.
 
 
 End Sub ' GetConsistent
 
 '----------------------------------------------------------------------
 
 Sub WriteDisplays ()
 ' Here we write to the LCD and real LEDs reflecting the state things are in
 
 Dim strText as String
 
 Dim strLabB1 as String	' label for button 1
 Dim strLabB2 as String	' label for button 2
 Dim strLabB3 as String	' label for button 3
 
 
   strLabB2 = "    " ' not currently used
 
   If GetOEMLED (83) Then ' Jog is allowed
   	ActivateSignal OUTBASE + 5
   Else
   	DeActivateSignal OUTBASE + 5
 	End If ' displaying the Jog State
 	
 	Select Case CurrScreen  ' put out the heading line
 	Case = scrProgRun
 	strText =           "    Program Run     "
 	strLabB1 = "Run "
 	If GetLed (4) <> 0 Then ' its running so we might pause
 		strLabB3 = "Hold"
 	Else
 		If GetOEMLed (11) <> 0 Then ' spindle is running so it must be paused
 			strLabB3 = "Stop"
 		Else
 			strLabB3 = "    "
 		End If
 	End If ' dealing with the button 3 label
 	If GetLed (5) = 0 Then ' we are not paused 
 	  DeActivateSignal (OUTBASE + 3) ' don't flash the LED
 	Else
 		ActivateSignal (OUTBASE + 3) ' flash the LED 3
 	End If
 
 	
 	Case = scrOffsets
 	strText =           "      Offsets       "
 	strLabB1 = "    "
 	strLabB3 = "    "
 	
 	Case = scrVisiCycle
 	strText =           "     VisiCycle      "
 	strLabB1 = "Spin"
 	strLabB3 = "Stop"
 	
 	Case = scrDiags
 	strText =           "    Diagnostics     "
 	StrLabB1 = "Run "
 	Case Else
 	strText =           "                    " 'unknown screen
 	End Select
 
 	strText = strText & "                    "
 	strText = strText & "                    "
 	strText = strText + strLabB1 & " " & strLabB2 & "  " & strLabB3 _
 	     & " " & strLabB1
 	SetModIOString slave, 0, 0, strText ' write it
 
 End Sub ' Write displays
 
 '---------------------------------------------------------------------------
 
 Sub ReadButtons ()
 ' Looks at the inputs for transitions and calls the ButtonDown routine if Transition
 
 Rem could be a loop but I hope this code is clearer
 
 	If IsActive (INPUT1) Then
 		If GetUserLED (1241) = 0 Then ' It is a new press
 				SetUserLED 1241, 1
 				ButtonDown 1
 		End if ' dealing with new press
 	Else ' button is up
 	   If GetUserLED (1241) <> 0 Then ' It is new unpress
 				SetUserLED 1241, 0
 				ButtonUp 1
 		End if ' dealing with new press
 	End IF ' button 1 processing
 	
 	If IsActive (INPUT2) Then
 		If GetUserLED (1242) = 0 Then ' It is a new press
 				SetUserLED 1242, 1
 				ButtonDown 2
 		End if ' dealing with new press
 	Else ' button is up
 	   If GetUserLED (1242) <> 0 Then ' It is new unpress
 				SetUserLED 1242, 0
 				ButtonUp 2
 		End if ' dealing with new press
 	End IF ' button 2 processing
 	
 		If IsActive (INPUT3) Then
 		If GetUserLED (1243) = 0 Then ' It is a new press
 				SetUserLED 1243, 1
 				ButtonDown 3
 		End if ' dealing with new press
 	Else ' button is up
 	   If GetUserLED (1243) <> 0 Then ' It is new unpress
 				SetUserLED 1243, 0
 				ButtonUp 3
 		End if ' dealing with new press
 	End IF ' button 3 processing
 
 	
 	End Sub ' ReadButtons
 	
 	'-----------------------------------------------------------------
 
 
 
 Sub SetFRO ()
 ' Does simple analog read and straight to DRO
 
 Dim fro as Integer
 
 	fro = GetInput (64)  		' read Analog1
 	setUserDRO 1253, fro
 	fro = (fro * 95.0)/1024.0
 	setDRO 21, fro+5		' range is now 5 to 100%
 
 End Sub ' SetFRO
 
 ' ----------------------------------------------------------------------
 
 
 Sub DecodeSwitches ()
 
 ' This routine takes the analog ports and sets up the switch states from them
 
 Dim ana as Integer
 
 	ana = GetInput(65) 'analog Input 2 On ModIO
 	Select Case ana
 	Case < 100 
 		swT1 = True
 		swR1 = 1
 	Case < 340
 		swT1 = True
 		swR1 = 2
 	Case < 510
 		swT1 = True
 		swR1 = 3
 	Case < 690
 		swT1 = False
 		swR1 = 1
 	Case < 910
 		swT1 = False
 		swR1 = 2
 	Case >= 910
 		swT1 = False
 		swR1 = 3
 	End Select
 
 	ana = GetInput(66) 'analog Input 3 On ModIO
 	Select Case ana
 	Case < 68 
 		swT2 = True
 		swR2 = 1
 	Case < 212
 		swT2 = True
 		swR2 = 2
 	Case < 340
 		swT2 = True
 		swR2 = 3
 	Case < 511
 		swT2 = True
 		swR2 = 4
 	Case < 684
 		swT2 = False
 		swR2 = 1
 	Case < 819
 		swT2 = False
 		swR2 = 2
 	Case < 954
 		swT2 = False
 		swR2 = 3
 	Case >= 954
 		swT2 = False
 		swR2 = 4
 	End Select
 
 End Sub ' DecodeSwitches
 
 ' -------------------------------------------------------------------------
 
 Sub ActionSwitches ()
 ' This routine displays switch states on Diags page and
 ' calls the Action routines if they have been changed
 
 	If GetUserLED (1251) = 0 Then ' previously T1 was OFF
 			If swT1 Then
 	   		SetUserLED 1251, 1
 	   		swT1ChangedTo TRUE
 			End If
 	Else ' T1 was ON
 		 If swT1 = 0 Then	
 	   		SetUserLED 1251, 0
 	   		swT1ChangedTo FALSE
 	   	End If
 	End If
 	If GetUserDRO (1251) <> swR1 Then ' change in rotary 1 position
 		SetUserDRO 1251, swR1
 		swR1ChangedTo swR1
 	End If
 	
 	If GetUserLED (1252) = 0 Then ' previously T2 was OFF
 			If swT2 Then
 	   		SetUserLED 1252, 1
 	   		swT2ChangedTo TRUE
 			End If
 	Else ' T2 was ON
 		 If swT2 = 0 Then	
 	   		SetUserLED 1252, 0
 	   		swT2ChangedTo FALSE
 	   	End If
 	End If
 	If GetUserDRO (1252) <> swR2 Then ' change in rotary 2 position
 		SetUserDRO 1252, swR2
 		swR2ChangedTo swR2
 	End If
 
 End Sub ' ActionSwitches
 
 ' ---------------------------------------------------------------