**OMAC HMI OPC Data Mapping Date:** 2005-1-13

**Standard title: OMAC HMI OPC Data Mapping Draft**

+-----------------------------------+-----------------------------------+
| **COPYRIGHT NOTICE:**             |                                   |
|                                   |                                   |
| This document is not copyright    |                                   |
| protected.                        |                                   |
+-----------------------------------+-----------------------------------+
| **ABSTRACT:**                     |                                   |
|                                   |                                   |
| This document presents a          |                                   |
| potential list of OPC (OLE for    |                                   |
| Process Control) item tags        |                                   |
| related to CNC data server for    |                                   |
| OMAC (Open Modular Architecture   |                                   |
| Control) Human Machine Interface  |                                   |
| (HMI) and then map these data     |                                   |
| items to commercial CNC           |                                   |
| controller implementation.        |                                   |
|                                   |                                   |
| **KEYWORDS:** CNC, COM, OPC,      |                                   |
| axis, servo, machine, standard    |                                   |
+-----------------------------------+-----------------------------------+
| **COMMENTS TO READER:**           |                                   |
|                                   |                                   |
| Information provided in this      |                                   |
| document is provided \'as is\'    |                                   |
| without warranty of any kind,     |                                   |
| either express or implied. The    |                                   |
| user assumes the entire risk as   |                                   |
| to the accuracy and the use of    |                                   |
| this document.                    |                                   |
+-----------------------------------+-----------------------------------+
| **Project Leader:**               | **Document Editor:** John         |
|                                   | Michaloski                        |
| **Address:**                      |                                   |
|                                   | **Address:** NIST                 |
| **Telephone:**                    |                                   |
|                                   | Bldg. 220 Rm. B124                |
| **Telefacsimile:**                |                                   |
|                                   | Gaithersburg, MD 20832            |
| **Electronic mail:**              |                                   |
|                                   | **Telephone:** 301-975-3458       |
|                                   |                                   |
|                                   | **Telefacsimile:** 301-990-9688   |
|                                   |                                   |
|                                   | **Electronic mail:**              |
|                                   | <John.Michaloski@nist.gov>        |
+-----------------------------------+-----------------------------------+

# Background

One objective of the OMAC HMI Working Group is to define a series of
standard specifications meeting the data requirements expected to
implement a CNC HMI. This document will look at the standardizing OPC
Data Item tags (or names) for use in CNC HMI software and related
application programming.

This document draws on the OMAC HMI Working Group document, "OMAC HMI
Data Points", which is a list of "important" CNC HMI-related data
points. In this document, each variable from this data list has been
mapped to a vendor-specific variable wherever possible. This mapping
should help to validate the list of "important" CNC data points by
insuring completeness against commercial products. This set of standard
OMAC HMI items will given specific OPC Full Specified Item Tags (or
names). Vendors would then be able to provide a Microsoft COM server or
some other interface to map OMAC HMI to their internal OPC data items.
In the figure below, a scenario could be where a vendor or 3^rd^ party
supplies a COM component to map OMAC HMI names into vendor-specific OPC
fully qualified names that could then be used to access the vendors OPC
server.

![](media/image1.wmf){width="5.106944444444444in"
height="2.026388888888889in"}

Figure 1 Scenario for OMAC HMI OPC Item Naming

The remainder of the document lists variables by section with little or
no background on the purpose of the variable/section. Most of the
variables should be obvious, but if confusing, these variables are
described in related OMAC HMI documents.

The are a few issues involved in naming OPC items.

1)  There are OPC item names that have an equivalent fully qualified
    name. Each OPC item name must be unique, otherwise the API to map
    from OPC item name to fully qualified OPC item will not one-to-one.

2)  How to handle arrays of items, e.g. axis positions or x,y,z. Most of
    the commercial products return an array with an implicit
    understanding of the range of valid values within the array. All
    provide a mapping from the machine configuration (e.g., xyz or xz to
    specifie array indices.) Handling arrays within OPC is done using
    Safearrays, and the actual mechanism would have to be spelled out as
    to how the arrays would be passed. Further, using OPC browsing would
    require knowledge of mappings and bound of the arrays, otherwise you
    could return 26 values of which only three are valid.

3)  Conformance classes would be helpful in defining application
    functionality using the OPC names. For example, simple CNC logging
    of on/off, faults, etc would entail a list of ten conforming
    variable names. Maybe a fuller variable list would be required to do
    asset management, ROI and utilization and condition based
    management.

4)  Blank values may not mean the commercial product does not have a
    mapping. If a mapping is given, it can be determined directly as a
    one-to-one mapping or as part of a function call. If the information
    requires extra calculation or required multiple steps or wasn't
    obvious, the value was left blank.

5)  Values may not accurately reflect the correct mapping, but using the
    available documentation, appeared to map to the OPC item.

# Variable Mappings

## *Axis Properties*

Axis provide trajectory motion for a degree-of-freedom in the CNC
coordinate system.

