Anda di halaman 1dari 19

Données produit autonomes pour une

traçabilité réelle

Camille Planat, sous la direction de Thierry Roux, CIMPA PLM services

Mémoire de master en management des systèmes d’information et d’infrastructure, Institut


d'ingénierie informatique de Limoges (3IL), octobre 2017

Résumé
La réutilisation de données de conception d’un produit dans le cadre de la conception d’un
autre produit implique de rendre autonomes les données réutilisées dans le but d’une
traçabilité complète (1). La définition de quelques concepts permet de clarifier le propos (2).
Cependant, la problématique de l’instance relative est un frein à l’autonomie de la donnée (3).
Des solutions existent mais elles ne répondent pas complètement au besoin (4). La solution
développée sera spécifiée (5), puis implémentée dans Aras Innovator (6).

Mots-clés
Produit étendu, PLM, CAO, données autonomes, contexte, produit dérivé, instance,
occurrence, instance relative, occurrence relative, instance absolue, occurrence absolue,
système d’axes absolu, système d’axes local, référentiel absolu, référentiel relatif

1. Introduction
Le besoin d’une vue holistique de l’entreprise étendue a
1.1. Qu’est-ce-que l’effet tunnel ? conduit à de nombreux travaux de recherche [1], [2], [3], [4].
Cependant, des thèmes tels que la sécurité et la confidentialité
Dans un contexte multi produits, tel que l’entreprise étendue, font que les cloisonnements subsistent.
la multiplication des référentiels complexifie la traçabilité des
informations. L’optimisation du cycle de vie du produit Lorsque le donneur d’ordre spécifie son besoin il y a déjà
consiste notamment à faciliter l’ingénierie simultanée au désynchronisation entre son environnement et celui du sous-
moyen de mécanismes de collaboration plus agiles. traitant. Cela signifie qu’au moment où le sous-traitant accède
à l’information, celle-ci est déjà périmée.
Cependant notre agilité est bridée par des représentations des
données qui ne permettent pas toujours une traçabilité Même en tenant à jour la spécification en temps réel, il y aura
complète des objets métier. De plus les représentations des toujours un décalage entre le besoin et son expression, c’est
données sont souvent hétérogènes entre des produits pourtant l’effet tunnel. Le problème est le même au sein d’une seule
liés. organisation, les métiers collaborent, chaque livrable provoque

1
une désynchronisation. On peut tracer ces désynchronisations confidentialité et de praticité. De plus chaque rédacteur a
mais ça n’est pas suffisant, on veut aller plus vite. besoin d’une vue spécifique qui ne correspond pas forcément à
la structuration décidée en conception. La possibilité de définir
Dans le contexte du donneur d’ordre, l’agilité va dans le sens des vues qui soient mises à jour automatiquement au fur et à
d’une collaboration au sein d’un système d’information unique mesure de la conception du produit serait salutaire.
ou bien de systèmes unifiés. Dans le contexte du sous-traitant,
qui doit pouvoir travailler avec plusieurs donneurs d’ordre, L’exemple le plus parlant pour les industriels est celui de la
l’agilité des donneurs d’ordre conduit au fractionnement de nomenclature. Tel qu’évoqué dans la définition d’une
son savoir entre différents systèmes d’information. Dans son structure produit, on trouve souvent une nomenclature par
propre contexte, l’agilité du sous-traitant est sa capacité à métier. La réconciliation des différentes nomenclatures est une
constituer son propre savoir tout en étant capable de tracer activité chronophage. Si on regarde les nomenclatures comme
l’utilisation qu’il en fait chez ses clients. étant chacune un produit différent, toutes les nomenclatures
pourraient être mises à jour automatiquement des changements
On souhaite pouvoir utiliser des données d’un produit, défini effectués en conception.
dans son contexte, dans d’autres produits, chacun défini dans
son contexte. L’objectif est de faciliter la conception et la De telles fonctionnalités nécessitent une grande agilité avec
configuration du produit, du moyen de production et des les données produit, il faut notamment être capable de tracer
services, qui sont autant de contextes différents avec chacun chaque utilisation d’une pièce ou d’un assemblage quel que
ses propres contraintes. Cependant ces différents contextes se soit le référentiel.
réconcilient dans un contexte commun : la satisfaction du
client.

Il est possible de mettre fin à l’effet tunnel entre ces différents Table des matières :
contextes en rendant la donnée autonome. C’est-à-dire que la
donnée sera toujours la même quel que soit le contexte où elle 1. Introduction ........................................................................................1
est utilisée. 1.1. Qu’est-ce-que l’effet tunnel ? .......................................................1

1.2 Pourquoi réutiliser des données d’un produit dans un autre


produit ? ..............................................................................................2
1.2 Pourquoi réutiliser des données d’un produit dans un
autre produit ? 3. La problématique de l’instance relative ...............................................4

Plus tôt on commence la conception du moyen de production, 4. Quels éditeurs offrent des solutions à la problématique de l’instance
relative ? .................................................................................................7
plus tôt on peut mettre le produit sur le marché. Il est courant
que des informations relatives au produit commercial soient 4.1. Dassault .......................................................................................7

transmises aux personnes qui conçoivent le moyen de 4.2. PTC ..............................................................................................7


production dès le début du cycle de vie du produit
4.3. Siemens ........................................................................................8
commercial.
5. Solution développée ............................................................................9
On pourrait économiser un temps précieux si on pouvait
5.1. Nouveauté ....................................................................................9
utiliser le modèle 3D ou une partie du modèle 3D du produit
commercial directement dans le modèle 3D du moyen de 5.2. On ne peut pas réutiliser un cas d’usage .......................................9

production et que le modèle 3D ou la partie du modèle 3D du 5.3. Réutilisation d’un assemblage dans un autre produit ....................9
produit commercial qu’on utilise soit enrichi(e) en temps réel 5.4. Réutilisation de données trans-assemblages dans un autre produit9
des changements apportés par ses concepteurs.
5.5. Dérivation d’un assemblage .......................................................10

De même, lors de la conception d’un produit B, il est courant 5.6. Modélisation de la solution ........................................................10
de réutiliser des données issues d’un produit A. Admettons
qu’un assemblage du produit A ait causé beaucoup de tracas à 6. Implémentation dans Aras Innovator.................................................13

ses concepteurs en termes de conformité, certifications, 6.1. Intégration du modèle dans la solution standard .........................13
industrialisation, etc. La nouvelle version de cet assemblage 6.3. Les relations ...............................................................................15
dans le produit B diffère quelque peu, on voudrait être capable
de dériver de la première version sans avoir à répéter le Conclusion ............................................................................................18
difficile processus qu’ont connu les concepteurs du produit A.
Bien évidemment si la primitive évolue, la dérivée aussi. Références ............................................................................................19

Autre exemple, pendant la rédaction de la documentation de


maintenance il est probable qu’on ne communique pas toute la
structure produit à chaque rédacteur pour des raisons de

