top of page

Silnik integracji automatyki przemysłowej

Bezproblemowo łącz się z PLC, czujnikami i różnymi urządzeniami. Odczytuj i zapisuj dane, konstruuj algorytmy sterowania lub przetwarzaj dane dla systemów SCADA, MES i innych.

InDriver pełni funkcję przemysłowej pompy danych, dostarczając w czasie rzeczywistym niezawodne dane z różnych urządzeń, gotowe do integracji z systemami SCADA, MES, pulpitami nawigacyjnymi, systemami raportowania i innymi.

Schemat komunikacji przemysłowej

InDriver sprawnie przekształca różne typy danych automatyki przemysłowej w wygodne obiekty JSON, umożliwiając ich płynne rejestrowanie w bazie danych SQL. Ta integracja płynnie łączy sprzęt automatyki z systemami IT.

Urządzenia automatyki przemysłowej komunikują się i generują cenne gigabajty danych . InDriver, po zainstalowaniu na komputerach przemysłowych , Edge , HMI i SCADA, może bezproblemowo uruchamiać zadania komunikacyjne, algorytmy przetwarzania danych, rejestrowanie danych w bazie danych, alarmowanie, a nawet operacje kontrolne. Dzięki prostemu skryptowi JS użytkownicy mają nieograniczone możliwości kodowania precyzyjnego pozyskiwania danych zsynchronizowanego z zegarem lub zdarzeniami przychodzącymi, odczytywania wielu źródeł danych jednocześnie oraz wykonywania obliczeń , agregacji , interpolacji i prognozowania — wszystko to spełnia oczekiwania nowoczesnej automatyki przemysłowej .

Wyróżniając się spośród istniejących narzędzi komunikacji urządzeń, takich jak serwery OPC , platformy IoT , historians , rejestratory alarmów i sterowniki zbudowane w systemie SCADA , InDriver wyróżnia się jako lekkie , przyjazne dla użytkownika i wyjątkowo elastyczne rozwiązanie. Dzięki kodowaniu JS oferuje wielofunkcyjność , skalowalność , nowoczesne funkcje i konkurencyjne ceny , dzięki czemu nadaje się zarówno dla inżynierów automatyki, jak i programistów .

Rozproszone architektury w systemach automatyki przemysłowej

- Zwiększanie łączności i wydajności

Rozproszona architektura InDriver umożliwia wykorzystanie komputerów przemysłowych (edge) umieszczonych w bliskim sąsiedztwie podłączonych urządzeń. InDrivers może być łatwo i zdalnie konfigurowany przez InStudio przez inżynierów danych, zapewniając płynne rozwiązanie wszelkich wyzwań integracyjnych.

Rozproszone architektury w systemach automatyki przemysłowej

Systemy rozproszone z redundancją

InDriver System został zaprojektowany jako rozproszony system z redundancją. Wiele instancji InDriver może być zainstalowanych na różnych komputerach/serwerach, łącząc się z wieloma serwerami SQL (InServer). Te komponenty mogą być konfigurowane i monitorowane zbiorczo za pośrednictwem jednego InStudio. Ta architektura otwiera szerokie możliwości projektowania skalowalnych i odpornych na awarie systemów, zarządzanych ze scentralizowanej lokalizacji.

InStudio InDriver InDriver InDriver InServer InServer

Interfejsy API komunikacyjne:

Wzmocnienie łączności przemysłowej i IoT w InDriver

ModbusAPI, RestApi, SerialPortApi, SocketApi, FileApi
ModbusAPI

ModbusAPI to potężne narzędzie w InDriver, które ułatwia komunikację Modbus TCP lub RTU . To API umożliwia deweloperom bezproblemową integrację i komunikację z urządzeniami przy użyciu powszechnie przyjętego protokołu Modbus. Niezależnie od tego, czy chodzi o automatyzację przemysłową, czy aplikacje IoT, ModbusAPI upraszcza implementację komunikacji Modbus w celu wydajnej wymiany danych.

RestAPI

The RestApi in InDriver streamlines communication through REST protocols, empowering developers to seamlessly integrate and exchange data with various systems. Ideal for industrial automation, IoT applications, and web-based scenarios, the RestApi simplifies the implementation of RESTful communication, providing a powerful tool for efficient data exchange in diverse applications.

Integracja logiki Modbus Moxa IO i aktualizacji pogody REST API z rejestrowaniem w bazie danych SQL.