+---------+------+-----------------+-------+-------------------------+
| *       | **MD | **Siemens**     | **Fa  | **Okuma**               |
| *Axis** | SI** |                 | nuc** |                         |
|         |      |                 |       |                         |
|         |      |                 | **(   |                         |
|         |      |                 | metho |                         |
|         |      |                 | ds)** |                         |
+---------+------+-----------------+-------+-------------------------+
| AxisAb  | ax   | \$AA_IM\[X\]    | cn    | OPC//Positi             |
| soluteP | Loc\ |                 | c_abs | on/ActualPostion/Actual |
| osition | [i\] | Actual value in | olute | PositionAxisXX.Position |
|         |      | machine         |       |                         |
|         |      | coordinate      |       |                         |
|         |      | system (MCS).   |       |                         |
|         |      |                 |       |                         |
|         |      | /Chan           |       |                         |
|         |      | nel/MachineAxis |       |                         |
|         |      | /actToolBasePos |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axi     | axD  | \$AA_DTEB\[X\]  | cn    | OPC//Positio            |
| s.Dista | istT |                 | c_dis | n/TargetPosition/Target |
| nceToGo | oGo\ | /Channel/St     | tance | PositionAxisXX.Position |
|         | [i\] | ate/acDteb\[x\] |       |                         |
|         |      |                 |       |                         |
|         |      | /Cha            |       |                         |
|         |      | nnel/GeometricA |       |                         |
|         |      | xis/rogDistToGo |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axis.   | axF  | /Nck/ser        | N/A   | NA                      |
| Followi | Err\ | voDataFl32\[1\] |       |                         |
| ngError | [i\] |                 |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axis.I  | pl   | /               |       | NA                      |
| ncremen | cJog | Channel/Machine |       |                         |
| tSystem | Dist | Axis/actIncrVal |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axi     | 0,1  | /Channel/Ma     | N/A   | 0,1,2,3,...             |
| s.Index | ,2,3 | chineAxis/index |       |                         |
|         | ,... |                 |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axi     | de   | \$MN_           | cnc_r | OPC//Pos                |
| s.Label | fAxi | AXCONF_MACHAX\_ | dsvme | ition/TargetPosition/Ta |
|         | sLet |                 | ter() | rgetPositionAxisXX.Name |
|         | ters | NAME_TAB\[n\]   |       |                         |
|         |      |                 | label |                         |
|         |      | /Channel/M      |       |                         |
|         |      | achineAxis/name |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Ax      | NA   | /               | cnc   | OPC/Pos                 |
| is.Load |      | Channel/Machine | _rdsv | ition/TargetPosition/Ta |
|         |      | Axis/aaLoad\[\] | meter | rgetPositionAxisXX.Load |
+---------+------+-----------------+-------+-------------------------+
| Axis.   | axL  | /Axis/Settings/ |       | OPC//Com                |
| Maximum | ocAb | MDD_WORK        |       | mon/NCStatus/NumberAxes |
|         | sMax | AREA_LIMIT_PLUS |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axis.   | axL  | /Axis/Settings/ |       | NA                      |
| Minimum | ocAb | MDD_WORKA       |       |                         |
|         | sMin | REA_LIMIT_MINUS |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Ax      |      | \$AA_STAT       |       | NA                      |
| is.Moti |      |                 |       |                         |
| onState |      | /Channel/Mac    |       |                         |
| (       |      | hineAxis/status |       |                         |
| in-pos) |      |                 |       |                         |
|         |      | /Channel/Mac    |       |                         |
|         |      | hineAxis/aaStat |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axis.S  |      | \$P_EP          | cnc_r | NA                      |
| etPoint |      | (blending)      | dcomm |                         |
|         |      |                 | and() |                         |
|         |      | /Nck/ser        |       |                         |
|         |      | voDataFl32\[6\] |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Ax      | ax   | \$MA_IS_ROT_AX  |       | OPC//Pos                |
| is.Type | Dist |                 |       | ition/TargetPosition/Ta |
|         | pars | \               |       | rgetPositionAxisXX.Type |
|         | eOut | $MN_DRIVE_TYPE\ |       |                         |
|         |      | [n\](hydraulic) |       |                         |
|         |      |                 |       |                         |
|         |      | /Channel/M      |       |                         |
|         |      | achineAxis/type |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Axi     | js   | /Channel/Mach   | cnc_r | OPC//Common             |
| s.Units | Inch | ineAxis/extUnit | dpara | /NCStatus/DistanceUnits |
|         | Mode |                 | m_ext |                         |
|         |      |                 | ()    |                         |
|         |      |                 |       |                         |
|         |      |                 | unit  |                         |
+---------+------+-----------------+-------+-------------------------+
| Axis.V  | axV  | \$AC_VACTW      |       | OPC//Common/N           |
| elocity | eloc |                 |       | CStatus/CommandFeedrate |
|         | ity\ | /Channel/Mach   |       |                         |
|         | [i\] | ineAxis/aaVactM |       |                         |
+---------+------+-----------------+-------+-------------------------+
| Ax      | jsV  | \$MA_           |       | NA                      |
| is.Velo | eloc | MAX_AX_VELO\[\] |       |                         |
| cityMax | ityL |                 |       |                         |
|         | imit |                 |       |                         |
|         |      |                 |       |                         |
|         | axVe |                 |       |                         |
|         | lMax |                 |       |                         |
|         | (ra  |                 |       |                         |
|         | pid) |                 |       |                         |
+---------+------+-----------------+-------+-------------------------+
| A       |      | \$AA_IW\[X\]    | cn    | O                       |
| xis.Wor |      |                 | c_abs | PC//Offset/ZeroOffsets/ |
| kpieceP |      | /Channel        | olute | ZeroOffset/OffsetAxisXX |
| osition |      | /GeometricAxis/ |       |                         |
|         |      | actToolBasPosEN |       |                         |
+---------+------+-----------------+-------+-------------------------+

## *Feedrate*

Feedrate defines the trajectory motion rates based on programmed
coordinate system.

+-----------+----------+----------------+--------+-------------------+
| **F       | **MDSI** | **Siemens**    | **F    | **Okuma**         |
| eedrate** |          |                | anuc** |                   |
+-----------+----------+----------------+--------+-------------------+
| Feedra    |          | /Cha           | cnc_   | O                 |
| te.Actual |          | nnel/MachineAx | actf() | PC//Common/NCStat |
|           |          | is/actFeedRate |        | us/ActualFeedrate |
+-----------+----------+----------------+--------+-------------------+
| Feedrate. | jsVel    | \$P_F or       | cnc    | OP                |
| Commanded | ocityNow | \$AC_F         | _rdcom | C//Common/NCStatu |
|           |          |                | mand() | s/CommandFeedrate |
|           |          | /              |        |                   |
|           |          | Channel/State/ |        |                   |
|           |          | cmdFeedRateIpo |        |                   |
|           |          |                |        |                   |
|           |          | /Cha           |        |                   |
|           |          | nnel/MachineAx |        |                   |
|           |          | is/cmdFeedRate |        |                   |
+-----------+----------+----------------+--------+-------------------+
| Feedrate. | jsFeedM  | /C             |        | OPC//Common/NCSta |
| FeedUnits | ode\[0\] | hannel/State/f |        | tus/FeedrateUnits |
|           |          | eedRateIpoUnit |        |                   |
|           |          |                |        |                   |
|           |          | /Channel/      |        |                   |
|           |          | MachineAxis/ax |        |                   |
|           |          | isFeedRateUnit |        |                   |
+-----------+----------+----------------+--------+-------------------+
| Feedrate  | jsPc     | \$OVRA         | cnc_   | OPC               |
| .Override | tFeedOvR |                | rdopnl | //Common/NCStatus |
|           | ide\[0\] | /              | sgnl() | /FeedrateOverride |
|           |          | Channel/State/ |        |                   |
|           |          | feedRateIpoOvr | fee    |                   |
|           |          |                | d_ovrd |                   |
|           |          | /Cha           |        |                   |
|           |          | nnel/MachineAx |        |                   |
|           |          | is/feedRateOvr |        |                   |
+-----------+----------+----------------+--------+-------------------+
| Feedra    | defPctFe | \$MN_OVR_F     |        | OPC//C            |
| te.Overri | edOvrMax | ACTOR_FEEDRATE |        | ommon/NCStatus/Ma |
| deMaximum |          |                |        | xFeedrateOverride |
+-----------+----------+----------------+--------+-------------------+

