PA 9000 Software Functions
Power Automation GmbH CNC-Automatisierungstechnik Gottlieb-Daimler-Str. 17/2 74385 Pleidelsheim Germany Telephone: +49-7144-899-0 Fax: +49-7144-899-299 E-mail: info@powerautomation.com Internet: www.powerautomation.com Original document Version 2.0 2018 Power Automation GmbH 2 09.03.2018
Table of contents Table of contents 1 Overview... 5 2 Cross Error Compensation (CEC)... 7 2.1 Function of the Cross Error Compensation... 7 2.2 Principle structure of the Machine... 8 2.3 Measured error pattern... 8 2.4 Derivative error pattern... 9 2.5 Compensating curve... 10 2.6 Error... 11 2.7 Activation... 12 2.8 Installation... 12 2.9 User Interface and application... 16 2.9.1 Reference File... 17 2.9.2 Source Data File... 19 2.9.3 Target Data File... 21 2.9.4 Machine Parameters... 22 2.10 Annex Reference File for the Cross Error Compensation... 23 3 NC Interrupt Program... 35 3.1 Introduction... 35 3.2 Summary... 36 3.3 General interrupt handling... 37 3.4 Interrupt execution... 38 3.5 Programming... 39 3.5.1 Enable/disable interrupt... 40 3.5.2 Enable/disable reading I/O signal... 42 3.5.3 Interrupt execution type... 44 3.5.4 Interrupt finishing type... 45 3.5.5 Activate/deactivate interrupt... 46 3.5.6 End all NC programs... 47 3.6 Programming tips... 47 3.6.1 Store the current axes positions... 47 3.6.2 Store the tool correction values... 49 3.6.3 Store the axes offset values... 50 3.6.4 Move back to the position... 51 3.7 CNC / PLC interface... 51 3.8 System data... 53 09.03.2018 3
Table of contents 3.9 Machine Parameters... 54 3.10 Compile Cycles... 61 3.10.1 NC-interrupt events... 61 3.10.2 NC-interrupt bindings in b_aux... 62 4 Move backward on the contour... 67 5 Pitch Error Compensation... 69 5.1 General information... 69 5.2 Activate the Pitch Error Compensation... 69 5.3 The compensation values... 70 5.4 Two way Pitch Error Compensation... 74 6 Playback mode... 77 6.1 General information... 77 6.2 Activating the Playback Mode... 77 6.3 Creating NC Blocks by "Playback"... 78 6.4 Deactivating the Playback Mode... 80 7 Dynamic Lag Control... 81 7.1 Activation of function... 82 7.2 Automatically Activating of function... 82 7.3 Gantry lag check... 83 7.4 Machine parameters... 83 8 Proof of change... 85 9 Index... 87 09.03.2018 4
Overview 1 Overview Software Function Code PA 8000 Code PA 9000 See Cross Error Compensation (CEC) 400420 / 400465 450465 Ä Chapter 2 Cross Error Compensation (CEC) on page 7 Interrupt program 401406 Standard scope of delivery Move backward on the contour 401405 Standard scope of delivery Pitch Error Compensation 400702 / 400703 Standard scope of delivery Ä Chapter 3 NC Interrupt Program on page 35 Ä Chapter 4 Move backward on the contour on page 67 Ä Chapter 5 Pitch Error Compensation on page 69 Playback mode 401404 Ä Chapter 6 Playback mode on page 77 Dynamic Lag Control Ä Chapter 7 Dynamic Lag Control on page 81 09.03.2018 5
Overview 09.03.2018 6
Cross Error Compensation (CEC) 2 Cross Error Compensation (CEC) For PA 8000 this function has the Option Code: 400420 (valid from CNC version 3.4.11.4 / 12.05.2014) / 400465 (valid from CNC version 3.4.11.19 / 14.12.2015), for PA 9000 this function has the Option Code: 450465. 2.1 Function of the Cross Error Compensation The Cross Error Compensation enables the manipulation of the current required position of one NC-axis (Slave-axis) by a tabular value according to the position of another NC-axis (Master-axis). Thereby mechanical defects of an assembly group which depends on the position of another assembly group can e.g. be corrected. A typical assembly to describe the movement of a tool is the principle of the compound slide rest with NC-axes. Errors of the mechanical guidance of the NC-axis 1 vertical to the axis movement produce position errors of the moving assembly group with the NC-axis 2 which moves vertically to the NC-axis 1. A derivative error pattern can be arbitrary and describes an approach to the measured error pattern. This process is the direct basis for compensating curve. The inversion of the derivative error pattern is responsible directly for the compensating curve. With the help of the permanent connection of the data of the compensating curve to the NC-axis 2 the mechanical error of the guidance will be compensated during movement of the NC-axis 1. 09.03.2018 7
Cross Error Compensation (CEC) 2.2 Principle structure of the Machine Typically the tool will be moved with the compound slide rest. At the compound slide rest there is a coordinate system defined to check the process of the mechanical errors. Fig. 1: Principle structure of the machine 2.3 Measured error pattern The error pattern of the mechanical lead of the NC-axis X in direction to the NC-axis Y will be documented by a measurement. Fig. 2: Measured error pattern 09.03.2018 8
Cross Error Compensation (CEC) 2.4 Derivative error pattern The derivative error pattern shows an approximation to the measured error pattern. Fig. 3: Derivative error pattern Fig. 4: Measured and derivative error pattern 09.03.2018 9
Cross Error Compensation (CEC) 2.5 Compensating curve The compensating curve will operate immediately via the control system to the actual position of the inductor. Fig. 5: Compensating curve 09.03.2018 10
Cross Error Compensation (CEC) 2.6 Error The files and the machine parameters will be tested for incorrect processes respectively data. NOTICE! If an error is identified, the Cross Error Compensation won t be executed. In this case the system will be booted and operated without Cross Error Compensation. The error is displayed in the MessageBox of the CNC. Example for an error display of the Cross Error Compensation (see Fig. 6): Fig. 6: Error display of the Cross Error Compensation The following incorrect processes and data are known (see Ä Table 1 Overview of the error numbers and error descriptions on page 11): Table 1: Overview of the error numbers and error descriptions Error number Error description 1 Error Reference File; e.g. File is not existing Error Reference File; e.g. Key CorrFile1 is wrong 2 Error Data File; e.g. File is not existing 3 Error Reference File; Key NumbEnbTables: is wrong Error Reference File; Input is missing or generally wrong 4 Error Reference File; Key NumbEnbTables: Number of the tables is too large 5 Error Reference File; Key NumbMaxEnbRecords: is wrong Error Reference File; Input is missing or generally wrong 6 Error Reference File; Key NumbMaxEnbRecords: Number of the inputs per table is too large 7 Error Reference File; Key MaxEnbCompValu: is wrong Error Reference File; Input is missing or generally wrong 8 Error Reference File; Key MaxEnbCompValu: Registered value in the Reference File is too large 9 Error Data File; Registered value inside the table is too large 09.03.2018 11
Cross Error Compensation (CEC) 2.7 Activation During the booting phase of the system the Cross Error Compensation function will be activated automatically. The requirements are: Function enabled by appropriate machine parameters Successful interpretation of the tables After successful booting phase with interpretation of the target data file no message is appearing in the MessageBox of the CNC. Fig. 7: No Message about an error in the MessageBox of the CNC Via a machine date the Cross Error Compensation can optionally be blocked or released. The parameter CCDWORD1 (Compile Cycles Double Word 1) is reserved. 2.8 Installation The installation is done in the following steps: Registration of the DLL under Windows Copy of the DLL into the working directory Copy of the Reference File into the working directory Copy of the target data file into the working directory 09.03.2018 12
Cross Error Compensation (CEC) Registration of the DLL under Windows The directory to save the operator files is arbitrary. The best choice is to use the directory C:\Program Files\Power Automation\User Data\CC\, because the files contain data and allocations concerning the machine. Fig. 8: Directory to save the operator files 09.03.2018 13
Cross Error Compensation (CEC) Copy of the DLL into the working directory The DLL to implement the Cross Error Compensation CEC.dll has to be copied into the working directory C:\Program Files\Power Automation\User Data\CC\ Fig. 9: File "CEC.dll" in the required working directory 09.03.2018 14
Cross Error Compensation (CEC) Copy of the Reference File in the working directory The Reference file CEC.ref has to be copied into the working directory C:\Program Files\Power Automation\User Data\CC\ Fig. 10: File "CEC.ref" in the required working directory 09.03.2018 15
Cross Error Compensation (CEC) Copy of the target data file into the working directory The target data file CEC.csv has to be copied into the working directory C:\Program Files\Power Automation\User Data\CC\ Fig. 11: File "CEC.csv" in the required working directory 2.9 User Interface and application To the user interface belongs the Reference File (see Ä Chapter 2.9.1 Reference File on page 17), the Source Data File (see Ä Chapter 2.9.2 Source Data File on page 19), the Target Data File (see Ä Chapter 2.9.3 Target Data File on page 21), the Machine parameters (see Ä Chapter 2.9.4 Machine Parameters on page 22) 09.03.2018 16
Cross Error Compensation (CEC) 2.9.1 Reference File The Reference file has a fix directory and a fix name: C:\Program Files\Power Automation\User Data\CC \CEC.ref The name of the directory and the filename are fixed compiled in the Cross Error Compensation and thereby they establish the whole reference to the data. The Reference File has the type <*.ini>. Fig. 12: Example of a Reference File The Reference File contains two sections: [Files] [Data] Section [Files] In this section the link to the Data File is saved. The Keyword CorrFile1 is defined and compiled into the DLL. Other Keywords will not be evaluated. Section [Data] In this section the configuration parameters are saved. The Keywords MaxEnbCompValu, NumbEnbTables and Numb- MaxEnbRecords are defined and compiled into the DLL. Other Keywords will not be evaluated. 09.03.2018 17
Cross Error Compensation (CEC) The following meanings are valid: MaxEnbCompValu Maximum Enabled Compensation Value Activated (maximum allowed) compensation value System maximum: 1.0mm NumbEnbTables Number Enabled Tables Activated (maximum allowed) number of tables System maximum: 5 tables NumbMaxEnbRecords Number Maximum Enabled Records Activated (maximum allowed) number of line inputs per table System maximum: 100 compensation values per table 09.03.2018 18
Cross Error Compensation (CEC) 2.9.2 Source Data File The source data file contains all specifications concerning the allocation of the axes and data. The type of the source data file can be determined through the user himself. Usefully it should be the type <*.xls>, because the target data file is an exported <*.csv>-file. Several tables can be arranged inside the source data file (see Fig. 13). The tables will be identified by the header of the table The first sign $ with two available numbers of the axes respectively at the second and all following tables after the table-ending sign % the following sign $ with two available numbers of the axes. the ending of the table The sign % in the column of the available table header. The following numbers of the axes are allowed: 1, 2, 3, 4, 5. Any other numbers of axes will not be regarded. In the first available line the first available data column contains the number of the master axis. In the first available line the second available data column contains the number of the slave axis. The further available lines contain inside the available columns in each case the master axis position respectively the value of compensation. All details are carried out in mm. One available line will only be identified if its dimensions are up to the dimensions of the header line see beginning of the table begin in the picture. The following data requirements are valid: The positions of the master axes have to be defined as assurgent. 09.03.2018 19
Cross Error Compensation (CEC) Fig. 13: Example of a Source Data File 09.03.2018 20
Cross Error Compensation (CEC) 2.9.3 Target Data File The source data file contains all specifications concerning the allocation of the axes and data. The file has the type <*.csv> and thereby exportable directly from EXCEL-files. This file will be interpreted from the control system in the booting phase. Fig. 14: Example of a target data file The target data file is the exported file from EXCEL with the file extension <*.csv>. As divider the semicolon <;> is used by default. During the booting phase the file will be interpreted. In the process the data will be transferred in a fast analysable data format. During the real time phase of the NC-core the Cross Error Compensation is enabled permanently. The deposited compensating curves will be executed permanently. 09.03.2018 21
Cross Error Compensation (CEC) The following data requirements are valid: Until the first available pair of values the compensation value amounts 0,000 mm. After the last pair of values the compensation value of the last pair of values is valid. 2.9.4 Machine Parameters Via the machine date the Cross Error Compensation can alternatively be blocked or approved. The parameter CCDWORD1 (Compile Cycles Double Word 1) is reserved. The following states are valid ( Ä Table 2 Machine Parameters on page 22): Table 2: Machine Parameters Value CCDWORD1 Meaning 0 Cross Error Compensation is blocked - inactive 1 Cross Error Compensation is approved active, only if the tables are fixed 09.03.2018 22
Cross Error Compensation (CEC) 2.10 Annex Reference File for the Cross Error Compensation 09.03.2018 23
Cross Error Compensation (CEC) ;Reference File for Cross Error Compensation ; Version: 2.0 ; Registry entry in a channel with CEC ; C:\Program files\power automation\user Data\CC\cec.dll ; *********************************************************************** ; Advices ; *********************************************************************** ; The following limiting conditions are given in the present version ; (1) ; Maximum number of channels with the activation of the CEC = 4 ; The following channel combinations are possible: ; Ch1 ; or Ch1+Ch2 ; or Ch1+Ch2+Ch3 ; or Ch1+Ch2+Ch3+Ch4 ; The configuration occurs via a variable in the present INI-file. ; (2) ; Maximum number of NC-axes per channel = 8 ; The following axes-combinations are possible: ; Ax1 ; or Ax1+Ax2 ; or Ax1+Ax2+Ax3 ; or Ax1+Ax2+Ax3+Ax4 ; or Ax1+Ax2+Ax3+Ax4+Ax5 ; or Ax1+Ax2+Ax3+Ax4+Ax5+Ax6 ; or Ax1+Ax2+Ax3+Ax4+Ax5+Ax6+Ax7 ; or Ax1+Ax2+Ax3+Ax4+Ax5+Ax6+Ax7+Ax8 ; The configuration occurs via a variable in the present INI-file. ; *********************************************************************** ; Section : ; Names of the correction files ; *********************************************************************** [Files] ; The keywords are forceful. ; The section data contain the entries respective the names and the directory of the correction files. ; The channel specification occurs with "Chn". Example for channel 1: "Ch1" ; ----------------------------------------------------------------------- ; Memory directory and names of the correction files 09.03.2018 24
Cross Error Compensation (CEC) CorrFile_Ch1 = C:\Program files\power automation\user Data\CC\cec.csv ;CorrFile_Ch1 = C:\Program files\power automation\user Data\CC\cec_Ch1.csv CorrFile_Ch2 = C:\Program files\power automation\user Data\CC\cec_Ch2.csv CorrFile_Ch3 = C:\Program files\power automation\user Data\CC\cec_Ch3.csv CorrFile_Ch4 = C:\Program files\power automation\user Data\CC\cec_Ch4.csv ; ----------------------------------------------------------------------- ; ----------------------------------------------------------------------- ; Limitation of the data into the correction tables ; *********************************************************************** ; Section ; Different data ; *********************************************************************** [Data] ; The keywords are forceful. ; The Section Data contain the entries respective the contents of the data files. ; Without channel inscription the data for every channel is effective ; The channel specification occurs with "Chn". Example for channel 1: "Ch1" ; ----------------------------------------------------------------------- ; Maximum permitted compensation value MaxEnbCompValue = 2.0 ; Clue: maximum value = 1.0 mm ; xxxxx ; ----------------------------------------------------------------------- ; Maximum number of permitted tables NumbEnbTables = 4 ; Clue: Maximum number = 5 ; ----------------------------------------------------------------------- ; Maximum number of permitted records per table NumbMaxEnbRecords = 87 ; Clue: Maximum number = 200 ; ----------------------------------------------------------------------- ; Correction value modification per interpolation loop DeltaCorrValueIpoLoop = 1.1 ; Dimension: Increments ; ----------------------------------------------------------------------- ; Distance to the SW-Limit for shutdown of the CEC DistanceSWLimitCorrValueTo_0 = 2000 ; Dimension: Increments ; ----------------------------------------------------------------------- 09.03.2018 25
Cross Error Compensation (CEC) ; Maximum number of NC-axes ; The compensation will only be executed for this number. ; The number 1 to... is always effective: NumbMaxAxes_Ch1 = 6 NumbMaxAxes_Ch2 = 4 NumbMaxAxes_Ch3 = 6 NumbMaxAxes_Ch4 = 5 ; *********************************************************************** ; Section ; Output axes-data and parameters in NC-Parameter ; *********************************************************************** [NC_Parameter] ; The channel specification occurs with "Chn". Example for channel 1: "Ch1" ; ----------------------------------------------------------------------- ; Channel 1 - Permanent Transfer of the correction values in NC-parameter CompensationValueToAxis_Ebl_Ch1 = 1 ; 0 = cumulative value will not be written in a parameter ; 1 = cumulative value will be written for the number of axes in a parameter array CompensationValueToAxis_Nmb_Ch1 = 10 ; Parameter for compensation value of axis 1 ; Another 7 parameters are reserved for the axes 2 till 8 ; For uncorrected axes the value 0 will be edited ; ----------------------------------------------------------------------- ; Channel 2 - Permanent Transfer of the correction values in NC-parameter CompensationValueToAxis_Ebl_Ch2 = 1 ; 0 = cumulative value will not be written in a parameter ; 1 = cumulative value will be written for the number of axes in a parameter array CompensationValueToAxis_Nmb_Ch2 = 20 ; Parameter for compensation value of axis 1 ; Another 7 parameters are reserved for the axes 2 till 8 ; For uncorrected axes the value 0 will be edited ; ----------------------------------------------------------------------- ; Channel 3 - Permanent Transfer of the correction values in NC-parameter CompensationValueToAxis_Ebl_Ch3 = 1 ; 0 = cumulative value will not be written in a parameter ; 1 = cumulative value will be written for the number of axes in a parameter array CompensationValueToAxis_Nmb_Ch3 = 30 09.03.2018 26
Cross Error Compensation (CEC) ; Parameter for compensation value of axis 1 ; Another 7 parameters are reserved for the axes 2 till 8 ; For uncorrected axes the value 0 will be edited ; ----------------------------------------------------------------------- ; Channel 4 - Permanent Transfer of the correction values in NC-parameter CompensationValueToAxis_Ebl_Ch4 = 1 ; 0 = cumulative value will not be written in a parameter ; 1 = cumulative value will be written for the number of axes in a parameter array CompensationValueToAxis_Nmb_Ch4 = 40 ; Parameter for compensation value of axis 1 ; Another 7 parameters are reserved for the axes 2 till 8 ; For uncorrected axes the value 0 will be edited ; ----------------------------------------------------------------------- ; All Channels - Permanent Transfer of the axes positions into the parameter ; At required supply of the axis position into NC-Parameter the following positions ; into the parameters will be supplied in Realtime-circle ; Example for axis 1 ; AxesPositionToPar_Nmb_Ch1_Axis1 = SollPos_Intern - Parameter 1 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+1 = EndPoint_Intern - Parameter 2 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+2 = IsPos_Intern - Parameter 3 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+3 = SollPos_Machine - Parameter 4 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+4 = SollPos_Machine_Corr - Parameter 5 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+5 = IsPos_Machine - Parameter 6 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+6 = GetPos_Machine_CC - Parameter 7 of the array ; AxesPositionToPar_Nmb_Ch1_Axis1+7 = SetPos_Machine_CC - Parameter 8 of the array ; These 8 positions will be transferred permanently per axis. The transfer must be activated. ; ----------------------------------------------------------------------- ; Channel 1 - Permanent transfer ot the axes positions into the parameter AxesPositionToPar_Ebl_Ch1_Axis1 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis1 = 110 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis2 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array 09.03.2018 27
Cross Error Compensation (CEC) AxesPositionToPar_Nmb_Ch1_Axis2 = 120 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis3 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis3 = 130 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis4 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis4 = 140 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis5 = 1 ; 0 = Axis positions will not be written into a parameter rarray ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis5 = 140 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis6 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis6 = 160 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis7 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis7 = 170 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch1_Axis8 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch1_Axis8 = 180 09.03.2018 28
Cross Error Compensation (CEC) ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions ; ----------------------------------------------------------------------- ; Channel 2 - Permanent Transfer of the axes positions into the parameter AxesPositionToPar_Ebl_Ch2_Axis1 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis1 = 210 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis2 = ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis2 = 220 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis3 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis3 = 230 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis4 = 0 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis4 = 240 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis5 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis5 = 250 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis6 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array 09.03.2018 29
Cross Error Compensation (CEC) AxesPositionToPar_Nmb_Ch2_Axis6 = 260 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis7 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis7 = 270 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch2_Axis8 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch2_Axis8 = 280 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions ; ----------------------------------------------------------------------- ; Channel 3 - Permanent Transfer of the axes positions into the parameter AxesPositionToPar_Ebl_Ch3_Axis1 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis1 = 310 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis2 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis2 = 320 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis3 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis3 = 330 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis4 = 1 ; 0 = Axis positions will not be written into a parameter array 09.03.2018 30
Cross Error Compensation (CEC) ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis4 = 340 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis5 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis5 = 350 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis6 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis6 = 360 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis7 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis7 = 370 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch3_Axis8 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch3_Axis8 = 380 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions ; ----------------------------------------------------------------------- ; Channel 4 - Permanent Transfer of the axes positions into the parameter AxesPositionToPar_Ebl_Ch4_Axis1 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis1 = 410 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis2 = 0 09.03.2018 31
Cross Error Compensation (CEC) ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis2 = 420 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis3 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis3 = 430 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis4 = 0 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis4 = 440 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis5 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis5 = 450 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis6 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis6 = 460 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis7 = 1 ; 0 = Axis positions will not be written into a parameter array ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis7 = 470 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions AxesPositionToPar_Ebl_Ch4_Axis8 = 1 ; 0 = Axis positions will not be written into a parameter array 09.03.2018 32
Cross Error Compensation (CEC) ; 1 = Axis positions will be written into a parameter array AxesPositionToPar_Nmb_Ch4_Axis8 = 480 ; Parameter for the first position of the axis ; Another 7 parameters are reserved for the axes positions 09.03.2018 33
Cross Error Compensation (CEC) 09.03.2018 34
NC Interrupt Program 3 NC Interrupt Program For PA 8000 this function has the Option Code: 401406, for PA 9000 this function belongs to the standard scope of delivery. 3.1 Introduction A running NC program can be interrupted by up to 32 hardware signals or by software (NC-program itself or PLC). The interrupt "calls" a NC program which will be executed like a NC-subprogram. There are two interrupt execution types: 1. interrupt at the end of a NC-block 2. interrupt at once With the end of a NC-interrupt-subprogram there are three options: 1. continue with executing the interrupted NC-block again 2. execute the next NC-block 3. close all active NC-programs An active interrupt program can not be interrupted again (nested interrupts are not supported). An active interrupt disables all interrupts until the interrupt program returns to the interrupted program. Interrupts are only handled while a NC program is running and the NC-program and the PLC have enabled the interrupts. In MDI- or MANual modes interrupts are not executed. If the machine operator changes to MDI- or MANual mode while a NC program is running, all interrupts will be disabled. The interrupt's I/O signal will be read as well in MDI- or MANual modes but the interrupts will not become active. All active interrupt signals will be destroyed in MDIand MANual-modes. This means they will not be saved. While returning from MANual mode back to AUTO-mode no interrupt can be active. Only interrupts becoming active in AUTO-mode will be executed. Each interrupt has a priority (1-32). Priority 1 is most prior. It is allowed to set the same priority for more than one interrupt. In this case the lower index of the interrupt is more prior. For each interrupt, a default NC-program can be defined in the machine parameters. The NC-programmer can use these NC-programs but can also define another NC program with enabling an interrupt. 09.03.2018 35
NC Interrupt Program For each interrupt I/O-signal one of four active conditions can be defined in the machine parameters: 1. rising edge 2. falling edge 3. low active 4. high active The I/O port for each interrupt is defined in the machine parameter. The NC-programming characters and codes are also defined in the machine parameters and can be customized. 3.2 Summary Up to 32 interrupt channels available The PLC, the NC-program itself or the specified I/O port can activate an interrupt Free assignment of I/O ports (interrupt I/O ports must not be consecutive) Free assignment of the priority of an interrupt channel 4 active conditions for each I/O port (pos.edge, neg.edge, high or low) 2 interrupt execution types: at once (interrupts the current active NC-block) at the end of the NC-block (the interrupt waits for the end of the block) 2 interrupt finish types: execute the interrupted NC-block again continue with executing the next NC-block PLC can disable interrupts (must enable) and can disable reading the interrupt I/O ports Default NC program for each interrupt channel NC programmer can: enable/disable interrupts enable/disable reading the interrupt I/O ports change the interrupt execution type change the interrupt finish type activate or clear interrupts finish all NC-programs at the end of the NC interrupt program change the interrupt program for the channel (with "enable interrupts") All codes for the NC interrupt commands are free assignable in the machine parameters Typical interrupt latency: 1 interpreter loop (2-8ms) for stop command Typical execution delay: 6 interpreter loops after stop of current movements 09.03.2018 36
NC Interrupt Program 3.3 General interrupt handling After booting the CNC all interrupts are disabled and no interrupt I/O ports will be read. To enable reading the I/O ports, the NC program must call the enable function (or read IO function) and the PLC must set the IN_IR_RDIO_xx bit. Also the priority of the interrupt must not be zero. If one of these 3 conditions is missing, the I/O port will not be read. NOTICE! After Ctrl-Reset or end of the NC-program it must call again the enable function to activate reading the I/O port. Following conditions must be true for reading interrupt I/O ports: The NC-program has enabled reading the I/O-port The PLC has enabled reading the I/O-port The priority of the interrupt is between 1 and 32 Each NC-block will be scanned for the applied NC interrupt programming codes and will be pushed into the block-buffer for executing. If there are BCD-codes used to program the interrupts (e.g. M96 for the enable function) this BCD-code will be strobed to the PLC. Every loop the interpreter looks for an active interrupt and pushes this interrupt into a list. Following conditions must be true for inserting an active interrupt into the list: The operating mode is either AUTO-continued or -single step. The priority of the interrupt in the machine parameters is valid (1-32) The NC-program has enabled the interrupt The PLC has also enabled the interrupt The I/O port's active condition is true or the NC programmer has activated the interrupt or the PLC has activated the interrupt. After this the list of active interrupts is scanned for the most prior interrupt if there is currently no interrupt active. Following conditions must be true to get an active interrupt: The operating mode is either AUTO-continued or -single step. There is currently no active interrupt The interrupt is still enabled (NC-program and PLC) The interrupt is the most prior interrupt in the list Once an active interrupt is detected, it is removed from the list of currently active interrupts and will be executed. 09.03.2018 37
NC Interrupt Program 3.4 Interrupt execution With the interrupt's execution type (at once or at end of block), the movements of the axes will be stopped. After the axes are stopped the interpreter will be synchronized and the NC-interrupt-program is called and executed. NOTICE! Stopping the movement of the axes means the same as pressing the STOP-button (execution type "at once") or switching from AUTOmatic-Sequential to AUTOmatic-Single-block (execution type "after end of block"). These methods do not stop the spindle or the oscillation function. The NC-interrupt-program will be executed like a normal NC subprogram called with the Q letter. This means that all currently active G-codes (e.g. offsets) and corrections (e.g. H-correction) are still active in the NC-interrupt-program. This also means that the NC programmer can do everything in the interrupt program as in a normal NC-program. The NC programmer is responsible for all settings. Normally the interrupt program switches off all axis offsets and corrections and at the end it restores these values. Also the interrupt program maybe has to move back to the interrupted point. How to do all these things will be shown in a later section of this document. With the end of the NC-interrupt-program there are 3 conditions: 1. return to interrupted NC-block and execute it again 2. return and execute the next NC-block 3. end all NC-programs 09.03.2018 38
NC Interrupt Program 3.5 Programming All characters and codes which are used for programming the NC interrupts are set in the machine parameters IrProgramming- Chars and IrProgrammingCodes. This document assumes following settings. Idx Function IrProgrammingChars IrProgrammingCodes 1 Enable/disable interrupt 13 (=M) 96 (96=enable; 97=disable) 2 Enable/disable reading I/O ports 13 (=M) 7 (7=enable; 8=disable) 3 End all NC-programs 13 (=M) 99 4 Interrupt execution type 13 (=M) 12 (12=at once; 13=at end of block) 5 Interrupt finishing type 13 (=M) 16 (16=again; 17=next block) 6 Activate/deactivate interrupt 13 (=M) 26 (26=activate; 27=deactivate) 7 Interrupt level 12 (=L) 8 Interrupt program number 16 (=P) To disable a function set the corresponding entry of the machine parameter IrProgrammingChars to zero. If IrProgrammingChars is a BCD-letter, the code will be strobed to the PLC. 09.03.2018 39
NC Interrupt Program 3.5.1 Enable/disable interrupt Table 3: Syntax for "enable interrupt" M96 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active Table 4: Syntax for "disable interrupt" M97 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active M96 M96 Lx M96 Lx Py M97 M97 Lx programmed without L and P enables all available interrupts. If there was never a NCprogram defined for an interrupt, the NC-program applied in the machine parameters will be used. There is no precheck for existing NC-programs. If the interrupt gets active and a not existing NC-program should be called, the error "program does not exist" will occure. The CNC first searches for the interrupt program in the internal CMOS memory. If the NC-program is not found in the CMOS memory, it looks for it on the directory of the main NC-program. "Enable interrupt" also automatically enables "reading I/O-port" for all available interrupts. enables the specified interrupt. This also enables "reading I/O-port" for this interrupt. enables the specified interrupt. This also enables "reading I/O-port" for this interrupt. The specified NC-program will be called if the interrupt gets active. Up from now Py is the new NC-program which will be used if no NC-program is specified in an interrupt command. programmed without L disables all interrupts. This does NOT disable "reading I/O-port". disables the specified interrupt. This does NOT disable "reading I/O-port" for this interrupt. 09.03.2018 40
NC Interrupt Program M97 Lx Py M96/M97 Py disables the specified interrupt and preselects the NC-program Py for this interrupt. Up from now Py is the new NC-program which will be used if no NC-program is specified in a interrupt command. This does NOT disable "reading I/O-port" for this interrupt. is not allowed. To specify a NC-program for an interrupt, the L-word must always be programmed. Examples N50 M96 N50 M96 L1 N50 M96 L2 P1234 N50 M97 N50 M97 L1 N50 M97 L2 P4444 Enables all interrupts Enables the first interrupt Enables the first interrupt and uses Program 1234 Disables all interrupts Disables the first interrupt Disables the second interrupt and preselects program 4444 With Control-Reset or end of the main NC-program the selected NC-programs will be reseted to the NC-programs specified in the machine parameters. Also all interrupts are getting disabled with Ctrl.- Reset or end of the main NC-program. If the specified character for "enable/disable interrupt" is a BCD-character, the BCD will be strobed to the PLC. Following conditions must be true to get an active interrupt: 1. The operating mode is either AUTO-continued or single step. 2. The priority of the interrupt in the machine parameters is valid (1-32). 3. The NC-program has the interrupt enabled (here M96). 4. The PLC has also enabled the interrupt. 5. The I/O port's active condition is true or the NC programmer has activated the interrupt or the PLC has activated the interrupt. 09.03.2018 41
NC Interrupt Program 3.5.2 Enable/disable reading I/O signal Table 5: Syntax for "enable reading I/O" M7 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active Table 6: Syntax for "disable reading I/O" M8 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active M7 M7 Lx [Py] M8 M8 Lx [Py] programmed without L enables reading the I/O ports for all available interrupts. This does not mean that the interrupt itself is enabled. M7 only allows the CNC to read the I/O port. (see also Ä Chapter 3.5.1 Enable/ disable interrupt on page 40). enables reading the I/O port for the specified interrupt. programmed without L disables reading the I/O ports for all available interrupts. If the interrupt itself is enabled (see Ä Chapter 3.5.1 Enable/disable interrupt on page 40), the PLC or the NC-program can continue fire a soft-interrupt (see Ä Chapter 3.5.5 Activate/deactivate interrupt on page 46). disables reading the I/O port for the specified interrupt. As descriped in Ä Chapter 3.5.1 Enable/disable interrupt on page 40, with these two commands you can also preselect a NC-program for the interrupt. Example N10 M96 L1 P1234 Enables read I/O-port and enables interrupt... I/O-port, PLC, NC-program and a CompileCycle can fire this interrupt N50 M8 L1 Now the I/O-port won t be read any more but PLC, NCprogram and a CompileCycle can continue fire this interrupt 09.03.2018 42
NC Interrupt Program... N100 M97 L1 Disable interrupt = no interrupt possible any more Following conditions must be true for reading interrupt I/O ports: 1. The NC-program has enabled reading the I/O-port (either M96 or M7). 2. The PLC has enabled reading the I/O-port. 3. The priority of the interrupt must be between 1 and 32. To allow soft-interrupts (from PLC, NC-program or CompileCycle) it is not necessary to read the I/O port of the interrupt. If the specified character for "enable/disable reading I/O signal" is a BCD-character, the BCD will be strobed to the PLC. 09.03.2018 43
NC Interrupt Program 3.5.3 Interrupt execution type Table 7: Syntax for "execution type at once" M12 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active Table 8: Syntax for "execution type at end of block" M13 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active M12 M12 Lx [Py] M13 M13 Lx [Py] programmed without L sets the execution type of all interrupts to "at once". sets the execution type of the specified interrupt to "at once". programmed without L sets the execution type of all interrupts to "at end of block". sets the execution type of the specified interrupt to "at end of block". As descriped in Ä Chapter 3.5.1 Enable/disable interrupt on page 40, with these two commands you can also preselect a NC-program for the interrupt. With Control-Reset or end of the main NC-program the execution type of the interrupts will be reseted to the type specified in the machine parameters. If the specified character for this function is a BCDcharacter, the BCD will be strobed to the PLC. 09.03.2018 44
NC Interrupt Program 3.5.4 Interrupt finishing type Table 9: Syntax for finish type "execute interrupted block again" M16 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active Table 10: Syntax for finish type "execute next block" M17 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active M16 M16 Lx [Py] M17 M17 Lx [Py] programmed without L sets the finish type of all interrupts to "execute interrupted block again". sets the finish type of the specified interrupt to "execute interrupted block again". programmed without L sets the finish type of all interrupts to "execute next block". sets the finish type of the specified interrupt to "execute next block". As descriped in Ä Chapter 3.5.1 Enable/disable interrupt on page 40, with these two commands you can also preselect a NC-program for the interrupt. With Control-Reset or end of the main NC-program the finishing type of the interrupts will be reseted to the type specified in the machine parameters. If the specified character for this function is a BCDcharacter, the BCD will be strobed to the PLC. 09.03.2018 45
NC Interrupt Program 3.5.5 Activate/deactivate interrupt Table 11: Syntax for "activate interrupt" M26 Lx [Py] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active Table 12: Syntax for "deactivate interrupt" M27 [Lx [Py]] x = interrupt signal 1-32 y = NC-program number which will be called if the interrupt got active M26 M26 Lx [Py] M27 M27 Lx [Py] programmed without L is not allowed. sets the specified interrupt active. If there is no more prior interrupt active, this interrupt will be executed. programmed without L deactivates all interrupts. deactivates the specified interrupt. As descript in Ä Chapter 3.5.1 Enable/disable interrupt on page 40, with these two commands you can also preselect a NC-program for the interrupt. An active interrupt will not be executed if there is a more prior interrupt also active or currently an interrupt program is executed. See also Ä Chapter 3.3 General interrupt handling on page 37. If the specified character for this functions is a BCD-character, the BCD will be strobed to the PLC. Following conditions must be true to get an active interrupt: 1. The operating mode is either AUTO-continued or single step. 2. There is currently no active interrupt. 3. The interrupt is still enabled in the NC-program AND in the PLC. 4. The interrupt is the most prior interrupt in the list. 09.03.2018 46
NC Interrupt Program 3.5.6 End all NC programs The last NC-block of a NC-program or subprogram is either M02 or M30. M02 or M30 in the main-program is a control-reset. In a subprogram M02 or M30 return to the calling program. M99 in an interrupt program ends all NC-programs. M99 is only allowed if the program is called by an interrupt. If you run a program ending with M99 as a normal program or subprogram you will get the error "unexpected end of program". Examples N100 M99 Ends all NC programs You can apply e.g. M30 as code for "End all NC programs". This allows you to use M02 as normal end of interrupt program and M30 as code to end all NC-programs. Also if the applied code for "End all NC programs" is a BCD-code, this code will NOT be strobed to the PLC. The strobe to the PLC is always M30. 3.6 Programming tips As described before the NC-programmer is responsible for all things which happen in the NC-interrupt program. The CNC does not store or restore any data with interrupting a NC-program or returning back to the interrupted NC-program. The advantage is that the NC-programmer can do anything in the interrupt program and can use the interrupts for anything. And the programmer always knows the states of the machine. Nothing is hidden. It is a good idea to store all tool-correction- and axes offset values in P-parameters so that the NC-interrupt program can restore it if necessary. The frequently question is how to come back to the interrupted point and how can I restore the offset and correction values. Following section gives you an introduction how to do these things. 3.6.1 Store the current axes positions The cycle interpreter offers two commands to get the current axes position. AVa MVa The current set-position of the axis. The actual position of the axis (machine position). a = the character to program the axis, e.g. X 09.03.2018 47