2
2. Définitions Dans le présent document les mots « contexte » et
« référentiel » ont la même signification. Dans les diagrammes
Assemblage du présent document le référentiel absolu est représenté par un
Un assemblage est un ensemble de produits. Les produits qui objet « root ».
composent un assemblage sont réunis en suivant une certaine
logique, cette logique peut être différente suivant le besoin Instance
métier (cf. structure produit). L’instance est le cas d’utilisation d’un composant dans une
structure produit. Au niveau des données, les composants sont
Produit représentés par des objets qui contiennent ou pointent vers les
Un produit peut être un produit tangible, un produit informations qui les définissent (BOM, modèle 3D, version,
commercial, un assemblage, une pièce, un composant, une etc.). Une instance est le lien de structure hiérarchique entre
usine, un atelier ou un outil. Un produit père est le contexte deux produits parent et enfant, par exemple entre une pièce et
d’utilisation d’un produit enfant (cf. instance). Un sous- son assemblage. La position d’un produit est portée par le lien
produit est un produit enfant. Le produit tangible ou produit d’instance. Le lien d’instance peut aussi porter des
matériel est ce qui est livré au client. Le produit commercial informations telles que la quantité, des propriétés graphiques,
est le produit tangible accompagné des services. des notes ou toute autre information utile au métier. Une
instance est relative quand elle est définie dans un référentiel
Produit étendu relatif, absolue quand elle est définie dans référentiel absolu.
Le produit étendu est tout ce qui concourt à la valeur perçue Dans le présent document les expressions « instance »,
du produit. Le produit étendu inclut ainsi potentiellement le « agrégation », « usage », « cas d’usage », « utilisation » et
produit tangible, le moyen de production, les services et les « cas d’utilisation » ont la même signification. Les expressions
add-ons [5]. Le moyen de production est l’usine ou les « agréger dans », « utiliser dans », « instancier dans » et
installations où l’on va fabriquer le produit. Les services sont « définir une instance dans » ont la même signification.
par exemple la maintenance, la surveillance, la transmission
d’informations personnalisées en fonction de l’état ou de la Occurrence
localisation du produit, etc. Les add-ons sont les évolutions, L’occurrence, dans le présent document, est l’équivalent de
améliorations, ajouts, remplacements de pièces obsolètes l’instance absolue (cf. instance). Une instance peut avoir
contractés après la vente. plusieurs occurrences (3). Le terme occurrence n’a en
revanche pas la même signification d’un éditeur PLM/CAO à
Structure produit l’autre. La signification du terme chez chaque éditeur sera
La structure produit, aussi appelée nomenclature ou BOM (bill expliquée lors de la description des solutions techniques du
of materials), est une décomposition hiérarchique d’un marché (4).
produit. Elle énumère la quantité de matières premières,
assemblages, pièces et composants nécessaires pour fabriquer
un produit. On peut organiser la structure produit selon le
besoin métier. C’est pourquoi il est courant d’en avoir
différentes représentations au cours du cycle de vie d’un
produit: la nomenclature de conception (engineering bill of
materials ou eBOM) est généralement différente de la
nomenclature de fabrication (manufacturing bill of materials
ou mBOM) et de la nomenclature de service (service bill of
materials ou sBOM). On peut créer autant de nomenclatures
que nécessaire.

Référentiel
Un référentiel est un ensemble de points par rapport auquel on
repère une position ou un mouvement au moyen d’un système
de coordonnées. On distingue entre les référentiels relatif et
absolu. Le référentiel absolu est fixe, c’est le référentiel
principal. Dans CATIA on l’appelle le système d'axes absolu.
Le référentiel absolu contient idéalement le modèle 3D
complet du produit tangible (cf. produit), dans le cas d’un
avion le point d’origine est généralement situé devant le nez
de l’avion. Un référentiel relatif est défini par rapport au
référentiel absolu. Dans CATIA on l’appelle le système d’axes
local. Quand on créé un assemblage il est courant de créer un
référentiel relatif propre à cet assemblage afin de positionner
les pièces plus facilement.

3
3. La problématique de l’instance relative

Les illustrations qui suivent s’inspirent de la norme UML [6].


Les carrés et les rectangles représentent les objets. La ligne se
terminant par un losange est une relation d’agrégation. Cette
relation représente l’instance, le produit père est toujours du
côté du losange. La ligne en pointillés sert à relier la relation
d’agrégation à une classe d’association pour fournir des
informations supplémentaires sur la relation.

Une limitation fondamentale liée à la représentation des


données limite notre agilité avec les données produit. C’est la
notion d’instance relative. Figure 3

Une pièce P est représentée par un objet auquel sont attachées Cette façon de représenter les données ne permet pas de tracer
les données qui la définissent : nom, numéro, version, modèle chaque occurrence de l’utilisation d’une pièce ou d’un
3D, etc. (figure 1). assemblage sauf si l’utilisateur identifie ou définit chaque
occurrence de P.

1. Définir : on peut créer autant de cas d’usage de P


qu’il n’y a d’occurrences de P, dans ce cas le contexte de
définition de l’usage de P ne peut plus être A sinon on
aurait un assemblage A avec 3 instances de P et donc 9
occurrences de P (figure 4).

Figure 1

Pour utiliser la pièce P dans un assemblage A on ne duplique


pas l’objet et toutes ses données. On créé un objet de type lien
entre l’objet représentant la pièce P et l’objet représentant
l’assemblage A (figure 2). Ce lien, appelé instance, exprime
une relation hiérarchique d’usage entre l’assemblage A
(parent) et la pièce P (enfant). On dit que P est utilisé dans le
contexte de A. C’est à cet objet que l’on va attacher les
informations de positionnement de la pièce P dans
l’assemblage A (figure 2).

Figure 4

Une première solution serait de définir les cas d’usage


de P directement dans le référentiel absolu (figure 5a).

Figure 2

Notez que le cas d’usage de P dans A est unique même si A


est utilisé plusieurs fois. Autrement dit l’usage de P est défini
dans A. Si A est un référentiel relatif, l’usage de P est une
instance relative. Quand on utilise A dans 3 autres
assemblages M, N et O, 3 liens sont créés (figure 3). Si l’on
modifie la position de P dans A, tous les assemblages utilisant
Figure 5a
A sont impactés (figure 3).

4
L’autre solution consiste à définir un cas d’usage de P
dans chaque contexte où A est utilisé (figure 5b). Par P dans M dans X
conséquent l’assemblage A est inutile puisqu’il ne P dans M dans Y
contient pas de pièce. P dans N dans Y
P dans O dans Y

Revenons à l’exemple de la figure 5, si chaque usage de P est


différent cela signifie que P n’est pas défini dans A mais plus
haut dans la structure, donc on ne peut plus modifier la
définition de P dans A ni par conséquent déployer
automatiquement un changement de P dans A à tous les cas
d’usage de A comme on pouvait le faire dans l’exemple de la
figure 3. On paye ainsi le prix de la traçabilité.

Si l’on n’est pas capable de tracer chaque utilisation d’une


pièce au sein d’un seul produit sans perdre la fonctionnalité la
plus évidente apportée par la notion d’instance, quid d’un
Figure 5b environnement multi-produit ?

2. Identifier : ou alors on peut préciser le chemin de Le dilemme est donc le suivant : soit on différencie chaque
chaque occurrence de P dans A (figure 3) : occurrence du cas d’usage de P dans A et donc la traçabilité
est complète dans le sens où on identifie chaque occurrence de
P dans A dans M façon unique (figure 5), soit on conserve la possibilité de
P dans A dans N modifier chaque occurrence du cas d’usage de P dans A en
P dans A dans O une seule opération (figure 3).

