Aller au contenu
CADCAMFUN
Docs

Documentation

Configurations et programmes enregistrés

Capturez le stock, le cadre de travail, les affectations de coupe, les opérations ordonnées et les preuves sources utilisées pour produire un programme.

Traduit automatiquement de l'anglais. Voir l'original en anglais

Une configuration est un contexte de fabrication

Une configuration de fabrication définit la position d'une pièce par rapport au brut, aux montages et aux outils. cam.ManufacturingSetup enregistre un identifiant, une révision, un cadre de travail rigide, des enveloppes de stock et de montage à coordonnées mondiales et des assemblages d'outils. Le noyau natif accepte un instantané et des ressources CAO et produit des résultats d'opération ordonnés et un programme publié.

Utilisation des programmes d'application enregistrés CamProgramDocument, le document portable également stocké dans Toolpath.data. Ce contrat conserve la CN et sa représentation de programme ainsi que les paramètres, le brut et l'instantané du dessin nécessaires à la réouverture de l'espace de travail. Les opérations facultatives préservent des identités d'opération distinctes ; les données facultatives du noyau conservent les preuves de la source native.

Contrat de documents portables

Un document s'identifie avec format: "cadcamfun-cam" et version: 1. Les champs obligatoires sont gcode, program, générateur settings, printer les extras, stock, et une forme libre drawing instantané. Les champs facultatifs sont operations, kernelArtifact, et kernelRequest.

Chaque opération stockée a un nom unique id, name, gcode, et program, avec un outil facultatif, des paramètres et des identifiants d'élément source. Conserver sa NC et son identité permet une opération aller-retour indépendamment de son étiquette d'affichage.

Ordre et composition des opérations

combineCamOperations préserve l’ordre de fonctionnement. Il espace les identifiants de parcours d'outil avec l'identifiant d'opération, utilise un outil d'opération explicite lorsqu'il est fourni et préfixe les noms d'affichage lorsqu'il y a plus d'une opération. Le programme combiné prend les unités et le décalage d'origine de la première opération.

Pour une seule opération, la CN combinée constitue le texte original. Pour plusieurs opérations, l'assistant joint ses sections CN existantes avec des commentaires d'opération. Cet assistant ne republie pas toutes les sections dans un seul programme de contrôleur. Le noyau natif est la route qui génère des opérations ordonnées et émet un programme intégré.

Les appelants composant des sections pré-générées doivent garantir la compatibilité des unités, des décalages d'origine, de la numérotation des outils, des en-têtes et des fins de programme. Une composition de document réussie prouve l'ordre et la cohérence avec ses sections stockées ; il n'ajoute pas de preuve de dédouanement de la machine.

Générer et enregistrer

  1. Capturez les éléments de dessin et la matière à usiner. Choisissez un matériau, une machine, des outils, un décalage de travail et des contrôles qualité.
  2. Appel POST /api/toolpaths/manufacture avec schemaVersion: 1, l'identité du poste, le nom et les éléments capturés. Fournir les opérations explicitement dans l'ordre d'usinage ou permettre au noyau de les planifier.
  3. Inspectez le résultat renvoyé, les problèmes, les réclamations individuelles et release. Un artefact peut être un aperçu ou bloqué ; recevoir un résultat n’implique pas une sortie vérifiée.
  4. Construire un CamProgramDocument dont le G-code, le programme, l'artefact et la requête capturée décrivent le même résultat. Enregistrez-le via un point de terminaison de création ou de mise à jour d'un parcours d'outil, avec ce G-code.

Le point final de fabrication évalue l'instantané fourni sans écrire le dessin ni créer de parcours d'outil. Générateur /generate est un itinéraire distinct basé sur les paramètres et peut également fournir NC pour un document portable.

Validation de la persistance

Le sidecar reconnaît les documents portables par leur format et décode le schéma complet avant de les enregistrer. Le G-code du document doit correspondre au G-code de la ligne du parcours d'outil. Les identifiants d'opération doivent être uniques et leur composition ordonnée doit reproduire le texte enregistré. Le sidecar analyse l'opération NC pour reconstruire les mouvements du programme plutôt que de faire confiance aux données de mouvement fournies par le client.

Pour un nouvel artefact natif avec une requête capturée, le sidecar réexécute cette requête et compare l'artefact, le programme et la CN d'origine résultants. Les résultats échoués ou bloqués, les artefacts modifiés et le texte incompatible sont rejetés. Un artefact nouvellement fourni sans sa demande capturée est supprimé à moins qu'il ne s'agisse d'un artefact inchangé déjà conservé sur la ligne.

