In industrial automation, traditional fixed-position robotics is rapidly giving way to vision-guided systems. When dealing with variable product geometries or random conveyor alignment, sending real-time offset coordinates from a vision system to an industrial PLC or robot controller is essential.
Below is an overview of the communication architecture and a Python implementation simulating a vision server processing coordinates and streaming them to a PLC/robot via Socket TCP/IP.
System Architecture
The control loop relies on three main layers working synchronously within the cell's Takt Time:
- Vision Acquisition Layer: High-speed camera captures the part and calculates spatial coordinates $(X, Y, Z, \theta)$.
- Industrial Gateway / PLC: Validates safety interlocks, parses the vision datagram, and updates the motion registers.
- Robot Controller (FANUC / KUKA / UR): Executes kinematic trajectory adjustments based on offset data.
text
+------------------------+ TCP/IP / Profinet +-----------------------+
| Vision System (2D/3D) | --------------------------> | Industrial PLC (Control|
| (Calculates X,Y,Z,θ) | | & Safety Logic) |
+------------------------+ +-----------------------+
|
| EtherNet/IP
v
+-----------------------+
| Robot Controller |
| (Kinematic Execution)|
+-----------------------+
Python Implementation: Industrial Vision Coordinate Server
This script demonstrates how a vision processing module packs spatial offsets into binary structs and dispatches them over TCP sockets to an industrial automation controller:
import socket
import struct
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class VisionCoordinateServer:
def __init__(self, host: str = '192.168.1.100', port: int = 5000):
self.host = host
self.port = port
def pack_coordinates(self, x: float, y: float, z: float, angle: float) -> bytes:
"""
Packs 4 float values (x, y, z, angle) into a 16-byte Big-Endian binary buffer
standard for PLC memory registers.
"""
return struct.pack('!ffff', x, y, z, angle)
def send_offsets(self, x: float, y: float, z: float, angle: float):
payload = self.pack_coordinates(x, y, z, angle)
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
client_socket.settimeout(2.0)
client_socket.connect((self.host, self.port))
client_socket.sendall(payload)
logging.info(f"Successfully sent offsets -> X:{x:.2f}, Y:{y:.2f}, Z:{z:.2f}, Angle:{angle:.2f}")
except Exception as e:
logging.error(f"Failed to communicate with PLC controller: {e}")
if __name__ == '__main__':
# Simulated inspection result from vision pipeline
vision_server = VisionCoordinateServer(host='127.0.0.1', port=5000)
vision_server.send_offsets(x=124.50, y=-45.20, z=12.10, angle=8.75)
Real-World Engineering Considerations
Lighting Normalization: Using narrow-band LED strobe lighting paired with bandpass optical filters eliminates ambient factory lighting noise.
Deterministic Latency: High-speed Pick & Place operations require real-time fieldbus protocol integration (Profinet IRT or EtherCAT) rather than standard TCP sockets to keep latency below 2ms.
Implementing these high-performance robotic cells requires a multidisciplinary engineering approach. Specialized integrators such as ASP Robotics design custom industrial automation solutions, seamlessly combining PLC logic, machine vision, and custom robotic kinematics for modern smart factories.













