Problem in Gleichungen - globaler Variablenwert wird nicht erkannt

Hallo

 

Ich stoße auf einen wirklich seltsamen Fall mit Gleichungen in Solidworks 2018 SP5. Ich mag mit all dem in alle Richtungen herumgefummelt haben, aber was meine Gleichungen umkehren, lässt mich sprachlos und mehr als skeptisch zurück...

Ich wende mich an dich, weil du vielleicht eine Erklärung dafür hast, warum ich nicht das Richtige tue...

In dem Bild, das ich anhänge, sehen Sie, dass ich 2 Tests mit zwei globalen Variablen durchgeführt habe, die unterschiedlich erhalten wurden: "diametre_bulbe", dessen Wert 301 mit einer Bemaßung aus einer Skizze (Zeilen 16 bis 19) erhalten wird, und "diametre_bulbe_mesure", dessen Wert ebenfalls 301 ist, wird diesmal direkt mit dem Messwerkzeug in den Gleichungen erhalten.

Die Idee ist, eine dieser globalen Variablen zu verwenden (diejenige, die richtig funktioniert ;-) ) um steuern zu können, ob Wiederholungsfunktionen entfernt werden sollen oder nicht.

Sie werden in den Zeilen des Bildes, das ich anhänge, sehen, dass ich verschiedene Tests durchführe, aber dass die Ergebnisse erstaunlich sind:

- Mit den Zeilen 17 und 21 können wir schließen, dass "diametre_bulbe" und "diametre_bulbe_mesure" größer oder gleich 300,9999999999 sind

- Mit den Zeilen 18 und 22 können wir schließen, dass "diametre_bulbe" und "diametre_bulbe_mesure" kleiner als 301.00000001 sind

- Mit den Zeilen 19 und 23 können wir schließen, dass "diametre_bulbe" und "diametre_bulbe_mesure" nicht gleich 301 zu sein scheinen...

 

Ich dachte, es sei ein Problem mit den Geräten, aber als ich einige Tests machte, schien es nicht damit in Verbindung zu stehen.

Ich hoffe, dass meine obigen Erklärungen in Verbindung mit dem beigefügten Bild es mir ermöglichen, mein Anliegen zu verstehen...

In der Hoffnung, dass jemand von euch in der Lage sein wird, mich auf eine Spur zu bringen, mir zu erklären... oder unterstütze mich in dem Schmerz, den ich angesichts dieser mehr als merkwürdigen Inkohärenz spüre ;-)

 

Cédric.T


incoherence_valeur_variable_globale.png

Hallo, Dies kann an mangelnder Messgenauigkeit liegen.

1. Überprüfung, den genauen Wert (jenseits des Dezimalpunkts) Ihrer Messung. Zu diesem Zweck müssen Sie in den Dokumentoptionen (so dass die Dezimalstellen in der Gleichungstabelle sichtbar sind) und in den Dimensionseigenschaften die maximale Anzahl von Dezimalstellen nach dem Dezimaltrennzeichen anzeigen, um die Dezimalstellen in der Dimension anzuzeigen.

Denn wenn der reale Wert auf der Anzeige z.B. 301,000000000[3] (also ein Wert zwischen 301 und 301,000000001) ist, aber auf "301" (oder sogar "301,00000000" mit der Genauigkeit von 8) gerundet wird, weil die Anzeigegenauigkeit begrenzt ist, erklärt das das Ergebnis.

Nur dass er, selbst wenn er den gerundeten Wert 301,0000000000 anzeigt, weiß, dass er nicht genau ... 0 gibt es also nicht als gleich, aber die Grenze von SW, die jenseits von 8 Dezimalstellen berechnet werden soll, hindert uns daran, zu überprüfen, ob der Wert genau ist ... 0[3]. (Wenn ich darüber nachdenke, denke ich, dass SW diese Art von Wert als [zwischen 16,000000000 und 16,000000001] speichern muss, was erklärt, warum er weiß, was er nicht ist, was er ist und was er kleiner ist, aber nicht weiß, wozu er gleich ist)...

Wie dieser Screenshot meiner Tests mit dem Quotenwert "16.0000 0000 3" zeigt:

Durch die manuelle Eingabe des Wertes bei 301 (oder besser gesagt 301,0000000000000000000000000000000000000000, oder besser, ersetzen Sie durch 300 und dann durch 301, um sicherzustellen, dass jede winzige Dezimalzahl gelöscht wird) stimmt die Gleichung mit dem überein, was angezeigt wird.

Kurz gesagt, es wäre nicht das Ergebnis der Gleichung, das falsch ist, sondern ihre Interpretation.

Zusammenfassend lässt sich sagen, dass angesichts der Tatsache, dass Ihr "301"-Wert von einer Berechnung gesteuert zu sein scheint, die möglicherweise niemals ein Ergebnis liefern wird, das genau 301 entspricht, glaube ich, dass die beste Gleichung, die Sie schreiben können, eine Variante meiner Variablen "test4" ist, die Ihnen eine Toleranz von 301±0,0000000009 oder einen Reaktionsbereich von 0,000000018 mm ergibt. Akzeptabel scheint es mir:

