Bonjour,
J'ai réalisé l'automatisation d'un distributeur de béton, dit de cette manière c'est abstrait (et simple, alors que j'ai vraiment eu beaucoup de défis à relever à titre personnel, le code source se composant d'un planificateur de trajectoire, C++ grosso modo 3000 lignes, et d'un programme automate pour le pilotage, 3000 lignes aussi, aucune bibliothèque utilisée pour le C++, à part la STL), alors j'ai mis une vidéo que j'ai fait la semaine passée.
Pour réaliser avant ce travail il fallait un opérateur à temps complet, rassurez vous on ne l'a pas mis au chômage, il a juste moins de choses à faire et donc peut accorder plus de temps au contrôle de la qualité de la production.
Je ne viens pas ici pour un problème de régulation mais pou le planificateur.
Sans rentrer dans les détails, je pars du point le plus loin de la table en métal, je balaye jusqu'à l'origine (où le conteneur change de place selon les Y) et je repars dans l'autre sens pour un passage complet en sens inverse.
Comme vous pouvez le voir, cela fonctionne bien, mais pas à 100%. Dans certains cas où j'ai 2 dalles côte à côte sur la table, mon planificateur va me générer 2 dalles avec les mêmes intervalles mais des configurations de clapets différent. Dans l'idéal je voudrai le même intervalle avec la fusion des configurations de clapets ouverts...
Dans certains cas il peut y avoir des problèmes d'ordre, mon planificateur me donne d'abord les dalles à mi-chemin plutôt que la plus éloignée.
Dans d'autres cas on a un recouvrement de dalles côte à côte et on a différents intervalles qui se chevauchent, alors que je voudrais une suite d'intervalle sans chevauchement et fusionnant les configurations des clapets...
Avez vous des ressources ou infos sur comment effectuer ces "fusions" et sur l'arithmétique des intervalles en général.
Ci-dessous un exemple typique produti par mon planificateur. On a un nombre de slabs qui correspond au nombre de dalles. L'élément bar est à oublier, je ne l'utilise plus, toujours à 1 et index 0, pour chaque slab on a un nombre de sections, et chaque section est constitutée d'une configuration d'ouvertures des clapets (X fermé, O ouvert) et d'une position de début et de fin selon l'axe des X.
Je sais que dans mon cas la toute première section déconne (dans ce cas ici, Xdébut = Xfin) et ce type de problème est corrigé par mon automate qui passe directement à la section suivante lors du bétonnage.
Merci pour votre aide
Voici un plan typiquement posant problème, étant donné la complexité de mon programme C++, je souhaite charger mes données résultats dans une classe et effectuer les opérations
de tri, fusion, recalcul des configurations des clapets, poids et surface avec une nouvelle classe plutôt que de chercher une cause en amont, c'est déjà bien trop compliqué:
Dans ce cas, dans le sens Xloin vers Xorigine on a dans un sens (loin vers origine)
[5490,5490] -> [5490,3375] -> [3375,3225] -> [3225,150] -> [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690]
J'aurais voulu:
[14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690] -> [5490,3375] -> [3375,3225] -> [3225,150]
Dans le cas retour, donc origine vers loin:
[150,3225] -> [3225,3375] -> [3375,5490] -> [5690,8675] -> [8875,13825] -> [13825,14215]
Cela était pour la situation présentée ci dessous, si par exemple j'ai quelque chose comme cela
[150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] je voudrais
[150,3220] [3220,3225] [3225,3375] [3375,5490] [5490,5600]
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 SPREADING FILE SlabsQuantity=6 Slab=0 Surface=6.64092 Weight=867.251 NbBars=1 SpreadingPlan Bar=0 NbSections=4 Y=2485 Section=0 [5490,5490] <X,X,X,X,X,X,X,X> EndSection Section=1 [5490,3375] <O,O,O,O,O,O,O,O> EndSection Section=2 [3375,3225] <O,O,O,O,O,O,O,X> EndSection Section=3 [3225,150] <O,O,O,O,O,O,O,O> EndSection EndBar EndSpreadingPlan Slab=1 Surface=6.64092 Weight=867.251 NbBars=1 SpreadingPlan Bar=0 NbSections=3 Y=2485 Section=0 [14215,11140] <O,O,O,O,O,O,O,O> EndSection Section=1 [11140,10990] <O,O,O,O,O,O,O,X> EndSection Section=2 [10990,8875] <O,O,O,O,O,O,O,O> EndSection EndBar EndSpreadingPlan Slab=2 Surface=3.72528 Weight=486.492 NbBars=1 SpreadingPlan Bar=0 NbSections=1 Y=2485 Section=0 [8675,5690] <O,O,O,O,O,O,O,O> EndSection EndBar EndSpreadingPlan Slab=3 Surface=6.61752 Weight=864.195 NbBars=1 SpreadingPlan Bar=0 NbSections=3 Y=1248 Section=0 [150,3225] <O,O,O,O,O,O,O,O> EndSection Section=1 [3225,3375] <O,O,O,O,O,X,X,O> EndSection Section=2 [3375,5490] <O,O,O,O,O,O,O,O> EndSection EndBar EndSpreadingPlan Slab=4 Surface=3.72528 Weight=486.492 NbBars=1 SpreadingPlan Bar=0 NbSections=1 Y=1248 Section=0 [5690,8675] <O,O,O,O,O,O,O,O> EndSection EndBar EndSpreadingPlan Slab=5 Surface=6.42096 Weight=838.526 NbBars=1 SpreadingPlan Bar=0 NbSections=2 Y=1248 Section=0 [8875,13825] <O,O,O,O,O,O,O,O> EndSection Section=1 [13825,14215] <X,X,X,X,O,O,O,O> EndSection EndBar EndSpreadingPlan EndSpreadingFile
Partager