## *Spec*

Specification includes manufacturer, model, and a simple list of machine
capabilities. This information would be useful for several applications:
such as loggging, or capability querying.

+-------------+---------+-----------------------+----------+----------+
| **Machine** | *       | **Siemens**           | *        | *        |
|             | *MDSI** |                       | *Fanuc** | *Okuma** |
+-------------+---------+-----------------------+----------+----------+
| Spe         | de      | \$MN_SCALING\_        |          | NA       |
| c.BaseUnits | fInchMo |                       |          |          |
|             | deDeflt | SYSTEM_IS_METRIC      |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.Co     |         |                       |          | NA       |
| nfiguration |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec        |         | /Nck/                 | cnc_rds  | File     |
| .Controller |         | Configuration/nckType | yssoft() | Access   |
|             |         |                       |          |          |
|             |         | /Nck/Con              |          |          |
|             |         | figuration/nckVersion |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.M      |         |                       |          | NA       |
| anufacturer |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| S           |         |                       |          | NA       |
| pec.MaxFeed |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| Sp          |         |                       |          | NA       |
| ec.MaxPower |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| Sp          | s       | /Axis/Settings/       | cnc_rdsp | NA       |
| ec.MaxSpeed | pRPMMax | MD                    | maxrpm() |          |
|             |         | D_SPIND_MAX_VELO_LIMS |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.       |         |                       |          | NA       |
| MaxTraverse |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.Model  |         |                       |          | NA       |
+-------------+---------+-----------------------+----------+----------+
| Spec.N      |         | /Nck/Configuration    | cnc_s    | NA       |
| umberOfAxes |         | numGlobMachAxes       | ysinfo() |          |
|             |         |                       |          |          |
|             |         |                       | max_axis |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.S      |         |                       |          | NA       |
| erialNumber |         |                       |          |          |
+-------------+---------+-----------------------+----------+----------+
| Spec.       |         | /Axis/Settings        |          | NA       |
| WorkingArea |         | /MDD_WORKAREA_LIMIT\_ |          |          |
|             |         |                       |          |          |
|             |         | {MINUS,PLUS}\[0..n\]  |          |          |
+-------------+---------+-----------------------+----------+----------+

## *Machine*

Machine and underlying equipment state and modal types within the CNC.
More complete configuration and equipment description would be a
continuation of this set of variable definitions.