Lorsque les éléments source et le stock fournis correspondent au dessin stocké associé, le service calcule un résumé de révision du dessin. Les clients ne peuvent pas fournir un sourceRevision ou une demande de vérification arbitraire. La révision enregistrée est dérivée par le service ou conservée uniquement pour le même artefact existant.

Édition des NC et conservation des preuves

Une mise à jour peut remplacer NC tout en envoyant le document portable antérieur inchangé. Le service reconnaît ce cas, reconstruit le programme analysé à partir du nouveau texte et supprime les opérations et les preuves sources natives qui ne correspondent plus. Un nouveau document incohérent est rejeté au lieu de combiner silencieusement des programmes sans rapport.

Les données de parcours d'outil de forme libre ordinaires restent prises en charge. Une modification apportée à NC supprime les métadonnées d’artefact natif obsolètes là où elles ne correspondent plus. Fourni par le client verification et response les champs ne deviennent pas des preuves natives fiables.

L'implémentation de la validation est apps/sidecar/src/services/cam-program.ts; runKernelRequest, prepareCamProgramData, et drawingRevision partagent le même adaptateur de requête et la même logique d’identité utilisés par la génération et les sauvegardes.

Un programme enregistré peut contenir des sous-programmes générés à partir de parcours d'outils répétés. Les règles pour lesquelles les parcours d'outils peuvent partager un sous-programme sont décrites dans la Page CAM.

Châssis de travail rigides

A WorkFrame a une origine et des axes X/Y/Z. validateWorkFrame nécessite des coordonnées finies, des axes unitaires, une orthogonalité par paire et une orientation vers la droite dans sa tolérance numérique. workToWorld applique le cadre ; worldToWork projets en arrière. Les images non valides, les points non valides et le dépassement numérique produisent une erreur de plage.

validateSetup vérifie également un identifiant de configuration non vide, une révision d'entier sûr non négative, des enveloppes finies à volume positif, des identifiants uniques de montage/outil et des dimensions finies positives de l'outil de coupe et du support. La longueur de coupe ne doit pas dépasser la saillie. La validation renvoie des problèmes spécifiques au champ afin que l'appelant puisse identifier la valeur qui doit être corrigée.

Usinage de tables indexées

cam/indexing.ts résout les orientations indexées pour table-AC et table-BC mises en page. Il fait pivoter le plan de travail sélectionné normalement sur la machine +Z, respecte les limites de rotation et préfère la plus petite inclinaison accessible. Les points du programme traversent le cadre de travail et la rotation de la table autour du pivot de la machine.

Cet adaptateur modélise l'indexation de table avec un axe d'outil fixe. Les têtes inclinables, les cycles de plan incliné du contrôleur et le mouvement simultané sur cinq axes sont des fonctionnalités distinctes. Les postes du Rotary sont des diplômes ; les axes du cadre restent des vecteurs unitaires.

Types de configuration partagée

ManufacturingSetup, WorkFrame, ToolAssembly, validateSetup, validateWorkFrame, workToWorld, et worldToWork sont exportés via cam. Les schémas d'opérations et de documents portables sont exportés depuis @cadcamfun/api, ce qui les rend disponibles à la fois pour la persistance sidecar et la logique de restauration du bureau.

Réouverture sur le bureau

saved-program.ts capture les paramètres actuels, le brut, le dessin et la CN exacte enregistrée. Il conserve un artefact de noyau uniquement lorsque son NC et son hachage correspondent à ces octets. Lors de la restauration, il vérifie l'artefact et la version stockés, restaure les résultats d'opération compatibles, réinitialise la vérification de relecture, charge l'éditeur et restaure les contrôles du générateur et des stocks à partir de l'instantané.

Lorsque seul le G-code ordinaire est disponible, le bureau l'analyse pour l'afficher. L'ouverture réussie du texte ne recrée pas une demande de génération manquante et ne met pas à niveau le niveau de preuve du programme.

Gardez la source et le résultat ensemble

Régénérez après avoir modifié la géométrie, le brut, les dimensions de l'outil, le cadre de travail, la machine, le matériau ou l'ordre d'opération. Conservez les instantanés de la source pour des raisons de reproductibilité et traitez un fichier CN modifié comme une nouvelle sortie nécessitant sa propre analyse. Les contrôles de révision des sources et la relecture des artefacts empêchent qu'un résultat antérieur soit présenté comme preuve pour différents octets du programme.

Évaluer une configuration capturée

L'adaptateur d'instantané constitue la limite commune pour la demande de fabrication native. Cet exemple autonome capture un flan de polymère et une boîte de stock légèrement plus grande, puis renvoie le niveau de libération réel de l'artefact. Il n'écrit ni un dessin ni un parcours d'outil.

Des coordonnées d'éditeur à un travail natif
import { cam } from "@cadcamfun/core"

