The HBW (High-Bay Warehouse) is a storage system that stores and retrieves workpieces. It has multiple storage positions organized in a grid and uses an automated retrieval system.
Module Type: HBW
Serial Number: Cleaned variant of the SPS serial number
Storage Capacity: Typically 9 positions (3x3 grid)
| Command | Purpose | Metadata | Duration |
|---|---|---|---|
PICK |
Store workpiece from AGV into warehouse | StoreMetadata (type, workpieceId) |
~10-15 seconds |
DROP |
Retrieve workpiece from warehouse to AGV | None | ~10-15 seconds |
PICK= Store (take from AGV, put in warehouse)DROP= Retrieve (take from warehouse, put on AGV)
| Action | Purpose | Metadata | Description |
|---|---|---|---|
factsheetRequest |
Request module info | None | Triggers publication of factsheet message |
reset |
Reset module | None | Return module to initial state |
SET_STORAGE |
Update storage contents | contents map |
Manually set inventory state (e.g. after intervention) |
startCalibration |
Enter calibration mode | None | Switch operating mode to TEACHIN |
stopCalibration |
Exit calibration mode | None | Switch operating mode to AUTOMATIC |
setCalibrationValues |
Update calibration | Calibration data | Update internal position values |
Standard module topics:
- Subscribe:
module/v1/ff/<serial>/order,module/v1/ff/<serial>/instantAction - Publish:
module/v1/ff/<serial>/state,module/v1/ff/<serial>/connection,module/v1/ff/<serial>/factsheet
Command:
{
"timestamp": "2024-12-08T10:00:00.000Z",
"serialNumber": "HBW001",
"orderId": "order-store-123",
"orderUpdateId": 1,
"action": {
"id": "pick-action-abc",
"command": "PICK",
"metadata": {
"type": "BLUE",
"workpieceId": "wp-67890"
}
}
}Behavior:
- System identifies free storage position
- Picks workpiece from AGV
- Transports workpiece to storage position
- Stores workpiece in identified slot
- Updates internal storage map
State Response (Finished):
{
"headerId": 25,
"timestamp": "2024-12-08T10:00:12.000Z",
"serialNumber": "HBW001",
"type": "HBW",
"orderId": "order-store-123",
"orderUpdateId": 1,
"paused": false,
"actionState": {
"id": "pick-action-abc",
"timestamp": "2024-12-08T10:00:12.000Z",
"state": "FINISHED",
"command": "PICK"
},
"errors": [],
"loads": [
{
"loadType": "BLUE",
"loadPosition": "2-1",
"loadId": "wp-67890"
}
]
}The loadPosition indicates storage location (e.g., "2-1" = column 2, row 1).
Command:
{
"timestamp": "2024-12-08T10:30:00.000Z",
"serialNumber": "HBW001",
"orderId": "order-retrieve-456",
"orderUpdateId": 1,
"action": {
"id": "drop-action-def",
"command": "DROP"
}
}Behavior:
- System locates requested workpiece type
- Retrieves workpiece from storage position
- Transports to AGV interface
- Places on AGV loading bay
- Updates internal storage map
State Response (Finished):
{
"headerId": 30,
"timestamp": "2024-12-08T10:30:14.000Z",
"serialNumber": "HBW001",
"type": "HBW",
"orderId": "order-retrieve-456",
"orderUpdateId": 1,
"paused": false,
"actionState": {
"id": "drop-action-def",
"timestamp": "2024-12-08T10:30:14.000Z",
"state": "FINISHED",
"command": "DROP"
},
"errors": [],
"loads": []
}Storage positions follow the format: <column>-<row>
Example 3x3 grid:
1-3 2-3 3-3 (Top row)
1-2 2-2 3-2 (Middle row)
1-1 2-1 3-1 (Bottom row)
To manually configure storage contents (e.g., after manual intervention or system reset):
Instant Action:
{
"serialNumber": "HBW001",
"timestamp": "2024-12-08T09:00:00.000Z",
"actions": [
{
"actionType": "SET_STORAGE",
"actionId": "set-storage-123",
"metadata": {
"contents": {
"1-1": {
"type": "WHITE",
"workpieceId": "wp-111"
},
"2-1": {
"type": "BLUE",
"workpieceId": "wp-222"
},
"3-1": {
"type": "RED",
"workpieceId": "wp-333"
}
}
}
}
]
}Empty positions can be omitted or explicitly set to {}.
The HBW consists of:
- X-Axis: Horizontal movement (columns)
- Y-Axis: Vertical movement (rows)
- RBG (Regalbediengerät): Storage/retrieval unit with gripper
- Encoders: Position tracking for X and Y axes
- Light Barriers: Workpiece detection
Inputs:
- Y-axis reference switch
- X-axis encoder (A/B)
- Y-axis encoder (A/B)
- Gripper front light barrier
- Gripper rear light barrier
Outputs:
- X-axis motor (to storage rack)
- X-axis motor (to conveyor)
- Y-axis motor (down)
- Y-axis motor (up)
- Gripper motor (extend)
- Gripper motor (retract)
- PWM signals (X-axis, Y-axis, Gripper)
The HBW requires precise calibration of:
- X-axis Positions: Exact encoder values for each column
- Y-axis Positions: Exact encoder values for each row
- Gripper Positions: Extend/retract distances
- Timing Parameters: Movement speeds
See Calibration Documentation for procedures.
PICK_ERROR- Failed to store workpiece (storage full, position error, gripper fault)DROP_ERROR- Failed to retrieve workpiece (no workpiece in requested position, gripper fault)- Storage full errors are reported via error messages
The CCU tracks HBW storage state via:
- Topic:
ccu/state/stock - Contents: All workpieces in storage with positions
Example:
{
"ts": "2024-12-08T10:00:00.000Z",
"stockItems": [
{
"workpiece": {
"id": "wp-111",
"type": "WHITE",
"state": "RAW"
},
"location": "HBW",
"hbw": "1-1"
},
{
"workpiece": {
"id": "wp-222",
"type": "BLUE",
"state": "RAW"
},
"location": "HBW",
"hbw": "2-1"
}
]
}- PICK = Store into warehouse (take from AGV)
- DROP = Retrieve from warehouse (give to AGV)
- CCU implements FIFO (First In, First Out) by default
- Alternative strategies can be configured
- System must handle "no workpiece available" scenarios
- Orders may be delayed waiting for retrieval
| Variable Name | Description | Type |
|---|---|---|
model |
Model name | STRING |
stat__busy |
Status: System in use | BOOL |
stat__pickActive |
Status: Pick process active | BOOL |
stat__pickFinished |
Status: Pick process finished | BOOL |
cmd__pick |
Command: Pick operation | BOOL |
cmd__pickTargetRack |
Target rack for pick operation | STRING |
stat__dropActive |
Status: Drop process active | BOOL |
stat__dropFinished |
Status: Drop process finished | BOOL |
cmd__dropTargetRack |
Target rack for drop operation | STRING |
cmd__drop |
Command: Drop operation | BOOL |
stat__calibActive |
Status: Calibration active | BOOL |
cmd__calibrate |
Command: Calibrate | BOOL |
cmd__movePosX |
Target position in X direction for move, only during calibration | DINT |
cmd__movePosY |
Target position in Y direction for move, only during calibration | DINT |
cmd__movePosRot |
Target position in rotational direction for move, only during calibration | DINT |
cmd__default |
Command: Reset to default values | BOOL |
stat__defaultFinished |
Status: Reset to default values finished | BOOL |
cmd__move |
Command: Move operation | BOOL |
stat__moveFinished |
Status: Move operation finished | BOOL |
cmd__endCal |
Command: End calibration | BOOL |
stat__endCalFinished |
Status: Calibration ended | BOOL |
rack__A1_workpieceId |
Workpiece ID at position A1 in rack (Same for A2-C3) | STRING |
rack__A1_occupied |
Status: Position A1 in rack occupied (Same for A2-C3) | BOOL |
rack__A1_type |
Type of position A1 in rack (Same for A2-C3) | STRING |
cal__row1 |
Calibration value for row 1 | DINT |
cal__row2 |
Calibration value for row 2 | DINT |
cal__row3 |
Calibration value for row 3 | DINT |
cal__rackOffset |
Calibration value for rack offset | DINT |
cal__colA |
Calibration value for column A | DINT |
cal__colB |
Calibration value for column B | DINT |
cal__colC |
Calibration value for column C | DINT |
cal__rampPositionX |
Calibration value for ramp position in X | DINT |
cal__rampPositionY |
Calibration value for ramp position in Y | DINT |
cal__rampPositionRot |
Calibration value for ramp position in rotational direction | DINT |
cal__rampPositionRotCheck |
Calibration value for rotational check position of ramp in rotational direction | DINT |
cal__rampOffset |
Calibration value for ramp offset | DINT |
cal__AGVPositionRot |
Calibration value of FTS rotation | DINT |
cal__upperLimitX |
Calibration upper limit for X | DINT |
cal__lowerLimitX |
Calibration lower limit for X | DINT |
cal__upperLimitY |
Calibration upper limit for Y | DINT |
cal__lowerLimitY |
Calibration lower limit for Y | DINT |
cal__upperLimitRot |
Calibration upper limit for rotational direction | DINT |
cal__lowerLimitRot |
Calibration lower limit for rotational direction | DINT |
cal__timeProcessEnd |
Calibration time at process end | TIME |
stat__referencedRotationalAxis |
Status: Rotational axis referenced | BOOL |
stat__referencedXAxis |
Status: X-axis referenced | BOOL |
stat__referencedYAxis |
Status: Y-axis referenced | BOOL |
cal__timeGripperValveOpen |
Time for opening the gripper valve | TIME |
cal__timeGripperValveClose |
Time for closing the gripper valve | TIME |
cal__timeCompressor |
Time for the compressor | TIME |
cmd__park |
Command: Park operation | BOOL |
cal__parkPositionX |
Park position in X direction for calibration | DINT |
cal__parkPositionY |
Park position in Y direction for calibration | DINT |
cal__parkPositionRot |
Park position for rotation in calibration | DINT |
stat__parkActive |
Status: Park operation active | BOOL |
rack__A1_ts |
Timestamp for position A1 in rack (Same for A2-C3) | STRING |
cal__defRowA |
Default value for row A | DINT |
cal__defRowB |
Default value for row B | DINT |
cal__defRowC |
Default value for row C | DINT |
cal__defOffset |
Default value for offset | DINT |
cal__defParkPositionX |
Default park position in X direction | DINT |
cal__defParkPositionY |
Default park position in Y direction | DINT |
cal__defParkPositionRot |
Default park position for rotation | DINT |
cal__defCol1 |
Default value for column 1 | DINT |
cal__defCol2 |
Default value for column 2 | DINT |
cal__defCol3 |
Default value for column 3 | DINT |
cal__defRampPositionX |
Default value for ramp position in X | DINT |
cal__defRampPositionY |
Default value for ramp position in Y | DINT |
cal__defRampPositionRot |
Default value for ramp position in rotational direction | DINT |
cal__defRampPositionRotCheck |
Default value for rotational check position of ramp in rotational direction | DINT |
cal__defRampOffset |
Default value for ramp offset | DINT |
cal__defAGVPositionRot |
Default value of FTS rotation | DINT |
cal__defUpperLimitX |
Default upper limit for X | DINT |
cal__defLowerLimitX |
Default lower limit for X | DINT |
cal__defUpperLimitY |
Default upper limit for Y | DINT |
cal__defLowerLimitY |
Default lower limit for Y | DINT |
cal__defUpperLimitRot |
Default upper limit for rotational direction | DINT |
cal__defLowerLimitRot |
Default lower limit for rotational direction | DINT |
cal__defTimeProcessEnd |
Default time at process end | TIME |
cal__defTimeGripperValveOpen |
Default time for opening the gripper valve | TIME |
cal__defTimeGripperValveClose |
Default time for closing the gripper valve | TIME |
cal__defTimeCompressor |
Default time for the compressor | TIME |