Dodaj nowe zadanie i skopiuj i wklej funkcje onStartup i onHook załączone poniżej.

  • przy uruchomieniu

InDriver.import( "RestApi" );

InDriver.import(" ModbusApi ");

RestApi.defineRequest( 'Kraków' , '{"url":"https://api.openweathermap.org/data/2.5/weather?appid= your_app_id &q= kraków ","timeout":5000, "type":"get","headers":{"ContentTypeHeader":"application/json"}}' );

Modbus.connectDevice(' IOLogic ', '{"tryb" : "TCP", "adressieci" : "192.168.0.22"}' );

InDriver.installHook( 60000 );

W skrypcie OnStartup zaimportuj dedykowane API InDriver — RestApi i ModbusApi. Skonfiguruj żądanie danych pogodowych i połączenia Moxa oraz zainstaluj haki 60 000 ms. Ta konfiguracja uruchamia wykonywanie skryptu OnHook co pełną minutę, zsynchronizowane z zegarem

 

  • onHook
     

RestApi.begin();

ModbusApi.begin();

RestApi.sendRequest('Krakow');

ModbusApi.readDevice('IOLogic','{"name": "coils1", "type": "COILS", "address":1, "size":8}');

ModbusApi.commit();

RestApi.commit();

Modbus.wait();

RestApi.wait();

