Sinumerik 810M G58 A45: Why Alarm 3007 on Rotation?

David Krause14 min read
Other TopicSiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

A Hermle three-axis mill running a Sinumerik 810M accepts G58 X30 Y35 without complaint and executes the shift. Add A45 to the same block and the control stops on N75 3007 Setting data programming error, with neither the shift nor the rotation applied. The block is rejected in its entirety, which is the first useful diagnostic: the control did not partially execute and then fail, it refused to write.

The branch sequence below establishes which of four independent conditions is responsible — address legality, axis configuration, plane and modal state, or software scope — and closes with the programming route that produces the rotated feature on a control that has no coordinate rotation.

Alarm 3007 on a System 800 Control

The term "setting data" (SE data, Setzdaten) means the operator- and program-writable data area that holds values the NC applies to machining but that are not part of the fixed machine data: working area limits, spindle limits, and the zero offset values. The settable zero offsets G54 to G57 live there, which is why they are edited on a setting-data screen and why that screen offers only linear offset fields per axis — there is no rotation column. That absence is not a display limitation. The offset store is a translation vector, one value per configured axis, and nothing else.

G58 and G59 are the programmable zero offsets. They write into the same setting-data area from the part program instead of from the keyboard. A malformed word in a G58 block therefore does not raise a general syntax alarm; it raises the setting-data alarm, because the block was parsed as a setting-data write and the write was rejected.

The alarm list entry for 3007 reads:

Field Text
Alarm 3007 SE data programming incorrect
Explanation G25/G26 was programmed; G92 was programmed with an address other than "S" or "P"
Remedy note M19 was programmed with an address other than "S"; as alarm 3000

Every listed cause has the same shape: a function that writes setting data received an address letter its handler does not accept. The list is not exhaustive of every block that can trigger the alarm — it names the frequent offenders. Read it as a class description, not as a lookup table. G58 with an address the offset handler does not recognise falls into that class.

Check 1: Isolate the Word That Triggers the Alarm

Run the two blocks separately in single block, in MDI, with the axes clear of the workpiece.

  1. Execute G90 G58 X30 Y35. Expect: no alarm, block completes, and the zero offset display shows the programmable offset carrying 30 in X and 35 in Y.
  2. Execute G90 G58 A45 as a block on its own. Expect on the failing machine: alarm 3007 again, with no offset change.

If step 2 alarms on its own, the fault is in the A word itself and not in the combination of shift plus rotation in one block. That eliminates block-length, parsing-order, and modal-conflict theories in one test and sends you to Check 2. If step 2 runs clean and only the combined block alarms, the interaction is a block-composition rule and Check 3 applies.

Two things to strip out before drawing any conclusion. First, do not type LF as text at the end of the block. LF is the end-of-block character generated by the input key; entering the two characters as a word gives the parser an address L with an F that it cannot evaluate. Second, program G90 explicitly in the test block so the offset is written as an absolute value rather than added to whatever is already stored.

Check 2: The Axis Configuration Behind the A Address

On System 800 controls, the addresses accepted inside a G58/G59 block are the axis names configured in machine data. The function shifts the origin of every configured axis, rotary axes included. A four-axis machine with a rotary table declared as A accepts G58 A45 and shifts the A axis zero by 45 degrees. A three-axis mill has X, Y, Z configured and nothing else. The word A45 then addresses an axis the offset handler cannot resolve, and the write is refused.

Read the configuration directly rather than inferring it:

  1. Open the position display and count the axis names shown. Expect three: X, Y, Z. If an A appears, the machine has a rotary axis and G58 A45 is a rotary-axis zero shift, not a plane rotation — a different function with a different result on the workpiece.
  2. Check the axis-specific machine data area for the axis name assignment. Expect the same three names.
  3. Confirm by jogging: select A on the axis selector. Expect no selectable A axis on a three-axis machine.

This is the branch that explains the observed behaviour on a Hermle three-axis machine. It also explains why the surviving example in the on-machine documentation is a turning application shifting X: the manual is demonstrating the offset vector, not a rotation.

Check 3: Active Plane and Modal State

Any coordinate rotation on these controls acts in the active machining plane. G17 selects the X/Y plane and rotation then occurs about Z; G18 and G19 rotate about Y and X respectively. If the rotation function exists at all on your software, programming it without G17 active either rotates in the wrong plane or is refused.

The relationship to G90/G91 is equally consequential and is a frequent source of scrap. Under G90, the value in the G58 block is the offset. Under G91, it is added to the existing offset, so re-running the same block twice doubles the shift. Verify the modal state at the moment the block executes, not at the start of the program:

  1. Read the modal G-code display before the G58 block. Expect G17 and G90.
  2. If a subroutine or a cycle left G91 or a different plane active, program both words explicitly in the G58 block.

Adding G17 ahead of the failing block was already tried on the machine in question and the alarm persisted, which rules this branch out there and returns you to Check 2.