Pour différencier chaque occurrence de l’usage de P il faut Admettons qu’on veuille sélectionner un ensemble
donc : soit les définir chacune dans un contexte qui permette d’occurrences de cas d’usages de pièces P et Q définis dans
cette identification unique, soit préciser le chemin de chaque différents assemblages M, N et O dont certains sont utilisés
occurrence depuis un contexte qui permet cette identification plusieurs fois : on a besoin d’identifier chaque occurrence de
unique. Par exemple, si M est utilisé plusieurs fois, le contexte façon unique car certaines occurrences pourraient
de M ne permettra plus l’identification unique de chaque correspondre à la même instance (figure 7).
occurrence de P (figure 6).

Figure 7

Figure 6
Occurrences qui correspondent à l’instance de P dans M :
P dans M dans X
On pourra alors préciser le chemin de chaque occurrence de P
P dans M dans Y
dans M :

Occurrences qui correspondent à l’instance de P dans N :


P dans M dans X
P dans N dans Y
P dans M dans Y
P dans N dans Z
On peut aussi préciser le chemin de chaque occurrence de P :

5
Occurrences qui correspondent à l’instance de Q dans N :
Q dans N dans Y
Q dans N dans Z

L’instance de Q dans O n’a qu’une occurrence :


Q dans O dans Z

Les occurrences de la sélection sont les suivantes :


P dans M dans X
P dans N dans Y
Q dans N dans Z

Pour positionner cette sélection dans le modèle 3D du moyen


de production il existe deux solutions : positionner chaque
occurrence séparément ou positionner la sélection en tant
qu’ensemble constituant son propre référentiel.

Dans le premier cas chaque occurrence sera redéfinie dans le


contexte C du moyen de production et donc le déplacement
d’une occurrence dans le produit n’aura pas d’impact sur
l’occurrence correspondante dans le moyen de production :

P dans M dans X devient P dans C


P dans N dans Y devient P dans C
Q dans N dans Z devient Q dans C

Dans le deuxième cas chaque occurrence sera redéfinie dans le


contexte de l’ensemble E et donc le déplacement d’une
occurrence dans le produit n’aura pas d’impact sur
l’occurrence correspondante dans l’ensemble, que l’ensemble
soit ou non positionné dans le moyen de production :

P dans M dans X devient P dans E


P dans N dans Y devient P dans E
Q dans N dans Z devient Q dans E

La structuration des données au seul moyen d’instances


relatives ne permet donc pas d’offrir les fonctionnalités
décrites en introduction (1.2).

6
4. Quels éditeurs offrent des solutions à la problématique
de l’instance relative ?

Les éditeurs de solutions PLM et CAO utilisent souvent


l’exemple de la nomenclature d’une voiture pour valoriser les
fonctionnalités de leurs solutions. Cette nomenclature utilise
quatre roues et deux axes. La roue et l’essieu sont définis
chacun une fois en tant que pièce. Il y a deux possibilités de
structuration des données :

i) création d’un assemblage essieu qui utilise un axe et deux


roues puis création de deux instances de l’assemblage essieu.
Figure 9
Avec les produits Dassault Systèmes il est possible de
positionner les roues différemment dans chaque instance de Chez Dassault, l’occurrence est donc le lien entre une
l’assemblage essieu alors que les instances droite et gauche de référence et l’instance de sa référence parent. Une instance
la roue n’ont été définies qu’une fois dans l’assemblage essieu peut avoir plusieurs occurrences. L’occurrence permet de
(4.1). remplacer les propriétés graphiques et de position de
l’instance.
ii) création de deux instances de l’axe et de quatre instances de
la roue. Chez PTC il est possible de donner des positions et Le modèle occurrence de Dassault permet ainsi de répondre à
des noms différents à chaque instance (4.2). la problématique de l’instance relative lorsque la structure
produit n’a pas plus de deux degrés.

4.1. Dassault
4.2. PTC
Par exemple, chez Dassault systèmes, on a le modèle
instance/référence : un composant est représenté par une Dans la solution Windchill de chez PTC la relation d’usage est
référence, le cas d’usage d’un composant est représenté par le lien de structure hiérarchique entre deux pièces parent et
une instance (figure 8). Une instance est donc un lien de enfant tandis que l’occurrence porte l’information à propos
structure hiérarchique entre deux références parent et enfant. d’un usage nommé d’une pièce dans un assemblage. La
quantité est portée par la relation d’usage. La position est
portée par l’occurrence (figure 10).

Figure 8

Tel qu’il est expliqué plus haut (3), avec le modèle Figure 10

instance/référence, on ne peut pas garantir l’identification


On ne peut pas définir des occurrences dans le contexte de son
unique de chaque occurrence de l’usage d’une référence sauf
choix, on est restreint à l’assemblage parent immédiat. Par
en précisant le chemin de chaque occurrence depuis un
conséquent la fonctionnalité Windchill de création
contexte qui permet cette identification.
d’occurrences n’apporte pas de solution à la problématique de
l’instance relative.
Le modèle occurrence est en quelque sorte une vue repliée du
modèle instance/référence. Une occurrence représente le
Une particularité intéressante de Windchill est qu’il y a deux
chemin d’une instance, sans afficher la référence intermédiaire
types de relations d’usage : uses et used by, cela permet de
(figure 9). Cette fonctionnalité a fait l’objet d’une demande de
parcourir la relation parent-enfant dans les deux sens, selon le
brevet européen [7].
besoin. Par exemple, suivre la relation used by d’une pièce
enfant à une pièce parent permet de facilement analyser
l’impact d’un changement de design.

7
L’occurrence absolue est utile lorsque l’on souhaite
différencier un usage en fonction d’un contexte particulier
4.3. Siemens (position différente des roues sur l’essieu avant, cf. 4.1).

Chez Siemens une occurrence ou occurrence relative est un L’instance est utile pour l’identification unique, le chemin
lien de structure hiérarchique entre un assemblage parent complet vers le référentiel absolu est associé à l’instance.
immédiat et son composant enfant (figure 11). Une occurrence
absolue est une relation entre un assemblage parent et un
composant situé un ou plusieurs niveaux plus bas dans la
structure (figure 11). L’assemblage parent est le contexte dans
lequel existe l’occurrence absolue.

Figure 11

Les données de l’occurrence relative peuvent être remplacées


par des données de l’occurrence absolue. Chaque occurrence
absolue peut avoir un ou plusieurs attributs uniques qui la
distinguent des autres occurrences absolues dérivées de la
même occurrence relative [8].

On voit bien que seule Siemens apporte une réponse à la


problématique de l’instance relative. L’utilisateur peut définir
des cas d’usage dans le contexte de son choix et ainsi
différencier les occurrences du cas d’usage de P dans A sans
avoir à en préciser le chemin jusqu’à un contexte qui permette
cette identification.

La société Siemens a très tôt adressé les questions de


traçabilité entre les différentes représentations de la structure
produit, certains travaux ont fait l’objet de brevets US [9][10].

En réalité Siemens utilise trois concepts : l’occurrence