+-----------------+--------+---------------------+-------+-----------+
| **Machine**     | **     | **Siemens**         | **Fa  | **Okuma** |
|                 | MDSI** |                     | nuc** |           |
+-----------------+--------+---------------------+-------+-----------+
| Machi           | (      | /Chan               | c     | DNC       |
| ne.AlarmPending | alarms | nel/State/chanAlarm | nc_al | T3Lib.cls |
|                 | are    |                     | arm() | NCStatus. |
|                 | stored | /Channe             |       | GetAlar   |
|                 | in a   | l/State/acAlarmStat | or    | mStatus() |
|                 | file)  |                     |       |           |
|                 |        |                     | cn    |           |
|                 |        |                     | c_sta |           |
|                 |        |                     | tinfo |           |
|                 |        |                     | ()    |           |
+-----------------+--------+---------------------+-------+-----------+
| Mach            | mBl    | skip                | c     | NA        |
| ine.BlockDelete | ockDel | Level\[0..9\]Active | nc_rd |           |
|                 | eteReq |                     | opnls |           |
|                 |        |                     | gnl() |           |
|                 |        |                     |       |           |
|                 |        |                     | blck_ |           |
|                 |        |                     | del() |           |
+-----------------+--------+---------------------+-------+-----------+
| Ma              | n/a    | \$AC_CYCLE_TIME     | c     | DNCT3Lib. |
| chine.CycleTime |        |                     | nc_rd | clsM      |
|                 |        | /Channel/Channe     | timer | achineRep |
|                 |        | lDiagnose/cycleTime |       | ort.Cycle |
|                 |        |                     |       | ( Per     |
|                 |        |                     |       | Part      |
|                 |        |                     |       | Program)  |
+-----------------+--------+---------------------+-------+-----------+
| Mach            | n/a    | /Channel/ChannelD   | c     | DNCT3Lib. |
| ine.CuttingTime |        | iagnose/cuttingTime | nc_rd | c         |
|                 |        |                     | timer | lsOperati |
|                 |        |                     |       | ngReport. |
|                 |        |                     |       | Cutting   |
+-----------------+--------+---------------------+-------+-----------+
| Machine.DryRun  | mD     | \$P_DRYRUN          | c     | BLANK     |
|                 | ryRunE |                     | nc_rd |           |
|                 | nabled | /Chan               | opnls |           |
|                 |        | nel/ProgramModifica | gnl() |           |
|                 |        | tion/trialRunActive |       |           |
|                 |        |                     | dr    |           |
|                 |        |                     | y_run |           |
+-----------------+--------+---------------------+-------+-----------+
| M               | mFe    | /                   | cnc_  | DNC       |
| achine.Feedhold | edHold | Channel/ProtocolEve | rdopn | T3Lib.cls |
|                 |        | nt/eventActive\[7\] | lsgnl | NCStatus. |
|                 |        |                     | ()    | GetSlideH |
|                 |        | /Chan               |       | oldStatus |
|                 |        | ngel/State/stopCond | feed  | ()        |
|                 |        |                     | _hold |           |
+-----------------+--------+---------------------+-------+-----------+
| Machine. Ready  | mSync  | /Ba                 |       | BLANK     |
|                 | Done?? | g/State/readyActive |       |           |
+-----------------+--------+---------------------+-------+-----------+
| Machine.Status  | genMac | /Cha                | cn    | BLANK     |
|                 | hState | nnel/State/machFunc | c_sta |           |
|                 |        |                     | tinfo |           |
+-----------------+--------+---------------------+-------+-----------+
| Machin          | mR     | /Bag/State/opMode   | cn    | DNC       |
| e.OperationMode | unMode |                     | c_sta | T3Lib.cls |
| (e.g., Auto)    |        |                     | tinfo | NCStatus. |
|                 |        |                     |       | Get       |
|                 |        |                     |       | RunStatus |
|                 |        |                     |       | ()        |
+-----------------+--------+---------------------+-------+-----------+
| Machin          |        | \$AC_OPERATING_TIME | c     | DNCT3Lib. |
| e.OperationTime |        |                     | nc_rd | c         |
|                 |        | /Channel/ChannelDia | timer | lsOperati |
|                 |        | gnose/operatingTime |       | ngReport. |
|                 |        |                     |       | Operating |
+-----------------+--------+---------------------+-------+-----------+
| Machi           | mOp    | /Channel/P          | c     | BLANK     |
| ne.OptionalStop | tional | rogramModification/ | nc_mo |           |
|                 | StopOn | optStopActive       | dal() |           |
+-----------------+--------+---------------------+-------+-----------+
| Machine.Program | jsI    | /Nck/Mac            | c     | BLANK     |
|                 | ncrMod | hineAxis/actIncrVal | nc_mo |           |
| (abs vs incr)   | e\[0\] |                     | dal() |           |
+-----------------+--------+---------------------+-------+-----------+
| Machin          | mFe    | /Chann              | cn    | DNCT      |
| e.ProgramStatus | edHold | el/State/progStatus | c_sta | 3Lib..cls |
|                 |        |                     | tinfo | NCStatus. |
|                 | mFa    |                     |       | GetPS     |
|                 | ilHold |                     |       | topStatus |
|                 |        |                     |       | ()        |
|                 | genC   |                     |       |           |
|                 | ycleOn |                     |       | GetSlideH |
|                 |        |                     |       | oldStatus |
|                 |        |                     |       | ()        |
+-----------------+--------+---------------------+-------+-----------+
| Machine.RapidT  | mPc    | /Channel/S          | c     | BLANK     |
| raverseOverride | tRapid | tate/rapFeedRateOvr | nc_rd |           |
|                 | OvRide |                     | opnls |           |
|                 |        |                     | gnl() |           |
|                 |        |                     |       |           |
|                 |        |                     | rpd   |           |
|                 |        |                     | _ovrd |           |
+-----------------+--------+---------------------+-------+-----------+
| M               | dioEn  | /C                  |       | BLANK     |
| achine.ServosOn | ergize | hannel/MachineAxis/ |       |           |
|                 | dState |                     |       |           |
|                 |        | drivePowerOn        |       |           |
+-----------------+--------+---------------------+-------+-----------+
| Mach            | mS     | /Channel/P          | c     | BLANK     |
| ine.SingleBlock | ingleB | rogramModification/ | nc_mo |           |
|                 | lockOn | singleBlockActive   | dal() |           |
+-----------------+--------+---------------------+-------+-----------+
| Ma              | spPosi | /Cha                | c     | BLANK     |
| chine.SpeedMode | tionOn | nnel/Spindle/opMode | nc_rd |           |
|                 |        |                     | opnls |           |
|                 |        |                     | gnl() |           |
|                 |        |                     |       |           |
|                 |        |                     | sngl  |           |
|                 |        |                     | _blck |           |
|                 |        |                     |       |           |
|                 |        |                     | [cn   |           |
|                 |        |                     | c_rdo |           |
|                 |        |                     | pmode |           |
|                 |        |                     | ()]{. |           |
|                 |        |                     | under |           |
|                 |        |                     | line} |           |
+-----------------+--------+---------------------+-------+-----------+
| Ma              | jsT    | /Channel/           | c     | BLANK     |
| chine.ToolDiame | oolRad | State/actToolRadius | nc_mo |           |
| terCompensation | OffNum |                     | dal() |           |
+-----------------+--------+---------------------+-------+-----------+
| Machine.ToolLen | jsT    | /Channel/State      | c     | BLANK     |
| gthCompensation | oolLen | /actToolLength1,2,3 | nc_mo |           |
|                 | OffNum |                     | dal() |           |
+-----------------+--------+---------------------+-------+-----------+
| Machi           | jsPl   | acMeasActPlane??    | c     | BLANK     |
| ne.WorkingPlane | aneSel |                     | nc_mo |           |
|                 | 0\[0\] |                     | dal() |           |
|                 | +      |                     |       |           |
|                 |        |                     |       |           |
|                 | jsPl   |                     |       |           |
|                 | aneSel |                     |       |           |
|                 | 1\[0\] |                     |       |           |
+-----------------+--------+---------------------+-------+-----------+
| Machine         | jsF    | /Channel/           | cnc   | BLANK     |
| .WorkOffsetMode | ixture | State/actFrameIndex | _rdzo |           |
|                 | Number |                     | fs()s |           |
| (fixtureoffset) |        |                     |       |           |
+-----------------+--------+---------------------+-------+-----------+

## *Part Program*

A part program is a file containing a sequence of machining operations
to the CNC controller which produce a specific workpiece from a given
blank, stock or starting workpiece. There are several ways to piece
together a job, consisting of a main program, subroutine programs,
fixture files, tooling files, etc. For logging, you would probably just
want the current program name, and the executing block. Passing of
Production Management Data, (versioning and modification dates) would be
useful and theoretically could be retrieved in a networked file system,
but this is not always the case. Without access to the file system
(e.g., local non-shared files), it would be useful to have versioning
and date stamps associated as part of the part program status.