Check 4: Documentation Edition Against Installed Software

The programming manual edition on the machine is SINUMERIK SYSTEM 800, edition 2.87, and the machine with its complete original operator documentation dates from 1986. A System 800 programming manual describes the language of the control family, not the feature set of one installed software release. Options and later software versions add functions the paper set on your machine never described, and the reverse also holds: a later PDF found online can describe cycles your EPROMs do not contain.

Two observations from the machine point the same way. The coordinate rotation appears in chapter 2.11 of the online manual (page 48 of that PDF) but nowhere in the machine's own documentation set, which describes G58/G59 purely as offsets. And cycles present in the online documentation — hole pattern along a line, soft approach and retract — are absent from the control. A control missing standard cycles from a given documentation level is running an earlier software release or lacks the corresponding option.

Establish the actual release before ordering anything or filing a support request:

  1. Open the diagnostics area of the operator panel and read the software version display. Note the full version string, not just the leading digits.
  2. Read the MLFB order number from the rating plate on the NC rack in the cabinet.
  3. Record both, plus the machine builder and build year, when contacting Siemens. Version and MLFB together determine whether coordinate rotation was ever available for that release and whether it is an option bit or a software upgrade.

Expect one of three answers: the function does not exist in this release, it exists but is disabled by an option, or it exists and requires a different address than A. Only the third is fixable from the part program.

Check 5: Battery-Backed Memory Before Further Testing

Machine data, tool offsets, zero offsets, and part programs on this control generation sit in battery-buffered RAM. A depleted buffer battery does not degrade features one at a time; it corrupts or empties whole data areas, and the symptom is usually broad — lost tool data, lost offsets, axis alarms at power-up — not a single G-code losing one address. A rotation that fails while the translation in the same function works normally is not a battery symptom.

The battery still deserves a check before anything else is touched, because troubleshooting means power cycles:

  1. Check for a low-battery alarm or the battery LED on the NC power supply. Expect no alarm.
  2. Measure the buffer battery under load. Expect terminal voltage at or above the nominal value printed on the cell; a cell that sags when the control is switched off is failing.
  3. Locate the machine data archive. On this generation it is typically a diskette stored in the electrical cabinet or with the machine documents. Verify that it can still be read on available hardware before you rely on it — magnetic media of that age frequently cannot.
  4. If no readable backup exists, produce one over the serial interface before continuing.
  5. Replace the battery with the control powered up, so the memory stays buffered during the swap.

Where TRANS and ROT Belong

The frame-based syntax TRANS / ROT belongs to later Sinumerik generations, not to System 800. Typing it into an 810M program produces an alarm, because those words are not in the language. It is worth stating the correct form so it is not misapplied here and so it can be used on newer equipment in the same shop:

TRANS X40 Y35
ROT RPL=45
... machining ...
ROT RPL=0
TRANS X0 Y0

Three rules apply on those controls. Write TRANS and ROT in separate blocks. Use RPL= when the rotation must be computed about the origin already shifted by TRANS; use ROT Z= or AROT Z= when rotating about the original workpiece zero, absolute and incremental respectively. Dissolve the frame afterwards with ROT RPL=0 and TRANS X0 Y0, or the next feature is machined inside the rotated frame.

None of this transfers to the 810M. Treat it as the reason a program written for a modern control cannot be pasted into this machine.

Resolving Branch: Rotated Geometry Without Coordinate Rotation

When Check 2 and Check 4 both point to "no rotation available", the rotation moves out of the control and into the coordinates. The origin shift stays with G58, which works; only the angular part is precomputed.

Rotating a point about the shifted origin by angle θ, counter-clockwise:

X' = X * cos(theta) - Y * sin(theta)
Y' = X * sin(theta) + Y * cos(theta)

At θ = 45° both terms collapse to the same constant, cos 45° = sin 45° = 0.7071068:

X' = (X - Y) * 0.7071068
Y' = (X + Y) * 0.7071068

Take a 60 × 40 rectangle centred on the shifted origin. Unrotated corners and their 45° images:

Corner (unrotated) X' Y'
X30 Y20 7.071 35.355
X-30 Y20 -35.355 -7.071

Three implementation routes, in order of preference for a training machine:

  1. Precompute offline. Rotate all points in a spreadsheet and write the literal values into the program. No control features required, and the operator can verify every number against the drawing.
  2. R parameters with a stored constant. Load 0.7071068 into an R parameter and express each coordinate as a sum and a product of R parameters. This needs only multiply and add, which R-parameter arithmetic on this control generation provides, and it keeps the geometry parametric so the angle constant is edited in one place. If you want the trigonometry evaluated in the control instead of hard-coding the constant, look up the exact @ command numbers in the programming manual for your software version — do not guess them, because an unrecognised @ command on this generation is a program-stop, and a wrong one is a wrong move.
  3. Polar programming. Polar coordinate input is available on these older controls and handles angularly distributed features directly, if less conveniently than on later versions. Take the address letters from the polar section of your own manual rather than from a newer document.

