Problem Overview
The FANUC ROBOCUT wire EDM platform (including the Alpha 1iA, C400i-B, and AC600iB series) uses custom M-code macros to drive auxiliary functions such as automatic wire threading (re-threading), flush control, and wire-cut condition sequencing. One of the most frequently encountered failures on these machines is Alarm 078, raised when the controller encounters an M60 call without a valid target sub-program identifier (P-address).
Field symptoms typically reported by operators:
- Program graphs/alarms out at the
M60block during dry-run or verify. - No alarm raised when
M60is executed from the MDI/pendant directly (because the system bypasses sub-program resolution in some cases). - Wire re-threading fails to initiate even when the Automatic Wire Feed (AWF) parameters are populated.
- Alarm text: "NO P IN A SUB-PROGRAM M98 OR M99" displayed on the Robocut HMI.
Affected Platforms and Firmware
The M60 macro sub-program issue has been confirmed on the following ROBOCUT controllers in the field:
| Model | Controller | Notes |
|---|---|---|
| ROBOCUT Alpha 1iA | Series 16i / 18i (open architecture) | Older FACTOLINK-era hardware. Macro storage on PCMCIA / HMI CF card. |
| ROBOCUT C400i-B | Series 31i-B | Operator's manual embedded in HMI page. CD-ROM documentation set. |
| ROBOCUT AC600iB | Series 31i-B5 | Newer control. Multi-language PDF manuals on the HMI. |
FANUC operator documentation reference number B-85434EN/05 covers the C-generation ROBOCUT manuals set; B-series documentation is also distributed on CD-ROM for legacy machines.
Root Cause: Missing M60 Macro Program
The M60 code on a ROBOCUT is a macro call, not a fixed G/M-code function. It invokes a customer-macro or system-macro sub-program (designated by the P-address, e.g., M60 P9010) that contains the wire-thread sequence: tension release, reverse-jet flush, wire feed rate ramp, and cut recovery. If the target macro program file (O9010.nc or similar) is missing from the controller's program memory or from the CF card root, the M98/M99 sub-program resolver returns Alarm 078 because the P-designator cannot be resolved to an existing program number.
Common environmental causes that lead to this state:
- PCMCIA / CF card swap or formatting that erased the
\PROG\directory containing the macro files. - Memory-allocation (common variable
NVBUF/ program-number pool) overflow that purged the system macros. - Control board battery replacement on an un-backed-up machine (BR-AGC / 4LR44 cell expired).
- FACTOLINK file-transfer session that overwrote the macro directory tree.
- Restoration from a partial backup that contained part programs but excluded the
_MAC_system folder.
Diagnostic Procedure
Confirm the root cause before reloading macros. Use this matrix to isolate the fault:
| Test | Command / Path | Expected Result | If Failed |
|---|---|---|---|
| List O-codes in memory |
SYSTEM → PROGRAM → LIB on HMI |
Macro O-codes present (e.g., O9010, O9011, O9012) | Proceed to reload |
| Test M60 from MDI |
MDI → M60 → CYCLE START |
Wire threads / re-threads; no alarm | Hardware AWF issue, not macro |
| View alarm details |
MESSAGE screen or HMI alarm log |
Alarm 078 with P-code reference | Confirms missing P-target |
| Check CF card | SYSTEM → CARD |
Macro files visible in /PROG/_MAC_/
|
Files deleted/corrupt |
| Check battery | Diagnostic page: BATTERY
|
Battery voltage > 3.0 V | Replace battery, restore backup |
Solution: Reload the M60 Macro Programs
The corrective action is to reload the FANUC-supplied macro program files into the control. Use the procedure below, which mirrors the field-proven sequence published by Methods EDM for the C-generation machines.
Prerequisites
- Backup of all current part programs to CF card or PC.
- Source media containing the macro program set (USB, CD-ROM, or FACTOLINK repository). Original media is typically shipped as part of the ROBOCUT documentation set, document number B-85434EN/05.
- RS-232 / Ethernet FOCAS or FACTOLINK connectivity if transferring over network.
- Parameter
K0.0(write-protect) set to0to allow macro upload.
Step-by-Step Reload Procedure
- Place the control in MDI mode and clear the active alarm by pressing
RESET. - Navigate to the program directory:
SYSTEM → PROGRAM → CARD(orMEMif files are already on CF card). - Insert the source CF card / USB drive containing the macro file set. Verify the directory shows the
_MAC_folder with files such asO9001.nc,O9002.nc, ...O9015.nc. - For each macro file, select the file and press
READto copy it into controller SRAM. Confirm the screen readsREAD OK. - Repeat for all macros referenced in the alarm 078 P-code listing. Common M60 targets include:
O9001 – Wire tension release O9002 – Reverse-jet flush O9010 – M60 main threading macro O9011 – Wire feed ramp O9012 – Cut-recovery sequence O9013 – AWF enable / disable - After loading, set the active program number to the first loaded macro (
O9010) and pressGRAPHto verify parsing — no alarm 078 should be raised. - Return to
AUTOmode, run the original part program with the M60 block — alarm should be cleared and the threading sequence should execute.
Transfer via FACTOLINK (PC-Based)
For machines using FACTOLINK version 6.2 (TCP ports 9000 and 9010 by default), the macros can be pushed from the host PC:
- Launch FACTOLINK on the Windows host (XP / legacy Windows supported; modern Windows requires the FOCAS driver set, not FACTOLINK).
- Connect to the controller IP on port 9000.
- Browse to
\PROG\_MAC_\and select allO9xxx.ncfiles. - Use
SEND → CONTROLto push macros. The transfer window should showENDfor each file. - Cycle power on the controller to commit the macro programs to non-volatile memory.
Verification
After the macro reload, run these checks in order:
-
Alarm clear — HMI shows no active alarm;
ALARM HISTORYshows the 078 event timestamped. -
MDI threading — From MDI, execute
M60standalone. Wire re-threading should complete in the expected time (typically 8–25 s depending on wire diameter and machine class). -
Program simulation — Run the part program with the M60 block in
GRAPHmode. No alarm at the M60 line. - Auto-cycle test — Run a short test part on the machine with a real wire break after the start block. Confirm auto re-threading fires and resumes the cut at the correct path coordinate.
-
Backup — Once verified, immediately back up the full
\PROG\tree including the_MAC_folder to a labeled CF card and to the network backup share.
Parameter Reference
Confirm the Automatic Wire Feed (AWF) and threading-related parameters per the B-85434EN/05 manual before assuming a hardware fault. Common parameters to verify:
| Parameter | Typical Value (C400i-B) | Description |
|---|---|---|
| K0.0 | 0 | Program write-protect (must be 0 for upload) |
| K1.7 (bit) | 1 | AWF enable |
| K2.3 | 1 | Auto re-thread on break |
| K10.0 | Depends on wire Ø (0.20 / 0.25 / 0.30 mm) | Wire diameter selection |
| K11.0 | 3–8 (machine-dependent) | Re-thread attempt count before alarm |
| K12.0 | 50–200 | Wire feed rate (mm/s) |
Troubleshooting Matrix
| Symptom | Likely Cause | Action |
|---|---|---|
| Alarm 078 at M60 in AUTO; MDI works | Missing macro program (most common) | Reload macro files (procedure above) |
| Alarm 078 in MDI as well | Macro loaded but corrupted / wrong size | Reload from original media, verify checksum |
| No alarm, but wire does not thread | AWF parameters mis-set, or wire guide alignment | Verify K1.7, K10.0; check upper/lower guide |
| Alarm 078 + Alarm 911 (SRAM parity) | Battery exhaustion / SRAM corruption | Replace battery, full SRAM restore from backup |
| Alarm only after FACTOLINK session | FACTOLINK partial overwrite | Re-transfer macro set, power-cycle, verify |
| Alarm persists after macro reload | Common variable #1 or modal G-code conflict |
Clear modals (G80, G40, G49), reset common variables |
Preventive Maintenance
- Schedule a quarterly backup of the full
\PROG\tree, including the_MAC_folder, to a labeled CF card stored off-machine. - Replace the SRAM backup battery every 2 years or per FANUC's service interval.
- Maintain a golden image of the macro program set (MD5-checked) on the maintenance network share.
- Avoid running FACTOLINK file-purge operations without first exporting macros.
- After any control-board replacement, request the full macro library from FANUC service or the machine OEM (Methods EDM is a common channel for North America).
Related FANUC ROBOCUT Resources
For additional context on the wire-re-thread architecture and the supported controller options, refer to the official FANUC ROBOCUT product page:
- FANUC ROBOCUT Wire EDM – Product Overview – describes the reliable re-threading in the wire path feature that is implemented by the M60 macro on most C-generation and later machines.
FAQ
What does FANUC ROBOCUT Alarm 078 mean?
Alarm 078 ("NO P IN A SUB-PROGRAM M98 OR M99") indicates the controller could not resolve the P-address of a sub-program call. On ROBOCUT, this most often fires at the M60 macro call when the target macro program file (for example O9010.nc) is missing from controller memory or the CF card.
Why does M60 work from MDI but alarm in AUTO mode?
MDI execution can bypass sub-program resolution in some controller states, while AUTO mode performs a full M98/M99 P-resolution sweep at program start. The asymmetry is a classic indicator that the M60 target macro file exists in some form (or is short-circuited by MDI logic) but is absent from the directory the AUTO loader scans first.
Where are the M60 macro programs stored on a ROBOCUT?
On C-generation and later machines, macros reside in the \PROG\_MAC_\ directory on the CF card, and are copied to controller SRAM at boot. If SRAM is cleared (for example by an expired backup battery or a memory-allocation command), the macros must be reloaded from the original media or a verified backup.
Is FACTOLINK the same as FANUC FOCAS?
No. FACTOLINK is a legacy wire-EDM-specific file-transfer and cut-monitoring utility (version 6.2 uses TCP ports 9000 and 9010) and will hang the control if launched without a host. FOCAS is the standard FANUC CNC HSSB / Ethernet library and is used for general file transfer but does not include the cut-monitoring display.
How can I prevent Alarm 078 from recurring after repair?
Back up the full \PROG\ tree (including _MAC_\) to a labeled CF card quarterly, replace the SRAM backup battery every two years, and keep a checksum-verified golden image of the macro set on a network share so the load sequence can be re-run quickly after any memory event.