+-------------+----------+---------------+------+--------------------+
| **Part      | **MDSI** | **Siemens**   | *    | **Okuma**          |
| Program**   |          |               | *Fan |                    |
|             |          |               | uc** |                    |
+-------------+----------+---------------+------+--------------------+
| Program.c   | n/a      | n/a           |      | NA                 |
| reationDate |          |               |      |                    |
+-------------+----------+---------------+------+--------------------+
| Program     | n/a      | n/a           |      | NA                 |
| modif       |          |               |      |                    |
| icationDate |          |               |      |                    |
+-------------+----------+---------------+------+--------------------+
| Pro         | n/a      | n/a           |      | NA                 |
| gram.origin |          |               |      |                    |
+-------------+----------+---------------+------+--------------------+
| P           | defProg  | /Ch           |      | BLANK              |
| rogram.Name | FileName | annel/Program |      |                    |
|             |          | Modification/ |      |                    |
|             |          |               |      |                    |
|             |          | progName      |      |                    |
+-------------+----------+---------------+------+--------------------+
| P           | defJob   | /Ch           |      | OPC//Common/NC     |
| rogram.Path | FilePath | annel/Program |      | Status/ProgramPath |
|             |          | Modification/ |      |                    |
|             |          |               |      |                    |
|             |          | workPName     |      |                    |
+-------------+----------+---------------+------+--------------------+
| **Program** |          | ------------  |      |                    |
|             |          | ------------- |      |                    |
|             |          | ------------- |      |                    |
+-------------+----------+---------------+------+--------------------+
| Program.    |          |               |      | DNC                |
| Subprograms |          |               |      | T3Lib.clsNCStatus. |
|             |          |               |      | GetSubProgramFile  |
+-------------+----------+---------------+------+--------------------+
| Prog        |          | /Ch           |      | BLANK              |
| ram.Comment |          | annel/Program |      |                    |
|             |          | Modification/ |      |                    |
|             |          |               |      |                    |
|             |          | msg           |      |                    |
+-------------+----------+---------------+------+--------------------+
| Prog        | de       | /Ch           |      | OPC//Common/NCSt   |
| ram.Current | fProgram | annel/Program |      | atus/ActiveProgram |
| ProgramName | FileName | Info/progName |      |                    |
+-------------+----------+---------------+------+--------------------+
| Program.    |          | /Channel      |      | DNC                |
| MainProgram |          | /ProgramInfo/ |      | T3Lib.clsNCStatus. |
|             |          | workPNameLong |      | GetMainProgram     |
+-------------+----------+---------------+------+--------------------+
| P           | Message: |               |      | BLANK              |
| rogram.Size | TAPEINFO |               |      |                    |
+-------------+----------+---------------+------+--------------------+
| Program     |          |               | cn   | OPC//C             |
| .CurrentSeq |          |               | c_rd | ommon/NCStatus/Cur |
| uenceNumber |          |               | seqn | rentSequenceNumber |
|             |          |               | um() |                    |
+-------------+----------+---------------+------+--------------------+
| **Block**   |          | ------------  |      |                    |
|             |          | ------------- |      |                    |
|             |          | ------------- |      |                    |
+-------------+----------+---------------+------+--------------------+
| Pr          | Message: | /Channel      |      | BLANK              |
| ogram.Activ | TAPEINFO | /ProgramInfo/ |      |                    |
| eLineNumber |          | actLineNumber |      |                    |
+-------------+----------+---------------+------+--------------------+
| Pro         | Mes      | /Channel/Pr   |      | OPC//Common/NCS    |
| gram.Active | sage:BLK | ogramPointer/ |      | tatus/CurrentBlock |
| BlockNumber | REL_READ |               |      |                    |
|             | msgB     | blockNoStr    |      |                    |
|             | lockRela |               |      |                    |
|             | tiveRead |               |      |                    |
+-------------+----------+---------------+------+--------------------+
| Program.    | jsModa   | Channel/Selec |      | O                  |
| ActiveCodes | lGString | tedFunctions/ |      | PC//ActiveCodes/Ac |
|             |          |               |      | tiveGCdoes/GCodes; |
|             |          | ncFkt         |      |                    |
|             |          |               |      | OPC//ActiveCodes/A |
|             |          |               |      | ctiveMCodes/MCodes |
+-------------+----------+---------------+------+--------------------+
| Progra      | Mes      | /Channel/Pr   |      | OPC//Common/NCS    |
| m.Executing | sage:BLK | ogramInfo/sin |      | tatus/ExecuteBlock |
| BlockSource | REL_READ | gleBlock\[1\] |      |                    |
|             | msgB     |               |      |                    |
|             | lockRela |               |      |                    |
|             | tiveRead |               |      |                    |
+-------------+----------+---------------+------+--------------------+

Choice here: read blocks from disk using file offset, or read blocks
from CNC controller.

Issues: Can't you just read creation/modification date/time from file
system.

## Spindle

Spindle information included commanded, actual, and override
information.

+------------+----------+---------------+----------+-------------------+
| *          | **MDSI** | **Siemens**   | *        | **Okuma**         |
| *Spindle** |          |               | *Fanuc** |                   |
+------------+----------+---------------+----------+-------------------+
| Mode --    | ------   | ------------  | ------   | ----              |
| See System | -------- | ------------- | -------- | ----------------- |
|            | -------- | ------------- | -------- | ----------------- |
|            | -------- |               | -------- |                   |
|            | -------- |               | -------- |                   |
+------------+----------+---------------+----------+-------------------+
| Spindle    | mEGe     | /Ch           | cnc_     | NA                |
| .GearStage | arChange | annel/Spindle | rdctrldi |                   |
|            |          | /actGearStage | //       |                   |
|            |          |               | cnc_     |                   |
|            |          |               | rdspgear |                   |
+------------+----------+---------------+----------+-------------------+
| Spindl     | n/a      | /Ch           |          | NA                |
| e.GearStag |          | annel/Spindle |          |                   |
| eCommanded |          | /cmdGearStage |          |                   |
+------------+----------+---------------+----------+-------------------+
| Spi        | defSp    | /Channel/     | cnc      | BLANK             |
| ndle.Index | AxisBase | Spindle/index | _rdnspdl |                   |
+------------+----------+---------------+----------+-------------------+
| Sp         | n/a      | /Channel/Spin | cnc_r    | OPC//Common/NCS   |
| indle.Load |          | dle/driveLoad | dspmeter | tatus/SpindleLoad |
|            |          |               | cnc_     |                   |
|            |          |               | rdspload |                   |
+------------+----------+---------------+----------+-------------------+
| Spin       | spRP     | /Channel/Spin |          | BLANK             |
| dle.Status | MState + | dle/turnState |          |                   |
|            | spR      |               |          |                   |
| CW,CCW,    | PMAtZero |               |          |                   |
| STOPPED    |          |               |          |                   |
+------------+----------+---------------+----------+-------------------+
| Sp         |          | /Channel      | cnc_rdsp | BLANK             |
| indle.Name |          | /Spindle/name | dlname() |                   |
+------------+----------+---------------+----------+-------------------+
| Spind      | spP      | /Channel/Spi  | cnc_rdop | OPC//C            |
| le.Overrid | ctOvRide | ndle/speedOvr | nlsgnl() | ommon/NCStatus/Sp |
| eCommanded |          |               |          | indlerateOverride |
|            |          |               | s        |                   |
|            |          |               | pdl_ovrd |                   |
+------------+----------+---------------+----------+-------------------+
| Spi        | spRPMNow | /Channel/Spi  | cnc      | OPC/              |
| ndle.Speed |          | ndle/actSpeed | _rdspeed | /Common/NCStatus/ |
|            |          |               |          | AcutalSpindlerate |
|            |          |               | c        |                   |
|            |          |               | nc_acts2 |                   |
+------------+----------+---------------+----------+-------------------+
| Sp         | sp       | /Channel/Spi  | cnc_rdc  | OPC//             |
| indle.Spee | RPMValue | ndle/cmdSpeed | ommand() | Common/NCStatus/C |
| dCommanded |          |               |          | ommandSpindlerate |
+------------+----------+---------------+----------+-------------------+
| Sp         |          | /C            |          | BLANK             |
| indle.Type |          | hannel/Spindl |          |                   |
|            |          | e/spindleType |          |                   |
+------------+----------+---------------+----------+-------------------+
| Spi        |          | /Nck/Ma       | cnc      | OPC//Common/NCSt  |
| ndle.Units |          | chineAxis/axi | _rdspeed | atus/SpindleUnits |
|            |          | sFeedRateUnit |          |                   |
|            |          |               | \[       |                   |
|            |          |               | speedelm |                   |
|            |          |               | ..unit\] |                   |
+------------+----------+---------------+----------+-------------------+