IIF(
 "diametre_bulbe" > 300.99999999 and "diametre_bulbe" < 301.00000001 , "unsuppressed" , "suppressed"
)

Herzliche Grüße


equation_fausse_incoherence.png
4 „Gefällt mir“

Hallo

 

Vielen Dank für diese umfassende Antwort.

Wenn ich all diese Dezimalzahlen in meine Gleichungen einfügte, dann deshalb, um die Tests durchzuführen und zu versuchen, das Problem zu identifizieren. Aber im "normalen Modus" manipuliere ich nicht all diese Dezimalzahlen.

Genauer gesagt wird die ursprüngliche Bemaßung von 301, die dem Durchmesser eines Kreises in einer Skizze entspricht, über eine Teilefamilie erhalten, in der die Auswahl der Bemaßung in einer Liste definierter ganzzahliger Werte (201; 251; 301; 351; usw...). Und diese Skizze befindet sich in einem Skelett, das in einer Baugruppe abgerufen wird.

Die Assemblierung ist der Ort, an dem ich die Gleichungen und das Problem zuvor erklärt habe.

Meine globalen Variablen werden verwendet, um eine Verknüpfung mit dieser Skelettdimension herzustellen, sodass ich Lösch-/Wiederherstellungsaktionen in dieser Assembly ausführen kann.

 

Ich habe versucht, die Dezimalstellen meiner Messung zu visualisieren, wie Sie am Anfang Ihrer Antwort vorschlagen, und es gibt nur "0en".

 

Die Lösung der "test4"-Linie ist eine, die ich als Plan B in Betracht gezogen habe, wenn ich nichts Besseres finde, und mir mehr Toleranz erlaube, weil ich es mir leisten kann, angesichts des Schritts, den ich zwischen 2 Seiten in meiner Liste habe (201; 251; 301; 351; 401; usw...).

Es ist toll, dass du es vorschlägst, weil es ihm mehr Bedeutung verleiht (ich bin nicht der Einzige, der es im Kopf hatte ;-) ).

 

Vielen Dank für die Zeit, die Sie damit verbracht haben, Ihre Tests durchzuführen und zu antworten.

Ich werde noch ein wenig warten, um zu sehen, ob andere Antworten eintreffen, und wenn nicht, werde ich diesen Beitrag in ein paar Tagen validieren.

 

Schönen Tag.

Cédric

1 „Gefällt mir“

Hallo

Ich stelle mir vor, dass es die Werte Ihrer Liste mit den nächstgelegenen "Computer"-Werten beim Abrufen "anpassen" muss, was die Vergleichstests verzerrt.

Also denke ich, dass DIE beste Lösung, eleganter, kürzer, einfacher, schneller und sicherer, die folgende wäre; Konvertieren Sie den Wert aus der Liste in eine ganze Zahl:

IIF( int("diametre_bulbe") = 301 , "unsuppressed" , "suppressed" ) 

Ich hätte früher daran denken können...

Es ist auch möglich, den Dimensionswert direkt in eine Ganzzahl in der Quellvariablen umzuwandeln, so dass Sie ihn nicht in jedem Test verwenden müssen:

"diametre_bulbe" ---> = int("RD3@Annotations")

 

 

Bonus:

Für den Fall, dass jeder Wert in Ihrer Liste true (nicht unterdrückt) zurückgeben muss, eine Alternative, die ich eleganter finde als das Wiederholen von Tests oder das Multiplizieren der OR-Operatoren in einer Gleichung:

Da Ihre Liste zwischen den einzelnen Werten um 50 zu inkrementieren scheint, können Sie sie mit einer kleinen Berechnung alle in einem einzigen Test validieren.

diametre_bulbe ---> = (int("RD3@Annotations")-1) / 50
Repetition ---> = IIF( "diametre_bulbe"=int("diametre_bulbe") and "diametre_bulbe">3 and "diametre_bulbe"<11, "unsuppressed", "suppressed" )

In diesem Beispiel gibt jeder Dimensionswert, der eine [ Ganzzahl gleich (50 * i ) +1 ] ist, "unsuppressed" zurück. Wobei i eine der ganzen Zahlen in diesem Bereich ist, hier von 4 bis 10. Die gültigen Werte sind daher (201.251.301.351.401.451.501).

Herzliche Grüße

4 „Gefällt mir“

Hallo nochmal,

 

Ja, es besteht die Möglichkeit, dass er diese Art von Anpassung vornehmen wird, was mein Problem erklären würde.

 

In der Tat ist die Lösung der Konvertierung in eine ganze Zahl besser. Vielen Dank, dass Sie es vorgeschlagen haben: Sie haben vielleicht nicht sofort daran gedacht, aber ich meinerseits hatte überhaupt nicht daran gedacht... Du bist mir einen Schritt voraus ;-)

 

Nochmals vielen Dank.

Cédric

1 „Gefällt mir“

Bitte. Ich habe in meiner vorherigen Nachricht einen kleinen Bonus hinzugefügt.

Danke für den Bonus.

Es passt nicht zu meinen Bedürfnissen, weil ich in meiner Liste nur eines "nicht unterdrückt" und alle anderen "unterdrückt" brauche. Aber es könnte auch für andere Mitglieder der Community nützlich sein ;-)

1 „Gefällt mir“