Pallet Manager daemon Reference Manual
Version 3.2
Startup and diagnostic functions
Name | ping |
Signature | bool ping() |
Description | Test function. Always returns true. |
Parameters |
|
Return value | true |
Name | set_working_dir |
Signature | bool set_working_dir(string dir) |
Description | Sets the working directory from where the pallet manager loads json files, and where the backup file is created. |
Parameters | dir: the full path of the working directory to be used |
Return value | true on success, false on error. |
Pallet pattern functions
Name | get_md5sum |
Signature | string get_md5sum(string product_name) |
Description | Calculates and returns the md5sum checksum for the specified file (name without the .json suffix) |
Parameters | product_name: the box type to be palletized, e.g. C000272 |
Return value | This function can be used to verify the integrity of a file. The checksum will be different after modifications. |
Name | load |
Signature | bool load(int instance, string product_name) |
Description | Loads the pattern definition from {product_name}.json and the zone definition from {product_name}.zones.json or the default zone definition from zones.json file. Case insensitivity is implemented for some degree: full uppercase and full lowercase file names are also searched for. |
Parameters | instance: pallet manager instance to be used product_name: the box type to be palletized, e.g. C000272 |
Return value | true on success, false on error |
Name | build_layers |
Signature | bool build_layers(int instance, int selected_pattern) |
Description | Builds the empty pallet completion state based on the pattern or the altPattern structures of each layer type. This function is used to handle different layout definitions for the left pallet. |
Parameters | instance: pallet manager instance to be used selected_pattern: should be 1 to build the pallet completion state from the "pattern" structures, 2 for the "altPattern" |
Return value | true on success, false on error |
Name | set_nr_products |
Signature | bool set_nr_products(int instance, int nr_products) |
Description | Creates a partial pallet with the specified number of boxes. This function can be used after load() only. Depending on the number of boxes, the algorithm creates n complete layers, or n-1 complete and one partial layer. |
Parameters | instance: pallet manager instance to be used nr_products: the exact number (or maximum number) of boxes to be palletized. |
Return value | true on success, false on error. |
Name | partial_palletize |
Signature | bool partial_palletize(int instance, int layer_nr, int box_nr) |
Description | Creates a partial pallet by specifying the layer number and the box number on the given layer where the program should continue palletizing. |
Parameters | instance: pallet manager instance to be used layer_nr: the layer number where the next task will be performed box_nr: the box position on the specified layer where the next task will be performed |
Return value | [current box position, current zone, previous zone] |
Name | get_pallet_dimensions |
Signature | double[] get_pallet_dimensions(int instance) |
Description | Returns the pallet dimensions [width, length, height] in millimeters as specified in the currently loaded product json file. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns [width, length, height] in an array. On failure, the return value is [0, 0, 0] |
Name | get_product_dimensions |
Signature | double[] get_product_dimensions(int instance) |
Description | Returns the box dimensions (width, length, height) in millimeters as specified in the currently loaded product json file WITHOUT PADDING, product weight in gramms, and label orientation in degrees (90: right, -90: left, 0: front) related to the box face. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns [width, length, height, weight, label_orientation] as an array. On failure, the return value is [0, 0, 0, 0, 0] |
Name | get_nr_zones |
Signature | int get_nr_zones(int instance) |
Description | Returns the total number of zones defined in the currently loaded (either product-specific or generic) zone file. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns the total number of zones (including empty zones). On failure, the function returns 0. |
Name | get_zone_app_data |
Signature | string get_zone_app_data(int instance, int nr_zone) |
Description | Returns the value of the "appData" field for the specified zone as defined in the currently loaded zones file. The appData is not used by the pallet manager itself, but it can contain extra information for the main application. |
Parameters | instance: pallet manager instance to be used nr_zone: 0-based index of zone. For zone order, see the zones.json file. |
Return value | On success, the function returns the appData field. On failure, the function returns an empty string. |
Name | get_zone_pos_data |
Signature | number[] get_zone_pos_data(int instance, int nr_zone) |
Description | Returns the value of "posData" field for the specified zone as defined in the currently loaded zones file. The posData is not used by the pallet manager itself, but it can contain extra information for the main application. The elements of posData define X, Y, and Z position offsets for the robot base position in the physical world. Lifting column position, for example, can be represented in posData[2]. |
Parameters | instance: pallet manager instance to be used nr_zone: 0-based index of zone. For zone order, see the zones.json file. |
Return value | On success, the function returns the posData field as an array of [x, y. z]. On failure, the function returns an empty array. |
Remarks | posData has been made optional in Pally 2.9 and therefore the return value can be empty also in normal circumstances. |
Name | get_next_task |
Signature | number[] get_next_task(int instance, int nr_boxes, int nr_zone) |
Description | The function finds and returns the position, orientation, and payload weight of the next palletizing task to be performed. The function marks the selected box position(s) as "reserved" until a commit_task or a cancel_task is performed. In case there is a previous get_next_task in progress, which has not yet been committed or cancelled, a cancel_task() is automatically performed before finding the new task. |
Parameters | instance: pallet manager instance to be used nr_boxes: the number of boxes available on the conveyor nr_zone: the 0-based index of the currently selected zone |
Return value | On success, the function returns the following array: [int layer, int nr_boxes, double X, double Y, double Z, int rotations, int weight, int taskType, int gripperRotations, int approach, double width, double length, double height]
Where
layer: the 0-based layer index
nr_boxes: the number of boxes to be lifted, <= nr_boxes available on conveyor. If there are no more boxes to be palletized in the specified zone, the nr_boxes is zero.
X: center point of the payload (mm) in the logical pallet coordinate system
Y: center point of the payload (mm) in the logical pallet coordinate system
Z: top surface of the payload (mm) measured from the empty pallet surface
rotations: bitmask of allowed rotations Bit 0: 0° rotation is allowed by the pattern Bit 1: 90° (clockwise) rotation is allowed Bit 2: 180° (aka. -180°) rotation is allowed Bit 3: 270° (aka. -90°) rotation is allowed
weight: total weight of payload (box weight * number of boxes) in gramm
taskType: 1 for box, 2 for shim paper
gripperRotation: bitmask of allowed gripper rotations at pickup Bit 0: 0° rotation is allowed Bit 1: 90° (clockwise) rotation is allowed Bit 2: 180° (aka. -180°) rotation is allowed Bit 3: 270° (aka. -90°) rotation is allowed
approach: 1 for normal, -1 for inverse approach
width, length, height: the dimensions of the payload. For shim papers, it's pallet width, pallet length, and shim paper height. For normal boxes, box width, nr_products * box length, and box height are returned.
On failure, the function returns an array of zeros. |
Name | commit_task |
Signature | bool commit_task(int instance) |
Description | Sets the "reserved" pattern positions' state to "done". The commit_task function should be executed when a pending task (returned by get_next_task) has been successfully palletized and no error occurred. |
Parameters | instance: pallet manager instance to be used |
Return value | true on success, false on error. |
Name | cancel_task |
Signature | bool cancel_task(int instance) |
Description | Sets the "reserved" pattern positions to "empty". The cancel_task function should be executed when a pending task (returned by get_next_task) has not been successfully palletized, either because of a program stop or a hardware failure. |
Parameters | instance: pallet manager instance to be used |
Return value | true on success, false on error. |
Name | get_next_depal_task |
Signature | number[] get_next_depal_task(int instance, int nr_boxes, int nr_zone) |
Remarks | This is the reverse version of get_next_task that starts searching the first positions with "done" state in the backward direction. Should be used when building the pallet down (de-palletizing). |
Name | commit_depal_task |
Signature | bool commit_depal_task(int instance) |
Remarks | This is the reverse function of commit_task that sets the "reserved" pattern positions' state to "empty". Should be used when building the pallet down (de-palletizing). |
Name | cancel_depal_task |
Signature | bool cancel_depal_task(int instance) |
Remarks | This is the reverse function of cancel_task that sets the "reserved" pattern positions' state to "done". Should be used when building the pallet down (de-palletizing). |
Name | reset_pallet_state |
Signature | bool reset_pallet_state(int instance) |
Description | Sets the pattern position state to "empty" for all positions of the pallet. This is equivalent to reloading the same JSON again, assuming the JSON has not been changed. |
Parameters | instance: pallet manager instance to be used |
Return value | true on success, false on error. |
Name | get_pallet_state |
Signature | int[] get_pallet_state(int instance) |
Description | Returns the number of total, done, and remaining boxes. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns the array: [nr_total, nr_done, nr_empty] where nr_total: the total number of boxes (pattern positions) specified in the currently loaded json file nr_done: number of boxes that have been already palletized successfully (with commit_task) nr_empty: number of empty box positions in the currently loaded json file. On error, the function returns [0, 0, 0] |
Remarks | It is possible to have nr_done + nr_empty < nr_boxes when a get_next_task exists without commit/cancel. |
Name | get_pattern_info |
Signature | int[] get_pattern_info(int instance) |
Description | Returns detailed information about the currently loaded pattern. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns the array: [nr_layers, nr_product_1, nr_product_2, ...] where nr_total: the total number of layers in the currently loaded json file nr_product_X: number of boxes on the specified layer (bottom-up) On error, the function returns [0, 0] |
Name | backup |
Signature | bool backup(int instance) |
Description | Writes the current pallet state into palbak.json in the working directory. The backup file contains the name of the currently loaded product type, and the internal state (empty=0, reserved=1, done=2) for each pattern position. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns true. On error, the return value is false. |
Name | restore |
Signature | bool restore(int instance) |
Description | Loads the palbak.json file that has been saved by the backup() function. If succeeded, it loads the product-specific json file and the product-specific (or generic) zones json file, and updates the internal state of each pattern position. As a side-effect, the backup/restore mechanism can be used to dynamically change the pallet layout during palletizing, as long as the number of boxes remain the same. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns true. On error, the return value is false. |
Name | init_pattern_cache |
Signature | int init_pattern_cache() |
Description | The pallet manager scans the working directory for JSON files and collects information from them. All information is stored in an array, which can be accessed by the following functions: get_file_name get_pattern_name get_formatted_info |
Parameters | - |
Return value | On success, the function returns the number of JSON files found in the working directory. On error, the return value is 0. |
Name | get_file_name |
Signature | string get_file_name(int index) |
Description | Returns the file name of the JSON file with the given index. The index must be between 0 and the value returned by init_pattern_cache(). This function can only be used after a successful call to init_pattern_cache(). |
Parameters | index: array index in the pattern cache |
Return value | On success, the function returns the file name. On error, the return value is an empty string. |
Name | get_pattern_name |
Signature | string get_pattern_name(int index) |
Description | Returns the "name" field of the JSON file with the given index. The index must be between 0 and the value returned by init_pattern_cache(). This function can only be used after a successful call to init_pattern_cache(). |
Parameters | index: array index in the pattern cache |
Return value | On success, the function returns the "name" field in the JSON. On error, the return value is an empty string. |
Name | get_formatted_info |
Signature | string get_formatted_info(int index) |
Description | Returns an overview of the JSON file with the given index as a short JSON. The index must be between 0 and the value returned by init_pattern_cache(). This function can only be used after a successful call to init_pattern_cache(). |
Parameters | index: array index in the pattern cache |
Return value | The return value is always a JSON with the following format:
{"totalHeight":%g,"totalWeight":%g,"boxCount":%d,"layerCount":%d,"boxWidth":%g,"boxLength":%g,"boxHeight":%g,"boxWeight":%u,"dateModified":"%s","description":"%s","maxGrip":"%u","layerBoxCount":[%s]}
On success, all fields contain the respective information from the source JSON. On failure, the fields are set to zero, and the description is "failed to load". |
Name | get_formatted_pallet_state |
Signature | string get_formatted_pallet_state(int instance) |
Description | Returns an overview of the currently loaded pallet in as a short JSON. |
Parameters | instance: pallet manager instance to be used |
Return value | The return value is always a JSON with the following format:
{"patternName":"%s","currentPalletId":%d,"softPalletReadyOk1":%d,"softPalletReadyOk2":%d,"totalBoxesCount":%d,"totalLayersCount":%d,"totalBoxesProgress":%d,"layersProgress":%d,"boxCountPerLayer":%d,"currentLayerBoxProgress":%d,"description":"%s"} |
Name | init_zones_generator |
Signature | bool init_zones_generator(bool continuous, int max_stroke) |
Description | Initializes the automatic zones generator for a specific lifting column. By default, the zones generator generates only one dummy zone |
Parameters | continuous: true if the lifting column can be moved to any intermediate position max_stroke: maximum stroke in millimeters |
Return value | true on success, false on error |
Key-value storage
These functions are used to store variables that should keep their values between UR program runs. Each pallet manager instance can have its own key-value storage, there is also a static storage available for all instances.
Name | init_key_value |
Signature | <type> init_key_value(int instance, string attribute_name, <type> attribute_value) |
Description | Creates an entry in the key-value storage with the given attribute name and attribute value, but only if it does not exist yet. |
Parameters | instance: pallet manager instance to be used attribute_name: name of the attribute to be created attribute_name: initial value of the new attribute |
Return value | The existing value of the given attribute, if it exists. atttibute_value, if the attribute is newly created. |
Remarks | <type> can be any data type that is supported by the URScript |
Name | read_key_value |
Signature | <type> read_key_value(int instance, string attribute_name) |
Description | Returns the value of the attribute from the key-value storage. |
Parameters | instance: pallet manager instance to be used attribute_name: name of the attribute to be read |
Return value | The existing value of the given attribute, if it exists. |
Remarks | <type> can be any data type that is supported by the URScript |
Name | write_key_value |
Signature | <type> write_key_value(int instance, string attribute_name, <type> attribute_value) |
Description | Creates or updates an entry in the key-value storage with the given attribute name and attribute value. |
Parameters | instance: pallet manager instance to be used attribute_name: name of the attribute to be created attribute_name: initial value of the new attribute |
Return value | On success, the function returns attribute_value. On failure, the function returns false. |
Remarks | <type> can be any data type that is supported by the URScript |
Name | init_key_value_static |
Signature | <type> init_key_value_static(string attribute_name, <type> attribute_value) |
Remarks | This is the static version of init_key_value that does not require an instance nr. |
Name | read_key_value_static |
Signature | <type> read_key_value_stati(string attribute_name) |
Remarks | This is the static version of read_key_value. |
Name | write_key_value_static |
Signature | <type> write_key_value_static(int instance, string attribute_name, <type> attribute_value) |
Remarks | This is the static version of write_key_value. |
Instance management functions
The pallet manager daemon can simultaneously handle multiple data structures, called instances, which reflect the loaded pattern and the pallet completion state. This feature is only used in Dual Product mode, where both the left and right pallet have their own patterns and pallet completion states. All functions related to the pallet state require the instance number as an input parameter. Instance number should be 0 by default.
Name | get_instances |
Signature | int[] get_instances() |
Description | Returns the array of instance identifiers. |
Parameters |
|
Return value | On success, the function returns the following array: [nr_instances, instance1, instance2, …] where instanceX is the numerical identifier of a pallet manager instance (see the instance parameter of various functions) On failure, the function returns [0] |
Name | delete_instance |
Signature | bool delete_instances(int instance) |
Description | Deletes the given pallet manager instance and all its data from memory. The currently loaded JSON as well as the entire key-value storage will be completely unloaded and is no longer available for subsequent function calls. |
Parameters | instance: pallet manager instance to be used |
Return value | On success, the function returns true. On failure, the function returns false. |
Functions related to collision testing
Name | get_shadow_points |
Signature | double[] get_shadow_points(int instance, int direction, int nr_layer) |
Description | Calculates and returns a list of x,y coordinate pairs that define the corners of the collision area, seen from the given direction. |
Parameters | instance: pallet manager instance to be used direction: expected arrival direction of the new box(es). 1 if the collision area should be seen from north-west, -1 if seen from north-east. nr_layer: layer to be checked |
Return value | The corner points of the collision area, seen from the given direction. |
Name | is_task_in_shadow |
Signature | bool is_task_in_shadow(int instance, int direction) |
Description | Determines the current task collision state, assuming that the box(es) arrive from the given direction. |
Parameters | instance: pallet manager instance to be used direction: expected arrival direction of the new box(es). 1 if the collision area should be seen from north-west, -1 if seen from north-east. |
Return value | True if the current task is located in a pallet area that cannot be reached with linear motion in the given direction without collision, false otherwise. |
Order management functions
Orders consist of one or more full or partial pallets of the same product type. The following functions are used for manipulating orders.
Name | get_nr_orders |
Signature | int get_nr_orders(int instance) |
Description | Counts the total number of orders in the specified instance. Each order can have one or more full or partial pallets of the same product type. |
Parameters | instance: pallet manager instance to be used |
Return value | Number of orders. |
Remarks | This function does not count the total number of pallets. |
Name | get_order_id |
Signature | int get_order_id(int instance, int order_number) |
Description | Gives the unique ID of the order pointed by order_number. |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders. |
Return value | Order ID of the specified order. |
Remarks | Order ID is not used by the system, but can be freely used as a foreign key reference to external systems such as ERP. |
Name | get_order_description |
Signature | string get_order_description(int instance, int order_number) |
Description | Gives the description of the order pointed by order_number. |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders. |
Return value | Description of the specified order. |
Remarks | Currently not used by the system. The description field can contain any text for Operator convenience. |
Name | get_order_pattern_name |
Signature | string get_order_pattern_name(int instance, int order_number) |
Description | Gives the name of the pattern json file to be loaded (without ".json" suffix) |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders. |
Return value | Name of the pattern json file to be loaded during palletizing the specified order. |
Remarks |
|
Name | get_order_loads |
Signature | int[] get_order_loads(int instance, int order_number) |
Description | Gives the requested number of products on each pallet of the specified order. |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders. |
Return value | An array of integers that should be interpreted as follows: element 0: the number of pallets to be done elements 1…number of pallets: the number of products on the N-th. pallet |
Remarks | When the number of products is set to 0 it means a full pallet. |
Name | insert_order |
Signature | bool insert_order(int instance, int order_number, int order_id, string order_description, string pattern_name, int[] loads) |
Description | Creates a new order and inserts it into the list of existing orders at the specified position. |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders order_id: order ID that can be used as a foreign key in external systems order_description: description for the operator pattern_name: name of the pattern json file to be loaded loads: an array of integers that should be interpreted as follows: element 0: the number of pallets to be done elements 1…number of pallets: the number of products on the N-th. pallet |
Return value | true if successful, otherwise false |
Remarks | Orders that follow the newly inserted order will get a new order_number. |
Name | update_order |
Signature | bool update_order(int instance, int order_number, int[] loads) |
Description | Updates loads of the specified order. Typical use is after completing a pallet. (Set nr. pallets = nr. pallets -1, and remove the first element from the list) |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders loads: an array of integers that should be interpreted as follows: element 0: the number of pallets to be done elements 1…number of pallets: the number of products on the N-th. pallet |
Return value | true if successful, otherwise false |
Remarks | This function is being used for updating the remaining loads after a pallet has been completed. It is currently not possible to update the order id, description, and pattern name once the order has been created, |
Name | delete_order |
Signature | bool delete_order(int instance, int order_number) |
Description | Remove the specified order from the order list. Typical use of this function is when all pallets of the specified order are completed and the 'empty' order can be safely deleted. |
Parameters | instance: pallet manager instance to be used order_number: a number between 0 and nr_orders-1 that depends on the total number of orders |
Return value | true if successful, otherwise false |
Remarks |
|
Name | clear_orders |
Signature | bool clear_orders(int instance) |
Description | Deletes all orders regardless of their completion state. The order list becomes empty. |
Parameters | instance: pallet manager instance to be used |
Return value | true if successful, otherwise false |
Remarks |
|
Name | load_orders |
Signature | bool load_orders(int instance, string file_name) |
Description | Clears all existing orders and loads orders from the specified json file. |
Parameters | instance: pallet manager instance to be used file_name: name of the file (without .json suffix) that contains the order definitions. The file must be located in the working directory of the pallet manager daemon. |
Return value | true if successful, otherwise false |
Remarks | TODO add example file here! |
Name | load_orders_from_string |
Signature | bool load_orders_from_string(int instance, string order_defs) |
Description | Clears all existing orders and loads orders from the specified string that must be a valid json. |
Parameters | instance: pallet manager instance to be used order_defs: a string that contains a valid json with order definitions |
Return value | true if successful, otherwise false |
Remarks |
|
Offline storage functions
Offline storage functions provide access to persistent data in special json files.
Name | open_database |
Signature | bool open_database(int instance, string db_name, bool read_only) |
Description | Reads all json files into memory from the given subfolder specified by db_name. |
Parameters | instance: pallet manager instance to be used db_name: name of the database, technically this is a subfolder in the working directory read_only: if true, existing json files are opened in read-only mode, and no new files can be created |
Return value | true if successful, otherwise false |
Remarks |
|
Name | write_database |
Signature | bool write_database(int instance) |
Description | Writes all json files into the currently selected subfolder from memory. |
Parameters | instance: pallet manager instance to be used |
Return value | true if successful, otherwise false |
Remarks | If the database was open in read-only mode, no write operations are performed and the function returns true immediately. |
Name | close_database |
Signature | bool close_database(int instance) |
Description | Writes all json files into the currently selected subfolder from memory, and then releases all memory. |
Parameters | instance: pallet manager instance to be used |
Return value | true if successful, otherwise false |
Remarks | If the database was open in read-only mode, no write operations are performed, but the working memory is being released anyway. |
Name | drop_database |
Signature | bool drop_database(int instance, string db_name) |
Description | Deletes the specified subfolder completely. |
Parameters | instance: pallet manager instance to be used db_name: name of the database, technically this is a subfolder in the working directory |
Return value | true if successful, otherwise false |
Remarks | If the specified subfolder was currently opened as the active database, a close_database is being called automatically prior to deletion. |
Name | read_table |
Signature | <type> read_table(int instance, string table_name, string key) |
Description | Reads the value specified by key in the given table. Technically the table is a json file and the key is the json attribute in the file. |
Parameters | instance: pallet manager instance to be used table_name: name of the table "file" in the currently selected subfolder key: what to read from the json structure. |
Return value | the value of the json attribute |
Remarks | Return type <type> depends on what has been read. (int, string, array, …) |
Name | write_table |
Signature | <type> write_table(int instance, string table_name, string key, <type> value) |
Description | Writes the value of a json attribute 'key' in table 'table_name'. Technically the table is a json file and the key is the json attribute in the file. |
Parameters | instance: pallet manager instance to be used table_name: name of the table "file" in the currently selected subfolder key: what to write in the json structure value: the value of the json attribute to be stored (int, string, array, …) |
Return value | same as the input parameter 'value' was |
Remarks | Return type <type> depends on what has been written. (int, string, array, …) |
Other functions
These functions are provided for general purposes.
Name | substring |
Signature | string substring(string source, int start_pos=0, int nr_characters=length) |
Description | Returns the given substring of a source string. |
Parameters | source: the source string start_pos: 0-based start position of the new string in the source string nr_characters: the length of the new string |
Return value | The newly created string. |
Name | concat |
Signature | string concat(bool/int/double/string a, bool/int/double/string b, ...) |
Description | All input values are converted to strings, and then concatenated. |
Parameters | a, b, ...: input value to be written into the resulting string. |
Return value | The newly created string. |
Remarks | The literal "\n" is replaced with the newline character 0x10, allowing the programmer to create a multi-line text. |