A fourth route belongs on the list because it is often the right one in a training workshop: rotate the fixture, not the coordinate system. A vice or plate set at 45° reduces the problem to axis-parallel programming and removes the rotation from the discussion entirely.

Rectangular Pocket at 45 Degrees as a Contour

The rectangular pocket cycle mills an axis-parallel pocket in the active plane. It has no angle input, and precomputing its call parameters cannot rotate it — feeding it rotated centre coordinates moves the pocket without turning it. With coordinate rotation unavailable, the rotated pocket has to be programmed as a contour with cutter radius compensation rather than as a cycle call.

Programming rules for that contour:

  1. Position clear of the material, then plunge or ramp to depth with G01 and a feed value. Ramping in on a linear move loads the cutter far more gently than a straight axial plunge with a centre-cutting requirement.
  2. Build cutter compensation on an approach move programmed with G01 and feed, never with G00. A rapid move while compensation is being established or cancelled produces an uncontrolled offset path and is a standard cause of gouging on the first wall.
  3. Mill the four rotated corner points, then close the contour by returning to the first point.
  4. Cancel compensation on a retract move that is also G01 with feed, clear of the finished wall.
  5. Step down in depth passes with a subroutine call rather than repeating the contour by hand.

Check every block after the transform for a stray G00. Rapid traverse inside a rotated or offset contour is where the difference between an intended path and the executed path becomes visible on the part.

Verification Sequence

Run these in order on scrap or with the tool clear of the workpiece. Each has a reading and an expected value.

  1. Offset write. Execute G90 G58 X30 Y35 in MDI. Read the programmable zero offset display. Expect X = 30.000, Y = 35.000, Z unchanged, and no alarm.
  2. Origin location. Execute G0 X0 Y0. Read the machine coordinate display. Expect the machine position to equal the previously active zero plus 30 in X and 35 in Y. The tool now stands at the rotation centre of the rotated geometry.
  3. Angle proof with an indicator. Program a single G01 move to X70.711 Y70.711 at feed and sweep an indicator along the path with a 45° set square referenced to the table. Expect equal X and Y travel of 70.711 mm and a resultant length of 100.000 mm at 45° to the X axis.
  4. Contour closure. Dry-run the four rotated corner points in air with compensation off. Read the position display after the closing block. Expect a return to the first corner within the control's display resolution; any residual is an arithmetic error in the rotated coordinates, not a machine fault.
  5. Compensation path. Repeat the dry run with G41 or G42 active and a tool radius entered. Expect an offset path parallel to the contour at exactly the radius value, with the approach and retract moves at feed and no rapid segments between compensation on and off.
  6. First cut. Machine the pocket in scrap at reduced depth. Measure the pocket wall angle against a reference edge with a protractor or on a CMM. Expect 45.0° ± the accuracy of your measurement method, and pocket dimensions matching the unrotated 60 × 40 nominal.
  7. Frame release. Execute G90 G58 X0 Y0 and read the programmable offset display. Expect 0.000 in all axes before the next setup is loaded.

Frequently Asked Questions

Can I program a coordinate rotation with G58 on a Sinumerik 810M?

Not on a three-axis machine by writing A45 in the G58 block. G58 writes one offset value per configured axis, so an A word on a machine whose configuration lists only X, Y, Z is refused with alarm 3007. Confirm your axis configuration in the position display and read the installed software version before assuming any rotation function is present.

Does alarm 3007 always mean the A word is wrong?

No. 3007 is the setting-data programming class alarm; the alarm list names G25/G26, G92 with an address other than S or P, and M19 with an address other than S. The common factor is a function that writes setting data receiving an address its handler does not accept, which is why a bad G58 word lands here rather than on a syntax alarm.

Can a weak buffer battery cause alarm 3007?

No. Battery failure empties or corrupts entire data areas and shows up as lost tool offsets, lost machine data, or power-up alarms — not as one address letter in one G function failing while the rest of the same function works. Check and back up the battery-buffered memory anyway before power cycling the control for tests.

Does TRANS and ROT RPL work on a System 800 control?

No. TRANS, ROT RPL=, ROT Z= and AROT Z= belong to later Sinumerik generations. On those controls, write TRANS and ROT in separate blocks and dissolve the frame afterwards with ROT RPL=0 followed by TRANS X0 Y0; on the 810M these words are not part of the language.

Can I still mill a 45 degree rotated rectangular pocket without coordinate rotation?

Yes, as a contour rather than a cycle call. Keep the origin shift on G58 X30 Y35, rotate the corner points with X' = (X - Y) * 0.7071068 and Y' = (X + Y) * 0.7071068, and program approach, contour and retract with G01 and feed so cutter compensation never builds or cancels on a rapid move. Verify by measuring the finished wall angle against a reference edge and expecting 45.0°.

Back to blog