El programa TonCut sirve para optimizar el corte de materiales lisos (2D) y longitudinales (1D), por ejemplo: vidrio, madera, tableros, piedra, chapa, aluminio, plexiglás, cartón, tuberías, vigas, etc.
TonCut for Automation sirve para optimizar el corte de materiales 1D y 2D. Sin embargo, no posee interfaz de usuario. Los datos para la optimización se proporcionan en formato JSON.Los resultados también se generan en el mismo formato.
El programa se puede utilizar en lote o como servidor Websocket. Gracias a su formato sencillo e inteligible, los datos se pueden integrar fácilmente con otros sistemas. En el modo de servidor, la sencilla API aumenta las posibilidades de integración aún más.
TonCut for Automation se puede activar como servicio de Windows.Entonces, es posible conectarse con el programa mediante el protocolo Websocket (ws) o Websocket Secure (wss).
El programa también se puede utilizar desde la línea de comandos como herramienta en lote.Entonces, los datos se introducen al programa mediante archivos o a través de una entrada estándar. Los resultados se pueden guardar en una salida estándar o un archivo.
{ "version": 1, "defaultUnits": { "time": "s", "percent": "%", "length": "mm", "field": "sqmm", "angle": "deg" }, "devices": [ { "id": 1, "title": "Dispositivo 2D", "materialKind": "2d", "canCrossCuts": false, "fullCutsOnly": true, "stripCuts": true, "minCutWidth": 0, "edgingCuts": "optimal", "originEdgingCuts": "default", "firstCutDirection": "any" } ], "materials": [ { "id": 1, "deviceId": 1, "title": "Material 2D", "kind": "2d", "thickness": 18, "canHaveStructure": true, "surplus": 0, "surplusEditable": true, "margin": 0, "marginEditable": true, "defaultEdging": 0, "cuttingDimensions": "net", "canBeVeneered": true, "kerf": 3, "allowEdgeCuts": true, "reuseWaste": { "minShorterLength": 200, "minLongerLength": 200 } } ], "pieces": [ { "id": 1, "materialId": 1, "length": 922, "width": 688, "quantity": 10, "structure": ["byLength", "byWidth", "none"], "priority": "normal", "description": "", "surplus": 0, "margin": 0 }, { "id": 2, "materialId": 1, "length": 1220, "width": 740, "quantity": 20, "structure": ["byLength", "byWidth", "none"], "priority": "normal", "description": "", "surplus": 0, "margin": 0 } ], "stock": [ { "id": 1, "materialId": 1, "length": 3210, "width": 2245, "quantity": 1, "structure": "none", "priority": "normal", "description": "", "edging": { "left": 20, "right": 20, "top": 20, "bottom": 20 } } ] }
{ "version": 2, "units": { "length": "mm", "field": "sqm", "angle": "rad" }, "statistics": { "2d": { "field": 7.20645, "usedField": 6.514416, "wasteField": 0.692034, "unusedField": 0, "cutCount": 20, "cutsLength": 21335 }, "1d": { "length": 0, "usedLength": 0, "wasteLength": 0, "unusedLength": 0, "cutCount": 0, "cutsLength": 0 } }, "cuttings": [ { "stockItemId": 1, "quantity": 1, "statistics": { "2d": { "field": 7.20645, "usedField": 6.514416, "wasteField": 0.692034, "unusedField": 0, "cutCount": 20, "cutsLength": 21335 } }, "pieces": [ { "pieceId": 1, "x": 23, "y": 23, "rotated": false }, { "pieceId": 1, "x": 23, "y": 714, "rotated": false }, { "pieceId": 1, "x": 23, "y": 1405, "rotated": false }, { "pieceId": 2, "x": 948, "y": 23, "rotated": true }, { "pieceId": 2, "x": 1691, "y": 23, "rotated": true }, { "pieceId": 2, "x": 2434, "y": 23, "rotated": true }, { "pieceId": 1, "x": 948, "y": 1246, "rotated": true }, { "pieceId": 1, "x": 1639, "y": 1246, "rotated": true }, { "pieceId": 1, "x": 2330, "y": 1246, "rotated": true } ], "rest": [ { "x": 0, "y": 2096, "length": 945, "width": 149, "identifier": "", "usable": false }, { "x": 3177, "y": 0, "length": 33, "width": 1243, "identifier": "", "usable": false }, { "x": 948, "y": 2171, "length": 1379, "width": 74, "identifier": "", "usable": false }, { "x": 2330, "y": 2171, "length": 688, "width": 74, "identifier": "", "usable": false }, { "x": 3021, "y": 1246, "length": 189, "width": 999, "identifier": "", "usable": false }, { "x": 0, "y": 0, "length": 945, "width": 20, "identifier": "", "usable": false }, { "x": 948, "y": 0, "length": 740, "width": 20, "identifier": "", "usable": false }, { "x": 1691, "y": 0, "length": 740, "width": 20, "identifier": "", "usable": false }, { "x": 2434, "y": 0, "length": 740, "width": 20, "identifier": "", "usable": false }, { "x": 0, "y": 23, "length": 20, "width": 688, "identifier": "", "usable": false }, { "x": 0, "y": 714, "length": 20, "width": 688, "identifier": "", "usable": false }, { "x": 0, "y": 1405, "length": 20, "width": 688, "identifier": "", "usable": false } ], "cuts": [ { "startX": 948, "startY": 0, "endX": 948, "endY": 2245 }, { "startX": 0, "startY": 23, "endX": 948, "endY": 23 }, { "startX": 0, "startY": 714, "endX": 948, "endY": 714 }, { "startX": 23, "startY": 23, "endX": 23, "endY": 714 }, { "startX": 0, "startY": 1405, "endX": 948, "endY": 1405 }, { "startX": 23, "startY": 714, "endX": 23, "endY": 1405 }, { "startX": 0, "startY": 2096, "endX": 948, "endY": 2096 }, { "startX": 23, "startY": 1405, "endX": 23, "endY": 2096 }, { "startX": 948, "startY": 1246, "endX": 3210, "endY": 1246 }, { "startX": 1691, "startY": 0, "endX": 1691, "endY": 1246 }, { "startX": 948, "startY": 23, "endX": 1691, "endY": 23 }, { "startX": 2434, "startY": 0, "endX": 2434, "endY": 1246 }, { "startX": 1691, "startY": 23, "endX": 2434, "endY": 23 }, { "startX": 3177, "startY": 0, "endX": 3177, "endY": 1246 }, { "startX": 2434, "startY": 23, "endX": 3177, "endY": 23 }, { "startX": 2330, "startY": 1246, "endX": 2330, "endY": 2245 }, { "startX": 948, "startY": 2171, "endX": 2330, "endY": 2171 }, { "startX": 1639, "startY": 1246, "endX": 1639, "endY": 2171 }, { "startX": 3021, "startY": 1246, "endX": 3021, "endY": 2245 }, { "startX": 2330, "startY": 2171, "endX": 3021, "endY": 2171 } ] } ] }
La versión de servidor habilita la comunicación mediante una API sencilla e intuitiva con base en el protocolo Websocket.
Todos los mensajes intercambiados entre el servidor y el cliente se almacenan en formato JSON.
Comando de ejemplo:{ "cmd":"cmdListJobs","id":9222}Respuesta de ejemplo:
{ "id":9222,"jobs":[{ "id":1,"state":"sDone","progress":100,"combinationCount":1042885,"createDate":"2023-04-18T12:31:43.133+02:00","startDate":"2023-04-18T12:31:43.166+02:00","endDate":"2023-04-18T12:31:44.739+02:00"}],"success":true}Acontecimiento de ejemplo:
{ "event":"JobProgress","jobId":1,"progress":74,"combinationCount":668878}
Los comandos se envían al servidor.Algunos ejemplos de comando son "añadir tarea", "descargar lista de tareas", "descargar estado", "descargar datos de la tarea", etc.
El servidor envía las respuestas al cliente. La respuesta puede tener distintos formatos según el tipo de comando.
El servidor también envía por sí mismo distintos acontecimientos, p. ej. "adición de tarea", "progreso de la optimización", "fin de la optimización", etc.
El programa solo realiza una optimización al mismo tiempo. Mientras tanto, puede aceptar nuevas tareas para optimizar, pero se pondrán en cola y se realizarán en el orden de adición.
Una tarea es un encargo de optimización individual. Las tareas son independientes: contienen un conjunto completo de datos de entrada, es decir, elementos, recursos, grupos de materiales, chapas y dispositivos de corte.
Los resultados contienen todos los cortes.Cada corte contiene la disposición de los elementos y el desecho, así como una lista de cortes.
Para actualizar el programa, solo tienes que instalar la versión nueva. ¡No desinstales la versión antigua del programa antes de actualizarlo!