SM3_CNC_VISU ¶ SMC_PathCopier (FunctionBlock) SMC_PathCopierCompleteQueue (FunctionBlock) SMC_PathCopierFile (FunctionBlock) SMC_PositionTracker (FunctionBlock)
SMC_PathCopier (FB) ¶ FUNCTION_BLOCK SMC_PathCopier EXTENDS SMC_VisuPathProvider The function block SMC_PathCopier is designed to visualize a queue currently used by the interpolator. It reproduces the content of the input queue poqCNCPath into its output path vs3dt . It starts with the first element of the queue. In case of a linear element it adds only the start and end point to the path vs3dt . In case of curved elements it interpolates this element and adds n points to vs3dt . n depends on the length of the object, the active zoom factor of the visu element and the input dPrecision . It continues with the further objects of the queue until it either reaches the end of the queue or until the track vs3dt is full and no more points can be added to it. In the latter case it waits until the first element has been deleted from the queue and hence the corresponding points can be deleted in vs3dt , too. The function block is busy until the queue gets empty. It is typically used to display the next elements that are to be interpolated. InOut: Scope Name Type Initial Comment Inherited from Input bExecute BOOL A rising edge starts the function block. SMC_VisuPathProvider bAbort BOOL TRUE aborts the function block. SMC_VisuPathProvider udiNumberOfPointsInArray UDINT 0 Number of points which are declared in pBuffer of the referred array. SMC_VisuPathProvider pBuffer POINTER TO VisuStruct3DPathPoint Pointer to the allocated array of points. SMC_VisuPathProvider Output bBusy BOOL TRUE : FB is active SMC_VisuPathProvider vs3dt VisuStruct3DTrack Track output. To be setup as input of the visu element Path3D . SMC_VisuPathProvider Input poqCNCPath POINTER TO SMC_OUTQUEUE Pointer to SMC_OutQueue which describes the path and which can be get from other CNC function blocks like SMC_NCDecoder . dPrecision LREAL 1 The output vs3dt contains the path description and is normally transferred as path ( vtrPath ) to the visualization element.
SMC_SmoothMerge (FB) ¶ FUNCTION_BLOCK SMC_SmoothMerge The function block serves the preprocessing of line segments supplied by a CAD/CAM system. It is executed after decoding. It tries to approximate a maximum number of points by a polynom. The deviation from the original path must be within a given threshold. The created elements can be smoothed by use of the SMC_SmoothPath function block. In each cycle this function block appends a maximum of one element to the out-queue. Exactly one element is appended if the in-queue is full or bEndOfList is active and the out-queue is not full. The look-ahead is therefore limited by the size of the in-queue. Only movements in X, Y, Z, A, B and C are considered. The function block uses the mean-square-best-approximation, but always pass exactly through one first point (for avoiding jumps). This first point is given by the piDestPos of the last generated element. If it is the first element that we deal with, this is its piStartPos . Only the following movement types can be merged: All G01 movements G00 movements without movement in X/Y/Z direction Every other movement type or without the required feature flag will just be forwarded to the out-queue, except for one case: The first non-administrative element (i.e. no M-function, G4 etc.) after a merging block is going to be converted into a line. Note The function block does only merge the additional axes A/B/C (P/Q/U/V/W are not considered) does not support h-functions does not support changes of flags like G51, G52, G40 and so on. These changes are ignored. takes at most 128 line segments into account (as this quantity influences both performance and storage size). A spline always contains the same tool correction information (i.e. lengths and diameter) as the first of the segments that it replaces. InOut: Scope Name Type Initial Comment Input bExecute BOOL Starts on rising edge; while TRUE , the function block is active. poqDataIn POINTER TO SMC_OUTQUEUE Points to the SMC_OUTQUEUE -structure object, which contains the SMC_GEOINFO objects of the unsmoothed path; typically it points to the output poqDataOut of the preceding module (e.g. the SMC_NCDecoder ). nSizeOutQueue UDINT Size of the data buffer pbyBufferOutQueue`` in bytes pbyBufferOutQueue POINTER TO ARRAY [0..0] OF SMC_GEOINFO Points to the first byte of the memory area being allocated for the SMC_OUTQUEUE -structure. This area must be at least as big as defined in nSizeOutQueue . Typically the allocation of the memory buffer is done within the declaration part of the IEC-program by defining an array of SMC_GeoInfo (ExampleBuf: ARRAY[1..50] OF SMC_GEOINFO for a buffer which can hold 50 path elements). After predefining the value it may be modified during a reset only. piMaxDifference SMC_POSINFO The maximum allowed deviation from the original path, in X, Y, Z, A, B and C usiMaxDegree USINT 5 The maximal degree for the resulting polynomials, at most 5 wFeatureFlag WORD The feature bit (0..31) used for smoothing (controlled by G38/G39) wAdditionalParamNumber WORD The number of the additional parameter (set by G38 I/J/K) that is used as a factor multiplied to the precision dMinimumCurvatureRadius LREAL If a possibly generated spline contains a position where its curvature radius is less than this value, it won’t be generated. Output bDone BOOL Will be set to TRUE as soon as the input data from poqDataIn has been processed completely. Thereafter, the module will not perform any further actions until it gets reset. If the bExecute input is FALSE , bDone will be reset to FALSE . bBusy BOOL TRUE , while execution of function block is not finished bError BOOL Signals, that an error has occurred within the function block wErrorID SMC_ERROR Error identification poqDataOut POINTER TO SMC_OUTQUEUE The queue for the output path uiNrElems UINT The number of elements that have been merged in this cycle
SMC_PathCopierCompleteQueue (FB) ¶ FUNCTION_BLOCK SMC_PathCopierCompleteQueue The function block SMC_PathCopierCompleteQueue is used to change a path defined in a queue into an array of points. In contrast to SMC_PathCopier that is used if the queue is not fitting completely into the memory, this FB can only be applied if the complete CNC program fits into poqCNCPath . For every linear element one point is used. The remaining points are distributed evenly to the nonlinear elements. An error occurs when the path is not entirely contained in the queue or the number of path elements exceeds the number of points. The function block is used to display a CNC path most precisely but can only be used if the queue contains this path completely. InOut: Scope Name Type Initial Comment Input bExecute BOOL A rising edge starts the function block udiNumberOfPointsInArray UDINT 0 Number of points which are declared in pBuffer of the referred array. pBuffer POINTER TO VisuStruct3DPathPoint Pointer to the allocated array of points poqCNCPath POINTER TO SMC_OUTQUEUE Pointer to the path that shall be displayed Output bDone BOOL TRUE : FB completed bError BOOL TRUE : error during operation iErrorID SMC_ERROR Error ID vs3dt VisuStruct3DTrack Track output. To be setup as input of the visu element Path3D .
SMC_PathCopierFile (FB) ¶ FUNCTION_BLOCK SMC_PathCopierFile The function block SMC_PathCopierFile reads and decodes a G-code file ( sFileName ) and creates an array of points from the generated path. If the number of path elements is smaller than the number of array points, then they are handled the same way as with SMC_PathCopierCompleteQueue . If not, the points are evenly distributed on the path. The inputs pvl and piStartPosition are transferred to the function blocks SMC_ReadNCFile and SMC_NCDecoder , so the documentation there is also valid for the inputs here. This function block is used to provide an overview over a complete CNC program. It uses all points of the track buffer, but in case of very large G-code programs or a huge zoom factor it may be not precise. InOut: Scope Name Type Initial Comment Input bExecute BOOL A rising edge starts the function block udiNumberOfPointsInArray UDINT 0 Number of points which are declared in pBuffer of the referred array. pBuffer POINTER TO VisuStruct3DPathPoint Pointer to the allocated array of points sFileName STRING CNC file name to be read pvl POINTER TO SMC_VarList Pointer to variable list (see SMC_NCReadNCFile2 ) piStartPosition SMC_PosInfo start position (see SMC_NCInterpreter ) aSubProgramDirs ARRAY [0..4] OF STRING(174) An array of up to 5 directories where subprograms are searched (see SMC_ReadNCFile2 ) bParenthesesAsComments BOOL TRUE If parenthesis should be considered as comments (See SMC_ReadNCFile2 ) bEnableSyntaxChecks BOOL TRUE bEnableSyntaxChecks (see SMC_NCInterpreter ) bStepSuppress BOOL When this input is TRUE , lines of the CNC program starting with ‚/’ will be ignored. Otherwise they will be processed. eOriConv SMC_ORI_CONVENTION SMC_ORI_CONVENTION.ADDAXES Defines the way the orientation in the A/B/C words is interpreted (See SMC_NCInterpreter ) Output bDone BOOL TRUE : FB completed bError BOOL TRUE : error during operation iErrorID SMC_ERROR Error ID vs3dt VisuStruct3DTrack Track output. To be setup as input of the visu element Path3D .
SMC_PositionTracker (FB) ¶ FUNCTION_BLOCK SMC_PositionTracker This function block SMC_PositionTracker is designed to store positions and make it available to Path3D elements as a track. As long as bEnable is TRUE , the position is stored. bClear deletes the buffer. dX , dY , and dZ are containing the coordinates, which should be stored. In contrast to the above function blocks that provide data to display an ideal contour, this one is designed to record the actual track. The visualization element Path3D is designed to show both, the ideal path, and the actual track. InOut: Scope Name Type Initial Comment Input bEnable BOOL Track positions while TRUE bClear BOOL Clear output track dX LREAL Actual position to be added to the track. dY LREAL dZ LREAL udiNumberOfPointsInArray UDINT 0 Number of points which are declared in pBuffer of the referred array. pBuffer POINTER TO VisuStruct3DPathPoint Pointer to the allocated array of points. Output vs3dt VisuStruct3DTrack Track output. To be setup as input of the visu element Path3D .
SMC_SmoothPath (FB) ¶ FUNCTION_BLOCK SMC_SmoothPath SMC_SmoothPath smoothes corners between adjacent elements by inserting splines. See SMC_RoundPath for an alternative corner rounding with circular arcs. The cut distance, the distance between the start or end of the spline and the corner, is always limited to the sum of dEdgeDistance and the value of the g-code word D . If input bSymmetricalDistances is set, the cut distance is further limited to the minimum of half the length of the first element and half the length of the second element. If the sum of input variable dEdgeDistance and G-code word D is 0, then no smoothing is done. If one of the two elements is a G0 element, then no smoothing is done. Details All SMC_GEOINFO elements of the input structure SMC_OUTQUEUE are checked one after the other. The smooth-path functionality is executed for all elements between G51 and G50. M-function at the smoothed corner If there is a M-function at the corner that will be smoothed, then the M-function remains but is moved to the end of the smoothed corner. This behavior is consistent with the behavior of SMC_RoundPath . H-function at a smoothed corner If there is a H-function bewtween the first cut point and the corner (1), the point is moved to the smoothed path (1’). The distance to the start point remains the same. If there a H-function between the corner and the second cut point (3) the point is also moved to the smoothed path (3’), so that the distance to the end point remains the same. The position of the moved H-functions is limited so that they don’t cross the center of smoothed path. Otherwise the order of the H-functions might change (2’, 4’). Example 1: Smoothing with splines G-Code N000 G01 X10 Y0 F100 N010 G51 D2 (smoothing with cut distance 2) N020 G01 X10 Y20 N030 G01 X20 Y20 N040 G01 X20 Y0 N050 G50 (smoothing off) N060 G01 X30 The following figure shows a path with smoothed corners. The smoothing is turned on at position X10 Y0 and is turned off at position X20 Y0. All corners between these positions are replaced by splines. Example 2: Input bSymmetricalDistances G-Code N000 G01 X10 Y0 F100 N010 G51 D10 (smoothing with cut distance 2) N020 G01 X10 Y20 N030 G01 X20 Y20 N040 G01 X20 Y0 N050 G50 (smoothing off) N060 G01 X30 The example shows the result when the cut distance is larger than half of the element. The following figure shows the resulting path with bSymmetricalDistances = FALSE . The element is too short, so it is completely replaced by two splines. In the following figure bSymmetricalDistances is set, together with bImprovedSymmetricCuts . At both corners, half the length of the horizontal line limits the cut distance to 5. Example 3: Input eMode G-Code N000 G51 D10 (smoothing with cut distance 10) N010 G01 X0 Y10 N020 G01 X10 Y10 N030 G01 X10 Y0 N040 G50 (smoothing off) The default spline type for smoothing is SP_SPLINE3 , i.e. a third-degree polynomial in each dimension. It is recommended to use SP_SPLINE5_MIN_CURVATURE . Fifth-degree polynomials have the advantage that they are smooth up to the curvature (second derivative). This results in a limited jerk. Dynamic curves along the X-axis with eMode = SP_SPLINE3 Dynamic curves along the X-axis with eMode = SP_SPLINE5 A smoothing element always uses the tool correction information (i.e. lengths and diameter) of the preceding element. InOut: Scope Name Type Initial Comment Input bExecute BOOL Starts on rising edge. bAbort BOOL If TRUE , the current processing of this function block is aborted bAppend BOOL As long as this input is set to FALSE , the poqDataOut queue will be cleared at each reset. As long as it is set to TRUE , newly incoming data will be written to the end of the poqDataOut -queue. poqDataIn POINTER TO SMC_OUTQUEUE The input path queue dEdgeDistance LREAL This input variable contains the value, which – added to the value of the D word – determines the (maximum) cut distance to the corner. This value may be modified online. dAngleTol LREAL 0.001 This input defines the value for the angle tolerance, up to which a path bend should not be smoothed. nSizeOutQueue UDINT This variable contains the size of the data buffer pbyBufferOutQueue in bytes. The list of SMC_GEOINFO structure objects will be written to. This buffer must be large enough to hold at least five SMC_GEOINFO objects. Otherwise, the function block will not execute any actions at all. Its size may be predefined, but may be modified later only during a reset. It is recommended to create the buffer as described by the example below: ExampleBuf: ARRAY[1..50] OF SMC_GeoInfo; The correct buffer size will then be retrieved by use of the operator sizeof(ExampleBuf) . pbyBufferOutQueue POINTER TO ARRAY [0..0] OF SMC_GEOINFO This input must point to the first byte of the memory area being allocated for the SMC_OUTQUEUE structure. This area must be at least as big as defined in nSizeOutQueue . Typically the allocation of the memory buffer is done within the declaration part of the IEC-program by defining a byte-array (ExampleBuf: ARRAY[1..50] OF SMC_GEOINFO; ). The value may be predefined, but may then be modified during a reset only. eMode SMC_SMOOTHPATHMODE SP_SPLINE3 Determines which kind of spline is used for smoothing. It is recommended to use SMC_SMOOTHPATHMODE.SP_SPLINE5_MIN_CURVATURE . bSymmetricalDistances BOOL TRUE If bSymmetricalDistances is set, the cut distance is limited to half the length of the shorter element. Otherwise the cut distance defined in the D word is used. bImprovedSymmetricCuts BOOL If bSymmetricalDistances is set, the first element is cut at most in half. If the option bImprovedSymmetricCuts is set, this limitation is lifted. In some cases this results in a better smoothing. Only has an effect if bSymmetricalDistances is set. It is recommended to set this input to TRUE if bSymmetricalDistances is set. eAddAxMode SMC_SMOOTHPATHADDAXMODE SPAA_LATE The way how additional axis are treated. If SMC_SmoothMerge is used, this parameter should be set to mode SPAA_EXACT . dMinimumCurvatureRadius LREAL If a spline, that would be inserted in a edge, contains a position where its curvature radius is less than this parameter, this edge is not smoothed. In this situation no spline is inserted, but the original path is maintained and a stop is executed in the edge. bCheckCurvature BOOL If TRUE , it is checked if the curvature of adjacent elements is equal. If this is not the case, the path will be smoothed. dRelativeCurvatureTol LREAL 0.001 The maximum allowed relative difference in the curvature. Only used if bCheckCurvature is TRUE . bCheckAddAxVelJump BOOL If TRUE the axis A, B and C are checked for velocity jumps. Should be set if SMC_SmoothMerge is used. dMaxAddAxVelDifference LREAL The maximum allowed velocity jump [units/sec]. This input is evaluated if bCheckAddAxVelJump is TRUE . Recommended: maxAcceleration * taskCycleTime Output bDone BOOL This output will be set to TRUE as soon as the input data from poqDataIn has been processed completely. Thereafter, the module will not perform any further actions until it gets reset. If input bExecute is FALSE , bDone will be reset to FALSE . bBusy BOOL TRUE , while execution of function block is not finished bError BOOL Signals, that an error has occurred within the function block wErrorID SMC_ERROR Error identification poqDataOut POINTER TO SMC_OUTQUEUE The output path queue udiStopsDueToCurvatureRadius UDINT Number of edges that could not be smoothed because of the dMinimumCurvatureRadius setting Structure: SMC_DoBeforeLeave (Action) SMC_SmoothPathInit (Action)
File and Project Information ¶ Scope Name Type Content FileHeader creationDateTime date 13.12.2023, 08:51:55 companyName string 3S-Smart Software Solutions GmbH libraryFile SM3_CNC_Visu.library primaryProject True productName CODESYS productProfile CODESYS V3.5 SP16 Patch 3 contentFile SM3_CNC_Visu.clean.json version version 2.0.0.0 ProjectInformation OnlineHelp bool True Released True ShowSmartCodingInfo True LastModificationDateTime date 13.12.2023, 08:51:46 LibraryCategories library-category-list Intern|SoftMotion Author string CODESYS Development GmbH Company CODESYS CompiledLibraryCompatibilityVersion CODESYS V3.5 SP15 Description See: Description DocFormat reStructuredText DocLanguages en Placeholder SM3_CNC_Visu Project SM3_CNC_Visu Title SM3_CNC_Visu Version string Version version 4.16.0.0
Library Reference ¶ This is a dictionary of all referenced libraries and their name spaces. SM3_Basic ¶ Library Identification ¶ Placeholder: SM3_Basic Default Resolution: SM3_Basic, * (CODESYS) Namespace: SM3_Basic Library Properties ¶ LinkAllContent: False Optional: False QualifiedOnly: False SystemLibrary: False Key: SM3_Basic SM3_CNC ¶ Library Identification ¶ Placeholder: SM3_CNC Default Resolution: SM3_CNC, * (CODESYS) Namespace: SM3_CNC Library Properties ¶ LinkAllContent: False Optional: False QualifiedOnly: False SystemLibrary: False Key: SM3_CNC Standard ¶ Library Identification ¶ Placeholder: Standard Default Resolution: Standard, * (System) Namespace: Standard Library Properties ¶ LinkAllContent: False Optional: False QualifiedOnly: False SystemLibrary: False Key: Standard SysTypes2 Interfaces ¶ Library Identification ¶ Name: SysTypes2 Interfaces Version: newest Company: System Namespace: SysTypes Library Properties ¶ LinkAllContent: False Optional: False QualifiedOnly: False SystemLibrary: False Key: SysTypes2 Interfaces, * (System) VisuElem3DPath ¶ Library Identification ¶ Placeholder: System_VisuElem3DPath Default Resolution: VisuElem3DPath, 3.5.10.0 (System) Namespace: VisuElem3DPath Library Properties ¶ LinkAllContent: False Optional: False QualifiedOnly: False SystemLibrary: True Key: System_VisuElem3DPath Library Parameter ¶ Parameter: GC_POINTS_PER_POLYGON = 100
SMC_ToolCorr (FB) ¶ FUNCTION_BLOCK SMC_ToolCorr This function block is replaced by SMC_ToolRadiusCorr . SMC_ToolCorr creates a shifted path. In the shifted path each point has a defined distance to the original point (tool radius correction). A typical application is the milling of a programmed contour with a milling drill of a certain diameter. In order to compensate the radius of the drill, the milling drill must follow a shifted path. Note The shifted path may contain self-intersections or loops That would mean that the desired contour would be destroyed during passing the shifted path. (See the example below.) To avoid such intersections, use SMC_AvoidLoop . Proceeding of SMC_ToolCorr All SMC_GEOINFO objects found in the Input SMC_OUTQUEUE structure will be checked one after the other. If Bit1 (Bit2) of the variable Intern_Mark is set in one of these objects, then starting from there – in direction of motion - the path will be shifted to the left (right) by the currently set tool radius. In order to get a continuous path the input eMode have to set on one the desired mode: TC_RAMP_IN : this mode is used to ramp into the offset path, which means that the start position stays unchanged, but the end position is offset. All further objects are offset as well until the tool radius correction is switched off by setting Bit0 of Intern_Mark . Then, the start position of the object is still offset, but the end position is the original one. TC_BLIND_POS : this mode is used for insetting a positioning object (SMC_GEOINFO.iMoveType = 100), resp. if such a positioning object is already preceding the object. It will be shifted directly to the start point of the shifted path. Each further object will then be offset as well, until Bit0 of Intern_Mark gets set, what will stop the tool radius correction. A further positioning object will be inserted. SMC_NCDecoder will set these bits in reaction on the instructions G41/G42/G40. In other words: The tool radius correction will be done for all objects located between the instructions G41 and G40 resp. G42 and G40. Example 1: Simple tool correction G-Code: N0 G0 X10 Y-10 F10 E100 E-100 N1 G41 D10 N2 G1 X20 Y-10 N2 G1 X30 Y-10 CNC path without tool correction: CNC path with tool correction, eMode=TC_BLIND_POS: Example 2: Tool correction with eMode=TC_BLIND_POS G-Code N000 G41 D1 (WRK an) N010 G00 X3 F100 E1000 E-1000 N020 G01 X5 Y10 N030 G01 X7 Y10 N040 G01 X10 Y0 N050 G00 X20 N060 G40 (WRK off) In the example above the element in sentence N010 ramps in the shifted path. The element in sentence N050 is used for ramping out. The following figure shows the CNC path with tool correction and eMode=TC_BLIND_POS : It is highly recommended, that the first and last element in the parenthesis is a positioning element (G0). If this is not the case, the first move is to the original starting point of the object, and the next move is to the offset start point. Example 3: Tool correction with eMode=TC_RAMP_IN G-Code % G-code RampIn and Rampout in radius correction N0 G0 X10.0 Y-15.0 F10.0 E100 E-100.0 N1 G41 D10.0 N2 G1 X20.0 Y-15.0 (RampIn) N3 G1 X30.0 Y-15 N4 G40 N5 G1 X40.0 Y-15.0 (RampOut) Condition for RampIn and RampOut is a linear movement (G1 in sentence N1 and sentence N5). The following figure shows the CNC path with radius correction eMode=TC_RAMP_IN : Example 4: Tool correction with eMode=TC_RAMP_IN G-Code N000 G41 D3 (WRK an) N010 G01 X3 Y10 F100 E1000 E-1000 N020 G01 X7 Y10 N030 G01 X10 Y0 N040 G40 (WRK off) N050 G01 X20 In the example above the element in sentence N010 ramps in the shifted path. The element in sentence N050 is used for ramping out. Note the first element inside the G41/G40 parenthesis is used for ramping in and the next is used for ramping out and must be a line (G01). Example 5: Milling a contour with a milling drill moved in Z-direction G-Code (First section) N000 G41 D1 (WRK on) F100 E1000 E-1000 N010 G00 X3 N020 G01 Z10 N030 G01 X5 Y10 (Beginning of the milling contour) N040 G01 X7 Y10 N050 G01 X10 Y0 (End of the milling contour) N060 G01 Z0 N070 G40 (WRK off) N080 G00 X20 (Second section) N080 G42 D1 (WRK on) N090 G00 X23 N100 G01 Z10 N110 G01 X25 Y10 N120 G01 X27 Y10 N130 G01 X30 Y0 N140 G01 Z0 N150 G40 (WRK off) N160 G00 X40 The example above shows the using of the tool radius correction (WRK) together with the cutter positioning in Z-direction. The mode is set to BLIND_POS . The first element in the G41/G42-G40 parenthesis is to be a positioning to the start point of the contour. The next step is the positioning of the shaping tool in Z. Then the contour starts. At last the Z-axis is positioned off the workpiece and the tool radius correction is turned off. The second section of the example shows a tool radius correction in another direction. The following figure shows the milling CNC path along the Z-axis: InOut: Scope Name Type Initial Comment Input bExecute BOOL Starts on rising edge. bAbort BOOL If TRUE , the current processing of this function block is aborted bAppend BOOL As long as this input remains FALSE , the DataOutQueue will be cleared at each reset. As long as it remains TRUE , newly incoming data will be written to the end of the DataOutQueue. poqDataIn POINTER TO SMC_OUTQUEUE The input path queue. dToolRadius LREAL This variable contains the value, which – added to the current ToolRadius of the SMC_GEOINFO object – will determine the tool radius by which the path is to be shifted (see above). This value can be modified online. Thus it is possible to predefine the value offline (by the SMC_GEOINFO structure) and to modulate it online. Note that a tool radius correction that gets initiated during a shift of the block will cause the abort of the path correction and therefore should be avoided! But it is possible to do the radius correction during a reset or within a phase guaranteeing that the module is not currently shifting a block ( Status = TC_ORIG ). Default-Value: 0. nSizeOutQueue UDINT This variable contains the size of the data buffer, the list of SMC_GEOINFO structure objects will be written to. This buffer must be at least five times as big as a SMC_GEOINFO structure itself. Otherwise, SMC_NCDecoder will not execute any actions at all. Its size may be predefined, but may be modified later only during a reset. It is recommended to create the buffer as described by the example below. ExampleBuf: Array[1..50] of SMC_GeoInfo . The correct buffer size will then be retrieved by use of the operator sizeof(ExampleBuf) . pbyBufferOutQueue POINTER TO ARRAY [0..0] OF SMC_GEOINFO This input must point to the first byte of the memory area that is allocated for the SMC_OUTQUEUE structure. This area must be at least as big as defined in nSizeOutQueue . Typically the allocation of the memory buffer is done in the declaration part of the IEC-program by defining an array of SMC_GEOINFO (for example BUF: ARRAY[1..50] OF SMC_GEOINFO; for a buffer that can store 50 path elements). The value may be predefined, but may be modified later on only during a reset. eMode SMC_TOOLCORRMODE TC_RAMP_IN Mode that defines the transition between offset and non- offset path. Output bDone BOOL This variable is be set to TRUE as soon as the input path has been processed completely. The function block does not perform any further actions until it gets a reset. bBusy BOOL TRUE , while execution of function block is not finished bError BOOL Signals, that an error has occurred within the function block wErrorID SMC_ERROR Error identification poqDataOut POINTER TO SMC_OUTQUEUE This variable points to the SMC_OUTQUEUE structure that manages the decoded SMC_GEOINFO objects. iStatus SMC_TC_STATUS TC_ORIG Shows the current status of the module. TC_ORIG (0): No tool radius correction at the object. TC_RIGHT (1): Shift objects to the right. TC_LEFT (2): Shift objects to the left. TC_END (4): Processing of the objects is terminated. Structure: SMC_DoBeforeLeave (Action) SMC_ToolCorrInit (Action)