(correspond à mon instance relative), l’occurrence absolue
(correspond à mon instance absolue à condition qu’elle soit
définie dans le référentiel absolu) et l’instance (correspond à
mon instance absolue).

L’occurrence est utile lorsqu’on ne souhaite pas différencier


chaque usage en fonction d’un contexte particulier (donc un
changement de P dans A est déployé automatiquement à tous
les cas d’usage de A).

8
5. Solution développée positionnement dans le référentiel R1. Les informations de
positionnement seraient donc écrasées en cas de
La solution développée s’appuie sur la notion d’instance positionnement dans R2 (voir exemple sous la figure 7).
absolue. Pour chaque instance relative, une ou plusieurs
instances absolues correspondantes sont créées Réutiliser un cas d’usage revient donc à créer un nouveau cas
automatiquement. De cette façon, on est capable d’identifier d’usage correspondant. Cependant pour des raisons pratiques
de façon unique chaque occurrence d’un cas d’usage à tout l’expression « réutiliser un cas d’usage » est parfois employée
moment et sans calcul supplémentaire. La création dans le présent document. Pour être rigoureux il faudrait dire :
automatique des instances absolues permet ainsi la « définir dans un référentiel R2 un cas d’usage correspondant
réutilisation de données d’un produit dans un autre produit de à un cas d’usage défini dans un référentiel R1 ». On peut
deux manières : réutiliser un assemblage A ou une pièce P mais on ne peut pas
réutiliser un cas d’usage de A ou de P.
i) la création de contextes, donnée autonome qui s’appuie sur
des instances absolues (5.4) ;
5.3. Réutilisation d’un assemblage dans un autre produit
ii) la création de produit dérivés, donnée autonome qui
s’appuie sur des instances relatives (5.5). La réutilisation d’un assemblage ne pose pas de problème
particulier dans les outils actuels, cependant la question de la
conservation du lien avec l’usage original a déjà fait l’objet de
5.1. Nouveauté travaux [11].

En ce qui concerne les instances absolues, l’apport de la Pour pouvoir réutiliser dans un référentiel R2 un assemblage
solution développée concerne notamment le fait que les A utilisé dans un référentiel R1 il suffit de définir un cas
instances absolues correspondantes sont systématiquement d’usage de A dans R2. Le concepteur peut déplacer les pièces
créées pour chaque cas d’usage. Ainsi, premièrement on n’a utilisées dans A, les deux cas d’usage de A seront impactés.
pas besoin de chercher le chemin d’une instance lorsqu’on
souhaite le connaître, deuxièmement on n’a pas besoin de
calculer la position absolue d’une instance lorsqu’on souhaite 5.4. Réutilisation de données trans-assemblages dans un
la connaître. autre produit

Ce deuxième aspect est de nature à économiser beaucoup de Avant de réutiliser des données relatives à plusieurs
ressources de calcul. En effet pour connaître la position assemblages il faut d’abord les sélectionner. Pour pouvoir
absolue d’une instance dans une structure produit il faut passer réaliser des sélections on utilise les instances absolues, seul
par autant de changements de repères qu’il n’y a de degrés moyen direct d’identification unique (3).
dans la structure au-dessus de ladite instance.
De cette façon on connaît d’une part la position de l’instance
La nouveauté se trouve dans les deux points suivants : relative, c’est-à-dire la position de la pièce dans son référentiel
local ou relatif. D’autre part on connaît la position de
D’une part, la création systématique des instances absolues l’instance absolue, c’est-à-dire la position de la pièce dans le
permet la sélection de données produit, peu importe si les référentiel absolu.
données sélectionnées font partie d’un ou plusieurs
assemblages distincts. Par exemple, je cherche toutes les instances situées dans une
sphère de rayon 1 mètre autour d’un certain point défini dans
D’autre part les données sélectionnées sont rendues un référentiel absolu R1.
autonomes. C’est-à-dire qu’elles resteront les mêmes quel que
soit le contexte où elles sont réutilisées. Pour que ma recherche donne un résultat correct il faut que les
instances soient définies dans R1. Les sélections spatiales sont
alors très faciles à réaliser puisqu’il suffit d’une requête qui va
5.2. On ne peut pas réutiliser un cas d’usage rechercher dans la base de données les positions absolues
situées dans la sphère.
Pour pouvoir utiliser des données d’un produit dans un autre
produit sans en perdre la traçabilité, chaque cas d’usage d’un Une fois la sélection réalisée on la transforme en une donnée
composant doit pouvoir être « réutilisé » dans un référentiel autonome qu’on peut réutiliser dans n’importe quel référentiel.
R2 sans perdre les informations qui définissent sa position
dans le référentiel R1. Comment transformer la sélection en donnée autonome ? En
créant, dans un contexte C de matrice nulle, les instances qui
Cependant on ne peut pas réutiliser un cas d’usage car c’est correspondent aux instances absolues situées dans la sphère.
sur cet objet que sont portées les informations de

9
Mais ce n’est pas suffisant, il faut que la position des instances Le produit dérivé dX est une donnée autonome car sa
définies dans le contexte C dépende de la position des définition dépend de la définition de X, peu importe le
instances qui ont été en tout premier lieu définies dans leurs contexte où dX est utilisé. Ce comportement nécessite
assemblages respectifs. évidemment quelques lignes de code (6.2).

Récapitulons :
i) Création manuelle d’instances dans des assemblages 5.6. Modélisation de la solution
ii) Un programme se charge de la création automatique des
instances absolues correspondantes Pour pouvoir répondre aux fonctionnalités définies plus haut
iii) Sélection d’instances absolues (5.4, 5.5), on a besoin d’un modèle conceptuel de données
iv) Création manuelle, dans un contexte C de matrice nulle, de avec lequel on puisse gérer à la fois les données d’un produit
nouvelles instances correspondant aux instances absolues de la tangible, d’un moyen de production, des services et des add-
sélection ons (figure 12).
v) Un programme se charge du repositionnement automatique
des instances du contexte C quand la position des instances Les classes :
absolues correspondantes est modifiée
La classe item est une classe abstraite qui peut se spécialiser
Notez que les instances définies dans C ont la même position en leaf_item et items_aggregation.
absolue que celles définies R1 et que celles définies dans leurs
assemblages respectifs. La classe items_aggregation est une classe abstraite qui peut
se spécialiser en context, Assembly, derived_product et
Il suffit alors d’utiliser C dans un autre contexte. Toute root_product.
modification des instances définies dans leurs assemblages
respectifs sera répercutée sur les instances définies dans C, où La classe context sert à la création de contextes (5.4).
qu’il soit utilisé.
La classe Assembly sert à la création d’assemblages, un
Le contexte C est une donnée autonome car sa définition assemblage peut être un ensemble de pièces, un produit
dépend des contextes dans lesquels les éléments regroupés commercial, une usine, un atelier voire un outil.
dans C ont été préalablement définis. Même raisonnement
pour les instances absolues définies dans R1, leur position La classe derived_product sert à la création de produits
dépend de celle des instances relatives correspondantes. dérivés (5.5).

La classe leaf_item sert à la création de pièces, composants


