robotic pick-and-place in simio...the system being modeled three cartoning cells, ten robots arms...
TRANSCRIPT
Robotic Pick-and-Place in
SIMIOSatish Mallya
Agenda
Company intro
Quick look
WIIFM?
Project background
The problem being solved
Why is this special?
Overview of technique
Deep dive
How it mattered
COMPANY PROFILE30 Years of Working Exclusively in the Food and Beverage Industry
DENNIS GROUP
• Complete planning, process engineering,
facility design and construction management
services exclusively to the food &
beverage industry
• Excel at providing innovative, cost effective
and high quality services to clients worldwide
• Full-service and deeply experienced in
delivering total project solutions from
conception through start-up; our staff includes
all disciplines required for single source
total project delivery
Established 1987
Project Volume $300-500 MM
Employees 400
U.S. OFFICES
Springfield, MA (HQ)
Atlanta, GA
Battle Creek, MI
Salt Lake City, UT
San Diego, CA
INTERNATIONAL LOCATIONS
São Paulo, Brazil
Toronto, Canada
Porto, Portugal (Tech4Food)
EXPERIENCE WITH FOOD PROCESSORS OF ALL SIZES
DENNIS GROUP | 4
We’ve worked for
small start-ups
and more than
half of the top 100
food companies
Public Companies Private Companies
DGL Modeling
Dedicated modeling group
Industrial and Mechanical Engineers
New process lines
New packaging lines
Modifications to existing process and packaging lines
~70% SIMIO
~60% independent projects, ~40% project support
Video
Why is this special?
Pick-and-place has always been a bit tricky in SIMIO
Allows ‘picking’ from one conveyor to another –mid-conveyor!
Looks good
Very flexible – one process controls many similarly configured robots
Small modifications can allow wildly varied applications
Simple-ish to implement
What’s in it for me? Immediately useful technique – make
some robots yourself!
Keeps accurate track of robot states
Allows for ‘picking’ from many moving
conveyors to many moving conveyors
Event-driven – not very computationally
expensive
Data-table configurable
Project Background Food bar production and packaging facility
Multiple types of bars are produced on three lines
Bars are wrapped on four individual wrappers
Wrapped bars are fed to cartoners
One group of cartoning robots per line (multiple lines)
Lines can operate independently
Lines can operate in tandem to pack different types of
bars into variety packs
The system being modeled Three cartoning cells, ten robots arms each
Each cartoning cell has five robots on each side of the product
belt
Product belt is five ‘lanes’ wide
Robots may reach across belt (scenario to be accommodated)
Picked product is placed in cartons moving in the opposite
direction
Cartons must be filled to target before exiting cartoning cell
Similar robot cell
The system being modeled -
challenges
Individual product belt lanes may fail (wrapper
failure)
In Multi-flavor Pack mode, this can slow or stop
carton belt
Arm fill targets can shift workload
Overflow is possible (i.e. unpicked bar)
Easier to model individual arms than guess at
these effects
Complete cartoning cell
Video
Common Process
Configuration Data Table (generated in
Excel)
Configure Token to distinguish robots
Read into Token based on Robot
The Linchpin expression
CartonerToken.ConveyorInHand.Co
ntents.ItemAtIndex(CartonerToken
.Looper[2]).ModelEntity.PickedToken for this
instance of
RobotControl
Object state
variable of token
for currently
considered
conveyor
Conveyor’s array property
with ModelEntities
Indexing into the
arrayWith this index variable
array
At this indexFor an object of
type ModelEntityAnd look at its
‘Picked’ variable
Deep look (pick an input conveyor, or idle)
Wait for
inbuilt events
DesynchronizeConveyor IndexExhausted
candidates?
Object IndexMax.
Numbertravelers
Conveyor object
to token variable
This particular
conveyor has
travelers?
Object at
current index
set to
‘Pickable’?
Deep Look (Pick a bar)
Increment
object index
Check to see if we
exceeded objects on
conveyor
Next Conveyor
Mark object pickedChange object pictureSet process timeStart associated sourceWait for
source
node exit
Stop SourceWait for server exit
Target indexDon’t worry about this
Or any of this stuff
Check for target conveyor
numbertravelers
Check fill level
(target
modelentity
state variable)
Increment target index
Wait for associated node
entry (Inbuilt event)
Increment target
modelentity state variable
Fire an event so blocking
nodes reevaluate
How it mattered
Experiment with filling philosophy
Observe lane balancing between cells
Stuttering effects between lines (uneven fill times)
Accurate runoff
Confidence
Capability to do it again, rapidly
Feedback
Questions?
Comments?
Thank you!