Hello Guest it is March 28, 2024, 09:58:38 AM

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - joeaverage

Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 »
3231
Mach4 General Discussion / Re: G-Code Just Cutting Circles
« on: January 19, 2019, 04:37:35 AM »
Hi,

Quote
Yeah sorry about over sized picture in my first post. It was just a screenshot so didn't think it would be so big. :o I'll see if I can edit it.
Nonsense, the file was only 150k or so, that's fine.

It appears to me that you have two new pieces of software on the go.....do yourself a favour and drop one of them UNTIL
you have the other one sorted out.

Fusion is good but like ALL CAM programs they take a lot of learning. In this case for instance Fusion is producing code
which is not ideal for Mach and yet here you are on the Mach forum trying to sort it out. Ditch Fusion until you have
Mach4 sorted and doing its thing. THEN look at CAM options.

I would recommend NFS Mill Wizard ($75). It is a very simple way to generate conforming Gcode and allows you to do
a very wide range of tasks on your mill. How many times have you thought 'all I need to do is surface that piece
of material'. A very simple job. You don't need a full-blown CAM program to do it, a simple Wizard like MillWizard
can do it for you in minutes.

Download a copy and experiment with it, if you are not putting together files of three, four or more operations chained
together within half an hour......give up CNC and take up knitting!

Quote
I think I need to watch a few tutorials before I get to far ahead.
Hey, tutorials are good, but standing at your machine generating simple but conforming Gcode with a Wizard and then
having that Gcode cut material as you intended is VASTLY MORE VALUABLE THAN ANY TUTORIAL.

Craig

3232
Mach4 General Discussion / Re: G-Code Just Cutting Circles
« on: January 19, 2019, 02:15:52 AM »
Hi,
you can attach reasonable sized files, about 500k is recommended max. The real difficulty is when people attach
photos that they haven't resized and they are 3M!

Anyway I ran your code after changing the Arc Center Mode and ended up with a very different toolpath than you.
I can't quite anticipate the part that you are trying to make but I suspect the toolpath I've attached is closer to your
expectation.

Craig

3233
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 19, 2019, 01:34:50 AM »
Hi,
think I just spotted a mistake....the For loops will cause one extra row and one extra column of 'jewels'.

The code is, as it stands:

for i=1,numjewelX,i+1 do
      for j=1,numjewelY,j+1  do
         jewelX=startXpos + (i * stepoverX)
         jewelY=startYpos + (j * stepoverY)

I think to fit within the boundaries specified the code should be:

for i=0,numjewelX-1,i+1 do
      for j=1,numjewelY-1,j+1  do
         jewelX=startXpos + (i * stepoverX)
         jewelY=startYpos + (j * stepoverY)

Either way use with caution the first time you try it.....the tool may go a bit further than I thought!

Craig

3234
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 19, 2019, 01:19:18 AM »
Hi Chad,

Quote
Curious, will this lock the GUI or run fine? 

The GUI is busy in the same manner as it is when running a Gcode file. The DRO's update and the <Feed Hold>,<Stop>
and <Enable/Disable> buttons work normally but others like the file ops button are greyed out.

I quite frequently write scripts to do certain things as a macro within Mach.

I have several that when executed (MDI m*********()) it will open a file dialog which will allow me to browse to a Gcode
file for instance, open the file, read line by line and apply a text correction and save the corrected lines
of text in an output file. So despite being a macro it has NO MOTION commands at all, it is just a text manipulation
script.

This example could have been a poor mans Wizard for example. If I had opened a file  instead of using mcCntlGcodeExecuteWait()
I could have saved the lines of text (Gcode) to the file. The file could then have been run in the normal manner.

I must say I struggle with wxLua. I can't find any list of simple examples I can copy/edit. Neither can I find a list
of the useful or relevant options when specifying the parameters. I've looked at the various reference documents
but there is a huge information overload and I come away knowing less than when I started!

It seemed to make sense to me to simplify the script by excluding all the wxWidgets crap....quite aside from the fact I'm
hopeless at wxStuff.

Despite my previous post about not changing 'pearl' to 'jewel' I have done so (find and replace) and introduced a couple
of new variables as well retractZ, safeZ, and jewelDwellTime. Renamed it m121() just to keep it distinct from the previous
one.

I will give some more thought to what wxLua functions may streamlining the data entry stuff, rather than editing the macro.

Code: [Select]
function m121()
local inst=mc.mcGetInstance()
--
-- Jewel Data.....to be edited as required
--
local jewelWidth=50
local jewelLength=100
local toolDiameter=6
local nominalStepover=0.66
local plungeSpeed=300
local retractZ=2
local safeZ=20
local jewelDwellTime=500
--
-- End of data block
--
local startXpos
local startYpos
local jewelZheight

