Load balancing distribution method and system based on multiple mirrors, 3D printing method, device, storage medium and program product
Patent Information
- Application Number
- CN202511655204.3
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Filing Date
- 2025-11-12
- Publication Date
- 2026-09-25
- Estimated Expiration
- 2045-11-12
AI Technical Summary
[0005]鉴于以上所述相关技术的缺点,本申请的目的在于提供一种基于多振镜的负载均衡分配方法及3D打印方法及系统、计算机设备、计算机可读存储介质及计算机程序产品,用以克服上述相关技术中存在的振镜不能被充分利用、零件分配过于频繁的技术问题
[0012]综上所述,本申请公开的基于多振镜的负载均衡分配方法及系统、3D打印方法、计算机设备、计算机可读存储介质及计算机程序产品,通过结合零件分割性分析与多振镜任务分配策略,先根据待打印零件的分割性和各切片层的打印任务类型,为每个打印任务指定至少一个任务允许振镜;再基于任务权重和振镜负载情况对各任务预分配候选振镜;并在此基础上对候选振镜中的可分割任务执行分割与再分配优化,从而实现多振镜间的动态负载均衡。本申请能够在保证各振镜工作负载均衡与最大利用率的同时,最大程度保持打印零件的整体性与扫描连续性,显著提高多振镜三维打印系统的成型效率和打印质量。
Smart Images