5.5. Dérivation d’un assemblage voire outils qu’on ne peut pas ou qu’on ne veut pas
décomposer davantage.
Tel qu’introduit plus haut, lors de la conception d’un produit
B, il est courant de réutiliser des données issues d’un produit La classe root_product sert à la création de référentiels
A. Admettons qu’un assemblage X du produit A ait causé absolus (cf. référentiel), cette classe ne sera pas implémentée
beaucoup de tracas à ses concepteurs en termes de conformité, (6), elle représente un assemblage constituant un référentiel
certifications, industrialisation, etc. La nouvelle version de X absolu. Toute référence, dans le présent document, à un objet
dans le produit B diffère quelque peu, on voudrait être capable de type root_product doit être vue comme une référence à
de dériver de la première version sans avoir à répéter le
un assemblage dans le contexte duquel ont été définies des
difficile processus qu’ont connu ses concepteurs.
instances absolues. Dans l’exemple de la figure 16 (6), N et
Root sont des référentiels absolus, Root étant le plus haut de la
L’idée est de conserver tout ce dont on a besoin de
structure.
l’assemblage X afin de se concentrer sur ce qui diffère avec la
nouvelle version. Par exemple la première version de X
La classe d’association absolute_instance décrit le lien
contient P1, P2 et P3, la nouvelle version contient P1, P2 et
d’agrégation entre un item et un root_product.
P4. On veut une dérivée de X qui ne contient que P1 et P2 afin
de ne travailler que sur P4.
La classe d’association relative_instance décrit le lien
d’agrégation entre un item et un items_aggregation.
La solution est simple : on créé une dérivée de X en créant de
nouveaux liens de P1 et P2 à un produit dérivé dX dont la
Les héritages et agrégations :
définition dépend de celle de X. C’est-à-dire qu’on instancie
P1 et P2 dans dX mais la position de P1 et P2 dans dX dépend
Toutes les classes qui héritent d’item peuvent êtres agrégées
la position de P1 et P2 dans X. Si P1 est déplacé dans X, P1 se
dans un root_product. Toutes les classes qui héritent
déplace de la même manière dans dX.
d’items_aggregation peuvent êtres agrégées dans un
root_product puisque items_aggregation hérite d’item.

10
Figure 12

enlever, ce qui donnera la fonction de dérivation (cf.


Le lien d’agrégation entre item et root_product signifie derivation_function).
que tout cas d’usage, dans le référentiel absolu, d’une classe
qui hérite directement ou non d’item, est une instance CreateAbsoluteInstance() créé la ou les instance(s)
absolue. absolue(s) correspondant à une instance relative lors de la
création de cette instance relative.
Toutes les classes qui héritent d’item peuvent s’agréger dans
les classes qui héritent d’items_aggregation. Comme DeleteAbsoluteInstance() supprime la ou les instance(s)
items_aggregation hérite d’item alors toutes les classes qui absolue(s) correspondant à une instance relative lors de la
héritent d’items_aggregation peuvent s’agréger elles- suppression de cette instance relative.
mêmes.
UpdateDerivedProduct() est la méthode qui met à jour le
Le lien d’agrégation entre item et items_aggregation produit dérivé lorsque les instances relatives de l’assemblage
signifie que tout cas d’usage, dans une classe qui hérite primitif sont modifiées.
d’items_aggregation, d’une classe qui hérite directement
ou non d’item, est une instance relative. UpdateInContext() est la méthode qui met à jour le
contexte lorsque les instances relatives correspondantes sont
L’agrégation d’un context dans un assemblage ou produit modifiées.
dérivé n’est pas nécessaire, l’objet context sert à grouper des
instances absolues afin de les « réutiliser » dans un autre Les attributs :
référentiel.
is_derived_from pointe vers l’assemblage primitif.
Les cardinalités sont permissives puisqu’il n’y a pas lieu ni
d’imposer un minimum ni de limiter le nombre d’objets derivation_function est la fonction de dérivation de
agrégés. l’assemblage primitif, c’est-à-dire l’opération par laquelle on
obtient la dérivée d’un assemblage. Il s’agit d’une chaîne de
Les méthodes : caractères énumérant les numéros d’instances
(rel_inst_num) de premier niveau à exclure de la dérivée, le
CreateDerivedProduct() est la méthode qui permet de caractère servant de séparateur sera déterminé lors de
créer un produit dérivé à partir d’un assemblage. On veut l’implémentation.
pouvoir sélectionner les composants de l’assemblage à

11
absolute_instance_type est le type d’instance absolue,
cet attribut indique la classe du produit parent et la classe du
produit enfant. Cet attribut ne sera pas implémenté car il y 5.7. Limitations
aura une classe par type de lien (6).
La présente solution implique de partir de zéro en l’absence
abs_inst_num est le numéro de l’instance absolue, il est d’un algorithme récursif capable de créer toutes les instances
composé du numéro de l’instance relative correspondante absolues correspondant aux instances relatives d’une structure
auquel est ajouté un compteur incrémenté à chaque occurrence produit.
de l’instance relative (une instance relative peut avoir une ou
plusieurs instances absolues correspondantes). Plus simplement, dès qu’un produit parent n’a pas de parent
on considère que c’est le référentiel absolu. De cette manière
corresponds_to pointe vers l’instance relative les sous-produits instanciés dans un produit sont toujours
correspondante. définis dans le référentiel du produit avec des instances
absolues (figure 16).
corresponding_abs permet de tracer quelles instances
absolues sont créées lors de l’instanciation d’un assemblage. Pour instancier un produit qui contient des sous-produits il
En effet chaque assemblage constitue son propre référentiel suffit alors de chercher toutes les instances absolues dont ce
absolu. Lors de l’instanciation de cet assemblage, la méthode produit est le père puis de créer les instances absolues
CreateAbsoluteInstance()créé au moins une instance correspondantes dans le nouveau référentiel.
absolue pour chaque instance absolue dont l’assemblage est le
père. L’attribut corresponding_abs pointe vers la ou les Si plusieurs référentiels absolus existent dans la structure
instances absolues correspondantes. Cela permet de savoir, en produit, les instances absolues sont créées dans tous ces
combinaison avec l’attribut definition_context, quelles référentiels.
instances absolues ont été créées lors de l’instanciation d’un
assemblage. La méthode DeleteAbsoluteInstance() peut En ce qui concerne la reprise de données, pour pouvoir
alors trouver quelles instances absolues elle doit supprimer en importer automatiquement et rendre conformes à la présente
cas de suppression d’une instance d’un assemblage. Une solution des structures produit construites dans d’autres
instance absolue dont l’attribut corresponding_abs n’est systèmes, l’algorithme récursif évoqué plus haut est
pas renseigné est soit une instance absolue créée lors de indispensable.
l’instanciation d’un leaf_item, soit une instance absolue
d’un assemblage.

definition_context pointe sur une instance absolue


correspondant à l’instance relative dont la création a déclenché
la création de l’instance absolue qui contient cet attribut. Cet
attribut permet de tracer les instances absolues. Une instance
absolue dont l’attribut definition_context n’est pas
renseigné a forcément été définie dans un assemblage qui
n’était pas encore instancié.

abs_position_matrix est la matrice de positionnement de


