Developing Mobile App for Manufacturing Execution (MES)
MES systems manage manufacturing real time: job control, output tracking, quality, equipment downtime. Paper route sheets and Excel reports — familiar work method breaking at first traceability requirement or ERP integration. Mobile app here — shop floor data point: worker scans job, marks completed operations, logs defects.
Manufacturing Environment Specifics
Shop floor — not office. Devices must work in gloves (need stylus or large touch zones), with vibration, industrial Wi-Fi noise from frequency converters. Screens readable in bright light or dark zones. All these affect device choice.
Heavy industry — rugged terminals: Panasonic Toughbook FZ-T1, Zebra MC9300, Honeywell CT40. Android 8+, support DataWedge, RFID, NFC. Light production — regular phones/tablets in protective cases.
MES and ERP Integration: Where Thin
Most industrial MES (SAP ME, Siemens Opcenter, Wonderware) provide OData or REST API. But SAP ME pre-15.x via SOAP — XML mapping needed. Retrofit with SimpleXml converter handles it, but SAP ME WSDL schemas large: wsdl2java autogeneration saves time.
Production job sync — pull model with caching. Worker gets job list for shift on login, works offline. Critical events (operation start, stop, defect log) — immediately to queue via WorkManager:
val syncRequest = OneTimeWorkRequestBuilder<OperationSyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 15, TimeUnit.SECONDS)
.build()
WorkManager.getInstance(context).enqueueUniqueWork(
"operation_sync_${operationId}",
ExistingWorkPolicy.KEEP,
syncRequest
)
KEEP policy important: if network lost and worker hit "complete" twice — queue should have only one sync task for operation.
Output Tracking and Component Serialization
Parts, assemblies, finished product scanning — central function. Each item has unique QR or DataMatrix with serial. Assembly: worker scans component → system checks it fits operation → allows continue or blocks with reason.
This Component Traceability. App-level implementation — MES API query with serial_number + work_order_id + operation_id. Response: "allowed" / "wrong component" / "already used". Last case important: catches duplicate scan from error and prevents duplication in tracking.
Quality Control and Defect Logging
Defect log form — not just "quantity" field. Need defect code picker from classifier (GOST or internal), photo of defect attachment, damage location on part.
Photo on Android: CameraX ImageCapture, compress via Bitmap.compress(JPEG, 70) before sending — 50MP camera photos unsuitable. Location annotation — Canvas over ImageView saving tap coordinates as percent of image size (not pixels — they change on resize).
Equipment Monitoring via OPC UA
If MES integrated with SCADA via OPC UA, mobile app shows equipment parameters real time: RPM, temperature, vibration. Prosys OPC UA SDK for Android — commercial library with good docs. MonitoredItem subscription with 1000ms sampling sufficient for production dashboard.
OPC UA without SDK — Eclipse Milo via JVM, but Android needs caution with thread management and app size.
Role-Based Access
Manufacturing roles fundamental: worker sees only his jobs, master — his section jobs, engineer — all operations with norm edit. Spatie Permissions on Laravel backend, JWT token with role claims. Mobile — permission check before screen render, also forced server check on each request.
Timeline
Basic MES app (jobs, operations, defects, sync): 8–12 weeks. Full cycle with OPC UA, component traceability, defect photo-logging, BI integration: 4–7 months. Cost calculated individually after analyzing integration scheme.