local stepoverX,numjewelX
local stepoverY,numjewelY
local i=0
local j=0
-- Save the current position as the start of the jeweling area....you have jogged to the start haven't you????
startXpos=mc.mcCntlGcodeInterpGetPos(inst,mc.X_AXIS)
startYpos=mc.mcCntlGcodeInterpGetPos(inst,mc.Y_AXIS)
jewelZheight=mc.mcCntlGcodeInterpGetPos(inst,mc.Z_AXIS)
-- Calculate the required step over to meet the nominal step over as closely as possible but be an integral
-- number of 'jewels'
-- Reduce perlWidth in X and Y by the diameter of the tool
jewelWidth=jewelWidth-toolDiameter
jewelLength=jewelLength-toolDiameter
-- Calculate the exact number of 'jewels' required to match the nomininalSteppover
numjewelX=jewelWidth / (nominalStepover * toolDiameter)
numjewelY=jewelLength / (nominalStepover * toolDiameter)
-- Find the integer number of 'jewels'
numjewelX=math.modf(numjewelX)
numjewelY=math.modf(numjewelY)
-- Calculate the actual stepover to be used so that an integral number of 'jewels' are perfomed
stepoverX=jewelWidth / numjewelX
stepoverY=jewelLength / numjewelY
--
--
local retract="g0 z "..tostring(jewelZheight+retractZ) --Nominal retract is 2mm above the surface
local safeHeight="g0 z "..tostring(jewelZheight+safeZ) --Nominal Safe Height is 20mm above the surface
mc.mcCntlGcodeExecute(inst,retract..'\n'..
'g1 f'..tostring(plungeSpeed)..'\n')
for i=1,numjewelX,i+1 do
for j=1,numjewelY,j+1  do
jewelX=startXpos + (i * stepoverX)
jewelY=startYpos + (j * stepoverY)
mc.mcCntlGcodeExecute(inst,'g0 x '..tostring(jewelX)..' y '.. tostring(jewelY)..'\n'..
'g1 z '..tostring( jewelZheight)..'\n'..
'g4 p'..tostring(jewelDwellTime)..'\n'..
retract..'\n')
end
end
mc.mcCntlGcodeExecuteWait(inst,safeHeight)
end
if (mc.mcInEditor()==1)then
m121()
end

3235
Mach4 General Discussion / Re: Plasma table - Dry Run feature in M3 macro
« on: January 18, 2019, 09:47:53 PM »
Hi Jamie,

Quote
What is local inst = mc.mcGetInstance() and why does it need to be first?

It is possible and may become fact one day, that multiple instances of Mach can run at once. This was allowed for
in the original 'design' of Mach. As a consequence there are many instructions in Mach which need to be applied
to a particular instance of Mach. As it turns out Mach as currently deployed allows only one instance, usually instance
'0' and thus if you used the variable 'inst' in any part of Mach it will probably work. The safe way is to ensure that
the proper and current instance is used....ergo mc.mcGetInstance() is used within each scope.

That explanation is tied up with your next question:

Quote
In your version, you start each section by breaking out "local *********" first, instead of all on one line.  Is that required?

"Local" declares that this variable is defined within the current 'scope' which generally means within the function in
which it is declared. If you attempt to use the variable outside of that scope it will fail.

Lua is a 'self memory managed language'. If you've had any C programming experience you will know that you have
to explicitly mange memory in C, ie you have to assign memory for variables with Malloc etc. You also have to delete them
when you have finished or risk that all the memory of the PC will be clogged up with variables which are no longer required.

Lua is self managed which means that when a variable is no longer required it is automatically garbage collected. Generally
speaking this means that when a variable goes 'out of scope' it get garbage collected. Using the prefix 'local' makes it explicit
to Lua that the variable can be deleted once it goes out of scope. If a variable is not declared as 'local' it becomes a global variable
visible throughout the Lua chunk.

That has consequences. A global variable will require a specific memory location that stays constant throughout the Lua
session. Thus any time the variable is accessed the CPU has to find, resolve and read the contents of that memory address,
which may be in a different 'page' of memory and can be quite slow. A local variable is stored on a stack. Imagine you were
working a maths problem and each intermediate result you wrote down on a separate piece of paper. You then put that piece of
paper on a stack of the previous results. When you need to retrieve a particular result all you need to know is 'that result
is fourth from the top of the stack'. That means that the memory location where your result is stored goes up or down depending
on how many pieces of paper you have added but that memory is stored locally and is very fast to retrieve. Additionally when
you have finished your calculation, ie the function completes and goes out of scope the whole stack can be deleted.