if (RestApi.isSucceeded() && ModbusApi.isSucceeded()) {

          const weatherData = RestApi.getData('krakow');

          const modbusData = ModbusApi.getAllData();

          ...

          let ts = InDriver.hookTs();

InDriver.sqlExecute("azureserver", "insert into public.weather (source, ts, data )
values ( 'krakow','"
+ts.toISOString()+"',$$"+weatherData+"$$);"

InDriver.sqlExecute("azureserver", "insert into public.modbus (source, ts, data )

values ( 'IOLogic','"+ts.toISOString()+"',$$"+modbusData+"$$);"

}

ModbusApi i RestApi oferują rozwiązanie podobne do transakcji SQL. Funkcje RestApi.sendRequest i Modbus.readDevice są wykonywane jednocześnie po wywołaniu Modbus.commit() i RestApi.commit(). Te funkcje nieblokujące inicjują procedury odczytu, po których następują dwie funkcje blokujące, Modbus.wait() i RestApi.wait(), które czekają na dane lub przekroczą limit czasu. Po zebraniu danych z obu źródeł (jeśli RestApi.isSucceeded() i ModbusApi.isSucceeded()), rejestrowanie weatherData i modbusData staje się proste przy użyciu InDriver.sqlExecute. Rejestruje to dane w tabeli szeregów czasowych JSON, składającej się ze źródła, znacznika czasu i kolumn danych.

  • Output

 

weatherData =

 

{
  "coord": {
  "lon": 19.9167,
  "lat": 50.0833
  },
  "weather": [
  {
     "id": 701,
     "main": "Mist",
     "description": "mist",
     "icon": "50n"
  }
  ],
  "base": "stations",
  "main": {
  "temp": 272.54,
  "feels_like": 270.64,
  "temp_min": 271.94,
  "temp_max": 273.7,
  "pressure": 1018,
  "humidity": 88
  },
  "visibility": 1100,
  "wind": {
  "speed": 1.54,
  "deg": 200
  },
  "clouds": {
  "all": 100
  },
  "dt": 1701968996,
  "sys": {
  "type": 2,
  "id": 2074307,
  "country": "PL",
  "sunrise": 1701930268,
  "sunset": 1701959943
  },
  "timezone": 3600,
  "id": 3094802,
  "name": "Krakow",
  "cod": 200
}

modbusData =

 

{
  "Moxa1": {
  "Read": {
     "coilsA": {
       "1": true,
       "2": false,
       "3": true,
       "4": false
     },
     "coilsB": {
       "5": true,
       "6": false,
       "7": true,
       "8"
: false
     }
  }
  }
}

Dzięki swoim unikalnym i zaawansowanym funkcjom InDriver oferuje inżynierom automatykom i programistom łatwe rozwiązanie, zapewniając swobodę tworzenia systemów z oczekiwaną elastycznością i wydajnością.

SerialPortAPI i SocketAPI

InDriver udostępnia dwa wszechstronne interfejsy API, SerialPortAPI i SocketAPI, umożliwiające obsługę niestandardowych implementacji protokołów w różnych scenariuszach komunikacji.

  • Interfejs API portu szeregowego
    To API jest dostosowane do interfejsów szeregowych, takich jak RS232, RS422, RS485, CAN , M-BUS i wielu innych. Deweloperzy mogą wykorzystać SerialPortAPI do nawiązania komunikacji z urządzeniami za pomocą tych protokołów szeregowych. Oferuje elastyczność i kontrolę nad parametrami komunikacji szeregowej, co czyni go idealnym wyborem dla różnych zastosowań przemysłowych i IoT.

  • Gniazdo API
    W przypadku komunikacji TCP i UDP , SocketAPI jest rozwiązaniem typu go-to. Obsługuje komunikację klient-serwer i UDP, umożliwiając bezproblemową integrację z rozwiązaniami sieciowymi. Niezależnie od tego, czy chodzi o łączenie urządzeń przez sieć lokalną, czy przez Internet, SocketAPI zapewnia niezawodną komunikację i elastyczność w implementacji protokołu.

Przykład: wysyłanie danych i przeprowadzanie walidacji za pomocą SerialPortAPI

W poniższym przykładzie otwierany jest port szeregowy COM1 , a ramka (0x1 0x2 0x3) jest wysyłana za pomocą funkcji SerialPortApi.writeAndWait, reprezentującej ramkę DataRequest.

Funkcja onMessage jest wywoływana zawsze, gdy dane są odbierane na COM1 w określonym przedziale czasowym. Proste sprawdzenie poprawności (długość = 10) uruchamia funkcję SerialPortApi.acceptRead(), kończąc operację blokowania zainicjowaną przez SerialPortApi.writeAndWait().

  • przy uruchomieniu

InDriver.import( "SerialPortApi" );

SerialPortApi.open(' COM1 ', ' { "mode": "Flow", "timeout": 3000, "bufferSize": 256, "baudRate": 9600, "parity": "NoParity", "stopBits": "OneStop", "dataBits": 8} ');

SerialPortApi.writeAndWait(' COM1 ', ' Żądanie danych ', [0x01,0x02,0x03], 3000 );

  • naWiadomość

if (InDriver.messageSender() == InDriver.taskName() && InDriver.messageTags()[0] = ' SerialPortData ') {

niech d = JSON.parse(InDriver.messageData())

niech bajty = d.data

jeśli ( bajtów .length === 10)

SerialPortApi.acceptRead()

}

PlikAPI

FileAPI InDriver wprowadza unikalne podejście do komunikacji, umożliwiając interakcję za pośrednictwem plików. Ten interfejs API obejmuje FileSystemWatcher, który aktywnie wykrywa zmiany w monitorowanych plikach lub katalogach. Ta możliwość umożliwia wyzwalanie funkcji JavaScript InDriver w odpowiedzi na przetwarzanie plików w locie. Ta funkcja jest szczególnie przydatna w scenariuszach, w których komunikacja za pośrednictwem plików jest preferowana lub konieczna, zapewniając dynamiczne i responsywne podejście do obsługi danych.

Podsumowując, zestaw interfejsów API InDriver — ModbusAPI, SerialPortAPI, SocketAPI i FileAPI — zapewnia deweloperom kompleksowe narzędzia do rozwiązywania różnych problemów komunikacyjnych w środowiskach przemysłowych i IoT. Te interfejsy API umożliwiają deweloperom tworzenie dostosowanych rozwiązań, niezależnie od tego, czy komunikują się za pomocą ustalonych protokołów, takich jak Modbus, czy też opracowują niestandardowe strategie komunikacji dla konkretnych urządzeń i scenariuszy.

Przykład pliku Api
W poniższym przykładzie watcher jest zainstalowany w pliku driver.cfg. Każda zmiana w tym pliku wyzwala wywołanie funkcji onMessage, ułatwiając prostą metodę nawiązywania komunikacji z systemem zewnętrznym za pomocą interakcji opartych na plikach.

  • onStartup

 

InDriver.import("FileApi");

FileApi.addFileSystemWatcherPath(InDriver.currentPath()+"/driver.cfg");

  • onMessage

if (InDriver.messageSender() === InDriver.taskName()) {

     InDriver.debug(InDriver.messageTags()+" : "+InDriver.messageData());

}

/*

When driver.cfg is changed onMessage is called 

 

onMessage: [FileChanged]:

{

  "message": {

"path": "C:/MyDevelopment/debug/driver.cfg",

"type": "JSscript"

  }

}

*/

bottom of page