We design custom machines and mechanisms, all the way to the dossier a machine shop can quote from. Somebody else does the manufacturing.
The work is the design: measured requirements, the three-dimensional model generated from a program, the bill of materials with a release status on every line item, the electrical and safety architecture, the verification plan, and the requests for quotation. We have no workshop, we do not weld, we do not assemble, and we do not place machinery on the market. We have carried exactly one dossier of our own through to the end, and the machine in it is not built — the page says so from the first line.
Ofertă, cu condițiiAm o singură lucrare proprie de acest fel pe disc, verificată azi cu comenzi, nu cu amintiri: un dosar complet pentru o celulă de imprimare cu mortar — 226 de poziții în lista de materiale, 226 de rânduri în planul de verificare, 64 de puncte de intrare-ieșire dintre care 24 pe un controler de siguranță separat, 26 de trasee de cablu, șase cereri de ofertă scrise și 44 de teste automate care trec în jumătate de secundă. Și, în aceeași măsurătoare: zero poziții eliberate pentru achiziție din 226, zero verificări executate din 226, zero cereri de ofertă trimise, zero exemplare construite, zero lucrări făcute pentru un beneficiar. Regula noastră cere minimum două implementări proprii pentru „am făcut”. Aici e una, și e neconstruită. Deci pagina se scrie ca ofertă cu condiții, iar dosarul e proba de lucru pe care o poți deschide, nu o referință de client.
Ce vindem e proiectarea și documentația, până în punctul în care un atelier poate răspunde la o cerere de ofertă cu un preț, nu cu întrebări. Ce nu vindem, ca să nu fie neînțelegere la a doua ședință: nu avem atelier, nu tăiem, nu sudăm, nu asamblăm, nu punem în funcțiune și nu punem mașini pe piață sub numele nostru. Partea fizică o face un atelier mecanic sau un integrator, iar răspunderea pentru conformitatea mașinii puse pe piață rămâne la cel care o pune. Noi îi dăm dosarul cu care poate lucra și stăm lângă el la verificări.
Dosarul nostru arată așa, măsurat pe lucrarea proprie. Modelul tridimensional nu e desenat manual, ci generat de un program parametric în Python: o singură comandă reface ansamblul în formatele de schimb, 38 de piese candidate cu model individual, 12 profile plate pentru debitare, 12 subansamble, planșele PDF și rapoartele. Consecința practică e că nimic din pachet nu poate rămâne în urma modelului — dacă se schimbă o cotă, se schimbă tot ce depinde de ea, sau cade un test.
Partea care face diferența între un dosar util și un teanc de desene e statusul de eliberare pe fiecare poziție. În lista noastră de 226 de poziții: 108 sunt „de cerut ofertă”, pentru că numărul final depinde de opțiuni, lungimi sau dimensionare; 49 așteaptă o analiză; 39 sunt piese proprii care cer desen, toleranțe și calcul; 30 au familia aleasă din catalogul producătorului — ceea ce nu înseamnă compatibilitate confirmată. Eliberate pentru achiziție: zero. Nicio poziție nu devine comandabilă până nu i se golește câmpul cu ce anume o blochează. Cifrele astea sunt starea reală a lucrării, nu o etapă rușinoasă de ascuns.
Un lucru trebuie spus de două ori, pentru că se înțelege greșit des: producătorii și codurile de componente care apar într-un astfel de dosar sunt alegeri de proiectare, nu parteneriate și nu furnizori confirmați. Un ghidaj, un servo-drive sau un controler de siguranță ales din catalog înseamnă că am citit fișa tehnică publică și că familia se potrivește cu calculul nostru. Nu înseamnă că avem o relație cu producătorul, un preț negociat sau o confirmare de compatibilitate. Confirmarea vine din cererea de ofertă și din bancul de probă, și ambele sunt încă în față.
What it covers
The work, piece by piece
Pornim de la constrângeri măsurate, nu de la o formă frumoasă
Ce alimentare electrică există în atelierul real, cu împământare și curent de scurtcircuit; ce material se prelucrează, cu fișa lui tehnică; ce gabarit are spațiul; ce trebuie să iasă la capăt. Lucrarea noastră proprie își declară singură primele două blocaje ca fiind exact astea: măsurarea alimentării în hala reală și alegerea materialului. Până la ele, lista de sarcini electrice rămâne marcată preliminară și domeniul de debit rămâne o estimare — scris în fișier, nu subînțeles.
Modelul e un program, nu un desen
Geometria se scrie parametric în Python, iar o singură comandă regenerează ansamblul, subansamblele, piesele individuale în formate de schimb, profilele plate pentru debitare, planșele PDF și rapoartele. Avantajul nu e viteza, ci coerența: nu poate exista o planșă care contrazice modelul, pentru că planșa se naște din model de fiecare dată. Iar planșele poartă marcajul că nu sunt pentru fabricație atâta timp cât nu sunt eliberate, și există un test automat care cade dacă marcajul lipsește.
Fiecare poziție are un status de eliberare și un blocaj scris
226 de poziții, fiecare cu ansamblu-părinte, cantitate, specificație, producător candidat, identificator de verificare și status. Piesele proprii au în plus desen candidat, masă estimată, traseu de fabricație propus, toleranță și finisaj candidat — și un câmp separat care spune ce anume lipsește ca să poată fi comandată: desenul de ansamblu sudat, planul de suduri, calculul cu elemente finite, planul de referințe de prelucrare. O poziție fără blocaj golit nu se cumpără.
Testăm reguli de inginerie, nu doar cod
44 de teste automate, care trec în jumătate de secundă și care verifică afirmații despre mașină: că domeniul activ e exact volumul declarat, că plasa de gardare corespunde celulei declarate, că nicio poziție din lista de materiale nu rămâne fără rând în planul de verificare, că mașina de stare nu extrudează niciodată în repaus, că fiecare defect luat separat blochează și mișcarea și extrudarea, că lipsa calibrării blochează mișcarea, și că stratul maxim din prima fază rămâne în domeniul de debit calificat. Un test care cade oprește o greșeală înainte să ajungă în atelier.
Siguranța pe circuit separat de controlul mișcării
Harta de intrări și ieșiri are 64 de puncte: 16 intrări și 16 ieșiri digitale, 4 intrări și 4 ieșiri analogice pe partea de proces, plus 20 de intrări și 4 ieșiri pe un controler de siguranță independent de calculatorul de proces. Ieșirile de siguranță acționează direct pe oprirea sigură a cuplului la toate drive-urile, pe frâne și pe inhibarea pompei, cu stare de defect deenergizată. Buclele de urmărire a contactoarelor și feedback-ul de frână sunt puncte proprii, nu presupuneri.
Cinematica se verifică înainte să se cumpere robotul, nu după
Pentru varianta cu braț articulat am scris un modul propriu de screening: cinematică directă, jacobian analitic, cinematică inversă numerică cu patru poziții de pornire și o rezervă impusă de 10° față de limita fiecărei axe. Rezultatele: 1.331 de poziții de grilă verificate pentru amplasament, apoi un traseu de probă cu 8.400 de puncte, toate rezolvate, cu viteza maximă pe axă la 7,86% din limita de catalog și cu marja minimă față de limite de 19,9°. Raportul își declară singur starea: e un screening discret offline, nu un program de robot, și nu generează ieșire către hardware.
Citim sursele primare și le păstrăm cu amprentă
Fișe tehnice de la producători, cataloage, sisteme comerciale comparabile și șapte documente de brevet public, descărcate ca PDF și înregistrate cu sumă de control, ca să se poată dovedi mai târziu ce anume am citit și în ce versiune. Un desen de brevet nu se copiază; se citește pentru soluțiile de arhitectură deja publice și pentru capcanele pe care le-a rezolvat altcineva înaintea noastră.
Cererile de ofertă se scriu cu porți de achiziție, nu cu întrebări deschise
Șase cereri pregătite, pentru ghidaje și șuruburi, servo-drive-uri, sistemul de material, frâne, mixer, plus una pentru braț robotic în varianta alternativă. Cea pentru robot conține explicit porțile care trebuie trecute înainte de comandă: model și serie, modelul tridimensional de la producător, diagrama spațiului de lucru, rezultatul de acoperire pentru volumul cerut, controlerul și licențele, raportul de stare, cablurile și documentația, oferta de punere în funcțiune și planul de ridicare și ancorare. Un test automat verifică faptul că porțile sunt acolo.
Ce nu facem
Nu fabricăm, nu asamblăm, nu punem în funcțiune și nu emitem declarații de conformitate. Nu confirmăm compatibilitatea unei componente pe baza catalogului. Nu dăm cifre de performanță ca rezultate până nu sunt măsurate pe banc — repetabilitatea din dosarul nostru e țintă și plan de măsurare, nu rezultat. Și nu eliberăm nicio poziție pentru achiziție cât timp are un blocaj scris în dreptul ei.
What it looks like
The route, step by step.
01
Cerințe măsurate și arhitectura de bază
Măsurăm ce există: alimentarea reală și împământarea, spațiul, materialul, ce trebuie să iasă. Scriem arhitectura — cinematica, traseul de material, împărțirea pe subansamble — și, dacă merită, o alternativă evaluată în paralel. Livrăm documentul de arhitectură cu limitele lui declarate. Etapa se poate opri aici și rămâne folositoare.
02
Model parametric, listă de materiale, plan de verificare
Geometria ca program, lista de materiale cu status pe fiecare poziție, un rând de verificare pentru fiecare poziție, arhitectura electrică și de siguranță, traseele de cablu. Livrăm pachetul de fabricație marcat ca neeliberat, plus testele automate care îl țin coerent. Din acest punct, orice modificare se propagă singură sau cade un test.
03
Cereri de ofertă și eliberarea pozițiilor
Scriem cererile pe familii de componente, cu porți de achiziție acolo unde componenta e scumpă sau greu reversibilă. Din răspunsuri se închid blocajele și pozițiile trec, una câte una, spre statusul care autorizează cumpărarea. Aici lucrarea devine bani cheltuiți, deci aici se trece pragul de la proiect la angajament.
04
Bancuri, probă uscată, probă cu material
Trei porți fizice, în ordine: bancurile pe o singură axă și pe material, care transformă domeniul de debit din estimare în măsurătoare; ansamblul protejat și proba uscată, cu măsurători de repetabilitate, joc, vibrație și zgomot la mai multe viteze, plus injecție de defecte; și abia apoi proba cu material real. Etapele astea le execută atelierul sau integratorul, cu noi lângă. În lucrarea noastră proprie, toate trei sunt încă în față.
Cinci straturi, de jos în sus, și pragul care le desparte. Constrângerile măsurate — alimentare, material, gabarit — sunt fundația; peste ele modelul parametric, care e un program, nu un desen; peste el lista de materiale și planul de verificare, cu un status și un blocaj pe fiecare poziție; apoi cererile de ofertă, cu porți acolo unde componenta e scumpă. Deasupra tuturor, cu linie întreruptă, cele trei porți fizice — bancuri, probă uscată, probă cu material — care se execută în atelier, nu la noi. Linia întreruptă e granița serviciului: tot ce e sub ea îl livrăm, tot ce e deasupra îl însoțim.
Datele
What we touch, where it lives, and how long it stays
The questions anyone with a data protection officer asks — asked here before they do.
Ce date atinge o lucrare de mecanică
Cerințele tale, măsurătorile din spațiul real — alimentare, împământare, gabarit, căi de acces —, fișele tehnice ale materialului pe care îl prelucrezi, ofertele primite de la furnizori și desenele rezultate. Ofertele și prețurile de la furnizori sunt informația sensibilă din tot pachetul și se țin separat de partea publicabilă a dosarului.
Unde stă modelul și cum se dovedește ce versiune e
Într-un depozit cu istoric, unde modelul e cod, iar ieșirile — formate de schimb, profile plate, planșe, liste — se regenerează din el. Sursele externe descărcate se păstrează cu sumă de control, ca să se poată arăta ulterior exact ce document a stat la baza unei decizii. Rapoartele de verificare poartă amprenta fișierelor de intrare.
Ce primești și ce rămâne al tău
Modelul parametric și programul care îl generează, ansamblul și piesele în formate de schimb, profilele plate pentru debitare, planșele, lista de materiale cu statusuri, planul de verificare, harta de intrări-ieșiri, lista de sarcini electrice, traseele de cablu și cererile de ofertă. Toate în fișiere pe care le poate deschide un alt inginer, nu într-un format legat de noi.
Ce nu se publică niciodată
Ofertele primite, prețurile negociate și orice detaliu de proces care îți aparține. Dacă un rezultat al lucrării devine material public — o pagină, o prezentare, un articol — se convine în scris ce anume se poate arăta, înainte de a fi arătat.
A case
A purchase decision deliberately deferred until the calculation backs it
Situația
Pentru aceeași sarcină — depunere de mortar într-un volum de un metru cub — a apărut o a doua arhitectură posibilă: în loc de portal cartezian, un braț articulat cu șase axe pe piedestal fix, cu aceeași masă fixă și același traseu de material. Brațul e componenta scumpă și greu de returnat din tot ansamblul. Întrebarea reală nu era dacă arată mai bine, ci dacă acoperă volumul cerut fără să se apropie de limitele axelor.
Ce am construit
Am scris un modul propriu de cinematică peste descrierea publică a robotului: cinematică directă, jacobian analitic, cinematică inversă numerică cu patru poziții de pornire și o rezervă impusă de 10° față de limita fiecărei axe, cu convergență la 0,05 mm pe poziție. Cu el am verificat 1.331 de amplasamente de grilă, apoi am rulat un traseu de probă elicoidal peste tot volumul, cu 8.400 de puncte. Separat, o verificare de coliziune pe geometrie reală, declarată explicit ca screening pe eșantioane discrete, nu ca analiză certificată de volum măturat. Iar cererea de ofertă pentru robot a fost scrisă cu porțile de achiziție înăuntru.
Ce a ieșit
Toate cele 8.400 de puncte s-au rezolvat, fără eșecuri. Viteza maximă pe axă a rămas la 7,86% din limita de catalog, iar marja minimă față de limitele de axă a fost 19,9° — adică traseul nu doar că încape, ci încape cu rezervă. Raportul își scrie singur starea: screening discret offline, fără ieșire către hardware, și nu e un program de robot. Robotul rămâne necumpărat până când porțile din cererea de ofertă primesc răspuns.
Ce nu spune cazul
Screeningul acoperă cinematica și geometria, atât. Nu acoperă materialul care crește sub duză, furtunul flexibil, întârzierea pompei și presiunea — toate sunt trecute explicit la limitări, în raport. Ratele calculate prin diferențe finite nu includ rampele de pornire-oprire și amestecul de traiectorii al controlerului. Cu alte cuvinte: e destul ca să nu cumperi greșit, nu destul ca să tipărești.
Întrebări
What people ask us before they call
Construiți mașina sau doar o desenați?
O proiectăm și scriem documentația cu care se construiește. Nu o construim. Nu avem atelier, nu tăiem, nu sudăm, nu asamblăm și nu punem mașini pe piață sub numele nostru. Ce facem e să ducem lucrarea până în punctul în care un atelier mecanic poate da preț fără să mai întrebe nimic esențial, și să stăm lângă el la verificări. Dacă ai nevoie de cineva care îți livrează mașina la cheie, noi nu suntem aceia, și e mai bine să afli asta din prima frază decât din a treia ședință.
Ați construit vreodată o mașină proiectată de voi?
Nu. Avem un singur dosar propriu, dus până la nivelul la care se pot cere prețuri, iar mașina din el nu are niciun exemplar construit: zero piese comandate, zero verificări fizice executate din 226 planificate, zero poziții eliberate pentru achiziție din 226, zero cereri de ofertă trimise din șase scrise. Asta e starea reală și o publicăm ca atare. Ce putem arăta e dosarul, testele care rulează în fața ta și motivul scris pentru fiecare blocaj.
Atunci de ce ar avea valoare pentru mine un proiect neconstruit?
Pentru că partea pe care o cumperi de la un proiectant nu e mașina, ci capacitatea de a cere corect. Un dosar în care fiecare poziție are un status, un blocaj scris și un rând de verificare este exact ce te scutește să cumperi un ghidaj greșit, un drive subdimensionat sau un robot care nu acoperă volumul. Și, la fel de important, e felul de dosar în care se vede din prima cine ți-a spus adevărul despre stadiu.
Componentele din listă sunt confirmate cu producătorii?
Nu, și e precizarea care contează pe pagina asta. O componentă marcată ca aleasă din catalog înseamnă că am citit fișa tehnică publică și că familia se potrivește cu calculul nostru. Nu înseamnă compatibilitate finală, nu înseamnă preț și nu înseamnă parteneriat. Confirmarea vine din răspunsul la cererea de ofertă și, pentru piesele critice, din bancul de probă. Orice furnizor numit într-un dosar de-al nostru e o alegere de proiectare, atât.
Cine răspunde de siguranță și de documentele de conformitate?
Răspunderea pentru mașina pusă pe piață revine celui care o pune pe piață — producătorul sau integratorul care o asamblează și o predă. Noi proiectăm arhitectura de siguranță: circuit separat de controlul mișcării, controler de siguranță independent, oprirea sigură a cuplului, frâne cu feedback, urmărirea contactoarelor, stări de defect care cad în siguranță. Livrăm și documentația aferentă. Evaluarea de conformitate și marcajul nu sunt serviciul nostru și nu ne prefacem că ar fi.
Puteți proiecta altceva decât mașina din exemplu?
Metoda se transferă; cunoașterea domeniului nu se transferă automat, și asta trebuie spus. Ce se mută dintr-un proiect în altul e felul de a lucra: constrângeri măsurate întâi, model parametric generat din program, status de eliberare pe fiecare poziție, plan de verificare cu un rând per poziție, siguranță pe circuit separat, cereri de ofertă cu porți. Ce nu se mută sunt particularitățile materialului și ale procesului tău, iar acelea se învață la început, cu tine, sau se aduc de la un specialist din domeniu. Dacă răspunsul corect e că ne lipsește domeniul, îl spunem.
Cât durează?
Nu punem termene pe pagina asta pentru că ele nu depind de noi singuri. Ritmul e dat de trei porți fizice, în ordine: bancurile de material și de axă, proba uscată a ansamblului protejat și proba cu material real. Fiecare depinde de decizii care nu ne aparțin — măsurarea alimentării în hala ta, alegerea materialului, trimiterea cererilor de ofertă și răspunsul furnizorilor. Ce putem estima onest e prima etapă, cea de cerințe și arhitectură.
Ce se întâmplă dacă la mijloc se dovedește că arhitectura aleasă e greșită?
Se scrie a doua arhitectură și se compară, în loc să se continue prima pentru că e începută. În lucrarea noastră proprie asta s-a și întâmplat: pe lângă varianta cu portal cartezian există o a doua, cu braț articulat pe piedestal fix, evaluată în paralel, cu lista ei de simulări obligatorii înainte de orice comandă și cu bugetul de sarcină la flanșă plafonat, cu rezervă impusă. E documentată ca alternativă neeliberată, nu ca al doilea produs.
De ce scrie „ofertă” și nu „serviciu livrat”?
Pentru că avem o singură lucrare de acest fel și e neconstruită, iar regula pe care ne-o aplicăm nouă cere minimum două implementări proprii ca să scriem „am făcut”. Preferăm o pagină care rezistă la întrebările unui inginer în locul uneia care sună bine până la a doua întrebare. Când vom avea un dosar făcut pentru un beneficiar și o mașină construită după el, pagina se schimbă — și se va vedea de ce s-a schimbat.
Pe ce se sprijină fiecare afirmație de mai sus (14 surse)
226 de poziții în lista de materiale, cu 108 „de cerut ofertă”, 49 în așteptarea unei analize, 39 piese proprii, 30 alese din catalog și ZERO eliberate pentru achizițiebom-cp-cube-1-v0.1.csv:226 de rânduri; coloana `release_state` numărată cu csv.DictReader → to-RFQ 108, pending-engineering 49, custom-design 39, selected-reference 30, released 0
226 de rânduri în planul de verificare, toate cu rezultatul PLANNED — zero verificări executatecomponent-verification-cp-cube-1-v0.1.csv:Counter pe coloana `result` → {'PLANNED': 226}
44 de teste automate, trecute în 0,50 s, care verifică reguli de inginerie: volum activ, plasă de gardare, corespondența listă-verificare, mașina de stare de siguranță, domeniul de debit calificatconcrete-3d-printer:./.venv/bin/python -m unittest discover -s tests → „Ran 44 tests in 0.501s OK”; tests/test_safety.py, test_toolpath.py, test_configuration.py, test_cad_artifacts.py, test_drawing_pack.py, test_electrical.py, test_models.py, test_professional_pack.py, test_rfq.py, test_robot_verification_inputs.py
64 de puncte de intrare-ieșire, dintre care 24 pe un controler de siguranță independent (20 intrări + 4 ieșiri); ieșirile de siguranță acționează pe oprirea sigură a cuplului, pe frâne și pe inhibarea pompei, cu stare de defect deenergizatăio-map.yaml:16 intrări digitale + 16 ieșiri digitale + 4 intrări analogice + 4 ieșiri analogice + 20 intrări de siguranță + 4 ieșiri de siguranță; `state: design-review-not-released`
26 de trasee de cablu mapate, cu capăt, funcție, lungime și traseucable-schedule.csv:26 de rânduri sub antet
Modelul e parametric în Python, iar o singură comandă regenerează tot pachetul: ansamblu, subansamble, 38 de piese candidate, 12 profile plate, planșe și rapoarterun-verification.sh:build/fabrication → 38 fișiere STEP + 38 STL + 12 DXF; build/cube-cad/parts → 12 subansamble
Planșele profesionale poartă marcajul că nu sunt pentru fabricație, iar un test automat cade dacă marcajul lipseștetest_professional_pack.py:testul `test_professional_pdfs_are_complete_and_not_marked_released`
Modul propriu de cinematică pentru varianta cu braț: cinematică directă, jacobian analitic, cinematică inversă numerică cu patru poziții de pornire, rezervă impusă de 10° față de limitele fiecărei axe, convergență la 0,05 mm pe pozițierobotics.py:62-89 (`fk`, `jacobian`, `margin_deg`, `solve` cu `margin_deg=10`, patru poziții de pornire, prag `< .00005` m poziție și `< .0001` rad orientare)
8.400 de puncte de traseu cerute și 8.400 rezolvate, zero eșecuri; viteză maximă pe axă 7,86% din limita de catalog; marjă minimă față de limite 19,9°; nicio ieșire către hardwaretrajectory-report.json:`state: OFFLINE_DISCRETE_PATH_SCREEN`, `hardware_output_generated: false`, `samples_requested: 8400`, `samples_solved: 8400`, `failures: []`, `max_velocity_fraction: 0.0785…`, `min_axis_margin_deg: 19.932…`
1.331 de poziții de grilă verificate pentru amplasament, ca screening cinematic discretlayout-screen.json:`state: DISCRETE_KINEMATIC_SCREEN_ONLY`; 1331 = 11³ poziții
Șase cereri de ofertă scrise și niciuna trimisă; cea pentru braț robotic conține porțile de achiziție, verificate de un test:șase documente RFQ-CUB-001…006 plus rfq-register.csv; testele `test_all_registered_rfqs_have_draft_documents` și `test_robot_rfq_contains_purchase_gates`
Șapte documente de brevet public descărcate ca PDF și înregistrate cu sumă de control, plus fișe și cataloage de producători:sources/patents/ → 7 PDF-uri + SHA256SUMS; sources/manufacturer/ → cataloage + SHA256SUMS; sources/SOURCES.md, antet „Surse publice — verificate 2026-07-22”
Tot CAD-ul mecanic propriu de pe disc se află într-un singur depozit — de aici valoarea „ofertă” a paginiiProjects (căutare):find -maxdepth 6 după *.step, *.dxf, *.scad, *.FCStd, *.sldprt → toate rezultatele sunt sub /Users/macbook_nou/Projects/concrete-3d-printer; grep după cadquery / build123d / FreeCAD / OpenSCAD / ezdxf → același depozit
Cele trei porți fizice — bancuri, probă uscată a ansamblului protejat, probă cu material — sunt toate încă în fațălatest-report.md:G1, G2, G3 = PENDING; eliberare pentru fabricație finală: NU
Citările interne arată numele fișierului și linia. Calea completă rămâne în depozitul nostru; o putem parcurge împreună, la cerere.