l’instance absolue, il est possible de l’implémenter soit en tant
que chaîne de caractères regroupant toutes les coordonnées
soit avec un attribut de type entier par coordonnée.

relative_instance_type est le type d’instance relative,


cet attribut indique la classe du produit parent et la classe du
produit enfant. Cet attribut ne sera pas implémenté car il y
aura une classe par type de lien (6).

rel_inst_num est le numéro de l’instance relative, il est


composé du numéro de la pièce instanciée auquel est ajouté un
compteur incrémenté à chaque instanciation de la pièce.

rel_position_matrix est la matrice de positionnement de


l’instance relative, il est possible de l’implémenter soit en tant
que chaîne de caractères regroupant toutes les coordonnées
soit avec une coordonnée par attribut de type entier.

12
6. Implémentation dans Aras Innovator
L’objet Part de la solution standard est l’équivalent à la fois
Le modèle de données décrit ci-dessus ne peut des objets LeafProduct et Assembly du modèle
malheureusement pas être implémenté tel quel dans Aras d’implémentation.
Innovator. En effet, ce modèle contient plusieurs héritages.
Les objets Part BOM et BOM Instance sont l’équivalent des
Aras Innovator offre une fonctionnalité proche de l’héritage : objets AssyInst et LPinstInAssy du modèle
les poly Items. Un poly Item est un objet qui peut prendre d’implémentation. Part BOM indique la quantité, BOM
plusieurs formes, comme c’est le cas pour l’objet item du Instance porte la position, comme dans Windchill (4.2).
modèle conceptuel (figure 12). Cependant dans Aras les
différentes formes (poly sources) que peut prendre un objet La question est comment faire pour implémenter notre modèle
n’héritent ni des propriétés, ni des liens que peut avoir le poly sans perdre les fonctionnalités standard d’Aras ? Tous les
Item. objets qui sont reliés à Part dans la solution standard devront
être reliés aux objets de notre modèle.
Par conséquent pour pouvoir implémenter le modèle de la
figure 12 il faut créer un type de lien différent entre chaque Par exemple la relation entre Part et Document deviendra une
type d’objets. On a ainsi 5 types d’instances relatives, 3 types relation entre LeafProduct et Document et une relation entre
d’instances dans le contexte et 3 types d’instances absolues Assembly et Document.
(figure 14). Les classes item et items_aggregation ont été
exclues du modèle d’implémentation pour la même raison. Pour d’autres objets tels que DerivedProduct la question de
l’intégration n’est pas toujours évidente. Cela dépendra du
besoin de celui qui implémentera le modèle.
6.1. Intégration du modèle dans la solution standard
La politique d’Aras en matière de customisations est très
Aras Innovator contient déjà un modèle de données permettant permissive puisque la compagnie s’engage à supporter les
de manipuler les objets métier auxquels nous nous intéressons mises à jour peu importe le degré de customisation, sauf
dans le présent document. La figure 15 donne un aperçu de la modification des fichiers source. Le remplacement de l’objet
solution standard. Part de la solution standard n’est pas un hack mais bien une
customisation qui ne dispensera pas Aras d’exécuter ses
obligations dans le cadre du contrat de support

6.2. Les classes

Les algorithmes décrits dans cette section peuvent être


directement implémentés dans Aras Innovator au moyen des
méthodes des classes Innovator et Item.

Assembly :

La classe Assembly sert à la création d’assemblages, un


assemblage peut être un ensemble de pièces, un produit
tangible, une usine, un atelier ou encore un outil.

Figure 15
Notez que la classe Assembly est décrite deux fois dans la
figure 14. Cela permet de représenter les instances absolues et
Dans Aras, tout est un Item. Un Item est une instance d’un les instances relatives. La classe Assembly située en haut du
ItemType. Un ItemType est un Item. Les Items peuvent avoir modèle d’implémentation (figure 14) est l’équivalent de la
des relations vers d’autres Items. Les relations sont aussi des classe root_product dans le modèle conceptuel (figure 12).
Items avec des propriétés indiquant le parent et l’enfant.
La méthode CreateDerivedProduct()permet de créer un
Toutes les classes de la figure 15 sont des ItemTypes sauf produit dérivé à partir d’un assemblage. Cette méthode doit
Assembly, Component et Material qui sont des sous-types pouvoir être appelée d’un clic droit sur un Assembly. Pour
de Part. L’ennui avec la fonctionnalité de classification cela il faut insérer le code de la méthode depuis l’onglet
d’Aras est qu’il n’est pas possible de de créer des relations Actions de l’ItemType Assembly. La méthode doit déclencher
spécifiques à des sous-types. Ainsi, avec la solution standard, l’ouverture d’une fenêtre depuis laquelle l’utilisateur choisit
on ne peut pas créer de lien entre Assembly et un autre objet. les instances de premier niveau à exclure de la dérivée.

13
Figure 14

création d’un DerivedProduct, c’est la liste des instances de


Algorithme : La méthode CreateDerivedProduct()créé un premier niveau qui ont été sélectionnées comme étant à
objet de type derived_product dans lequel elle créé, pour exclure.
chaque instance de premier niveau définie dans la primitive et
qui n’a pas été sélectionnée comme étant à enlever, l’instance L’attribut corresponds_to pointe sur l’instance
correspondante dans le produit dérivé créé et renseigne correspondante dans l’assemblage primitif.
l’attribut corresponds_to. La position des instances dans le
produit dérivé sera la même que la position des instances dans LeafProduct :
l’assemblage primitif.
La classe LeafProduct sert à la création de pièces,
DerivedProduct : composants voire outils qu’on ne peut pas ou qu’on ne veut
pas décomposer davantage.
La classe DerivedProduct sert à la création de produits
dérivés. Context :

L’attribut is_derived_from doit pointer vers l’assemblage La classe Context sert à la création de contextes (5.4). Un
primitif, cet attribut est renseigné par la méthode contexte a toujours une matrice de transformation nulle avant
CreateDerivedProduct() lors de la création d’un d’être réutilisé, les relations avec DerivedProduct,
DerivedProduct. Assembly et LeafProduct s’apparentent ainsi à des
instances absolues.
L’attribut derivation_function est la fonction de
dérivation de l’assemblage primitif, cet attribut est renseigné Dans le cadre des recherches précédant la rédaction du présent
par la méthode CreateDerivedProduct() lors de la document, aucun logiciel de CAO n’a été connecté à Aras

14
Innovator. Par conséquent l’intégration de la fonctionnalité de DPinstInCtxt est l’instance d’un DerivedProduct dans un
création de contexte est limitée. C’est pourquoi on autorise Context.
l’utilisateur à créer un contexte depuis la TOC (Table Of
Contents). Juste avant la création (onBeforeAdd), la méthode AssyInstInCtxt est l’instance d’un Assembly dans un
CreateContext() déclenche l’ouverture d’une fenêtre qui Context.
permet de choisir des instances absolues en fonction
d’attributs tels que la position (abs_position_matrix) ou le LPinstInCtxt est l’instance d’un LeafProduct dans un
numéro (abs_inst_num). D’autres critères de sélection Context.
comme le produit parent ou enfant sont également possibles.

