Stacker Crane upgrade discussion

@brunovgr

Also, we’d love to get your input on the control of the stacker crane. What are your ideas? What would make it feel more realistic or practical from a PLC programming perspective? Your feedback would be very valuable at this stage.

The 0-10 V signal for these types of applications is awkward, because you run head on into floating point errors, measurement resolution (quantization) errors and measurement noise problems, so you’d be unable to accurately position an axis once a certain distance has been reached.

For example, if we take a stacker crane with an axis length of 100m, and you want to position it with an accuracy of 1 mm, you’d have to partition the 10V signal into 100’000 increments. This will result in a step size of 0.1 mV. With a standard 16 bit AI card you’d usually have 15 bits of resultion (1 bit for positive/negative), so you could only partition your 0-10V range into 31’768 steps, or 0.3 mV. Already you are unable to position your axis to a precision of 1 mm. Add noise and other transmission problems with analog signals to the mix, and a precise, repeatable positioning of an axis would be quite hard to do. The stacker crane in Factory I/O only has a movement distance of 10m, which would result in a 1 mV step size. But here we run into another resolution problem. We have no way of representing an exact 1 mV step using a 15 bit signal range. The closest we could get it to it is 0.91 mV or 1.22 mV. Your average quantization error would be 0.15 mV if I’m not mistaken.

What is usually done is that you would use a Bus for both the position or speed setpoint and then for the position feedback. There’s two different typical setups here:

  1. Drives with integrated positioning system
  2. Drives without integrated positioning system but with speed control

The first setup is the state of the art for applications like this I’d say. You use a Bus to tell the drive the desired target position and some additional parameters and then start the positioning, and the drive positions to the desired target position and then gives you a feedback once it has reached the position. Usually the drive also gives you the current position of the axis directly as a converted signal, like for example as an Integer representing Millimeters or tenths of Millimeters.
The second setup is a little older I’d say, where you have a drive where you can only tell it the target speed and desired ramp and then you’d have a separate position measurement system that tells you the current measured position via a Bus. You would then use the PLC to control the speed of the drive to reach the desired position. But here too you would, for example tell the drive the speed in rpm directly as an integer, and you would get the position as an integer representing, for example, millimeters.

Edit:
So for a concrete example for what I would have in mind, take the stacker crane as an example. For me these would be a minimum configs that makes sense with the current, fixed system in regards to which signals are offered by what:

Tag Controller I/O Type Description
X Target Position Output UInt32 Target position in mm along X-Axis (Horizontal Axis)
Y Target Position Output UInt32 Target position in mm along Y-Axis (Vertical Axis)
Z Target Position Output Int32 Target position in mm along Z-Axis (Fork)
X Current Position Input UInt32 Current position in mm along X-Axis (Horizontal Axis)
Y Current Position Input UInt32 Current position in mm along Y-Axis (Vertical Axis)
Z Current Position Input Int32 Current position in mm along Z-Axis (Fork)
X Axis in Position Input Bool X-Axis has reached target position
Y Axis in Position Input Bool Y-Axis has reached target position
Z Axis in Position Input Bool Z-Axis has reached target position
X Front Limit Input Bool NC, Crane at front limit (Safety)
X Rear Limit Input Bool NC, Crane at back limit (Safety)
Y Upper Limit Input Bool NC, Crane at upper limit (Safety)
Y Lower Limit Input Bool NC, Crane at lower limit (Safety)
Z Left Limit Input Bool NC, Fork at left limit (Safety)
Z Middle Positon Input Bool NC, Fork in middle position (Safety)
Z Right Limit Input Bool NC, Fork at right limit (Safety)
Fork Left Obstructed Input Bool Pallet or obstacle to in left direction of Fork
Fork Right Obstructed Input Bool Pallet or obstacle to in right direction of Fork
Fork Loaded Input Bool Load on Fork

Or, alternatively:

Tag Controller I/O Type Description
X Speed Setpoint Output Int32 Target speed in mm/s along X-Axis (Horizontal Axis)
Y Speed Setpoint Output Int32 Target speed in mm/s along Y-Axis (Vertical Axis)
Z Speed Setpoint Output Int32 Target speed in mm/s along Z-Axis (Fork)
X Maximum Acceleration Output UInt32 Maximum acceleration in mm/s² for X-Axis (Horizontal Axis)
Y Maximum Acceleration Output UInt32 Maximum acceleration in mm/s² for Y-Axis (Vertical Axis)
Z Maximum Acceleration Output UInt32 Maximum acceleration in mm/s² for Z-Axis (Fork)
X Current Position Input UInt32 Current position in mm along X-Axis (Horizontal Axis)
Y Current Position Input UInt32 Current position in mm along Y-Axis (Vertical Axis)
Z Current Position Input Int32 Current position in mm along Z-Axis (Fork)
X Axis Moving Input Bool X-Axis is moving (Actual speed not zero)
Y Axis Moving Input Bool Y-Axis is moving (Actual speed not zero)
Z Axis Moving Input Bool Z-Axis is moving (Actual speed not zero)
X Front Limit Input Bool NC, Crane at front limit (Safety)
X Rear Limit Input Bool NC, Crane at back limit (Safety)
Y Upper Limit Input Bool NC, Crane at upper limit (Safety)
Y Lower Limit Input Bool NC, Crane at lower limit (Safety)
Z Left Limit Input Bool NC, Fork at left limit (Safety)
Z Middle Positon Input Bool NC, Fork in middle position (Safety)
Z Right Limit Input Bool NC, Fork at right limit (Safety)
Fork Left Obstructed Input Bool Pallet or obstacle to in left direction of Fork
Fork Right Obstructed Input Bool Pallet or obstacle to in right direction of Fork
Fork Loaded Input Bool Load on Fork

I don’t know how this new assembly system will look like, but if it is what I think it is, then the all the Bool signals would come from actual sensors we put on things, rather than from the crane station itself.