## Tools

Tools are resources necessary to perform a machining operations such as
material removal and probing. These are some of the initial tooling
data,from most basic to advanced:

-   Tool name, number, id, type

-   Tool Geometry -- length and radius offsets and wear offsets

-   Tool capability -- max speed, feed.

-   Tool life monitoring -- minutes and cycles

-   Tool and tool edge description -- flutes, orientation

+------+---------+--------------+----------+-------------------------+
| *    | **MD    | **Siemens**  | *        | **Okuma**               |
| *Too | SI^1^** |              | *Fanuc** |                         |
| ls** |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| T    | N/A     | /Tool/Da     |          | NA                      |
| ool. |         | ta/toolIdent |          |                         |
| Name |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| Too  |         | /To          | cnc_     | BLANK                   |
| l.Id |         | ol/Catalogue | rdtool() |                         |
|      |         | /toolInPlace |          |                         |
|      |         |              | mgz_no   |                         |
+------+---------+--------------+----------+-------------------------+
| T    |         | /Too         | cnc_     | BLANK                   |
| ool. |         | l/ActiveCata | rdtool() |                         |
| Nu   |         | logue/toolNo |          |                         |
| mber |         |              | -\       |                         |
|      |         |              | >toolnum |                         |
+------+---------+--------------+----------+-------------------------+
| T    | N/A     | /Tool/C      |          | BLANK                   |
| ool. |         | ompensation/ |          |                         |
| Type |         |              |          |                         |
|      |         | cuttEd       |          |                         |
|      |         | geParam\[1\] |          |                         |
+------+---------+--------------+----------+-------------------------+
| To   |         | /Tool/Data/  | cnc_     | BLANK                   |
| ol.S |         |              | rdtool() |                         |
| tate |         | toolState    |          |                         |
|      |         |              | l        |                         |
|      |         |              | ife_stat |                         |
+------+---------+--------------+----------+-------------------------+
| Too  | mTool   | /Tool/C      | cnc_     | BLANK                   |
| l.Le | LenOffT | ompensation/ | rdtool() |                         |
| ngth | bl\[0\] |              |          |                         |
|      |         | cuttEd       | -        |                         |
|      |         | geParam\[1\] | \>h_code |                         |
+------+---------+--------------+----------+-------------------------+
| **   |         |              |          |                         |
| tool |         |              |          |                         |
| of   |         |              |          |                         |
| fset |         |              |          |                         |
| lo   |         |              |          |                         |
| cati |         |              |          |                         |
| on** |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| To   | File    | /Tool/C      |          | OPC//Offset/ToolOffset  |
| ol.x | access  | ompensation/ |          | /X_ToolOffset//Offset01 |
| Axis |         |              |          |                         |
|      |         | cuttEdg      |          |                         |
|      |         | eParam\[21\] |          |                         |
+------+---------+--------------+----------+-------------------------+
| T    | File    | /Tool/C      |          | OPC//Offset/ToolOffset  |
| ool. | access  | ompensation/ |          | /Y_ToolOffset//Offset01 |
| yA   |         |              |          |                         |
| axis |         | cuttEdg      |          |                         |
|      |         | eParam\[22\] |          |                         |
+------+---------+--------------+----------+-------------------------+
| Too  | File    | /Tool/C      |          | BLANK                   |
| l.zA | access  | ompensation/ |          |                         |
| axis |         |              |          |                         |
|      |         | cuttEdg      |          |                         |
|      |         | eParam\[23\] |          |                         |
+------+---------+--------------+----------+-------------------------+
| Too  | mTool   | /Tool/C      | cnc_     | BLANK                   |
| l.Ra | RadOffT | ompensation/ | rdtool() |                         |
| dius | bl\[0\] |              |          |                         |
|      |         | cuttEd       | -        |                         |
|      |         | geParam\[6\] | \>d_code |                         |
+------+---------+--------------+----------+-------------------------+
| Tool |         | /Tool/C      |          | BLANK                   |
| .Tip |         | ompensation/ |          |                         |
|      |         |              |          |                         |
|      |         | cuttEd       |          |                         |
|      |         | geParam\[7\] |          |                         |
+------+---------+--------------+----------+-------------------------+
| T    |         | /C           |          | OPC//Com                |
| ool. |         | hannel/State |          | mon/NCStatus/ActiveTool |
| IdAc |         | /progTNumber |          |                         |
| tive |         |              |          |                         |
| (PR  |         |              |          |                         |
| OG?) |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| **   |         | /Tool/Catalo |          | OPC//Common             |
| tool |         | gue/numTools |          | /NCStatus/MaxToolNumber |
| cou  |         |              |          |                         |
| nt** |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| T    |         | /Tool/C      | cnc_     | BLANK                   |
| ool. |         | ompensation/ | rdtool() |                         |
| Geom |         |              | (odbtof  |                         |
| etry |         | cuttEdgePa   | s.Geomet |                         |
|      |         | ram\[3,4,5\] | ry.data) |                         |
+------+---------+--------------+----------+-------------------------+
| T    | mToo    | /Tool/C      | cn       | OPC//O                  |
| ool. | lLenWrT | ompensation/ | c_rdtool | ffset/ToolWearOffset/X_ |
| Wear | bl\[0\] |              | ()       | ToolWearOffset/Offset01 |
|      |         | cuttEdg      |          |                         |
|      | mToo    | eParam\[12,1 | W_code   |                         |
|      | lRadWrT | 3,14,15,16\] |          |                         |
|      | bl\[0\] |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| Too  | N/A     | /Tool/Data/  |          | BLANK                   |
| l.Fl |         | numCuttEdges |          |                         |
| utes |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| Too  | N/A     |              | cnc_rd   | BLANK                   |
| l.Ma |         |              | spmaxrpm |                         |
| xRPM |         |              |          |                         |
+------+---------+--------------+----------+-------------------------+
| Tool | N/A     |              | cnc_     | BLANK                   |
| .Max |         |              | rdtool() |                         |
| Feed |         |              |          |                         |
|      |         |              | feedrate |                         |
+------+---------+--------------+----------+-------------------------+