const prepared = cam.kernel.jobOfSnapshot({
  schemaVersion: 1, id: "blank-job", name: "Blank", material: "POM",
  elements: [{ id: "blank", type: "cube", x: 20, y: 20, z: 5,
    width: 40, height: 40, depth: 10 }],
  stock: { x: 20, y: 20, width: 44, height: 44, depth: 11 },
  resolution: 0.5
})
if (prepared.status === "failed") throw new Error(JSON.stringify(prepared.issues))
const result = cam.kernel.runJob(prepared.value)
if (result.status === "failed") throw new Error(JSON.stringify(result.issues))
console.log(result.value.release)
console.log(result.value.claims)
console.log(result.value.identity.nc)

La position du cube est son centre ; son bas est Z0. Le stock d'instantanés X/Y est son centre et la largeur/hauteur sont ses dimensions complètes. L'adaptateur place le fond du brut au Z le plus bas de la pièce sélectionnée, puis ajoute la profondeur déclarée. L'origine du travail du noyau est par défaut le centre du stock en haut du stock ; stock-corner sélectionne à la place son X/Y minimum et son Z supérieur.

Source: packages/core/src/cam/kernel/snapshot.ts, execute.ts, et kernel.test.ts.

Options et limites des instantanés

La requête HTTP native nécessite des éléments 1–2 000, une version de 1, un ID/nom de tâche non vide et un nom de matériau comportant jusqu'à 80 caractères. Il accepte jusqu'à 500 opérations explicites et, lorsqu'il est fourni, 1–200 coupeurs. L'omission d'opérations appelle le planificateur ; une liste d'opérations vide explicite n'est pas une demande d'inventer des opérations.

finishAllowance accepte 0–5 mm ; scallop est positif et d'au plus 1 mm ; deburr est positif et d'au plus 5 mm. Les valeurs par défaut natives utilisent la tolérance de finition du matériau, 0,01 mm de feston et la tolérance de chemin de 0,01 mm. La résolution de relecture peut être fournie séparément. Facultatif subprograms: true demande une émission répétée traduite uniquement là où le dialecte sélectionné le prend en charge.

Un champ de machine d'instantané nomme un préréglage enregistré. Le niveau inférieur ManufacturingJob peut transporter un enregistrement complet de la machine, y compris les déplacements explicites et la géométrie de la table ; la chaîne de machine d'instantané public n'accepte pas elle-même un enregistrement de machine arbitraire.

Source: packages/api/src/cam-kernel.ts, ai-cam.ts, et packages/core/src/cam/kernel/contracts.ts.

Résoudre les sauvegardes rejetées

Message de réponseCause et remède
Document de parcours d'outil CADCAMFUN invalideLe format portable reconnu a échoué à son schéma. Conservez tous les paramètres requis, les champs d'imprimante, de stock, de dessin, de programme et de code G.
Le document de parcours d'outil et le G-code doivent contenir le même programmeLa ligne NC et le nouveau document NC diffèrent. Reconstruisez l'instantané à partir des octets exacts enregistrés.
Les opérations enregistrées doivent avoir des identifiants uniques et composer le G-code stocké afinL'opération d'identité ou de commande ne reproduit plus le document. Recomposez après avoir modifié, réorganisé ou supprimé des opérations.
L'artefact de noyau enregistré ne correspond pas à sa demande source et à sa NC d'origineLa relecture de la demande capturée a échoué, a renvoyé une sortie bloquée ou différait de l'artefact/programme/NC réclamé. Régénérez plutôt que de modifier les champs de preuves.

Un artefact natif valide peut être conservé sans révision du dessin source lorsque sa sélection/stock source ne correspond pas au dessin stocké associé. Cette absence n'implique pas que la CN enregistrée a été régénérée par rapport au dessin actuel. Lisez la révision du dessin et l'instantané source indépendamment lors du rapport de fraîcheur.

Source: apps/sidecar/src/services/cam-program.ts et apps/sidecar/test/cam-program.test.ts.

Voir un emploi natif en 3D

Travail natif : POM vierge, trois opérations Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
Le vrai programme généré par le noyau natif pour l'instantané ci-dessous, dessiné en millimètres. Violet : fraise à surfacer Ø50 en Z10. Vert : Ø16 ébauche adaptative. Bleu : Ø10 finition de la balle. En pointillés : rapides. Boîtes translucides : le stock 44 × 44 × 11 et la partie 40 × 40 × 10. Le programme est en coordonnées de travail ; l'origine du travail est le monde supérieur du centre de stockage (20, 20, 11), donc chaque mouvement ici est le mouvement du programme plus cette origine.
OpérationStratégieOutilLongueur de coupeTempsSupprimé
Haut de la facefacefacemill-50334.0 mm12.4 s1936 mm³
3Ebauche adaptative Dsurfaceflat-16472.2 mm5.3 s3360 mm³
3D finition raide et peu profondesurfaceball-105660.6 mm113.4 s0 mm³