The general rule is that for efficiency make all variables local, its faster and the automatic garbage collector works best.

Quote
Is "local rc" what gives you the ability to read the error code?

local hsig
   local rc
   hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT0);
The particular API you have highlighted in your question is a kind of function. In this case the function is 'get the current
memory address that corresponds to the signal OSIG_OUTPUT0'. When the function is complete it is going to pass back to the
calling program TWO results, the first is the requested memory address, hsig, and the second is a return code. As you've already
seen that if a function fails to complete it will return a code that indicates what went wrong.

Steve is a very accomplished and experienced programmer and he consistently recommends that you should check every
return code for success. I am a very much less disciplined programmer and tend not to do so. There are specific circumstances
where I do, things like MERROR_TIMED_OUT for example.

The two results are assigned to each label from left two right. Thus the signal handle (memory address) is assigned to
hsig and the return code is assigned to rc. If you did not have rc in the lefthand list of labels the result is discarded.

Quote
I see this at the bottom of many scripts and I read about it in the Lua manual.  What does this do?
if (mc.mcInEditor() == 1) then
    m3();
Your macro, in this case m3() is a function. In order for this function to run its needs to be formally 'asked' to execute.
When running a Gcode file and the interpreter encouters m3() Mach will find and execute that function.

What happens though if you are still writing your function (macro) in the editor and you want to run it one step at a time
to see if its going to work? How does the function get invoked or 'asked' to execute? That is the meaning of that extra bit of
code on the bottom of each macro. If you hit <Run, single step> in the editor it can't run the function directly so it
passes to the last bit of code and asks 'Is Mach in Edit Mode', if it is then  <m3()>, ie it invokes/ 'asks' the function to run.

Craig


3236
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 18, 2019, 05:29:01 PM »
Hi,
the very first bit of code I posted concluded with:

Code: [Select]
end
if (mc.InEditor()==1)then
m120()
end

Which is clearly wrong, the correct syntax is:

Code: [Select]
end
if (mc.mcInEditor()==1)then
m120()
end

Lua has a number of subtle strengths but as smurph has commented 'Lua has syntax that only a mother could love'.
This wee mistake is exactly the sort of wrinkle that can trip you up and cause you to tear your hair out (if you have
any left)

Craig

3237
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 18, 2019, 05:21:26 PM »
Hi,
well it might be called jeweling but its too bloody late now!!!...its fixed in my head and I cant be bothered editing all the code.

Try this:
Code: [Select]
function m120()
local inst=mc.mcGetInstance()
--
-- Pearl Data.....to be edited as required
--
local pearlWidth=50
local pearlLength=100
local toolDiameter=6
local nominalStepover=0.66
local plungeSpeed=300
--
-- End of data block
--
local startXpos
local startYpos
local pearlZheight

local stepoverX,numPearlX
local stepoverY,numPearlY
local i=0
local j=0
-- Save the current position as the start of the pearling area....you have jogged to the start haven't you????
startXpos=mc.mcCntlGcodeInterpGetPos(inst,mc.X_AXIS)
startYpos=mc.mcCntlGcodeInterpGetPos(inst,mc.Y_AXIS)
pearlZheight=mc.mcCntlGcodeInterpGetPos(inst,mc.Z_AXIS)
-- Calculate the required step over to meet the nominal step over as closely as possible but be an integral
-- number of 'pearls'
-- Reduce perlWidth in X and Y by the diameter of the tool
pearlWidth=pearlWidth-toolDiameter
pearlLength=pearlLength-toolDiameter
-- Calculate the exact number of 'pearls' required to match the nomininalSteppover
numPearlX=pearlWidth / (nominalStepover * toolDiameter)
numPearlY=pearlLength / (nominalStepover * toolDiameter)
-- Find the integer number of 'pearls'
numPearlX=math.modf(numPearlX)
numPearlY=math.modf(numPearlY)
-- Calculate the actual stepover to be used so that an integral number of 'pearls' are perfomed
stepoverX=pearlWidth / numPearlX
stepoverY=pearlLength / numPearlY
--
--
local retract="g0 z "..tostring(pearlZheight+2) --Nominal retract is 2mm above the surface
local safeHeight="g0 z "..tostring(pearlZheight+20) --Nominal Safe Height is 20mm above the surface
mc.mcCntlGcodeExecute(inst,retract..'\n'..
'g1 f'..tostring(plungeSpeed))
for i=1,numPearlX,i+1 do
for j=1,numPearlY,j+1  do
pearlX=startXpos + (i * stepoverX)
pearlY=startYpos + (j * stepoverY)
mc.mcCntlGcodeExecute(inst,'g0 x '..tostring(pearlX)..' y '.. tostring(pearlY)..'\n'..
'g1 z '..tostring( pearlZheight)..'\n'..
'g4 p1000'..'\n'..
retract..'\n')
end
end
mc.mcCntlGcodeExecuteWait(inst,safeHeight)
end
if (mc.mcInEditor()==1)then
m120()
end