**^1^ MDSI tooling information is loaded by file into as a table.**

## *Alarms* 

Alarms are defined as events detected by the system and displayed on the
operator panel. MDSI logs alarms to a file for viewing. Access to the
log file name is available.

+-----------+----------+--------------+----------+-------------------+
| *         | **MDSI** | **Siemens**  | *        | **Okuma**         |
| *Alarms** |          |              | *Fanuc** |                   |
+-----------+----------+--------------+----------+-------------------+
| **Alarm   | Logged   |              |          | OPC//Messa        |
| Message** | to       |              |          | ges/AlarmMessage/ |
|           | displ    |              |          | GetAlarmMessages  |
|           | ay/file. |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Alar      | Logged   | /Nck/Sequ    | cnc      | OPC/              |
| m.Message | to       | encedAlarms/ | _alarm() | /Messages/AlarmMe |
|           | displ    | fil          |          | ssage/Description |
|           | ay/file. | lText1/2/3/4 |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Alarm.ID  | Logged   | /Nck/S       | cnc_rda  | OPC//Messages/    |
|           | to       | equencedAlar | lminfo() | AlarmMessage/Code |
|           | disp     | ms/textIndex |          |                   |
|           | lay/file |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Alarm.    | Logged   | /Nck/Sequ    | \'\'     | OPC//Messages/A   |
| Timestamp | to       | encedAlarms/ |          | larmMessage/Time; |
|           | disp     | timeBCD      |          |                   |
|           | lay/file |              |          | OPC//Messages/    |
|           |          |              |          | AlarmMessage/Date |
+-----------+----------+--------------+----------+-------------------+
| Ala       | Logged   | /Nck         | \'\'     | OPC//Messages/    |
| rm.Number | to       | /SequencedAl |          | AlarmMessage/Code |
|           | disp     | arms/alarmNo |          |                   |
|           | lay/file |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| **Alarm   |          |              | cn       | File access       |
| Message ( |          |              | c_rdalmh |                   |
| h         |          |              | istry2() |                   |
| istory)** |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Al        |          | /Nck/Sequ    | cnc_rd   | File access       |
| armHistor |          | encedAlarms/ | almmsg() |                   |
| y.message |          | textIndex    |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Al        |          |              | \'\'     | File access       |
| armHistor |          |              |          |                   |
| y.message |          |              |          |                   |
| ID        |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Alar      |          |              | \'\'     | File access       |
| mHistory. |          |              |          |                   |
| timestamp |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| *         |          |              | cnc_r    |                   |
| *Operator |          |              | dopmsg() |                   |
| Message** |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Operato   |          | /Chan        |          | OPC//Me           |
| r.Message |          | nel/ProgramM |          | ssages/OperatorMe |
|           |          | odification/ |          | ssage/Description |
|           |          |              |          |                   |
|           |          | msg          |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Operator. |          |              | \'\'     | OPC//Messages/Ope |
| MessageID |          |              |          | ratorMessage/Code |
+-----------+----------+--------------+----------+-------------------+
| Operator. |          |              | \'\'     | O                 |
| Timestamp |          |              |          | PC//Messages/Oper |
|           |          |              |          | atorMessage/Time; |
|           |          |              |          |                   |
|           |          |              |          | OPC//Messages/Ope |
|           |          |              |          | ratorMessage/Date |
+-----------+----------+--------------+----------+-------------------+
| Oper      |          |              | \'\'     |                   |
| ator.Type |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| *         |          |              | cnc_rdo  | File access       |
| *Operator |          |              | phisno() |                   |
| Message   |          |              |          |                   |
| (h        |          |              |          |                   |
| istory)** |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Opera     |          |              | \'\'     | File access       |
| torHistor |          |              |          |                   |
| y.Message |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Operat    |          |              | \'\'     | File access       |
| orHistory |          |              |          |                   |
| messageID |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
| Operat    |          |              | \'\'     | File access       |
| orHistory |          |              |          |                   |
| timestamp |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
|           |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
|           |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
|           |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+
|           |          |              |          |                   |
+-----------+----------+--------------+----------+-------------------+

# Variable Meanings

