Реалізація перегляду SCADA-даних у мобільному IoT-додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація перегляду SCADA-даних у мобільному IoT-додатку
Складний
~1-2 тижні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація перегляду SCADA-даних у мобільних IoT-додатках

SCADA-система — Supervisory Control and Data Acquisition — працює на стаціонарних робочих станціях оператора. WinCC, Ignition, InduSoft, Aveva — кожна має свій формат даних, власний API та історію сумісності. Мобільний додаток для перегляду SCADA-даних — це не заміна стаціонарному клієнту, а «друга пара очей» для майстра змін, який ходить цехом. Завдання: актуальні дані тегів, тренди, алерти — без прав керування.

OPC UA: універсальний шлях до SCADA-даних

Більшість сучасних SCADA-систем підтримують OPC UA сервер. Це стандартний шлях отримати дані без патентованих API. Мобільний додаток підключається до OPC UA сервера через TCP або WebSocket (OPC UA over WebSocket, UA Binary транспорт).

Для Android/Kotlin — використовуйте Eclipse Milo через JVM-шар або Eclipse4J. Для Flutter — офіційної бібліотеки OPC UA немає, використовуйте Platform Channels до нативного клієнта або REST-шлюз:

// Android, Eclipse Milo OPC UA Client
val client = OpcUaClient.create(
    "opc.tcp://scada-server.factory.local:4840",
    endpointFilter = { endpoints ->
        endpoints.filter { it.securityMode == MessageSecurityMode.SignAndEncrypt }
                 .minByOrNull { it.securityPolicyUri }
    },
    configConsumer = { configBuilder ->
        configBuilder.setIdentityProvider(
            UsernameProvider("operator", "password")
        )
        configBuilder.setRequestTimeout(UInteger.valueOf(5000))
    }
)

client.connect().get()

// Читання тегів за NodeId
val nodeId = NodeId(2, "Furnace1.Temperature")
val dataValue = client.readValue(0.0, TimestampsToReturn.Both, nodeId).get()
val temperature = (dataValue.value.value as Float).toDouble()
val serverTimestamp = dataValue.serverTime

Для моніторингу сотень тегів одночасно — використовуйте OPC UA Subscription замість polling:

val subscription = client.subscriptionManager
    .createSubscription(1000.0)  // publishing interval 1000ms
    .get()

val monitoredItems = nodeIds.map { nodeId ->
    MonitoredItemCreateRequest(
        ReadValueId(nodeId, AttributeId.Value.uid(), null, null),
        MonitoringMode.Reporting,
        MonitoringParameters(
            UInteger.valueOf(clientHandleCounter++),
            500.0,  // sampling interval
            null,
            UInteger.valueOf(10),  // queue size
            true
        )
    )
}

subscription.createMonitoredItems(
    TimestampsToReturn.Both,
    monitoredItems,
    { item, value -> handleTagUpdate(item.readValueId.nodeId, value) }
).get()

Ignition SCADA: REST API та WebDev модуль

Ignition (Inductive Automation) популярна на нових виробництвах. У ній є WebDev модуль, який дозволяє створювати REST endpoints прямо з Ignition Python scripts. Більш сучасний підхід — Ignition Perspective з WebSocket API для мобільних клієнтів.

Для прямого REST доступу до тегів через Ignition Gateway REST API:

GET https://ignition.factory.com/system/webdev/api/tags?tagPaths=
    Furnaces/Furnace1/Temperature,
    Furnaces/Furnace1/Pressure
Authorization: Bearer {token}

Ignition повертає значення тегів з якістю (Good, Bad, Uncertain) та временною міткою. Якість — важливий параметр: якщо датчик втратив зв'язок, значення може бути застарілим з якістю = Bad, а UI повинна це показати.

WinCC REST API через OpenPCS

WinCC (Siemens) — через REST API OpenPCS або WinCC OA WebClient. Siemens TIA Portal V18+ підтримує WinCC Unified, який має власний WebSocket API через nginx-прокси.

Для старого WinCC Classic — тільки OPC DA (DCOM) або OPC UA з встановленням шлюзу Matrikon/Kepware на сервері SCADA.

Тренди: запит історичних даних

SCADA зберігає історію тегів у вбудованій БД (Ignition — MySQL/MSSQL, WinCC — SIMATIC historian). Запит через OPC UA Historical Data Access (HDA):

val historyReadRequest = HistoryReadValueId(
    nodeId = NodeId(2, "Furnace1.Temperature"),
    indexRange = null,
    dataEncoding = null
)

val readDetails = ReadRawModifiedDetails(
    isReadModified = false,
    startTime = startDateTime.toOpcDateTime(),
    endTime = endDateTime.toOpcDateTime(),
    numValuesPerNode = UInteger.valueOf(500),
    isReturnBounds = true
)

val historyData = client.historyRead(
    readDetails,
    TimestampsToReturn.Source,
    false,
    listOf(historyReadRequest)
).get()

Для відображення трендів у Flutter — fl_chart з LineChart. При 500+ точках використовуйте showingTooltipIndicators тільки для вибраного діапазону, інакше діаграма гальмує при скролінгу.

Безпека та контроль доступу

SCADA-дані — чутлива інформація. Кілька обов'язкових заходів:

  • Мобільний додаток ніколи не повинен мати прямий доступ до OPC UA сервера з інтернету. Доступ тільки через VPN або reverse proxy з mTLS.
  • Авторизація через корпоративний IdP (Active Directory / LDAP).
  • Тільки читання: роль «mobile viewer» без прав на запис тегів.
  • Журнали сесії: хто читав які теги і коли.

Розробка мобільного SCADA-переглядача з OPC UA та історичними трендами: 4-6 тижнів для однієї платформи. Підтримка кількох SCADA-систем одночасно та складні дашборди з real-time графіками: 2-3 місяці. Вартість розраховується індивідуально.