PathPilot Lathe with 6 place turret
12 Apr 2017 21:02 #91264
by rodw
Replied by rodw on topic PathPilot Lathe with 6 place turret
I don't really know what your code is meant to do but Andy is right, in an Interrupt service routine (which is what the servo-thread is), you can't do loops. All the looping has to be done by waiting until a state is set on a single pass through the routine.
In the last code you passed, this variable appears to be used to do that but a time delay is not set.
But, in the example, the zero value means no wait is programmed. I suspect you may get a result if you add a delay (which will be a count of servo-threads that you want to wait for).
In the last code you passed, this variable appears to be used to do that but a time delay is not set.
variable float sleeptime = 0; // our own timer to set delay between progress levels 1 and 2
But, in the example, the zero value means no wait is programmed. I suspect you may get a result if you add a delay (which will be a count of servo-threads that you want to wait for).
The following user(s) said Thank You: brianTruck
Please Log in or Create an account to join the conversation.
- brianTruck
- Topic Author
- Offline
- Premium Member
Less
More
- Posts: 104
- Thank you received: 7
13 Apr 2017 22:16 #91329
by brianTruck
Replied by brianTruck on topic PathPilot Lathe with 6 place turret
Thank's guys ,
Here is my new code based off what I think your telling me.I think I keep the real time moving.
case 1:
turn on turret and increment a variable for short delay so that opto's clear current tool
case 2:
when any opto goes to zero move onto case 3
case 3:
increment a variable for a short delay to let optos center
case 4:
check for tool if wrong tool go back to case 2
sleeptime allways -starts zero
delay_count -starts at zero
times -gets set from HAL or defaults to 500
optodelay -gets set from HAL
Turrets starts and keeps running no matter how short or long I set optodelay,
Thanks'
Brian
Here is my new code based off what I think your telling me.I think I keep the real time moving.
case 1:
turn on turret and increment a variable for short delay so that opto's clear current tool
case 2:
when any opto goes to zero move onto case 3
case 3:
increment a variable for a short delay to let optos center
case 4:
check for tool if wrong tool go back to case 2
sleeptime allways -starts zero
delay_count -starts at zero
times -gets set from HAL or defaults to 500
optodelay -gets set from HAL
Turrets starts and keeps running no matter how short or long I set optodelay,
Thanks'
Brian
Please Log in or Create an account to join the conversation.
14 Apr 2017 02:45 #91340
by rodw
Replied by rodw on topic PathPilot Lathe with 6 place turret
As I said before, I have no idea what yo are doing so I'm just looking at your code. Review your break statements in the switch().
So if the if statement is not executed, you just drop down into
Is that what you want? Normally break is the last command in a case statement.
case 2: // look for first opto trigger -opto's off when triggered
if(!opto1 || !opto2 || !opto3)
{
progress_level = 3;
break;
}
So if the if statement is not executed, you just drop down into
case 3:
Is that what you want? Normally break is the last command in a case statement.
Please Log in or Create an account to join the conversation.
- brianTruck
- Topic Author
- Offline
- Premium Member
Less
More
- Posts: 104
- Thank you received: 7
14 Apr 2017 11:36 #91355
by brianTruck
Replied by brianTruck on topic PathPilot Lathe with 6 place turret
Thanks'
What I'm trying to do is to keep looking at all 3 opto sensors(stay at case 2) , once any of the 3 have been set off (normally on) move on to case 3. I always thought that "break" sends the computer back out to look at the switch.
So do I need a break under the if ?
case 2:
if(opto1 || opto2 || opto3)
{
progress_level = 3;
break;
}
break;
Thanks'
Brian
What I'm trying to do is to keep looking at all 3 opto sensors(stay at case 2) , once any of the 3 have been set off (normally on) move on to case 3. I always thought that "break" sends the computer back out to look at the switch.
So do I need a break under the if ?
case 2:
if(opto1 || opto2 || opto3)
{
progress_level = 3;
break;
}
break;
Thanks'
Brian
Please Log in or Create an account to join the conversation.
14 Apr 2017 12:29 - 14 Apr 2017 12:29 #91359
by andypugh
Replied by andypugh on topic PathPilot Lathe with 6 place turret
For the condition when any one sensor out of three is off you need AND logic not OR
Or, if you prefer, this is equivalent
case 2:
if (opto1 && opto2 && opto3){
break;
}
progress_level = 3;
// might as well fall-through to 3
case 3:
Or, if you prefer, this is equivalent
case 2:
if ( !opto1 || !opto2 || !opto3){
progress_level = 3;
}
break;
case 3:
Last edit: 14 Apr 2017 12:29 by andypugh.
The following user(s) said Thank You: brianTruck
Please Log in or Create an account to join the conversation.
14 Apr 2017 13:48 #91363
by rodw
Break does not reevaluate the swirtch statement but breaks out of it and reads the next statement after the terminating } of the switch. Andy shows an example where the break is omitted so the next case is executed. This means level 3 is executed on the same thread instance as level 2 changes rather than the next one so slightly more efficientt.
Replied by rodw on topic PathPilot Lathe with 6 place turret
The break in fhe if satement is not required as the second break is always reached. What I'm seeing is that with your earlier code is that you were not staying on level 2 as execution of the level 3 code was occurring when progress_level was still 2. This looked like a bug.Thanks'
What I'm trying to do is to keep looking at all 3 opto sensors(stay at case 2) , once any of the 3 have been set off (normally on) move on to case 3. I always thought that "break" sends the computer back out to look at the switch.
So do I need a break under the if ?
case 2:
if(opto1 || opto2 || opto3)
{
progress_level = 3;
break;
}
break;
Thanks'
Brian
Break does not reevaluate the swirtch statement but breaks out of it and reads the next statement after the terminating } of the switch. Andy shows an example where the break is omitted so the next case is executed. This means level 3 is executed on the same thread instance as level 2 changes rather than the next one so slightly more efficientt.
The following user(s) said Thank You: brianTruck
Please Log in or Create an account to join the conversation.
- brianTruck
- Topic Author
- Offline
- Premium Member
Less
More
- Posts: 104
- Thank you received: 7
14 Apr 2017 18:53 #91370
by brianTruck
Replied by brianTruck on topic PathPilot Lathe with 6 place turret
SWEET !
Thanks' Guys
Here is the code that works, stops right on the money, It still might need some tweaking,but its way better than it was.
Thanks' again,
Brian
Thanks' Guys
Here is the code that works, stops right on the money, It still might need some tweaking,but its way better than it was.
Thanks' again,
Brian
Please Log in or Create an account to join the conversation.
- brianTruck
- Topic Author
- Offline
- Premium Member
Less
More
- Posts: 104
- Thank you received: 7
14 Apr 2017 19:33 #91374
by brianTruck
Replied by brianTruck on topic PathPilot Lathe with 6 place turret
Here is the next problem, How do I make the lathe automatically go home when a M6 is called ?
Thanks'
Brian
Thanks'
Brian
Please Log in or Create an account to join the conversation.
14 Apr 2017 21:56 #91379
by rodw
Replied by rodw on topic PathPilot Lathe with 6 place turret
I think section 5.6 on this page tells you how.
linuxcnc.org/docs/html/remap/remap.html
linuxcnc.org/docs/html/remap/remap.html
The following user(s) said Thank You: brianTruck
Please Log in or Create an account to join the conversation.
- brianTruck
- Topic Author
- Offline
- Premium Member
Less
More
- Posts: 104
- Thank you received: 7
14 Apr 2017 22:25 #91381
by brianTruck
Replied by brianTruck on topic PathPilot Lathe with 6 place turret
Thanks'
I did some quick reading and it said I could set the M6 position in the .ini file by
TOOL_CHANGE_POSITION = 0 0 0
Now when I run my M6 I get a "joint1 fallowing error" ,I think joint1 is the turret.
Thanks'
Brian
I did some quick reading and it said I could set the M6 position in the .ini file by
TOOL_CHANGE_POSITION = 0 0 0
Now when I run my M6 I get a "joint1 fallowing error" ,I think joint1 is the turret.
Thanks'
Brian
Please Log in or Create an account to join the conversation.
Moderators: cncbasher
Time to create page: 0.096 seconds