A small Node.js program that runs on your PC and connects this browser scene to a real Modbus TCP or Modbus RTU master such as a PLC, SCADA system, or Modbus Poll software.
Download the zip file and extract it to a folder on your PC.
Download acc-modbus-bridge.zipThe bridge requires Node.js. Download the LTS version from nodejs.org and run the installer.
install.batinstall.commandstart-modbus-bridge shortcut for youstart-modbus-bridge.bat (Windows) or
start-modbus-bridge.command (macOS)ws://127.0.0.1:8502CONNECT — the badge turns amber when linkedCoil 00001 → Y1 Arm Move X (master writes)Coil 00002 → Y2 Arm Move Y — Lower (master writes)Coil 00003 → Y3 Grip Close — Vacuum (master writes)Coil 00004 → Y4 Feed Conveyor Enable (master writes)Coil 00005 → Y5 Pallet Eject (master writes)DI 10001 → X1 Box Present (master reads)DI 10002 → X2 Arm Home X (master reads)DI 10003 → X3 Arm Home Y (Up) (master reads)DI 10004 → X4 Grip Confirm (Vacuum) (master reads)DI 10005 → X5 At Pick X (master reads)DI 10006 → X6 At Place X1 (Col 1) (master reads)DI 10007 → X7 At Place X2 (Col 2) (master reads)DI 10008 → X8 Arm Down (master reads)DI 10009 → X9 Contact Pressure (master reads)DI 10010 → X10 Skid Present (master reads)More tutorials at accautomation.ca · YouTube @ACCautomation
XY Gantry — 2-Column × 3-Row Pallet Stack
An industrial XY gantry pick-and-place system. ACC Automation branded boxes emerge from a sheet-metal cowling with strip curtains at the left end of a feed conveyor and travel to a pick position. A vacuum gripper picks each box and places it on a wooden pallet in a 2-column × 3-row pattern (6 boxes total). When the pallet is full, a chain conveyor ejects it through black strip curtains in the right wall and an empty pallet returns through the same curtains. A skid-present sensor confirms the empty pallet is seated before any new cycle is allowed to start.
| Address | Dir | Description |
|---|---|---|
| X1 | IN | Box Present — feed sensor, box at pick position |
| X2 | IN | Arm Home X |
| X3 | IN | Arm Home Y — gripper fully up |
| X4 | IN | Grip Confirm — vacuum confirmed, box attached |
| X5 | IN | At Pick X — arm aligned over conveyor pick position |
| X6 | IN | At Place X1 — arm over pallet column 1 |
| X7 | IN | At Place X2 — arm over pallet column 2 |
| X8 | IN | Arm Down — gripper at mechanical travel limit |
| X9 | IN | Contact Pressure — gripper seated on surface |
| X10 | IN | Skid Present — empty pallet seated at stop bar, safe to start new cycle |
| Y1 | OUT | Arm Move X — ON=extend toward pick/place, OFF=return home |
| Y2 | OUT | Arm Move Y — ON=lower gripper, OFF=raise |
| Y3 | OUT | Grip Close — vacuum (must use latching coil) |
| Y4 | OUT | Feed Conveyor Enable |
| Y5 | OUT | Pallet Eject — chain conveyor runs, full pallet exits through curtains, empty returns |
Use these five steps to develop your ladder program for this scene. Run standalone mode first to observe correct behaviour, then build and test your program in the ACC PLC Simulator.
ACC Automation branded boxes emerge from a production cowling with strip curtains at the left end of a feed conveyor and travel to a pick position. A gantry arm must pick each box and stack it on a pallet in a 2-column × 3-row pattern. The arm must never travel horizontally while the gripper is lowered — a collision safety interlock. Vacuum grip must be confirmed before the arm raises. When 6 boxes are placed, Y5 activates the chain conveyor: the full pallet exits through black strip curtains in the right wall, and an empty pallet returns through the same curtains and seats against a stop bar. A skid-present sensor (X10) confirms the empty pallet is seated before any new cycle is allowed to begin. If no skid is present, the machine must not run.
Ten inputs: X1=Box Present, X2=Arm Home X, X3=Arm Home Y (up), X4=Grip Confirm (vacuum), X5=At Pick X, X6=Col 1, X7=Col 2, X8=Arm Down, X9=Contact Pressure, X10=Skid Present. Five outputs: Y1=Arm X (extend/retract), Y2=Arm Y (lower/raise), Y3=Grip vacuum (must use a latching coil — mem.Y is cleared every scan so OTL/OTU is required), Y4=Feed Conveyor, Y5=Pallet Eject. The scene drives arm depth automatically from placedCount — your program only needs to command Y2 ON/OFF. X10 starts ON (pallet present), goes OFF when Y5 activates, and returns ON when the empty pallet seats at the stop bar.
Per-box cycle: (1) Run feed conveyor (Y4) until X1=ON. (2) Extend arm (Y1) — X movement only when X3=ON (arm fully up, safety interlock). (3) At pick X (X5=ON): lower gripper (Y2=ON). (4) Contact pressure (X9=ON): latch grip (Y3). (5) Vacuum confirmed (X4=ON): raise arm, wait for X3. (6) Arm moves to correct column (scene targets automatically from placedCount). (7) Lower (Y2=ON), wait for X9. (8) Unlatch grip (Y3=OFF). (9) Raise, return home (Y1=OFF). After 6 boxes: Y5=ON — chain conveyor ejects full pallet through curtains, empty pallet returns and seats. X10 goes ON when seated. Y5 holds ON for a timer period then resets. X10 must be ON before any new cycle can start.
Required internal bits: C100=Cycle Active (latch), C101=Box On Arm (latch), C103=Place Phase (latch), C110=Grip Latch (drives Y3 via OTE each scan). Add XIC X10 as an interlock on R1 (cycle start rung) — no skid, no cycle. CTU counter CT1 preset=6 counts placed boxes. When CT1/DN: Y5=ON, TON timer T1 holds the eject state (4s) while the scene animation runs, then RES CT1 resets the count and drops Y5. R1 is blocked by both CT1/DN (pallet full) and X10=OFF (no skid) until both conditions clear.
Connect the scene and press RUN. Verify the full cycle: box arrives, arm moves (only when X3=ON), gripper lowers to pick, vacuum latches, arm raises with box, moves to correct column, lowers to correct row, releases box, returns home. After 6 boxes: Y5=ON — full pallet slides right through curtains, empty pallet slides back in, X10 lights ON. Confirm new cycles are blocked while X10=OFF. Press STOP at any point — scene should reset cleanly. Use STEP mode to trace timer and counter transitions during the eject sequence.