Machine vmc-standard (Centre d'usinage vertical (BT40, 12 000 tr/min, 11 kW), poste fanuc), matériel pom-c (Acetal POM-C (Delrin)). Stock volume 21296 mm³, final 16000 mm³, equal to the part volume, so remaining volume is 0. Estimated cycle time 149 s. Release: verified-program. La NC fait 3071 lignes.

RéclamerStatut
cutting-datapassé
machine-limitspassé
operations-completepassé
no-rapid-in-stockpassé
holder-clearancepassé
no-gougepassé
material-removedpassé
nc-replaypassé
machine-travelnon pris en charge
machine-clearancepassé
machine-travel est unsupported ici parce que le préréglage n'a pas d'enveloppe de voyage explicite à vérifier. Une affirmation non étayée n’est pas un échec, mais ce n’est pas non plus une preuve ; la version du programme vérifié couvre les réclamations qui ont réussi.

Mathématiques du cadre de travail, travaillées

z = (0.707, 0, 0.707)x = (0.707, 0, −0.707) origine (40, 0, 10)monde Xmonde Z
Construire, vérifier et utiliser un cadre 45°
import { cam } from "@cadcamfun/core"

const frame = cam.frameFromNormal({ x: 40, y: 0, z: 10 }, { x: 1, y: 0, z: 1 })
// xAxis (0.707, 0, -0.707)  yAxis (0, 1, 0)  zAxis (0.707, 0, 0.707)
cam.validateWorkFrame(frame)                     // []

const world = cam.workToWorld(frame, { x: 10, y: 5, z: 0 })   // (47.071, 5, 2.929)
cam.worldToWork(frame, world)                    // (10, 5, 0)

cam.validateWorkFrame({ origin: { x: 0, y: 0, z: 0 },
  xAxis: { x: 1, y: 0, z: 0 }, yAxis: { x: 0, y: 0, z: 1 }, zAxis: { x: 0, y: 1, z: 0 } })
// [{ field: "frame", message: "Work frame axes must be orthonormal and right-handed" }]
frameFromNormal prend la normale comme Z et projette l'indice X (monde X par défaut) sur l'avion. Lorsque l'indice est parallèle à la normale, il choisit une autre perpendiculaire. Y est toujours Z × X, donc le résultat est droitier par construction.

Solutions rotatives pour visages communs

anglesFor(normal, layout, limits) returns every way the table can bring a part direction to machine +Z, smallest tilt first, with the tilt inside the limits (default −120° to 120°). C is wrapped into (−180°, 180°]. These are real outputs:
En partie normaletable-ACtable-BC
(1, 0, 1), 45° côtéA45 C90, puis A−45 C−90B−45 C0, puis B45 C180
(1, 0, 0), visage +XA90 C90, puis A−90 C−90B−90 C0, puis B90 C180
(0, −1, 0), face avantA90 C180, puis A−90 C0B−90 C90, puis B90 C−90
(0, 0, −1), dessousaucun (tableau vide)aucun (tableau vide)

Un dessous nécessite une inclinaison de 180 °, en dehors des limites par défaut, la liste est donc vide et indexToolpath lance "Les axes rotatifs de la machine ne peuvent pas atteindre ce plan de travail dans leurs limites". Usinez plutôt le dessous dans une deuxième configuration.

Où l'origine de la trame atterrit après l'indexation
const [angles] = cam.anglesFor({ x: 1, y: 0, z: 1 }, "table-BC")   // { b: -45, c: 0 }
cam.partToMachine({ x: 40, y: 0, z: 10 }, angles, "table-BC", { x: 0, y: 0, z: 0 })
// (21.213, 0, 35.355): the origin rotated -45° about Y around the pivot

Messages de validation de configuration

Tout ne va pas à la fois
cam.validateSetup({
  id: "", revision: -1, frame,
  stock: { min: { x: 0, y: 0, z: 0 }, max: { x: 0, y: 10, z: 10 } },
  fixtures: [],
  tools: [{ toolId: "t", cuttingDiameter: 6, cuttingLength: 30, stickout: 20,
            holderDiameter: 32, holderLength: 40 }],
})
champmessage
idL'ID d'installation ne doit pas être vide
revisionLa révision de la configuration doit être un entier sûr non négatif
stockL'enveloppe doit avoir des coordonnées finies et un volume positif
tools.tLa longueur de coupe ne doit pas dépasser la saillie

Les problèmes sont renvoyés, non rejetés, et tous sont signalés en un seul passage, de sorte qu'un formulaire peut marquer ensemble tous les champs incorrects.