Figure CN121535986B_ABST
Abstract
Description
Technical Field
[0001] This application relates to the field of 3D printing technology, specifically to a load balancing distribution method and system based on multiple galvanometers, a 3D printing method, computer equipment, storage media, and program products. Background Technology
[0002] Laser-based 3D printing equipment (such as stereolithography (SLA) printing equipment) typically employs a single laser and galvanometer optical path structure. This optical path consists of a laser, a dynamic beam expander / focusing lens (or a combination of a beam expander and an F-Theta lens), and a galvanometer. During printing, the laser beam, after being focused by the optical system, is deflected by the galvanometer to scan the printing surface point by point, thereby curing the photosensitive resin to form the target object. The scanning time during printing directly affects the overall forming efficiency of the 3D printing equipment. However, limited by objective conditions such as laser power, galvanometer deflection speed, material curing characteristics, and forming accuracy, the scanning speed of the galvanometer cannot be increased indefinitely.
[0003] To improve printing efficiency, existing technologies are increasingly adopting multi-galvanometer collaborative scanning. Multi-galvanometer systems control multiple laser beams simultaneously through multiple galvanometers, enabling parallel scanning of different printing areas and significantly improving forming efficiency in large-format or multi-part printing scenarios. However, existing multi-galvanometer systems still have the following problems in task allocation: Firstly, the frequent switching of tasks for parts or slice layers between multiple galvanometers leads to overly fragmented task allocation, increasing the data scheduling burden and potentially introducing stitching errors. Secondly, some galvanometers remain idle during allocation due to unreasonable task partitioning, resulting in underutilization of galvanometer resources.
[0004] Therefore, how to maintain the integrity of the printed parts and the continuity of scanning to the greatest extent while ensuring the balanced workload of each galvanometer in a multi-galvanometer 3D printing system has become a technical problem that urgently needs to be solved in this field. Summary of the Invention
[0005] In view of the shortcomings of the above-mentioned related technologies, the purpose of this application is to provide a load balancing distribution method based on multiple galvanometers, a 3D printing method and system, a computer device, a computer-readable storage medium, and a computer program product, so as to overcome the technical problems of insufficient utilization of galvanometers and excessively frequent part distribution in the above-mentioned related technologies.
[0006] To achieve the above and other related objectives, the first aspect of this application discloses a load balancing allocation method based on multiple galvanometers, applied to a 3D printing device including multiple galvanometers. The load balancing allocation method includes the following steps: specifying at least one task-allowed galvanometer among the multiple galvanometers according to the segmentation of the part to be printed and the printing tasks of each slice layer of the part to be printed, wherein segmentation includes segmentable and indivisible, and the printing tasks include at least one of boundary tasks, infill tasks, upper surface tasks, lower surface tasks, and support tasks; pre-assigning a candidate galvanometer to each printing task based on the specified at least one task-allowed galvanometer and the weights of each printing task of the part to be printed; and optimizing the task segmentation of the candidate galvanometers according to the weights of each candidate galvanometer and the weights of each printing task, until a preset maximum number of iterations or allowable error is reached.
[0007] The second aspect of this application discloses a load balancing allocation system based on multiple galvanometers, applied to a 3D printing device. The 3D printing device includes multiple galvanometers, and the load balancing allocation system includes: a designation module, used to designate at least one task-allowed galvanometer among the multiple galvanometers according to the segmentation of the part to be printed and the printing tasks of each slice layer of the part to be printed, wherein the segmentation includes segmentable and indivisible, and the printing tasks include at least one of boundary tasks, infill tasks, upper surface tasks, lower surface tasks, and support tasks; an allocation module, used to pre-allocate a candidate galvanometer to each printing task based on the designated at least one task-allowed galvanometer and the weights of each printing task of the part to be printed; and an optimization module, used to optimize the task segmentation of the candidate galvanometers according to the weights of each candidate galvanometer and the weights of each printing task, until a preset maximum number of iterations or allowable error is reached.
[0008] The third aspect of this application discloses a 3D printing method applied to a 3D printing device. The 3D printing device includes an energy radiation device with multiple galvanometers, a container for holding photocurable material, and a component platform for attaching a cured layer. The 3D printing method includes: obtaining slice data according to the load balancing distribution method based on multiple galvanometers as described in the first aspect of this application; and having the energy radiation device irradiate the printing material in the container according to the slice data to obtain a patterned cured layer until the number of cured layers cumulatively attached to the component platform reaches a preset number.
[0009] The fourth aspect of this application discloses a computer device, comprising: a storage device for storing at least one program; and a processing device connected to the storage device for calling and executing the at least one program from the storage device to implement the multi-mirror-based load balancing distribution method as described in the first aspect of this application.
[0010] The fifth aspect of this application discloses a computer-readable storage medium storing at least one program, which, when called and executed by a computer processor, implements the multi-mirror-based load balancing distribution method as described in the first aspect of this application.
[0011] The sixth aspect of this application discloses a computer program product that, when run on a computer, causes the computer to perform the multi-mirror-based load balancing distribution method as described in the first aspect of this application.
[0012] In summary, the multi-mirror load balancing allocation method and system, 3D printing method, computer equipment, computer-readable storage medium, and computer program product disclosed in this application combine part segmentation analysis with a multi-mirror task allocation strategy. First, based on the segmentation of the part to be printed and the printing task type of each slice layer, at least one allowable galvanometer is assigned to each printing task. Then, candidate galvanometers are pre-assigned to each task based on task weight and galvanometer load. Finally, segmentation and reassignment optimization are performed on the segmentable tasks among the candidate galvanometers, thereby achieving dynamic load balancing among the multiple galvanometers. This application can maintain the integrity and scanning continuity of the printed part to the greatest extent while ensuring balanced workload and maximum utilization of each galvanometer, significantly improving the forming efficiency and printing quality of the multi-mirror 3D printing system. Attached Figure Description
[0013] The specific features of the invention involved in this application are shown in the appended claims. The features and advantages of the invention can be better understood by referring to the exemplary embodiments and accompanying drawings described in detail below. A brief description of the drawings is as follows:
[0014] Figure 1 The flowchart shown is a load balancing distribution method based on multiple galvanometers in one embodiment of this application.
[0015] Figure 2 The diagram shown is a flowchart of a part segmentation analysis method in one embodiment of this application.
[0016] Figure 3 The diagram shown is a block diagram of a load balancing distribution system for 3D printing according to one embodiment of this application.
[0017] Figure 4 The diagram shown is a structural schematic of a computer device according to one embodiment of this application. Detailed Implementation
[0018] The following specific embodiments illustrate the implementation of this application. Those skilled in the art can easily understand the advantages and technical effects of this application from the content disclosed in this specification. In the following description, some embodiments may refer to the accompanying drawings. It should be understood that other embodiments not shown in the drawings may also be used, and specific steps, modules or units, electrical and operational changes may be made without departing from the spirit and scope of this application. The detailed description below should not be considered limiting, and the scope of the embodiments of this application is limited only by the claims published in this application. The terminology used herein is for describing particular embodiments only and is not intended to limit this application.
[0019] Furthermore, as used herein, the singular forms “a,” “an,” and “the” are intended to include the plural forms as well, unless the context indicates otherwise. It should be further understood that the terms “comprising,” “including,” and “including” indicate the presence of the stated features, steps, operations, elements, components, items, kinds, and / or groups, but do not exclude the presence, occurrence, or addition of one or more other features, steps, operations, elements, components, items, kinds, and / or groups. For example, a process, method, system, product, or device that comprises a series of steps or units is not necessarily limited to those steps or units explicitly listed, but may include other steps or units not explicitly listed or inherent to these processes, methods, products, or devices. Additionally, the term “and / or,” which may be used hereinafter, describes the relationship between related objects, indicating that three relationships may exist; for example, A and / or B can represent: A alone, A and B simultaneously, and B alone. Furthermore, the character “ / ”, unless otherwise specified, generally indicates that the preceding and following related objects have an “and / or” relationship. Additionally, in the description of embodiments of this application, “multiple” refers to two or more.
[0020] 3D printing is a type of rapid prototyping technology. Whether it's a top-exposure or bottom-exposure photopolymer 3D printing machine, both use a component platform as the platform for printing 3D solid components, constructing 3D objects through layer-by-layer printing. During printing, the photopolymer material is first irradiated by an energy radiation device to form a first cured layer. This first cured layer adheres to the component platform. The component platform rises or falls a predetermined distance under the drive of a Z-axis mechanism. The energy radiation system then irradiates the material again to obtain a second cured layer attached to the first cured layer. This process is repeated, involving multiple filling, irradiation, and separation operations, accumulating each cured layer on the component platform to obtain the 3D component.
[0021] In one embodiment, the 3D printing equipment is, for example, an SLA device based on top or bottom exposure. Its energy radiation system includes a laser emitter, a lens group located on the light path of the laser emitter, and a galvanometer group located on the light-emitting side of the lens group. The laser emitter is controlled to adjust the energy of its output laser beam; for example, the laser emitter is controlled to emit a laser beam of preset power and to stop emitting the laser beam, or, for example, the laser emitter is controlled to increase or decrease the power of the laser beam. The lens group is used to adjust the focusing position of the laser beam, and the galvanometer group is used to controllably scan the laser beam within a two-dimensional space on the surface or bottom of the container. The photocurable material scanned by the beam is cured into a corresponding patterned cured layer.
[0022] To improve 3D printing efficiency, multi-galvanometer scanning is currently employed. For example, when printing multiple parts of the same shape, galvanometers are typically evenly distributed for parallel printing. However, in practical applications, the sizes and shapes of the parts are not uniform. Ensuring maximum galvanometer utilization while maximizing part integrity is a pressing technical challenge.
[0023] In view of this, this application discloses a load balancing allocation method and system based on multiple galvanometers, a 3D printing method, a computer device, a computer-readable storage medium, and a computer program product. By specifying at least one task-allowed galvanometer based on the segmentation of the part to be printed and the printing tasks of each slice layer, a candidate galvanometer is pre-assigned to each printing task based on the weight of the specified at least one task-allowed galvanometer and the printing task, and task segmentation optimization is performed on the segmentable tasks in the candidate galvanometers, so that all tasks of each layer are evenly distributed to multiple task-allowed galvanometers to achieve load balancing, thereby maximizing the integrity of the part while ensuring the maximum utilization of the galvanometers.
[0024] The present application will be further described in detail below with reference to the accompanying drawings and specific embodiments. The technical solutions in the embodiments of the present application are clearly and completely described. Obviously, the described embodiments are only a part of the embodiments of the present application, and not all of the embodiments. Based on the embodiments of the present application, all other embodiments and technical effects obtained by those skilled in the art without creative effort should fall within the scope of protection of the present application. The terms "an embodiment," "implementation," or similar wording used throughout this specification mean that a specific feature, structure, or characteristic described together with an implementation is included in at least one embodiment of the present application. Therefore, the appearance of the phrases "in an embodiment," "in an embodiment," and similar wording throughout this specification may (but does not necessarily) refer to the same implementation.
[0025] In the following text of this application, the term “boundary task” refers to the slice contour scan path (also known as the contour / outline).
[0026] The term "fill task" refers to the solid fill scan path (also known as inner fill / mesh / grid) of the region inside the contour.
[0027] The terms "upper surface task" and "lower surface task" correspond to the filling scans of the exposed solid surfaces on the top and bottom surfaces of the model, respectively.
[0028] The term "support task" refers to the scan path of the support structure. The weights of the boundary task, infill task, support task, upper surface task, and lower surface task are all proportional to the printing time.
[0029] The term "shape complexity" can be measured by metrics such as the rate of change of curvature, the number of contour nodes, or the fractal dimension, and can be used as a correction factor for boundary weights. Shape complexity can be characterized by any one or a combination of the following: the rate of change of curvature per unit length of contour, the number of contour nodes / polylines, the Hough feature count, or the fractal dimension threshold. Higher complexity contributes more to the time consumed by boundary scanning and jumps, and can be used as a correction factor for boundary weights.
[0030] The term "task-allowed galvanometer" refers to the set of galvanometers that can be assigned to each printing task of a part to be printed. A boundary task corresponds to one task-allowed galvanometer, while infill, support, upper surface, and lower surface tasks correspond to multiple task-allowed galvanometers. The term "boundary task-allowed galvanometer" refers to a set of galvanometers specifically assigned to the boundary tasks of divisible parts. Its purpose is to reduce contour misalignment and seam steps caused by cross-galvanometer splicing, thereby stabilizing upstream / downstream surface quality assessment and subsequent infill alignment. A boundary task of a divisible part corresponds to one boundary task-allowed galvanometer.
[0031] The term "candidate galvanometer" refers to the target galvanometer pre-assigned based on task weight and galvanometer load, with one candidate galvanometer corresponding to each printing task.
[0032] Please see Figure 1 The figure shows a flowchart of a multi-mirror-based load balancing distribution method in one embodiment of this application. As shown, the multi-mirror-based load balancing distribution method includes steps S10, S20, and S30. This method is applied to a 3D printing device, which includes multiple mirrors. The load balancing distribution method can be executed by a control device within the 3D printing device. The control device includes, but is not limited to, computer equipment, industrial control computers, or electronic devices based on embedded operating systems.
[0033] In step S10, at least one task-allowing galvanometer is specified among the plurality of galvanometers according to the segmentation of the part to be printed and the printing task of each slice layer of the part to be printed. The segmentation includes divisible and indivisible, and the printing task includes at least one of boundary task, infill task, upper surface task, lower surface task and support task.
[0034] The part to be printed can be one or more. The divisibility of the part to be printed includes divisible and indivisible. A divisible part is a part that is printed using multiple galvanometers during the printing process, while an indivisible part is a part that is printed as a whole using a single galvanometer. The divisibility of the part to be printed can be determined by pre-setting the part divisibility, by determining the printing area where the part is located, or by the part divisibility analysis method described below.
[0035] When there is only one part to be printed, in one embodiment, the part's segmentability can be set according to its size. For example, for small parts, the part can be set as indivisible. For large parts, the part can be set as divisible. In another embodiment, the part's segmentability can be manually set according to user requirements. When there are multiple parts to be printed, in one embodiment, the part's segmentability can be divided based on the number of galvanometers corresponding to the printing area where the part is located. In another embodiment, the part's segmentability can be determined according to the part segmentability analysis method described below.
[0036] Please see Figure 2 The figure shows a flowchart of a part segmentation analysis method in one embodiment of the present application. As shown, the part segmentation analysis method includes steps S101 and S102.
[0037] In step S101, based on the number of layers and geometric features of multiple parts to be printed, a sampling range is determined and multi-layer sampling data is generated to characterize the distribution characteristics of each part in the printing layer direction. In one embodiment, the step of determining the sampling range and generating multi-layer sampling data includes: acquiring information about multiple parts to be printed, the information including the number of parts, the number of layers of each part, and geometric feature parameters; determining the sampling range based on the number of layers of each part, and uniformly sampling each part within the sampling range according to a preset sampling quantity.
[0038] The number of layers for each part can be obtained based on the slice data of each part in the 3D printing preprocessing file. Geometric feature parameters of the parts include, but are not limited to, the part's area, perimeter, and shape complexity, which can be used for subsequent part weight calculations. Furthermore, since the number of layers varies among parts, in practical applications, the maximum number of layers, the minimum number of layers, or a number of layers between the maximum and minimum can be selected as the upper limit of the sampling range. In one embodiment, the step of determining the sampling range based on the number of layers for each part includes: traversing the number of layers of each part in a single pass to identify the maximum, second-largest, and minimum number of layers, and determining the sampling range based on the second-largest number of layers to avoid the part with the maximum number of layers affecting the statistical results of the sampling. For example, the sampling range is set between 0 and the second-largest number of layers. In addition, uniform sampling of the parts allows for the acquisition of all features of the parts to the greatest extent possible. The preset sampling number can be manually set according to the size of the part to be printed or based on experience.
[0039] In one embodiment, when identifying the maximum number of floors, the second largest number of floors, and the minimum number of floors, the method further includes a step of determining whether the input floor height data is valid, so as to prevent the corresponding maximum number of floors, the second largest number of floors, and the minimum number of floors from being unable to be obtained due to the input floor height data being empty.
[0040] In one embodiment, the step of uniformly sampling each part within a sampling range according to a preset sampling quantity includes: calculating the number of available sampling layers based on the sampling range, and limiting the sampling quantity based on the number of available sampling layers to uniformly sample each part. For example, when the sampling range is set between 0 and the second largest number of layers, for example, for a part with a second largest number of layers of 35, its available sampling layers are 36. If the preset sampling quantity is 5, which is less than the number of available sampling layers, then the original sampling quantity of 5 is maintained for sampling all parts. If the preset sampling quantity is 50, which is greater than the number of available sampling layers, then the sampling quantity is limited to be equal to the number of available sampling layers, that is, the sampling quantity is limited to 36. All parts are sampled based on the sampling quantity of 36 to avoid exceeding the limit. After determining the sampling quantity, based on the sampling range and the sampling quantity, a layer number sequence of the corresponding sampling layer is generated according to the principle of uniform sampling, so as to uniformly sample each part according to the layer number sequence. For example, if the number of samples is set to 5 and the number of available sampling layers is 36, the layer number of the sampling layer can be 0, 8, 17, 26, or 35 layers according to the principle of uniform sampling.
[0041] In step S102, the segmentability of each part is determined based on the weight distribution and statistical results of the parts in each sampling layer, combined with a preset threshold, to distinguish between parts that can be allocated as a whole and parts that need to be segmented. For example, the parts can be sorted in ascending order of their weights in each sampling layer, and then the segmentability of each part can be calculated using a greedy algorithm. The greedy algorithm simulates assigning parts to N galvanometers for each sampling layer, where N is the number of galvanometers. Based on the First Fit strategy, it determines whether a part in the current sampling layer can be assigned to the current galvanometer for complete printing based on the weights of the currently used galvanometers and the part weights. If so, the part is assigned to the current galvanometer; otherwise, it is assigned to a new galvanometer to ensure complete printing. When the part weight is greater than the average weight or when all galvanometers are assigned, the allocation of parts is terminated, and parts in the current sampling layer that can be completely allocated within the N galvanometers are marked as candidate indivisible parts. The average weight is the ratio of the total weight of all parts in the current sampling layer to the number of galvanometers.
[0042] In one embodiment, the step of determining the segmentability of each part by combining a preset threshold includes: calculating the weight of each part in each sampling layer, wherein the weight is proportional to the printing time; traversing each part to determine the candidate segmentability of each part in each sampling layer based on the weight of the galvanometers used in the current sampling layer, the weight of each part in the current sampling layer, the number of galvanometers used in the current sampling layer, and the average weight in the current sampling layer, wherein the average weight in the current sampling layer is the ratio of the total weight of all parts in the current sampling layer to the number of galvanometers; and determining the final segmentability label of each part based on the candidate segmentability of each part in all sampling layers, the number of times each part is sampled, and the preset threshold of each part.
[0043] In this process, the weight of a part is directly proportional to the printing time; the longer the printing time required for a part, the greater its weight. In one embodiment, the weight includes a fill weight and a boundary weight. The fill weight is determined based on the fill area, and the boundary weight is determined based on the contour perimeter. For example, the fill weight can be converted into printing time using the fill area and a preset coefficient. Similarly, the boundary weight can be converted into printing time using the contour perimeter and a preset coefficient, where the preset coefficient is related to factors such as the scanning speed of the galvanometer, the printing speed, and the switching time. In the step of determining the segmentation of a part, the weight of an individual part is jointly characterized by the fill weight and the boundary weight.
[0044] In one embodiment, the step of calculating the weight of each component in each sampling layer includes: serially traversing each sampling layer and calculating the weight of each component in the current sampling layer in parallel. The parallel calculation of component weights improves computational efficiency. In another embodiment, the weight of each component can also be calculated individually, which will not be elaborated further here.
[0045] In one embodiment, before parallel calculation of the weights of each part in the current sampling layer, a step of filtering valid parts in the current sampling layer is included. Valid parts refer to parts that exist in the current layer at the corresponding layer number. Since the number of layers varies for each part, there may be cases where a part has no valid data in the current sampling layer. For example, based on the above-mentioned setting of the sampling quantity to 5 and the available sampling layers to 36, the layer numbers of the sampling layers can be 0, 8, 17, 26, and 35 according to the uniform sampling principle. For the part with the second largest layer number (35), the sampling layer numbers are 0, 8, 17, 26, and 35, and it is sampled a total of 5 times. For parts between 0 and the second largest layer number, such as a part with 20 layers, the sampling layer numbers only include 0, 8, and 17, and it is sampled a total of 3 times, because after layer 20, this part has no data and cannot be sampled. For example, if the parts to be printed include four parts with 10, 20, 35, and 40 layers respectively, and the sampling range is 0 to 35, with the sampling quantity set to 5, for part one with 10 layers, the sampling layer numbers include 0 and 8, and it is sampled twice; for part two with 20 layers, the sampling layer numbers include 0, 8, and 17, and it is sampled three times; for part three with 35 layers, the sampling layer numbers include 0, 8, 17, 26, and 35, and it is sampled five times; and for part four with 40 layers, the sampling layer numbers include 0, 8, 17, 26, and 35, and it is sampled five times. Therefore, in the current sampling layers with layer numbers 0 and 8, parts one through four are all sampled and are all valid parts in the current sampling layer; in the current sampling layer with layer number 17, parts two, three, and four are valid parts in the current sampling layer; and in the current sampling layer with layer number 35, parts three and four are valid parts in the current sampling layer. While filtering valid parts in this step, the number of times each part is sampled can be counted, which will be used to calculate the preset threshold for each part and determine the final segmentation mark of each part in the subsequent process.
[0046] In one embodiment, after calculating the weight of each component at each sampling layer, the method further includes an outlier detection step for the weights to ensure the usability of the calculated weights. Outliers may include weight values that are not numeric, infinite, or negative. If an outlier is detected, the weight is set to 0 and the component is skipped.
[0047] In one embodiment, the weight of a galvanometer that has been used can be characterized by the weight of the parts that have been assigned to the galvanometer. For example, if a part has a weight of 10, and that part has been assigned to a galvanometer, then the weight of the assigned galvanometer that has been used is 10. The average weight corresponding to the current sampling layer is the ratio of the total weight of all parts in the current sampling layer to the number of galvanometers. For example, if the current sampling layer includes three parts, each with weights of 10, 20, and 50, and the number of galvanometers to be used in the 3D printing equipment is 4, then the average weight is 20. The number of galvanometers used corresponding to the current sampling layer refers to the number of galvanometers that have been assigned parts before the current sampling layer.
[0048] In one embodiment, a list of parts in the current sampling layer is obtained, and the weights of the galvanometers already used and the number of galvanometers used are initialized to 0. The weights of the parts in the current sampling layer are arranged in ascending order. For the first part with the smallest weight in the current sampling layer, it is determined whether the weight of the current part is greater than the average weight. If so, the current part is marked as a divisible part in the current sampling layer, and since the parts in the current sampling layer are arranged in ascending order of weight, other parts are also marked as divisible parts. If not, the current part is marked as an indivisible part in the current sampling layer, and the weights of the galvanometers already used are updated to the weights of the current part. Then, for the second part in the current sampling layer, it is determined whether the weight of the second part is greater than the average weight. If so, the second part is marked as a divisible part in the current sampling layer. If not, it is determined whether the sum of the weights of the galvanometers already used and the weight of the second part is greater than the average weight. In this case, the weights of the galvanometers already used are the updated weights for the first part. If the sum of the weights of the used galvanometers (i.e., the weight of the first part) and the weight of the second part is greater than the average weight, then the number of used galvanometers is updated to the number of used galvanometers for the first part (0 in this example) plus 1. If the updated number of used galvanometers is greater than or equal to the total number of galvanometers, it means that all galvanometers have been used, and the second part is marked as a divisible part in the current sampling layer. If the updated number of used galvanometers is less than the total number of galvanometers, then a new galvanometer is assigned to the second part, and the second part is marked as an indivisible part in the current sampling layer, and the used weights corresponding to the new galvanometer are updated to the weight of the second part. If the sum of the used weights of the galvanometers (i.e., the weight of the first part) and the weight of the second part is less than or equal to the average weight, then the second part is marked as an indivisible part in the current sampling layer, and the used weights of the galvanometers are updated to the sum of the weights of the first and second parts. This process is repeated for all parts in all sampling layers to mark their candidate divisibility in the current layer.
[0049] After obtaining the candidate segmentability of each part across all sampling layers, the final segmentation label of each part is determined based on the statistically analyzed number of times each part was sampled and its preset threshold. Specifically, the final segmentability label of a part is determined based on the relationship between the ratio of the number of layers in all sampling layers where the part is a candidate indivisible part to the number of times the part was sampled and the preset threshold of the part. If the ratio of the number of layers in all sampling layers where the part is a candidate indivisible part to the number of times the part was sampled is greater than or equal to the preset threshold of the part, the part is determined to be an indivisible part; otherwise, the part is determined to be a divisible part. The preset threshold for each part is set within the range of 0.8 to 0.99 times the number of times the part was sampled. For example, if the preset threshold is 0.9 times the number of times the part was sampled, and the part is marked as indivisible in 3 layers across all sampling layers, and the part was sampled 10 times, and the preset threshold is set to 0.9, then 3 / 10 < 0.9, and the part is determined to be a divisible part. In this application, a preset threshold is set for each part based on the number of times it is sampled, so as to avoid misjudgment due to uneven sampling.
[0050] Furthermore, when a part has a branching structure, such as a tree-like structure, a single part may appear twice in certain sampling layers. This can affect the statistical count of the number of times a part is sampled. In one embodiment, the number of times a part is sampled is the count after deduplication of parts in each sampling layer. Deduplication means that each part is counted only once in each sampling layer. For example, if the second part in the current sampling layer appears twice due to its branching structure, one of the sampling results needs to be removed, and it is counted as one sample.
[0051] Furthermore, for the part with the highest number of layers, its divisibility can be obtained according to the above steps. To more accurately mark the highest-level part, in one embodiment, when the identified maximum number of layers is greater than or equal to a preset number of layers, the part corresponding to the maximum number of layers is marked as divisible. The preset number of layers can be manually set, for example, 5 layers. For instance, if the maximum number of layers is greater than or equal to 5, then regardless of whether the part with the maximum number of layers obtained according to the above steps is divisible, it is forcibly marked as a divisible part; otherwise, the divisibility analysis result obtained in the above steps is maintained.
[0052] After determining the segmentation of each part, at least one task-allowed galvanometer is specified from among multiple galvanometers based on the segmentation of the part to be printed and the printing tasks of each slice layer of the part. The printing task includes at least one of boundary task, infill task, upper surface task, lower surface task, and support task. The printing tasks of each slice layer of the part can be obtained based on the slice data of each part in the 3D printing preprocessing file. A task-allowed galvanometer refers to a galvanometer that can perform the specific printing task; there can be one or more task-allowed galvanometers corresponding to a printing task.
[0053] When there are multiple parts to be printed, the step of specifying at least one task-allowing galvanometer includes: setting at least one boundary task-allowing galvanometer among the multiple task-allowing galvanometers; for indivisible parts to be printed, specifying one task-allowing galvanometer for the boundary tasks of all slice layers of each indivisible part to be printed, and specifying the filling task, the upper surface task, and the lower surface task of all slice layers of each indivisible part to the task-allowing galvanometer where the boundary task is located; specifying multiple task-allowing galvanometers for the support task of each slice layer of each indivisible part to be printed; for divisible parts to be printed, specifying one boundary task-allowing galvanometer for the boundary tasks of all slice layers of each divisible part to be printed, and specifying multiple task-allowing galvanometers for the filling task, the upper surface task, the lower surface task, and the support task of each slice layer of each divisible part to be printed.
[0054] Specifically, a 3D printing device includes multiple galvanometers. In practical applications, all or some of these galvanometers can be used. Therefore, the number of task-allowed galvanometers is determined based on the number of galvanometers used. In one embodiment, all galvanometers in the 3D printing device are used to perform printing operations; these galvanometers are then referred to as task-allowed galvanometers. In another embodiment, some galvanometers in the 3D printing device are used to perform printing operations; these used galvanometers are then referred to as task-allowed galvanometers. Based on this, in the step of setting at least one boundary task-allowed galvanometer among multiple task-allowed galvanometers, the task-allowed galvanometer and the boundary task-allowed galvanometer can refer to the same galvanometer. When performing boundary tasks for divisible parts, this galvanometer is called a boundary task-allowed galvanometer; when performing other printing tasks, this galvanometer is called a task-allowed galvanometer. The boundary task-allowed galvanometer is only used for boundary tasks of divisible parts. The number of boundary task-allowed galvanometers can be set according to the accuracy requirements of the 3D printing device, for example, it can be set to half the total number of galvanometers. For indivisible parts, in one embodiment, a single task-allowing galvanometer is assigned to all printing tasks across all slice layers of each indivisible part to avoid task splitting and reduce galvanometer switching. In another embodiment, a single task-allowing galvanometer is assigned to the boundary tasks of all slice layers of each indivisible part, and all fill, upper surface, and lower surface tasks of all slice layers of each indivisible part are assigned to the task-allowing galvanometer where the boundary tasks are located. Multiple task-allowing galvanometers are assigned to the support tasks of each slice layer of each indivisible part, so that the load can be evenly distributed by adjusting the task-allowing galvanometers corresponding to the support tasks of each slice layer, as described later, while ensuring the printing quality of the indivisible part. For divisible parts, in one embodiment, a single boundary task-allowing galvanometer is assigned to the boundary tasks of all slice layers of each divisible part, and multiple task-allowing galvanometers are assigned to the fill, upper surface, lower surface, and support tasks of each slice layer of each divisible part.
[0055] In one embodiment, the step of specifying at least one task-allowing galvanometer includes: pre-assigning boundary tasks to each part to be printed, wherein, for indivisible parts to be printed, the task-allowing galvanometer is specified using a reverse polling method; for divisible parts to be printed, the task-allowing galvanometer is specified using a forward polling method; and, based on the result of the boundary task pre-assignment, the corresponding task-allowing galvanometer is specified for the support task, filling task, upper surface task, and lower surface task of each slice layer of each part to be printed.
[0056] Specifically, when assigning task-allowing galvanometers to the printing tasks of each part, boundary tasks are first pre-assigned to each part to be printed. This pre-assignment includes pre-assigning boundary tasks for indivisible parts and boundary tasks for divisible parts. For example, task-allowing galvanometers can be sequentially polled based on their numbers. In one embodiment, it is assumed that the four task-allowing galvanometers are numbered Task-allowing Galvanometer 1, Task-allowing Galvanometer 2, Task-allowing Galvanometer 3, and Task-allowing Galvanometer 4, where Task-allowing Galvanometer 1 and Task-allowing Galvanometer 2 are also designated as boundary task-allowing galvanometers. Based on this, after obtaining the divisibility of each part, the indivisible parts are first traversed, and task-allowed galvanometers are assigned using a reverse polling method. That is, task-allowed galvanometer #4 is assigned to the boundary tasks of all slice layers of indivisible part one, task-allowed galvanometer #3 is assigned to the boundary tasks of all slice layers of indivisible part two, task-allowed galvanometer #2 is assigned to the boundary tasks of all slice layers of indivisible part three, task-allowed galvanometer #1 is assigned to the boundary tasks of all slice layers of indivisible part four, task-allowed galvanometer #4 is assigned to the boundary tasks of all slice layers of indivisible part five, and so on, until a task-allowed galvanometer is assigned to the boundary tasks of all indivisible parts. Then, the divisible parts are traversed, and task-allowed galvanometers are assigned using a forward polling method. That is, task-allowed galvanometer #1 is assigned to the boundary tasks of all slice layers of indivisible part one, task-allowed galvanometer #2 is assigned to the boundary tasks of all slice layers of indivisible part two, task-allowed galvanometer #1 is assigned to the boundary tasks of all slice layers of indivisible part three, and so on, until a boundary task-allowed galvanometer is assigned to the boundary tasks of all divisible parts. Here, since the boundary tasks of divisible parts can only be assigned to boundary task-allowed galvanometers, the method of using reverse polling for indivisible parts and forward polling for divisible parts is adopted to initially balance the load of boundary task-allowed galvanometers and other task-allowed galvanometers in the early stage of task allocation.
[0057] After the boundary tasks are pre-assigned, other tasks for each slice layer are assigned based on the results of the boundary task pre-assignment. These tasks include support tasks, fill tasks, upper surface tasks, and lower surface tasks. Specifically, multiple task-allowing galvanometers are assigned to the support tasks of each slice layer of both indivisible and divisible parts. For example, task-allowing galvanometers numbered one to four are assigned. For the fill, upper surface, and lower surface tasks of each slice layer of the part to be printed, based on the divisibility of the part, the fill, upper surface, and lower surface tasks of each slice layer of the indivisible part are all assigned to the task-allowing galvanometer where their boundary tasks are located. That is, the boundary tasks, fill, upper surface, and lower surface tasks of all slice layers of the indivisible part are assigned to the same task-allowing galvanometer. For the fill, upper surface, and lower surface tasks of each slice layer of the divisible part, multiple task-allowing galvanometers are assigned. For example, task-allowing galvanometers numbered one to four are assigned. Thus, the printing tasks of the part to be printed correspond to one or more task-allowing galvanometers.
[0058] In addition, when the part to be printed is a single divisible part, the step of specifying at least one task-allowing galvanometer includes: specifying a task-allowing galvanometer for the boundary tasks of all slice layers of the single divisible part, and also specifying task-allowing galvanometers that inherit from the boundary tasks for the upper and lower surface tasks of all slice layers of the single divisible part. That is, specifying a task-allowing galvanometer for the boundary tasks, upper surface tasks and lower surface tasks of all slice layers of the single divisible part, and specifying multiple task-allowing galvanometers for the filling tasks and support tasks of each slice layer of the single divisible part, so as to avoid excessive dispersion of the part.
[0059] In step S20, a candidate galvanometer is pre-assigned to each printing task based on the weights of each printing task for the galvanometer and the part to be printed, according to at least one specified task. The weight of each printing task is proportional to the printing time. For example, the weights of boundary and support tasks can be determined by multiplying the distance the galvanometer moves during printing by a preset coefficient and converting it to time. The weights of upper surface, lower surface, and infill tasks can be determined by multiplying the infill area by a preset coefficient and converting it to time. The preset coefficient is related to factors such as the galvanometer's scanning speed, printing speed, and switch-off time.
[0060] In one embodiment, before pre-allocating candidate galvanometers, the task-allowed galvanometers can be initialized to clear information such as mapping tables stored in the task-allowed galvanometers, so as to facilitate the subsequent storage of task-allowed galvanometer-related information such as weights.
[0061] In one embodiment, the step of pre-assigning a candidate galvanometer to each printing task based on at least one designated task-allowed galvanometer and the weights of each printing task of the part to be printed includes: updating the maximum and / or minimum possible values of the task-allowed galvanometer based on the correspondence between the task-allowed galvanometer and the printing tasks, and initializing the remaining possible values of the task-allowed galvanometer to the maximum possible value after traversing all printing tasks, wherein the maximum possible value is the total weight of all printing tasks that can be assigned to the task-allowed galvanometer, and the minimum possible value is the weight of the printing tasks that must be assigned to the task-allowed galvanometer; and determining the candidate galvanometer for each printing task based on the current total weight of the task-allowed galvanometer and the remaining possible values.
[0062] Specifically, for a printing task of a part on the current layer, the process first determines whether the printing task specifies a task-allowed galvanometer. If a task-allowed galvanometer is specified, it checks whether the printing task specifies only one task-allowed galvanometer. If so, the minimum and maximum possible values of the task-allowed galvanometer are updated. If not, only the maximum possible value of the task-allowed galvanometer is updated, and the maximum possible values of the other task-allowed galvanometers specified for the printing task are also updated. The minimum possible value is the weight of the printing tasks that must be assigned to the task-allowed galvanometer, and the maximum possible value is the total weight of all printing tasks that can be assigned to the task-allowed galvanometer. This process is repeated for all printing tasks, and the remaining possible values of the galvanometers are initialized to the maximum possible value. Additionally, if the above printing task does not specify a task-allowed galvanometer, task-allowed galvanometer number one is defaulted as the task-allowed galvanometer for the current printing task. Furthermore, when iterating through the task-allowed galvanometers specified by the printing task, a step is included to determine whether the task-allowed galvanometer exists. This step is to further match printing tasks with task-allowed galvanometers, eliminating the possibility that a matching task-allowed galvanometer cannot be found for the printing task. If the task-allowed galvanometer exists, the relevant information for the existing task-allowed galvanometer is retrieved. If the task-allowed galvanometer does not exist, the galvanometers in the 3D printing equipment are updated to correspond to the task-allowed galvanometer. For example, if the task-allowed galvanometer specified for the printing task is galvanometer number three, and galvanometer number three does not exist in the 3D printing equipment, the galvanometer number in the 3D printing equipment is modified to update the galvanometer number in the 3D printing equipment to correspond to task-allowed galvanometer number three.
[0063] In one example, assume that the printing tasks for all parts in the current layer include the boundary task of indivisible part 1, the filling task of divisible part 2, and the boundary task of divisible part 3. First, for the boundary task of indivisible part 1, determine whether the boundary task of indivisible part 1 specifies a task-allowed galvanometer and whether the boundary task only allows one task-allowed galvanometer. As mentioned above, if the boundary task of indivisible part 1 specifies a task-allowed galvanometer, such as task number 4, then update the minimum possible value (i.e., the weight of the boundary task of part 1) and the maximum possible value (i.e., the weight of the boundary task of part 1) of the task-allowed galvanometer. Secondly, for the filling task of divisible part 2, it is determined whether the filling task of divisible part 2 specifies a task-allowed galvanometer and whether the filling task only allows one task-allowed galvanometer. As mentioned above, the filling task of divisible part 2 specifies four task-allowed galvanometers (i.e., task-allowed galvanometers number 1 to 4). Then, the maximum possible value of the four task-allowed galvanometers is updated (where the maximum possible value of task-allowed galvanometers number 1 to 3 is the weight of the filling task of part 2, and the maximum possible value of task-allowed galvanometer number 4 is the sum of the weight of the boundary task of part 1 and the weight of the filling task of part 2). Then, for the boundary task of divisible part three, it is determined whether the boundary task of divisible part three specifies a task-allowed galvanometer and whether the boundary task only allows one task-allowed galvanometer. As mentioned above, the boundary task of divisible part three specifies a boundary task-allowed galvanometer, such as the first boundary task-allowed galvanometer. Therefore, the maximum possible value (i.e., the sum of the weights of the filling task of part two and the boundary task of part three) and the minimum possible value (i.e., the weight of the boundary task of part three) of the boundary task-allowed galvanometer are updated. After traversing all printing tasks of all parts, the remaining possible values of each task-allowed galvanometer are initialized to equal the maximum possible value. Furthermore, based on the total weight of all printing tasks in each slice layer, the average weight of each slice layer's printing tasks is calculated. The average weight is equal to the ratio of the total weight to the number of galvanometers. All printing tasks are then arranged in descending order of weight to facilitate priority allocation of tasks with higher weights in subsequent processing.
[0064] Based on this, candidate galvanometers for each print task are determined according to the current total weight of the task-allowed galvanometers and the remaining possible values. The current total weight of the task-allowed galvanometers refers to the total weight of the print tasks already assigned to the task-allowed galvanometers. In one embodiment, the step of determining candidate galvanometers for each print task based on the current total weight of the task-allowed galvanometers and the remaining possible values includes: calculating the possible factors of each task-allowed galvanometer according to the current total weight of each task-allowed galvanometer specified for the current print task and the remaining possible values; setting the task-allowed galvanometer with the smallest possible factor as the candidate galvanometer for the current print task; and updating the remaining possible values and / or total weight of the task-allowed galvanometers, wherein the possible factors are jointly characterized by the current total weight of the task-allowed galvanometers and the remaining possible values.
[0065] Specifically, print tasks are sorted in descending order of their weights to obtain the print tasks for the current layer. For each print task specified in the current layer, the total weight of the allowed galvanometers and their remaining possible values are used to calculate the possible factor of each allowed galvanometer, and the allowed galvanometer with the smallest possible factor is obtained, where the possible factor is the sum of the total weight of the allowed galvanometer and its remaining possible values. After obtaining the task-allowed galvanometer with the minimum possible factor, this task-allowed galvanometer is set as a candidate galvanometer for the current printing task. Then, all task-allowed galvanometers specified for the current printing task are compared with the task-allowed galvanometer with the minimum possible factor to determine if the current task-allowed galvanometer is indeed the task-allowed galvanometer with the minimum possible factor. If it is, the total weight of the current task-allowed galvanometer is increased, its remaining possible values are decreased, and its factor is set to 1. The factor of the current task-allowed galvanometer represents the remaining proportion of the current task within that task-allowed galvanometer; a factor of 1 indicates that the current task is not segmented within that task-allowed galvanometer and is complete. If not, the total weight of the current task-allowed galvanometer is not increased, but its remaining possible values are decreased. This process continues in the same manner.
[0066] In step S30, the candidate galvanometers are optimized by task segmentation based on their weights and the weights of their respective printing tasks until a preset maximum number of iterations or allowable error is reached. The weight of a candidate galvanometer refers to the total weight of the printing tasks assigned to that galvanometer.
[0067] In one embodiment, before performing task partitioning optimization, the candidate galvanometers to be used can be initialized to generate an index list of candidate galvanometers to be load-balanced, facilitating the subsequent application and storage of galvanometer-related data. Then, task partitioning optimization is performed on the candidate galvanometers to obtain the galvanometers for load-balanced allocation.
[0068] In one embodiment, the step of optimizing the task segmentation of the candidate galvanometers based on the candidate galvanometers according to the weights of each candidate galvanometer and each printing task includes: pairing the candidate galvanometers based on the weights of each candidate galvanometer; and performing task segmentation optimization on the paired candidate galvanometers according to the proportions of the segmentable tasks.
[0069] Specifically, during the task segmentation optimization phase, the number of iterations is first initialized to zero, and the termination conditions for task segmentation optimization are set, namely, the preset maximum number of iterations and the allowable error. The preset maximum number of iterations and the allowable error can be customized. In one embodiment, the preset maximum number of iterations can be set to twice the number of galvanometers, and the preset allowable error can be set to 0.1% of the average weight of the printing tasks. Then, based on the descending order of the weights of each candidate galvanometer, calculate whether the allowable error between the candidate galvanometer with the largest weight and the candidate galvanometer with the smallest weight is less than the preset allowable error. If yes, it indicates that load balancing has been achieved, and the task segmentation optimization ends. If no, select the candidate galvanometer with the largest weight and the candidate galvanometer with the smallest weight to pair up, and determine whether the selected candidate galvanometer with the largest weight and the candidate galvanometer with the smallest weight have been tried to pair up. If no, perform task segmentation optimization. If yes, try pairing up other candidate galvanometers, for example, pairing the candidate galvanometer with the candidate galvanometer with the second largest weight. Try pairing up each candidate galvanometer, and if there are no candidate galvanometer pairs that have not been tried, increment the iteration count by 1, and determine whether the current iteration count has reached the preset maximum iteration count. If yes, end the task segmentation optimization. If no, repeat the above steps of sorting by weight, comparing the allowable error with the preset allowable error, and performing task segmentation optimization.
[0070] In one embodiment, the step of optimizing task segmentation in the paired candidate galvanometers includes: comparing the weights of the paired candidate galvanometers to determine a target average value, and moving the segmentable tasks in the candidate galvanometers with weights greater than the target average value to the candidate galvanometers with weights less than the target average value.
[0071] Specifically, the weights of each candidate galvanometer in the candidate galvanometer pair are compared to see if they are equal and all exceed the average weight, where the average weight is equal to the ratio of the total weight of all printing tasks in the current slice layer to the number of galvanometers. If yes, the task segmentation fails; otherwise, the target average value of the candidate galvanometer pair is determined. In one embodiment, in the step of determining the target average value, it is determined whether the weights of each candidate galvanometer exceed the average weight. If yes, the target average value is set to the average of the sum of the two weights; otherwise, the target average value is set to the average weight. Then, based on the target average value and the weights of each candidate galvanometer, candidate galvanometers whose weights are greater than the target average value are called large candidate galvanometers, and candidate galvanometers whose weights are less than the target average value are called small candidate galvanometers. The weight that the small candidate galvanometer needs to increase is obtained based on the difference between the weight of the small candidate galvanometer and the target average value (i.e., the weight that needs to be increased = the target average value - the weight of the small candidate galvanometer). Divisible tasks are then searched among the large candidate galvanometers. The divisible tasks include the filling task, upper surface task, lower surface task, and support task of the divisible part, as well as the support task of the indivisible part. If no separable printing tasks exist in the large candidate galvanometer, the task segmentation optimization fails. If separable printing tasks exist in the large candidate galvanometer, it is determined whether half the weight of the separable printing tasks in the large candidate galvanometer is greater than the weight that the small candidate galvanometer needs to increase. If so, a task with the smallest weight is selected from the small candidate galvanometer and moved to the large candidate galvanometer. Then, the weight of half the separable printing tasks in the large candidate galvanometer after moving the separable tasks is recalculated to see if it is greater than the weight that the small candidate galvanometer needs to increase. At this point, the weight that the small candidate galvanometer needs to increase is equal to the target average minus the weight of the small candidate galvanometer plus the weight of the removed separable printing tasks. This process is repeated until half the weight of the separable printing tasks in the large candidate galvanometer is less than or equal to the weight that the small candidate galvanometer needs to increase. Then, the segmentation ratio is calculated. If not, the segmentation ratio is directly calculated, and if the segmentation ratio is greater than 1E-5, the tasks are allocated proportionally. Here, the segmentation ratio refers to the ratio of the weight required for the small candidate galvanometer to reach the target average to the weight of the separable tasks. For example, if the weight required for a small candidate galvanometer to reach the target average is 30, and the weight of a separable task is 100, then the segmentation ratio is 0.3, meaning 30% of the separable tasks in the large candidate galvanometer are allocated to the small candidate galvanometer. The task segmentation optimization operation after determining the segmentation ratio can be either completely removing separable tasks from the large candidate galvanometer and then redistributing them to the large and small candidate galvanometers according to the segmentation ratio, or partially removing separable tasks from the large candidate galvanometer to the small candidate galvanometer based on the segmentation ratio. This completes the task segmentation optimization. Then, the iteration count is incremented by 1, and it is determined whether the current iteration count has reached the preset maximum iteration count. If yes, the task segmentation optimization ends; otherwise, the steps of sorting by weight, comparing the allowable error with the preset allowable error, and performing task segmentation optimization are repeated.In addition, after determining the segmentation ratio, the process also includes updating the factors of the galvanometers allowed for the task. For example, with a segmentation ratio of 0.3, the factor of the current task in the large candidate galvanometer is updated to 0.7, and the factor of the current task in the small candidate galvanometer is updated to 0.3.
[0072] The load balancing allocation method based on multiple galvanometers in this application specifies at least one task-allowed galvanometer for the printing tasks based on the segmentation of the part to be printed and the printing tasks of each slice layer. Based on the weight of the specified at least one task-allowed galvanometer and the printing tasks, a candidate galvanometer is pre-assigned to each printing task. Task segmentation optimization is performed on the segmentable tasks in the candidate galvanometers. All tasks of each layer are evenly distributed to multiple task-allowed galvanometers to achieve load balancing, so as to maximize the integrity of the part while ensuring the maximum utilization of the galvanometers.
[0073] In some embodiments, this application also proposes a load balancing distribution system for 3D printing, which can be deployed, for example, in a computer device as a software tool or software module capable of processing data, performing data processing with the help of the hardware devices and / or operating system provided by the computer device.
[0074] Please see Figure 3 The figure shows a block diagram of a load balancing distribution system for 3D printing according to an embodiment of this application. As shown, the load balancing distribution system 1 for 3D printing includes a designation module 10, an allocation module 11, and an optimization module 12. The designation module 10 is used to designate at least one task-allowed galvanometer from a plurality of galvanometers based on the segmentation of the part to be printed and the printing tasks of each slice layer of the part. The segmentation includes both divisible and indivisible segments, and the printing tasks include at least one of boundary tasks, infill tasks, upper surface tasks, lower surface tasks, and support tasks. The allocation module 11 pre-allocates a candidate galvanometer to each printing task based on the designated at least one task-allowed galvanometer and the weights of each printing task of the part to be printed. The optimization module 12 is used to optimize the task segmentation of the candidate galvanometers based on the weights of each candidate galvanometer and the weights of each printing task until a preset maximum number of iterations or allowable error is reached.
[0075] In one embodiment, the load balancing distribution system 1 for 3D printing includes a designation module 10, a distribution module 11, and an optimization module 12, which coordinate and execute the load balancing distribution method for 3D printing disclosed in any of the foregoing embodiments of this application according to the functions described above. Please refer to the [reference to the previous embodiment]. Figures 1 to 2Any embodiment described herein, for example, the designation module 10, the allocation module 11, and the optimization module 12 respectively implement the functions in steps S10 to S30 of the aforementioned method.
[0076] The designated module 10, allocation module 11, and optimization module 12 can also be implemented in software running on different types of processors. For example, a module of executable code may include one or more physical or logical blocks of computer instructions organized as objects, programs, or functions. However, the executable files of the modules do not necessarily have to be physically located together, but may include different commands stored in different locations, which, when logically connected together, encompass the module and implement the module's designated objectives.
[0077] Of course, the executable code module can be one or more instructions, and can even be distributed across several different code segments, different programs, and multiple storage devices. Similarly, computational data can be identified and represented within the module, and can be embodied in any suitable form and organized in any suitable data structure. The computational data can be a single dataset, or can be distributed across different locations (including different storage devices), and can exist at least partially as electrical signals within a system or network. When the module or a portion thereof is implemented in software, the software portion is stored on one or more computer-readable media.
[0078] This application also provides a 3D printing method applied to a 3D printing device, the 3D printing device including an energy radiation device with multiple galvanometers, a container for holding photocurable material, and a component platform for attaching a cured layer. The 3D printing method includes the method described above. Figure 1 and Figure 2 The described method uses a multi-galvanometer load balancing distribution to obtain slice data, and then uses an energy radiation device to irradiate the printing material in the container according to the slice data to obtain a patterned curing layer, until the cumulative number of curing layers attached to the component platform reaches a preset number. It should be noted that the slice data includes not only the correspondence between the printing task and the galvanometer, but also other slice-related data required in the 3D printing pre-processing stage, which will not be elaborated here.
[0079] To enable the application of the multi-mirror-based load balancing distribution method provided in this application in printing, this application also provides a computer device. Please refer to... Figure 4The figure shows a schematic diagram of a computer device according to one embodiment of this application. As shown, the computer device 2 includes a storage device 20 and a processing device 21 connected to the storage device 20. Further, the computer device also includes a communication interface 22. The computer device 2 is used to implement a multi-mirror-based load balancing distribution method when it calls and executes the at least one program from the storage device 20.
[0080] In some embodiments, the processing device 21 and the storage device 20 in the computer device 2 are interconnected at high speed via a system bus; when the processing device 21 executes a program in the storage device 20, it can call the system kernel, graphics card interface, or GPU computing power to accelerate the calculation of load balancing. The computer device may be a server, laptop, desktop computer, edge device, etc., and this application embodiment does not specifically limit it, nor does it limit the number of processors and memory in the computing device.
[0081] The processing device 21 may include any one or more processors such as a central processing unit (CPU), a graphics processing unit (GPU), a microprocessor (MP), or a digital signal processor (DSP). Alternatively, it may be an application-specific integrated circuit (ASIC), a discrete gate or transistor logic device, or a discrete hardware component, capable of implementing or executing the methods, steps, and logic block diagrams disclosed in the embodiments of this application.
[0082] Storage device 20 may include volatile memory, such as random access memory (RAM). The processor may also include non-volatile memory, such as read-only memory (ROM), random access memory (RAM), flash memory, programmable read-only memory (PROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), hard disk drive (HDD), or solid state drive (SSD). The storage device stores executable program code, which the processing device executes upon receiving an execution instruction. The processing device 21 executes the executable program code to implement this application. Figure 1 and Figure 2 The method steps in the embodiments.
[0083] In some embodiments, the communication interface 22 includes at least one interface unit, each interface unit being used to output a visual interface, receive human-computer interaction events generated according to the operation of a technician, etc. For example, the communication interface 22 includes, but is not limited to, serial interfaces such as HDMI interfaces or USB interfaces, or parallel interfaces, etc. In one embodiment, the communication interface 22 further includes a network communication unit, which is a device for data transmission using wired or wireless networks, examples of which include, but are not limited to, integrated circuits including network cards, local area network modules such as WiFi modules or Bluetooth modules, and wide area network modules such as mobile networks, etc.
[0084] This application also provides a computer-readable storage medium storing at least one program, which, when called and executed by a computer's processor, implements the multi-mirror-based load balancing distribution method of this application.
[0085] If the aforementioned functions are implemented as software functional units and sold or used as independent products, they can be stored in a computer-readable storage medium. Based on this understanding, the technical solution of this application, in essence, or the part that contributes to the prior art, or part of the technical solution, can be embodied in the form of a software product. This computer software product is stored in a storage medium and includes several instructions to enable a computer device with the storage medium installed to execute all or part of the steps of the methods described in the various embodiments of this application.
[0086] Those skilled in the art will understand that implementing all or part of the processes in the methods described in the above embodiments can be accomplished by a computer program instructing related hardware. The computer program can be stored in a non-volatile computer-readable storage medium, and when executed, it can include the processes of the embodiments of the methods described above. Any references to memory, storage, databases, or other media used in the embodiments provided in this application can include non-volatile and / or volatile memory. Non-volatile memory may include read-only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), or flash memory, etc. Volatile memory may include random access memory (RAM) or external cache memory, etc. By way of illustration and not limitation, RAM is available in a variety of forms, such as static RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), dual data rate SDRAM (DDRSDRAM), enhanced SDRAM (ESDRAM), synchronous link DRAM (SLDRAM), RAMbus direct RAM (RDRAM), direct memory bus dynamic RAM (DRDRAM), and memory bus dynamic RAM (RDRAM).
[0087] In the embodiments provided in this application, the computer-readable and writable storage medium may include read-only memory, random access memory, EEPROM, CD-ROM or other optical disc storage devices, disk storage devices or other magnetic storage devices, flash memory, USB flash drive, portable hard drive, or any other medium capable of storing desired program code in the form of instructions or data structures and accessible by a computer. Additionally, any connection may be appropriately referred to as a computer-readable medium. For example, if instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of the medium. However, it should be understood that computer-readable and writable storage media and data storage media do not include connections, carrier waves, signals, or other transient media, but are intended for non-transient, tangible storage media. The disks and optical discs used in the application include compact discs (CDs), laser discs, optical discs, digital multifunction discs (DVDs), floppy disks, and Blu-ray discs, where disks typically copy data magnetically, while optical discs use lasers to copy data optically.
[0088] This application also provides a computer program product that, when run on a computer, causes the computer to execute the multi-mirror-based load balancing distribution method of this application.
[0089] Those skilled in the art will understand that all or part of the processes in the methods of the above embodiments can be implemented by a computer program instructing related hardware. The computer program can be stored in a non-volatile computer-readable storage medium, and when executed, it can include the processes of the embodiments of the above methods. Any references to memory, databases, or other media used in the embodiments provided in this application can include at least one of non-volatile memory and volatile memory. Non-volatile memory can include read-only memory (ROM), magnetic tape, floppy disk, flash memory, optical memory, high-density embedded non-volatile memory, resistive random access memory (ReRAM), magnetic random access memory (MRAM), ferroelectric random access memory (FRAM), phase change memory (PCM), graphene memory, etc. Volatile memory can include random access memory (RAM) or external cache memory, etc. By way of illustration and not limitation, RAM can take many forms, such as Static Random Access Memory (SRAM) or Dynamic Random Access Memory (DRAM). The databases involved in the embodiments provided in this application may include at least one type of relational database and non-relational database. Non-relational databases may include, but are not limited to, blockchain-based distributed databases. The processors involved in the embodiments provided in this application may be general-purpose processors, central processing units, graphics processing units, digital signal processors, programmable logic devices, quantum computing-based data processing logic devices, artificial intelligence (AI) processors, etc., and are not limited to these.
[0090] In one or more exemplary aspects, the functions described in the computer program of the multi-mirror-based load balancing distribution method of this application can be implemented in hardware, software, firmware, or any combination thereof. When implemented in software, these functions can be stored or transmitted as one or more instructions or code onto a computer-readable medium. The steps of the methods or algorithms disclosed in this application can be embodied in processor-executable software modules, wherein the processor-executable software modules can reside on a tangible, non-transitory computer-readable and writable storage medium. The tangible, non-transitory computer-readable and writable storage medium can be any available medium accessible to a computer.
[0091] The flowcharts and block diagrams in the accompanying drawings illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of this application. Accordingly, each block in a flowchart or block diagram may represent a module, segment, or portion of code containing one or more executable instructions for implementing a specified logical function. It should also be noted that in some alternative implementations, the functions indicated in the blocks may occur in a different order than those indicated in the drawings. For example, two consecutively indicated blocks may actually be executed substantially in parallel, and they may sometimes be executed in reverse order, depending on the functions involved. It should also be noted that each block in a block diagram and / or flowchart, and combinations of blocks in block diagrams and / or flowcharts, can be implemented by a dedicated hardware-based system that performs the specified function or operation, or by a combination of dedicated hardware and computer instructions.
[0092] Those skilled in the art will recognize that the units and algorithm steps of the various examples described in conjunction with the embodiments disclosed herein can be implemented in electronic hardware, or a combination of computer software and electronic hardware. Whether these functions are implemented in hardware or software depends on the specific application and design constraints of the technical solution. Those skilled in the art can use different methods to implement the described functions for each specific application, but such implementation should not be considered beyond the scope of this application.
[0093] In summary, the load balancing allocation method and system based on multiple galvanometers, 3D printing method, computer equipment, computer-readable storage medium, and computer program product disclosed in this application, by introducing a segmentation-driven allocation decision mechanism into the multi-galvanometer 3D printing system, comprehensively considers the integrity of the parts and the load distribution of the galvanometers before load balancing scheduling, and realizes intelligent partitioning and dynamic optimization of printing tasks at the algorithm level. Specifically: On the one hand, before allocating printing tasks, this application analyzes the geometric structure, layer height characteristics, and sampling statistics of each part to be printed to determine its segmentability, and constrains the transferable range of the printing tasks accordingly. This technical means, which combines segmentation analysis with task-allowed galvanometer specification, avoids excessive segmentation and frequent switching of complex parts in the prior art, thereby reducing splicing errors and maintaining the overall continuity of part printing. On the other hand, this application combines the current load, remaining capacity, and predicted load trend of the galvanometers to dynamically determine the candidate galvanometer set for each task, realizing task and resource matching optimization in the allocation stage. This application employs a task-weight-based candidate galvanometer pre-assignment process, balancing the maximum / minimum possible values and remaining possible values of the galvanometers to achieve load self-balancing characteristics during the task pre-assignment stage, thereby significantly reducing the number of subsequent iterations. Furthermore, this application uses a pairwise comparison and proportional partitioning strategy to iteratively balance the divisible tasks among the galvanometers. Automatic convergence occurs when the load difference between the galvanometers falls below a preset threshold or reaches the maximum number of iterations, ensuring both computational efficiency and balanced load among the galvanometers. This task partitioning optimization mechanism among candidate galvanometers effectively avoids the phenomenon of some galvanometers being idle or overloaded for extended periods.
[0094] This application, in particular, through the aforementioned multi-layer collaborative mechanism, enables the maintenance of the integrity of printed parts and scanning continuity to the greatest extent while ensuring the maximum utilization of the galvanometers, achieving dynamic load balancing and efficient scheduling of printing tasks. Compared with existing technologies, this application not only improves the parallel utilization and forming efficiency of multi-galvanometer systems, but also reduces the number of galvanometer switching operations and data interaction complexity, possessing higher system stability and versatility, and is suitable for multi-part parallel printing and large-format photopolymerization molding scenarios.
[0095] The above embodiments are merely illustrative of the inventive essence and beneficial effects of this application, and are not intended to limit this application. Any person skilled in the art can modify or alter the above embodiments without departing from the principles and scope of this application. Therefore, all equivalent modifications or alterations achieved by those skilled in the art without departing from the spirit and technical concept disclosed in this application should still be covered by the claims of this application.
Claims
1. A load balancing distribution method based on multiple galvanometers, characterized in that, Applied to a 3D printing equipment, the 3D printing equipment including multiple galvanometers, the load balancing distribution method includes the following steps: Based on the segmentation of the part to be printed and the printing task of each slice layer of the part to be printed, at least one task-allowing galvanometer is specified among the plurality of galvanometers, wherein the segmentation includes segmentable and indivisible, and the printing task includes at least one of boundary task, infill task, upper surface task, lower surface task and support task. Based on the weights of at least one specified task, a candidate galvanometer is pre-assigned to each printing task according to the galvanometer and the weights of each printing task for the part to be printed; and The candidate galvanometers are optimized for task segmentation based on the weights of each candidate galvanometer and the weights of each printing task. The task segmentation optimization includes: pairing the candidate galvanometers based on their weights, and performing task segmentation optimization on the paired candidate galvanometers according to the proportions of the segmentable tasks, until a preset maximum number of iterations or allowable error is reached.
2. The load balancing distribution method according to claim 1, characterized in that, The number of parts to be printed is multiple, and the divisibility of each part among the multiple parts to be printed is obtained through the following steps: Based on the number of layers and geometric features of the multiple parts to be printed, the sampling range is determined and multi-layer sampling data is generated to characterize the distribution features of each part in the printing layer direction. Based on the weight distribution and statistical results of the parts in each sampling layer, and combined with a preset threshold, the segmentability of each part is determined to distinguish between parts that can be allocated as a whole and parts that need to be allocated separately.
3. The load balancing distribution method according to claim 2, characterized in that, The steps of determining the sampling range and generating multi-layer sampling data include: Obtain information on multiple parts to be printed, including the number of parts, the number of layers for each part, and geometric feature parameters; The sampling range is determined based on the number of layers of each part, and each part is sampled uniformly within the sampling range according to a preset sampling quantity.
4. The load balancing distribution method according to claim 3, characterized in that, The step of determining the sampling range based on the number of layers of each part includes: traversing the number of layers of each part in a single pass to identify the maximum number of layers, the second largest number of layers, and the minimum number of layers, and determining the sampling range based on the second largest number of layers.
5. The load balancing distribution method according to claim 3, characterized in that, The step of uniformly sampling each part within the sampling range according to a preset sampling quantity includes: calculating the number of available sampling layers based on the sampling range, and limiting the sampling quantity based on the number of available sampling layers to uniformly sample each part.
6. The load balancing distribution method according to claim 2, characterized in that, The step of determining the segmentability of each part by combining a preset threshold includes: Calculate the weight of each part in each sampling layer, wherein the weight is proportional to the printing time; Based on the weight of the galvanometers used in the current sampling layer, the weight of each part in the current sampling layer, the number of galvanometers used in the current sampling layer, and the average weight in the current sampling layer, each part is traversed to determine the candidate segmentation of each part in each sampling layer. The average weight in the current sampling layer is the ratio of the total weight of all parts in the current sampling layer to the number of galvanometers. The final segmentation label of each part is determined based on the candidate segmentability of each part in all sampling layers, the number of times each part is sampled, and the preset threshold of each part.
7. The load balancing distribution method according to claim 6, characterized in that, The weights include fill weights and boundary weights. The fill weights are determined based on the fill area, and the boundary weights are determined based on the perimeter of the outline.
8. The load balancing distribution method according to claim 6, characterized in that, The steps for calculating the weight of each component in each sampling layer include: serially traversing each sampling layer and calculating the weight of each component in the current sampling layer in parallel.
9. The load balancing distribution method according to claim 8, characterized in that, It also includes the step of filtering the valid parts of the current sampling layer before calculating the weights of each part in the current sampling layer in parallel.
10. The load balancing distribution method according to claim 6, characterized in that, It also includes a step of outlier detection of the weights after calculating the weights of each component in each sampling layer.
11. The load balancing distribution method according to claim 6, characterized in that, The number of times each part is sampled is the number of times counted after traversing all parts in each sampling layer and removing duplicates from all parts in each sampling layer.
12. The load balancing distribution method according to claim 6, characterized in that, The preset threshold for each part is set within the range of 0.8-0.99 times the number of times each part is sampled.
13. The load balancing distribution method according to claim 4, characterized in that, When the identified maximum number of layers is greater than or equal to the second maximum number of layers, the part corresponding to the maximum number of layers is marked as divisible.
14. The load balancing distribution method according to claim 1, characterized in that, The number of parts to be printed is multiple, and the step of specifying at least one task-allowing galvanometer includes: setting at least one boundary task-allowing galvanometer among the multiple task-allowing galvanometers; for indivisible parts to be printed, specifying one task-allowing galvanometer for the boundary tasks of all slice layers of each indivisible part to be printed, and specifying the filling task, the upper surface task, and the lower surface task of all slice layers of each indivisible part to the task-allowing galvanometer where the boundary task is located; specifying multiple task-allowing galvanometers for the support task of each slice layer of each indivisible part to be printed; for divisible parts to be printed, specifying one boundary task-allowing galvanometer for the boundary tasks of all slice layers of each divisible part to be printed, and specifying multiple task-allowing galvanometers for the filling task, the upper surface task, the lower surface task, and the support task of each slice layer of each divisible part to be printed.
15. The load balancing distribution method according to claim 14, characterized in that, The step of specifying at least one task-allowed galvanometer includes: pre-assigning boundary tasks to each part to be printed, wherein, for each indivisible part to be printed, the task-allowed galvanometer is specified using a reverse polling method; for each divisible part to be printed, the task-allowed galvanometer is specified using a forward polling method; and based on the result of the boundary task pre-assignment, the corresponding task-allowed galvanometer is specified for the support task, filling task, upper surface task, and lower surface task of each slice layer of each part to be printed.
16. The load balancing distribution method according to claim 1, characterized in that, The part to be printed is a single divisible part, and the step of specifying at least one task-allowing galvanometer includes: specifying one task-allowing galvanometer for the boundary task, the upper surface task and the lower surface task of all slice layers of the single divisible part, and specifying multiple task-allowing galvanometers for the filling task and the support task of each slice layer of the single divisible part.
17. The load balancing distribution method according to claim 1, characterized in that, The step of pre-assigning a candidate galvanometer to each printing task based on at least one designated task-allowed galvanometer and the weights of each printing task of the part to be printed includes: updating the maximum and / or minimum possible values of the task-allowed galvanometer based on the correspondence between the task-allowed galvanometer and the printing tasks, and initializing the remaining possible values of the task-allowed galvanometer to the maximum possible value after traversing all printing tasks, wherein the maximum possible value is the total weight of all printing tasks that can be assigned to the task-allowed galvanometer, and the minimum possible value is the weight of the printing tasks that must be assigned to the task-allowed galvanometer; and determining the candidate galvanometer for each printing task based on the current total weight of the task-allowed galvanometer and the remaining possible values.
18. The load balancing distribution method according to claim 17, characterized in that, The step of determining candidate galvanometers for each printing task based on the current total weight of the task-allowed galvanometers and the remaining possible values includes: calculating the possible factors of each task-allowed galvanometer according to the current total weight of each task-allowed galvanometer specified for the current printing task and the remaining possible values, setting the task-allowed galvanometer with the smallest possible factor as the candidate galvanometer for the current printing task, and updating the remaining possible values and / or total weight of the task-allowed galvanometers, wherein the possible factors are jointly characterized by the current total weight of the task-allowed galvanometers and the remaining possible values.
19. The load balancing distribution method according to claim 1, characterized in that, The step of optimizing task segmentation in the paired candidate galvanometers includes: comparing the weights of the paired candidate galvanometers to determine a target average value, and moving the segmentable tasks in the candidate galvanometers with weights greater than the target average value to the candidate galvanometers with weights less than the target average value.
20. A load balancing distribution system based on multiple galvanometers, characterized in that, The load balancing distribution system is applied to a 3D printing equipment, which includes multiple galvanometers, and includes: A designated module is used to specify at least one task-allowed galvanometer among a plurality of galvanometers based on the segmentation of the part to be printed and the printing task of each slice layer of the part to be printed, wherein the segmentation includes segmentable and indivisible, and the printing task includes at least one of boundary task, infill task, upper surface task, lower surface task and support task. The allocation module is used to pre-assign a candidate galvanometer to each printing task based on the weights of at least one specified task-allowed galvanometer and each printing task of the part to be printed; and An optimization module is used to perform task segmentation optimization on the candidate galvanometers based on the weights of each candidate galvanometer and the weights of each printing task. The task segmentation optimization includes: pairing the candidate galvanometers based on their weights, and performing task segmentation optimization on the paired candidate galvanometers according to the proportion of the segmentable tasks, until a preset maximum number of iterations or allowable error is reached.
21. A 3D printing method applied to a 3D printing device, the 3D printing device comprising an energy radiation device having multiple galvanometers, a container for holding photocurable material, and a component platform for attaching a cured layer, characterized in that... The 3D printing method includes: Slice data are obtained according to the multi-mirror-based load balancing distribution method as described in any one of claims 1 to 19; and The energy radiation device irradiates the printing material inside the container according to the slice data to obtain a pattern curing layer until the cumulative number of curing layers attached to the component platform reaches a preset number.
22. A computer device, characterized in that, include: Storage device for storing at least one program; A processing device, connected to the storage device, is configured to implement the multi-mirror-based load balancing distribution method as described in any one of claims 1 to 19 when it calls and executes the at least one program from the storage device.
23. A computer-readable storage medium, characterized in that, The system stores at least one program, which, when called and executed by a computer's processor, implements the multi-mirror-based load balancing distribution method as described in any one of claims 1 to 19.
24. A computer program product, characterized in that, When the computer program product is run on a computer, the computer performs the multi-mirror-based load balancing distribution method as described in any one of claims 1 to 19.
Citation Information
Patent Citations
Multi-galvanometer calibration method, printing method and optical system adopted for 3D printing
CN106003714A