Skip to main content
10-Marble
June 24, 2024
Solved

Linestock User Defined Parameters

  • June 24, 2024
  • 1 reply
  • 2629 views

I’m having an issue with trying to get a User defined parameter PIPE_DESCRIPTION from the linestock to the piping start part parameter DESCRIPTION.

This is so when creating a pipe solid, each pipe part will have the PIPE_DESCRIPTION parameter value added to the DESCRIPTION parameter.

Then I can bring this into my table BOM, along with all the other fittings and parts which have the same parameter.

Is this possible or is there another way?

I'm using Creo Parametric 10.0.4.0

Best answer by Barra_CSGAS

All, I thought I should post a solution (work around) I've found.

I found that I can create the same parameter name in the start part as the locked parameter from the linestock, i.e. (OD) and when using the pipe solid command, it would populate the data from the linestock to the pipe part created in the assembly.

therefore, I could create a relation using the OD to populate the DN parameter using IF statements.

because all parameters are in the start part there is no errors.

IF OD == 114.3
PIPE_DN_SIZE="DN100"
ENDIF

and Wall thickness to populate the schedule size using IF, &(AND) (only used when a duplicate WT between sizes and schedules) as well as |(OR) Statements.

/* DN50 TO DN80
IF WALL_THICKNESS == 5.54 | WALL_THICKNESS == 7.62 | WALL_THICKNESS == 8.56
PIPE_SCH="XS"
ENDIF

and having 2 different start parts, one for welded pipe, the other for seamless, and having a fixed parameter (pipe_std) for those,

I was then able to combine them together to form the required description 

DESCRIPTION=STOCKNO + ", " + PIPE_DN_SIZE + ", " + PIPE_TYPE + ", " + PIPE_SCH +", " + PIPE_STD

Stockno & Pipe_type are also populated from the linestock when the pipe solid command is run.

Note:

The regenerate command needs to be run after the pipe solid command for the data to be populated.

Hope this helps

1 reply

21-Topaz II
June 25, 2024

If the DESCRIPTION parameter is the one you want to use in the bill of materials, then you should address building that parameter using other information. If I were doing this I'd probably have another parameter called something like USER_DESCRIPTION which contains what you currently use for DESCRIPTION. Then add a relation of the sort

DESCRIPTION = PIPE_DESCRIPTION + ", " + USER_DESCRIPTION

I don't know how you access the PIPE_DESCRIPTION, however. Is it an accessible parameter from within your part?

10-Marble
June 25, 2024

thanks, Ken, for your reply,

I've tried what you have suggested the issue here is the parameters needs to be within the same component, otherwise you get an error, unless there is something I'm missing in the relations function, as I'm only new to Creo.

Below image is where I'm trying to get the PIPE_DESCRIPTION parameter, as this is a common location for all of the different pipe types and sizes.

for example, if the pipe reducers, then another linestock is associated to that pipe segment, and other pipe solid part is created from a start part.

If that start part could read the linestock parameter and populate the DESCRIPTION my problem would be solved.

Barra_CSGAS_0-1719349579719.png

I would be happy to set up a Mapkey to grab the Linestock parameter then populate the description after the pipe solid has been created, however I don't know how to extract it from the User defined tab.

I've also tried breaking up the description as you have suggested, the issue here is that each would have to be populated manually every time something I'm trying to avoid again.

18-Opal
June 25, 2024

 

If you use Tookit, that’s all you need.

 

typedef enum 
{
 PROLNSTKPRM_SINGLE,
 PROLNSTKPRM_MULTIPLE
 
} ProLnstkParamType;

typedef struct pro_lnstk
{
 ProName name;
 ProAssembly owner;
 
} ProLnstk;


typedef struct _pro_lnstk_param_memb_
{
 ProName name;
 ProParamvalue value;
 
} ProLnstkParamMemb;


typedef struct _pro_lnstk_param_
{
 ProName name;
 ProLnstkParamType param_type;
 union {
 ProParamvalue value;
 ProLnstkParamMemb *members;
 } lnstk_param_value;
} ProLnstkParam;


					 ProLnstkParam **p_params);

/*
 Purpose: Retrieves parameters of specified linestock

 Input Arguments:
 lnstk - Handle of linestock.

 Output Arguments:
 p_params - ProArray of parameters.
 The function allocates memory for these arguments.
 To free it, call the function ProArrayFree.

 Return Values:
 PRO_TK_NO_ERROR - The function successfully retrieved parameters.
 PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
 PRO_TK_E_NOT_FOUND - Lnestock with this name does not exist.
 PRO_TK_GENERAL_ERROR - Other error.
*/

extern ProError ProLnstkParametersSet( ProLnstk *lnstk,
				 ProLnstkParam *p_params);

/*
 Purpose: Set parameters for specified linestock

 Input Arguments:
 lnstk - Handle of linestock.
 p_params - ProArray of new parameters.

 Output Arguments:
 None

 Return Values:
 PRO_TK_NO_ERROR - The function successfully sets new parameters.
 PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
 PRO_TK_E_NOT_FOUND - Linestock with this name does not exist.
 PRO_TK_GENERAL_ERROR - Other error.
*/

 

From Help via Relation:

 

The following file is an example of how to write a relation to control the width of a channel in a pipeline. The following relations control the width of the channel, d7:0, to keep it equal to the outer diameter of the pipe, as specified in the pipeline feature’s line stock parameters (assuming that the only two fluids in use are oil and H2O and that each gets assigned a single line stock):
 

IF fluid:fid_LINE1 = ‘oil’
d7:0 = OD:fid_OIL_STK
ELSE
d7:0 = OD:fid_H2O_STK
ENDIF