Pour chaque instance absolue sélectionnée la méthode crée 6.3.3. Les instances dans un DerivedProduct
une instance dans le contexte. C’est-à-dire qu’une relation est
créée entre le contexte et le produit fils de l’instance absolue, AssyInstInDP est l’instance d’un Assembly dans un
et ce pour chaque instance absolue. Aucune transformation DerivedProduct.
n’est effectuée puisque la matrice de l’objet Context est
nulle : les positions des instances dans le contexte sont les LPinstInDP est l’instance d’un LeafProduct dans un
mêmes que les positions des instances absolues. DerivedProduct.

Les attributs :
6.3. Les relations
L’attribut position_matrix indique la position de l’instance
Les algorithmes décrits dans cette section peuvent être (voir 5.6, rel_position_matrix).
directement implémentés dans Aras Innovator au moyen des
méthodes des classes Innovator et Item. L’attribut corresponds_to pointe sur l’instance relative
correspondante (voir 6.2 classe Assembly, méthode
CreateDerivedProduct()).
6.3.1. Les instances absolues :
Les méthodes :
Les trois types d’instances absolues décrits ci-dessous héritent
(au sens UML1) des attributs de la classe AbsoluteInstance
CreateAbsInstOfAssy() créé la ou les instance(s)
qui est un poly Item (6). L’utilité du poly Item ici est qu’une
absolue(s) correspondant à l’instance d’un produit dans un
recherche d’Items de type AbsoluteInstance permet de
DerivedProduct lors de la création de cette instance. Le
rechercher simultanément parmi les trois types d’instances
fonctionnement est similaire à celui de la méthode du même
absolues décrits ci-dessous, notamment dans le but d’effectuer
nom dans la classe AssyInst (voir 6.3.4 B).
des sélections. Les attributs ont déjà été décrits plus haut (5.6).

DeleteAbsInstOfAssy() supprime la ou les instance(s)


AbsInstOfDP est l’instance absolue d’un DerivedProduct.
absolue(s) correspondant à l’instance d’un produit dans un
DerivedProduct lors de la suppression de cette instance. Le
AbsInstOfAssy est l’instance absolue d’un Assembly.
fonctionnement est similaire à celui de la méthode du même
nom dans la classe AssyInst (voir 6.3.4 B).
AbsInstOfLP est l’instance absolue d’un LeafProduct.

UpdateAbsInstOfAssy() met à jour la ou les instance(s)


absolue(s) correspondant à l’instance d’un produit dans un
6.3.2. Les instances dans un Context
DerivedProduct lors de la modification de la valeur d’un
attribut de cette instance. Cette méthode a l’effet d’une
Les trois types d’instances absolues décrits ci-dessous héritent
suppression puis d’une recréation de la même instance.
des attributs de la classe InstanceInCtxt qui est un poly
Item (6). L’utilité du poly Item ici est qu’une recherche
d’Items de type InstanceInCtxt permet de rechercher
6.3.4. Les instances dans un Assembly
simultanément parmi les trois types d’instances dans un
Context. L’attribut position_matrix indique la position de
A. DPinstInAssy est l’instance d’un DerivedProduct
l’instance (voir 5.6, rel_position_matrix). L’attribut
dans un Assembly.
corresponds_to pointe sur l’instance absolue
correspondante.
La méthode CreateAbsInstOfDP() créé la ou les
instance(s) absolue(s) correspondant à l’instance relative d’un
1
Pour rester fidèle au fonctionnement d’Aras tel que décrit (6), DerivedProduct dans un Assembly lors de la création de
il aurait fallu recopier les attributs dans chaque type d’instance cette instance relative. Le fonctionnement est similaire à celui
absolue.

15
de la méthode CreateAbsInstOfAssy() dans la classe Pour chaque instance absolue de O la méthode va créer
AssyInst (voir 6.3.4 B). l’instance absolue de N et renseigner les attributs
corresponds_to (instance de N) et definition_context
La méthode DeleteAbsInstOfDP() supprime la ou les (instance absolue de O). On connait la position de N dans O et
instance(s) absolue(s) correspondant à l’instance relative d’un la position de O dans Root. La position de N dans Root est
DerivedProduct dans un Assembly lors de la suppression calculée au moyen d’un changement de repère, du repère O au
de cette instance relative. Le fonctionnement est similaire à repère Root.
celui de la méthode DeleteAbsInstOfAssy() dans la classe
AssyInst (voir 6.3.4 B). Toujours pour chaque instance absolue de O, la méthode va
créer une instance absolue dans Root pour chaque instance
La méthode UpdateAbsInstOfDP() met à jour la ou les absolue dont N est le parent en renseignant les attributs
instance(s) absolue(s) correspondant à l’instance relative d’un corresponding_abs (l’instance de J dans Root correspond à
DerivedProduct dans un Assembly lors de la modification l’instance de J dans N) et definition_context (instance
de la valeur d’un attribut de cette instance relative. Cette absolue de O). On connait la position de N dans Root et la
méthode a l’effet d’une suppression puis d’une recréation de la position de J dans N. La position de J dans Root est calculée
même instance. au moyen d’un changement de repère, du repère N au repère
Root, même chose pour chaque instance absolue dont N est le
B. AssyInst est l’instance d’un Assembly dans un père.
Assembly.

La méthode CreateAbsInstOfAssy() créé la ou les


instance(s) absolue(s) correspondant à l’instance relative d’un
Assembly dans un Assembly lors de la création de cette
instance relative.

Algorithme :

Si le produit père est le fils d’au moins une instance absolue :