The table below contains brief descriptions of each of the variables
described in the OPC data item mappings.

  ---------------------------------- --------------------------------------------------
  **VARIABLE**                       **MEANING**

  Alarm.ID                           Alarm numeric id.

  Alarm.Message                      Alarm text message.

  Alarm.Number                       Alarm number since reset.

  Alarm.Timestamp                    Alarm timestamp.

  AlarmHistory.message               Alarm history text message.

  AlarmHistory.message ID            Alarm history message numeric id.

  AlarmHistory.timestamp             Alarm history message imestamp.

  AxisAbsolutePosition               Absolute position of the axis in the base system
                                     (with/without compensation or as tool tip
                                     position?)

  AxisDistanceToGo                   distance-to-go of the path in absolute distance
                                     and travel units

  AxisFollowingError                 Following error.

  AxisIncrementSystem                Active incremental distance for jogging axis

  AxisIndex                          Absolute index into axes array. (0 or 1 based?)

  AxisLabel                          Axis name, e.g., X, Y, Z, A, B, C, SP,...

  AxisLoad                           Drive load. Units (% or Nm)?

  AxisMaximum                        Axis absolute position limit in positive
                                     direction.

  AxisMinimum                        Axis absolute position limit in negative
                                     direction.

  AxisMotionState                    Enumeration: off, in--pos, moving

  AxisSetPoint                       Axis Position setpoint

  AxisType                           Linear vs. Rotary

  AxisUnits                          Enumeration describing current physical unit of
                                     the axis position. Enums TBD.

  AxisVelocity                       Axis velocity in (machine or base?) coordinate
                                     system

  AxisVelocityMax                    Maximum axis velocity.

  AxisWorkpiecePosition              Axis base position of the active tooltip relative
                                     to the workpiece zero point

  Feedrate.Actual                    Actual machine federate (per axis or per tooltip?)

  Feedrate.Commanded                 Commanded feedrate setpoint

  Feedrate.FeedUnits                 Interpolation feedrate, units e.g., mm/min,
                                     mm/rev, inch/min, inch/rev

  Feedrate.Override                  Interpolation feedrate, override in percentage

  Feedrate.OverrideMaximum           Interpolation feedrate, override maximum in
                                     percentage

  Machine.AlarmPending               Flag to indicate alarm(s) are pending

  Machine.BlockDelete                Block delete level.

  Machine.CuttingTime                Total operating time of machine excluding rapid
                                     traverse as measured in all NC programs since
                                     machine was last turned on or reset.

  Machine.CycleTime                  Runtime of selected NC program, units in SI
                                     (seconds).

  Machine.DryRun                     Dry run federate active.

  Machine.Feedhold                   Feedhold active.

  Machine.OperationMode              Active mode: JOG, AUTO, MDI

  Machine.OperationTime              Total runtime of NC programs in auto mode.

  Machine.OptionalStop               Optional stop active.

  Machine.Program                    (abs vs incr)

  Machine.ProgramStatus              Active Program status: running, aborted, stopped,
                                     ect.

  Machine.Ready                      Machine on and homed.

  Machine.ServosOn                   Servos powered on.

  Machine.SingleBlock                Single block active

  Machine.SpeedMode                  Spindle mode.

  Machine.ToolDiameterCompensation   Tool diameter compensation active.

  Machine.ToolLengthCompensation     Tool length compensation active.

  Machine.WorkingPlane               Current working plane: xy, yz, xz.

  Machine.WorkOffsetMode             Current programmed work offset.

  Operator.Message                   Operator message.

  Operator.MessageID                 Id of operator message.

  Operator.Timestamp                 Timestamp of operator message.

  Operator.Type                      Operator message type.

  OperatorHistory timestamp          Operator history message timestamp.

  OperatorHistory.Message            Operator history message.

  OperatorHistory.MessageID          Operator history message id.

  Program ModificationDate           Last modification date of part program.

  Program.ActiveBlockNumber          Active block sequence number in current program.

  Program.ActiveCodes                Active G codes in current program. (OR m codes?)

  Program.ActiveLineNumber           Active line number in current program.

  Program.Comment                    Program message to operator.

  Program.creationDate               Creation date of part program.

  Program.CurrentProgramName         Current executing part program name.

  Program.CurrentSequenceNumber      Sequence (block) number executing.

  Program.ExecutingBlockSource       Source of current executing block.

  Program.MainProgram                Main workpiece part program.

  Program.Name                       Program name of the currently active program

  Program.origin                     Origin of part program.

  Program.Path                       Directory path of part program.

  Program.Size                       Size of part program in bytes.

  Program.Subprograms                Workpiece part subprograms required.

  Machine.RapidTraverseOverride      Rapid traverse override active.

  Spec.BaseUnits                     Base units of machine (m or mm or inch)

  Spec.Configuration                 Axis setup textual description, e.g., xyz

  Spec.Controller                    Brand of controller, model

  Spec.Manufacturer                  CNC machine manufacturer.

  Spec.MaxFeed                       CNC maximum feed rate (speced).

  Spec.MaxPower                      CNC maximum power.

  Spec.MaxSpeed                      CNC maximum spindle RPM.

  Spec.MaxTraverse                   CNC maximum traverse rate

  Spec.Model                         Model number.

  Spec.NumberOfAxes                  Number of axes in machine.

  Spec.SerialNumber                  Serial Number of machine for maintenance.

  Spec.WorkingArea                   Working volume, e.g., xyz ranges.

  Spindle.GearStage                  Actual gear stage of spindle

  Spindle.GearStageCommanded         Commanded setpoint gear stage of spindle

  Spindle.Index                      Absolute axis index.

  Spindle.Load                       Spindle load.

  Spindle.Name                       Spindle name.

  Spindle.OverrideCommanded          Spindle speed override in %.

  Spindle.Speed                      Actual spindle speed.

  Spindle.SpeedCommanded             Commanded spindle speed in RPM

  Spindle.Status                     Status : CW,CCW, STOPPED

  Spindle.Type                       Master or not master.

  Spindle.Units                      Unit of the axis-specific: 0 = mm/min, 1 =
                                     inch/min, 2 = degree/min

  Tool.State                         Active, not enabled, broken, etc.

  Tool.yAaxis                        Tool length offset in y axis.

  Tool.Flutes                        Number of flutes.

  Tool.Geometry                      Tool geometry offsets: x,y,z.

  Tool.Id                            Tool id in magazine.

  Tool.IdActive                      Identifier of active tool

  Tool.Length                        Tool length offset.

  Tool.MaxFeed                       Tool's rated maximum feed rate.

  Tool.MaxRPM                        Tool's rated maximum speed.

  Tool.Name                          Tool description.

  Tool.Number                        Tool number in catalogue.

  Tool.Radius                        Tool radius offset.

  Tool.Tip                           Tool tip edge information.

  Tool.Type                          Tool type description: e.g., end mill.

  Tool.Wear                          Tool wear offsets: x,y,z.

  Tool.xAxis                         Tool length offset in X axis.

  Tool.zAaxis                        Tool length offset in Z axis.
  ---------------------------------- --------------------------------------------------