Excerpt from Blum Inspection:
%
O9704(MEASURE)
(V2AC 23.02.07 DJ COPYRIGHT BLUM-NOVOTEST GMBH 2007)
IF[[#130AND16]EQ0]GOTO1
G53
IF[#1013NE1]THEN#121=30
(IF[OUT3NE0]THEN#121=30)
IF[#1012NE1]THEN#121=30
IF[#121EQ0]GOTO1
M[99]
N1IF[#26NE#0]GOTO2
IF[#17GT#[#135+0]]THEN#17=#17-#[#135+0]
N2G53
#1=#5041
#2=#5042
#3=#5043-[#122*[[#130AND32]/32]]
IF[#24EQ#0]THEN#24=#1
IF[#25EQ#0]THEN#25=#2
IF[#26EQ#0]THEN#26=#3
#21=0
N3#27=#24-#1
#28=#25-#2
#29=#26-#3
#14=SQRT[[#27*#27]+[#28*#28]+[#29*#29]]
#4=#24+[#17*#27/#14]
#5=#25+[#17*#28/#14]
#6=#26+[#17*#29/#14]
IF[#127GT[200./#131]]GOTO50
G31X#4Y#5Z#6F[#128*0.3]
G53
#7=#5061-[#[#135+4]*#27/#14]
#8=#5062-[#[#135+4]*#28/#14]
#9=#5063-[#122*[[#130AND32]/32]]-[#[#135+4]*#29/#14]
#30=#5061-#4
Stefan
Cogito Ergo Sum
Since we are on the topic of buffering. Can I place a 9 in parameter #3412? Could this be used as dual-purpose M code. Turn coolant off and prevent buffering.
Blum deals with nothing but probing. Maybe it is the matter of the temper of each of us, but I certainly would never undermine their programming staff’s skills and ability to understand the problem. They decided to use the G53 for a reason, technical reason.The above program proves nothing, other than it may be the policy of the company, or the style of the programmer; it doesn't make it right .
With all respect to this expert, your expertise, as well as mine, are as good as his. Facts count only. You say you never witnessed this phenomenon, I say I experienced it many times. Assuming that we both say truth, logically the problem exists.Today, I also took the matter up with resident Japanese, factory trained, Fanuc control and programming expert and he confirmed that G31 and G53 will prevent buffering irrespective of whether they are being used as a standalone "G" code, or being executed for their design purpose.
This is very poor explanation. Translation ??????? We both, as well as all Fanuc users, are entitled to something much better.When asked about the Caution Posted earlier in this Thread, he simply replied "translation" and reiterated that G31 requires no further Buffer Prevention code to follow it.
Hello Probe,
The Caution from the Fanuc Manual that tteitgen posted in his #951 Post and the text from which you have continued to use, is a general caution related to "Processing Macro Statements", as the heading of the article implies, and NOT related to G31 specifically, with G31 being included as the one of the solutions NOT part of the problem. The text that precedes that image should have been included to put it more in context. The more complete extract is shown below:
View attachment 346815
I've taken this matter up with the Resident Fanuc Engineer again and he is aliment that a Buffer Preventing Code is not required between a block containing a Buffer Preventing Code and a Macro Statement. This fellow is a career, Fanuc Company person who has been with Fanuc for the more than 30 years and I put far more stock in his opinion than example code written by a second party. The example you published with G53 following the Block containing G31 will work but it's not the presence of the G53 that makes the code work. The G31 Block completes before the next Block is executed because the G31 Block contains a Buffer Preventing Block, that being G31. I think your solution is a simply a solution looking for a problem.
The key word in the text of the picture above and that which is underlined in Red is "Containing". Whether the Buffer Preventing Code is Stand Alone in a Block or used in the manner for which it was designed, makes no difference; any Block that Contains a Buffer Preventing Code will Halt Buffering and have that Block complete before executing the next Block. The following extract from the text in the picture above and the Graphic representation of the program flow clearly indicate that the Block containing a Buffer Prevention Code will complete before the next Block is read.
At the blocks containing M00, M01, M02 or M30, blocks containing M-codes for which buffering is suppressed by setting parameters Nos. 3411 to 3420 and No.3421 to 3432, and blocks containing prevention buffering G codes such as G31 or G53, the CNC stops to preread the NC statement after that. Then, the stop of the macro statement execution is guaranteed until such M codes or G codes complete its execution.
Even the "if necessary" is a valid comment in the true context of the text in the picture above, as not all position System Variables need to have Buffering prevented before they can be accurately read. Any where their "Read operation during movement" is listed as Enabled can be read without Buffer Prevention; Block End Point, #5001–#5008, for example, is another that doesn't require Buffer Prevention for it's System Variable to be read and so, the following is allowed:
G90 G00 G54 X-100.0 Y0.0
#1=#5001
No Buffer Prevention necessary.
Regards,
Bill
Final remark: It was many times mentioned and repeated by me , that I personally have been experiencing this buffering problem in reality in the field, and that it was always solved on the spot by adding G53 just after G31 block. Contrary to you, I wouldn't ignore such testimony. But this of course is your shot.
Stefan,
Cogito Ergo Sum
I'm wondering if this would be faster:
IF[ABS[ABS[#[#2]]-ABS[#[#6]]]GT#1]GOTO#7(X)
Double check i got the right number of brackets.
I'm not sure if doing a bunch of ABS[] would be faster, but I think it would, because this is doing ONLY ONE check. It isn't checking both the positive and the negative, it is only checking if the difference of the two values is greater than #1
I don't know off the top of my head, and i'm on the way out, but I believe you can have an if inside a while. replace your do2 loops with this if.
unless the parts of your program that you don't have posted (such as what your goto#7's actually go to) somehow don't permit this to work?
Even in not conservative standards, 2 weeks is way beyond “a timely manner”. As to the “incognito source” – don’t bother, I am not looking to contact him.Yes. lets hope that you get a reply in a timely manner. With regards to my source being incognito, I will provide his contact details to you, but I doubt that he would appreciate his details being published on a Forum for all and sundry to start contacting him.
Let me ignore this impertinence.1. Thus far the only evidence you have provided has been anecdotal.
Regretfully, you continue to give generalized opinions on content of any Fanuc manual. Just let me remind you the quote from your post from 12.05 2020:2. There is no comments whatsoever in any Fanuc Manual that indicates that a Block containing the Buffer Preventing Code G31 must be followed by another Buffer Preventing code so that a Skip Function variable can be correctly read.
Needless to say, the reference was given to you on the spot. And the information was adopted by you in quite hearty matter (see your paragraph 3). Small “sorry, you were right” would be nice, but of course not obligatory.The following is a direct extract from a Fanuc Manual.
blocks containing M codes for which buffering is suppressed by setting
parameters No.3411 to No.3420, and blocks containing G31 are not preread.
It can't be much clearer than that.
Find me any such reference in any Fanuc Manual for G53, or any manual of controls that use G53, for that matter. You won't, as there is none.
The operation of touch trigger probe is based on the fact that the data is collected “on the fly”. This is obvious. Once the trigger is executed, the 506* registers are refreshed with the new data. The problem is, which 506* data are used in the next macro statement. In order to prevent the use of old (before the trigger being executed) data, the G53 block is needed.4. It also states in Fanuc Manuals that #506_ System Variables can be read during movement.
Unfortunately, in none of these examples the data of collected in 506* registers was use in macro sequence following the G31 move, therefore they are meaningless to the matter of this discussion.5. I've Posted recent program examples, run on a machine and not just text listing of a program, showing that a G31 Block used for the purpose it was designed, does indeed Buffer Prevent.
I thought that was only used for single block. Not as a processing stop. What's the point of G53 then.
If your control was looking several (or hundreds of) blocks ahead, instead of just one or two, G53 would accomplish what you need while another empty block will not.