This code should be saved as:     m120.mcs    in the Profiles/<Your Profile>/Macros folder.

Jog to the start of the pearling/jeweling area lower the Z axis so the first pearl/jewel is formed and MDI <m120>.

This seems to work on my laptop, I have not tried on my machine.

You could build in extra data values for things like the retract height, safe height and Z down dwell time....but you get the idea.

Craig

3238
Mach4 General Discussion / Re: G-Code Just Cutting Circles
« on: January 18, 2019, 04:55:45 PM »
Hi,
I suggested you change the setting from whatever it is at now to whatever. If the code then works you know you are working
in the right area.

In general most Mach Gcode is written with Arc Center Mode= Incremental and so you will have to adjust the Fusion
post processor to write the code in that way.

The first and simplest expedient to test it is to change the setting and try the same code.

Note if you change the setting you'll need to close Mach and then restart. The close/restart cycle flushes the change you have
made into the .ini file and the restart causes the new setting to be implemented.

Craig


3239
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 18, 2019, 03:19:02 PM »
Hi,
I've made a start at writing some code....probably woefully inefficient and I have no idea whether it will work yet:

Code: [Select]
function m120()
local inst=mc.mcGetInstance()
--
-- Pearl Data.....to be edited as required
--
local pearlWidth=50
local pearlLength=100
local toolDiameter=6
local nominalStepover=0.66
--
-- End of data block
--
local startXpos
local startYpos
local pearlZheight
local retract="g0 z2" --Nominal retract is 2mm above the surface
local stepoverX
local stepoverY
-- Save the current position as the start of the pearling area....you have jogged to the start haven't you????
startXpos=mc.mcCntlGcodeInterpGetPos(inst,mc.X_AXIS)
startYpos=mc.mcCntlGcodeInterpGetPos(inst,mc.Y_AXIS)
pearlZheight=mc.mcCntlGcodeInterpGetPos(inst,mc.Z_AXIS)
-- Calculate the required step over to meet the nominal step over as closely as possible but be an integral
-- number of 'pearls'
-- Reduce perlWidth in X and Y by the diameter of the tool
pearlWidth=pearlWidth-toolDiameter
pearlLength=pearlLength-toolDiameter
-- Calculate the exact number of 'pearls' required to match the nomininalSteppover
local numPearlX=pearlWidth / (nominalStepover * toolDiameter)
local numPearlY=pearlLength / (nominalStepover * toolDiameter)
-- Find the integer number of 'pearls'


end
if (mc.InEditor()==1)then
m120()
end

As you can see the first few variable declared, all locals, are the pearl  area data. You may think that there needs to be additional
data, but its a start.

My intention is that you would jog to a location on the workpeice and lower the tool until it just 'pearls' the surface
and then you would MDI your macro, I called it m120(). The location you have jogged to will be the start of the
pearled area and the current Z axis height will be used to mill each 'pearl'.

Does it make sense so far?

Craig

3240
Mach4 General Discussion / Re: How to generate gcode to do pearling
« on: January 18, 2019, 02:21:28 PM »
Hi,
yes that could be done easy enough.

One possibility is to write a macro which outputs a Gcode file and that file is then run. That would be
using Lua to do a little bit of maths but mostly composing Gcode text strings and adding them to a file.
Thus your macro is in effect a wizard....it composes a Gcode file to be used at later date.

Another possibility is to write a macro that does the pearling itself. The macro would still effectively be composing
lines of Gcode but they are executed immediately rather than put in a file. This API allows that to happen:

Code: [Select]
LUA Syntax:
rc = mc.mcCntlGcodeExecute(
number mInst,
string commands)

Description:
Execute G code as a unit of work.

Either of these methods will work.

One area that will introduce added complexity is how you enter the data for the required pearling area.
This would be done with .wxWidgets type instructions that open windows that you can enter numbers and so
on. As it turns out using .wxWidgets is more confusing than Lua or Mach4.

My suggestion would be NOT to use .wxWidget data entry but have those numbers fixed in the macro.
If you required a different pearling area then you would have to edit the macro....I know that sounds like a pain
but it need not be hard. The advantage of doing it that way is it vastly simplifies the macro.

Once you have your macro running THEN you could decide to improve it by adding data entry windows.

I suggest give some thought to what data (width, length, tool diameter, tool stepover) you would need to make
your pearling macro useful. Then you can start wring some code.

Craig

Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 »