{
Pour chaque instance absolue du produit père :
{
Créer l’instance absolue du produit fils
}
Pour chaque instance absolue du produit fils :
{
Pour chaque instance absolue dont le produit fils est le
parent (tout produit dans lequel des sous-produits ont
été instanciés avant l’instanciation de celui-ci est un
référentiel absolu) :
{
Créer une instance absolue
} Figure 16

}
}
DeleteAbsInstOfAssy() supprime la ou les instance(s)
Si le produit père n’est le fils d’aucune instance absolue (c’est-
à-dire qu’il n’a pas de parent) : absolue(s) correspondant à l’instance relative d’un Assembly
{ dans un Assembly lors de la suppression de cette instance
la méthode va donc créer l’instance absolue du produit relative.
fils, identique à l’instance relative, puis créer une instance
absolue pour chaque instance absolue dont le produit fils Algorithme :
est le parent.
} Si le produit fils a des sous-produits :
{
Pour illustrer (figure 16), créons une instance de N dans O (en Si le produit fils est le parent d’instances relatives qui
bleu). La méthode va d’abord rechercher les instances correspondent à des instances absolues dont il est le père
absolues de O (il pourrait y avoir une instance de O dans X ou (c’est-à-dire si le produit fils est root) :
dans K). {

16
Si oui, pour chaque instance absolue du produit fils, création des instances absolues du produit père et le recopie
la méthode va supprimer les instances absolues dont dans les nouvelles instances créées en renseignant l’attribut
l’attribut definition_context pointe sur une corresponding_abs. Cette fonctionnalité n’est pas
instance absolue du produit père ou sur une instance disponible pour le moment car elle pose des problèmes non
absolue d’un parent d’une instance absolue du encore résolus faute de temps :
produit père (il peut y avoir d’autres référentiels
absolus avant celui le plus haut) et dont l’attribut Pour reprendre l’exemple de la figure 16, instancions un
corresponding_abs pointe sur les instances produit Z sous le produit J. Il faut aller chercher parmi les
absolues dont le produit fils est le parent instances absolues de J, laquelle est référencée par l’attribut
Puis supprimer la ou les instances absolues du corresponding_abs des autres instances absolues de J et
produit fils recopier cette référence dans l’attribut corresponding_abs des
instances absolues de Z qui sont créées. Il faut aussi renseigner
Si non alors il faut avertir l’utilisateur qu’il ne peut l'attribut definition_context pour chaque instance absolue
pas supprimer cette instance. En effet, on ne peut pas de Z de façon à pouvoir supprimer l’instance de N sans laisser
supprimer un assemblage ou sous-assemblage qui d’instances absolues de Z orphelines.
n’est pas root.
} UpdateAbsInstOfAssy() met à jour la ou les instance(s)
} absolue(s) correspondant à l’instance relative d’un Assembly
Si le produit fils n’a pas de sous-produits : dans un Assembly lors de la modification de la valeur d’un
{ attribut de cette instance relative. Cette méthode a l’effet
La méthode va supprimer les instances absolues d’une suppression puis d’une recréation de la même instance.
correspondantes.
} UpdateAssyInDP() met à jour l’instance d’un Assembly
dans un DerivedProduct lors de la modification de la valeur
Pour illustrer (figure 16), supprimons l’instance de N dans O. d’un attribut de l’instance relative correspondante dans
l’assemblage primitif. Cette méthode a l’effet d’une
La méthode va d’abord supprimer chaque instance absolue suppression puis d’une recréation de la même instance.
dont l’attribut definition_context pointe sur une instance
absolue de N ou sur une instance absolue d’un parent d’une C - LPinstInAssy est l’instance d’un LeafProduct dans
instance absolue de N et dont l’attribut corresponding_abs un Assembly.
pointe sur une instance absolue dont N est le père.
La méthode CreateAbsInstOfLP() créé la ou les
La méthode va ensuite supprimer les instances absolues dont instance(s) absolue(s) correspondant à l’instance relative d’un
l’attribut corresponds_to pointe sur l’instance de N dans O LeafProduct dans un Assembly lors de la création de cette
(instances absolues de N créées lors de l’instanciation de N instance relative. Le fonctionnement est similaire à celui de la
dans O). méthode CreateAbsInstOfAssy() dans la classe AssyInst
(voir 6.3.4 B).
Sans l’attribut definition_context la méthode
supprimerait aussi les instances absolues dans Root dont La méthode DeleteAbsInstOfLP() supprime la ou les
l’attribut corresponding_abs pointe sur les instances instance(s) absolue(s) correspondant à l’instance relative d’un
absolues dont N est le père mais qui ont été créées à l’occasion LeafProduct dans un Assembly lors de la suppression de
de l’instanciation de N dans un autre produit (il pourrait y cette instance relative. Le fonctionnement est similaire à celui
avoir une instance de N dans X ou dans K). de la méthode DeleteAbsInstOfAssy() dans la classe
AssyInst (voir 6.3.4 B).
On ne doit pas supprimer un assemblage auquel des pièces ont
été rajoutées alors qu’il était déjà instancié dans la structure La méthode UpdateAbsInstOfLP() met à jour la ou les
produit. La raison à cela est qu’on ne peut pas savoir quelles instance(s) absolue(s) correspondant à l’instance relative d’un
instances absolues ont été créées à l’occasion du rajout des
LeafProduct dans un Assembly lors de la modification de la
dites pièces car leur contexte de création n’est pas le même
valeur d’un attribut de cette instance relative. Cette méthode a
que le contexte de création des instances absolues de
l’effet d’une suppression puis d’une recréation de la même
l’assemblage. Donc si on supprime l’assemblage parent il va
instance.
rester des instances absolues orphelines. Pour les retrouver il
faut développer un algorithme récursif qui va rechercher les
UpdateLPinDP() met à jour l’instance d’un LeafProduct
instances absolues dont les enfants ne sont pas reliés à la
dans un DerivedProduct lors de la modification de la valeur
racine produit par un chemin d’instances relatives.
d’un attribut de l’instance relative correspondante dans
l’assemblage primitif. Cette méthode a l’effet d’une
Pour autoriser cette fonctionnalité il faudrait que la méthode
suppression puis d’une recréation de la même instance.
de création des instances absolues récupère le contexte de

17
Conclusion

On sait réutiliser des données d’un produit dans un autre


produit. On est capable de rendre ces données autonomes quel
que soit le référentiel de leur réutilisation. La création
systématique des instances absolues permet donc d’apporter
les fonctionnalités décrites (5). Cependant la gestion des
instances absolues n’est pas chose facile, des contraintes
supplémentaires s’imposent selon la manière de procéder (5.7
et 6.3.4). L’intégration du modèle dans la solution standard est
possible. Cependant une campagne de tests est recommandée
pour vérifier qu’aucune fonctionnalité standard n’est
endommagée (6.1).

18
Références

[1] John T. Boardman, Ben T. Clegg, (2001) "Structured engagement in the extended enterprise", International Journal of Operations &
Production Management, Vol. 21 Issue: 5/6, pp.795-811,
[2] Mihaela Ulieru, Robert W. Brennan, Scott S. Walker, (2002) "The holonic enterprise: a model for Internet‐enabled global
manufacturing supply chain and workflow management", Integrated Manufacturing Systems, Vol. 13 Issue: 8, pp.538-550,
[3] Developments in Holonic Production Planning and Control. Int - McFarlane, Bussmann ; 2000
[4] Mihaela Ulieru, Scott S. Walker, Robert W. Brennan Holonic enterprise as a collaborative information ecosystem ; In Proceedings of
the Workshop on Holons: Autonomous and Cooperating Agents for Industry (2001)
[5] Cassina, Jacopo & Cannata, A & Taisch, Marco. (2009). Development of an Extended Product Lifecycle Management through
Service Oriented Architecture
[6] Benoît Eynard, Thomas Gallet, Pierre Nowaka, Lionel Roucoules – “UML based specifications of PDM product structure and
workflow” - Computers in Industry Volume 55, Issue 3, December 2004, Pages 301-316
[7] Design of an assembly modeled by a graph - Rameau, J.F. and Alt, L. - EP Patent Application EP20,090,306,355 - 2011
[8] Teamcenter 10.1 - Getting Started with Product Structure - Publication Number PLM00006 J - 2013
[9] System and method for visualization and comparison of physical assets using engineering design data - Evans, F.E. and Ross, P - US
Patent 8,290,830 - 2012
[10] Allocation of multiple product structures - Pascarella, N. and Nadimetla - US Patent 8,224,471 – 2012
[11] El Hani M.A., Rivest L., Maranzana R. (2012) Product Data Reuse in Product Development: A Practitioner’s Perspective. In: Rivest
L., Bouras A., Louhichi B. (eds) Product Lifecycle Management. Towards Knowledge-Rich Enterprises. PLM 2012. IFIP Advances in
Information and Communication Technology, vol 388. Springer, Berlin, Heidelberg

19

Anda mungkin juga menyukai