QtPyVCP - Single Block - halui.program.step {SOLVED}

More
6 years 9 months ago #154098 by Donb9261
I would like to have more control over how step works. Currently, you can install a button and apply program.step which will step one line at a time like most controllers. But, I would like it as a mode.

if single block... Then cycle start runs one line at a time... else execute whole program.

Maybe add a slot to program.step function that allows the bool from the cycle start to trigger the AUTO_STEP cmd???

halui.program.step pin is exposed in axis. Can it be exposed in QtPyVCP? Not sure how??? Maybe some insight. Once working I would do a run from line as step function to allow one to chose where to start single step from. Would that provide any help for my desire?

Only issue i see is not being able to turn off step while running. I suppose I could grab the running line where step stopped, then use my run from line routine to go to the line in auto mode without step and set feed hold. The cycle start would run the program normally. Kinda of how Fanuc does it in the background.

Currently my run from line routine(function) works great. Just need to know how or if possible to simulate the tandard single block functionality other controllers use as standard protocol. Odd that LCNC chose such a methodology and avoided the standard practice as it is the defacto standard. I believe there is an ISO for that in RS274 gcode standards. I can look it up.

Regardless, some expert input would be greatly appreciated.

Don San

Please Log in to join the conversation.

More
6 years 9 months ago #154113 by BigJohnT
Something like that you would have to create in Python.

Looks at my Mill Touch V6 for tons of ideas.

github.com/jethornton/mill_touch_v6

JT

Please Log in to join the conversation.

More
6 years 9 months ago #154115 by KCJ
I like the idea of having step as a mode and using the cycle start button to start each step.

I think it might be simpler than you are thinking to implement. Currently if you start a program running you can pause it and hit the program.step button to step, and if you press the program.run button it will run continuously from the the current line.

I think all you need to do is add a checkbox to select whether step mode is active, and then add a custom cycle start method in your mainwindow.py file. This method would check if the checkbox was checked, and if it was then call actions.program.step(), else actions.program.run() call.

If you want to be able to use a physical button connected thru HAL to trigger this method it would be easy to add a pin and connect it to the method.

Please Log in to join the conversation.

More
6 years 9 months ago #154171 by Donb9261
Thanks guys,

Pointed me in the right direction. Here is what I came up with:

QPushButton - singleBlock - Set Checkable

Cycle Start = Obvious btn usage

STEP FROM LINE - Start the program from a specified line number in STEP MODE if . Cycle Start runs each block one at a time from the specified block. Sub Calls and M calls obviously do not step as LCNC from what I see limits you there. :( Uses the same def call but if's the SB button status.

RUN FROM LINE - Run the program normally from the specified line. Run from here button (UI) work around (see other post) waits for operator to press the button and then execution starts.

Cycle Start checks status of SB button and then sets program.step or program.run based on it's status. Works great. No bugs so far.

Code:
# ------------------------------------------------------------------------- # BEGIN RUN/STEP FROM HERE SETUP # ------------------------------------------------------------------------- ### If Single Block is active(Checked) then the program will start from ### the line specified in the lineNumber VCPLineEdit in STEP mode. ### NOTE *****The cycle start button works is used for STEP ### WARNING *****If NOT STEP run_from_here WILL EXECUTE Program when pressed only ### RECOMMENDED *****Never executing full run inside a py program call. ### ELSE it will set the run_from_here normal and wait for operator ### to press the button in the UI def setStartingLineLabel(self): sb = self.singleBlock.isChecked() if sb: print('Single Block Value: ' + str(sb)) # Set variable to the VCPLineEdit Text Value line_number = self.lineNumber.text() # Set StatusLabel to alert where the program will start self.run_from_here.setText('RUN FROM LINE ' + line_number) # Set the actionName property of the Run From Line Btn self.run_from_here.setProperty('actionName', 'program.run:' + line_number) # Update the run_from_here checked status to notify when ready self.run_from_here.setChecked(True) # OPTIONAL - Play a sound to alert when ready playsound('/home/don/Downloads/bvmtnf_ui-21.wav') # Cause the click event for the 'run_from_here' btn self.run_from_here.click() # Set Feed Hold pause() # Clear Out the VCPLineEdit for lineNumber self.lineNumber.setText('') else: # Set variable to the VCPLineEdit Text Value line_number = self.lineNumber.text() # Set StatusLabel to alert where the program will start self.run_from_here.setText('RUN FROM LINE ' + line_number) # Set the actionName property of the Run From Line Btn self.run_from_here.setProperty('actionName', 'program.run:' + line_number) # Update the run_from_here checked status to notify when ready self.run_from_here.setChecked(True) # OPTIONAL - Play a sound to alert when ready playsound('/home/don/Downloads/bvmtnf_ui-21.wav') # Clear Out the VCPLineEdit for lineNumber self.lineNumber.setText('') def clearStartLineLabel(self): # Clear out text set by prior call self.run_from_here.setText('RUN FROM LINE') # UnCHeck the btn self.run_from_here.setChecked(False) # ------------------------------------------------------------------------- # END RUN/STEP FROM HERE SETUP # -------------------------------------------------------------------------

Code:
# ------------------------------------------------------------------------- # BEGIN CYCLE START FUNCTION # ------------------------------------------------------------------------- ### Works for normal run actions outside run from here def CycleStart(self): # Check Single Block Status sb = self.singleBlock.isChecked() if sb: # Start program in STEP step() else: # Start program in full run mode run() # ------------------------------------------------------------------------- # END CYCLE START FUNCTION # -------------------------------------------------------------------------

Init Connections:

Code:
### Setup connection to VCPLineEdit self.lineNumber.returnPressed.connect(self.setStartingLineLabel) ### Connect run_from_here Btn to clear label after start self.run_from_here.clicked.connect(self.clearStartLineLabel)

Please Log in to join the conversation.

More
6 years 9 months ago #154288 by KCJ
Very nice solution, thanks for following up!

Please Log in to join the conversation.

More
6 years 9 months ago #154299 by Donb9261
That is how I roll. Once I got my head wrapped around it, easy peasy. Thanks for the boost.

Please Log in to join the conversation.

Time to create page: 0.101 seconds
Powered by Kunena Forum