This is an old revision of the document!


Ukládání dat z Mervis do SQL databáze

Tato služba na bázi démona umožňuje obousměrný přenos dat mezi programovatelným logickým kontrolérem Unipi se spuštěným SW Mervis a SQL databází; komunikace probíhá pomocí SSCP protokolu, tj. proprietárního protokolu užívaného běhovým prostředím Mervis a Mervis IDE. Démona lze spustit kdekoliv - v systému se spuštěným běhovým prostředím Mervis, v systému společně s databázovým serverem či na jiném vzdáleném zařízení.

  • Démon je spuštěn na PLC
    • V tomto případě je démon spuštěn přímo na PLC společně s Mervis RT a odesílá data do vzdálené databáze. Vyžaduje IP spojení mezi PLC a databázovým serverem.
  • Démon je spuštěn na jiném zařízení/serveru
    • Toto řešení lze rozdělit na dvě možná nasazení v závislosti na přítomnosti či absenci síťového spojení mezi démonem a PLC.
    • Démon má IP přístup k PLC
      • Jedná se o opačný přístup než v prvním případě (tj. démon běží na PLC).
      • Démon je nainstalován na serveru, komunikuje s PLC a odesílá data na databázový server.
      • Databázový server může běžet na stejném serveru jako démon, nebo na zcela jiném zařízení.
    • Démon NEMÁ IP spojení s PLC
      • Tato možnost bude brzy dostupná
      • V tomto případě se pro odečet údajů z PLC užívá Mervis Proxy server, který data následně odesílá na databázový server. Výhoda tohoto přístupu spočívá v tom, že démon IP přístup k PLC nevyžaduje, server s démonem se proto může nacházet v geograficky zcela odlišné lokaci, oddělený od interní sítě firewallem či NAT.
      • Vyžaduje připojení PLC k proxy serveru
      • Omezeno max. přenosovou rychlostí proxy serveru
  1. SELECT - Tato operace přečte určitý řádek z vybrané tabulky a přenese hodnoty na relevantní proměnné pro Mervis na PLC. Řádek lze specifikovat použitím parametru “where”, který lze užít přímo jako klauzuli “WHERE” v SQL výrazu (nastaví proměnnou Mervisu dle databáze)
  2. UPDATE - Tato operace aktualizuje řádek ve vybrané tabulce zadáním hodnot proměnných na PLC. Řádek lze specifikovat použitím parametru “where”, který lze užít přímo jako klauzuli “WHERE” v SQL výrazu. (Nastaví řádek v DB podle proměnné Mervisu)
  3. INSERT - Tato operace vloží řádek s aktuálními hodnotami PLC do vybrané tabulky pokaždé, když je stav dané proměnné vyčítán kontrolérem. (Mervis proměnná se loguje do DB)
  • Program je navržen pro platformy x64 a ARM* včetně všech PLC Unipi.
  • Software je distribuován jako balík Debian (.deb) a je testován na distribucích Linux založených na Debianu 9/10.
  • Software není open-source. V případě potřeby použití programu na jiné než uvedené platformu kontaktujte technickou podporu Unipi.

*v současnosti jsou podporovány platformy arm64 a armhf

===== Návod na rychlé spuštění = ====

Instalace

  1. Do seznamu apt-sources přidejte repozitář Unipi Debian (tento krok přeskočte, pokud používáte PLC Unipi). <distro> nahraďte názvem Vaší distribuce Debianu, tj. stretch nebo buster
    sudo su
    echo "deb https://repo.unipi.technology/debian <distro> main" >> /etc/apt/sources.list.d/unipi.list
    wget https://repo.unipi.technology/debian/unipi_pub.gpg -O - | apt-key add apt-get update 
  2. nainstalujte aplikační balíček
    apt-get install sscp-sql-bridge

Balíčky s externími knihovnami (libyaml, libmysqlcppconn, libboost-system, libssl) se v případě potřeby automaticky nainstalují do adresáře /opt/unipi/tools .

Konfigurace

Veškerá konfigurace je tvořena dvěma soubory:

  1. /etc/unipi/sscp-sql-bridge.d/mapping.yaml: hlavní konfigurační soubor obsahující IP adresy a identifikační údaje pro databázový server/y, zařízení se spuštěným Mervis RT a rovněž i všechna nastavení týkajících se přenášených proměnných. Ve výchozím stavu tento soubor obsahuje komentovanou vzorovou konfiguraci; tuto konfigurace je nutné nahradit správnými hodnotami dle dané aplikace.
  2. jeden či více souborů .vlist, které obsahují seznam všech proměnných používaných v projektu či projektech Mervis. Tyto soubory jsou automaticky generovány prostředím Mervis IDE a jsou umístěny v kořenovém adresáři Mervis projektu. Výchozí cesta v souborovém systému PLC je /opt/unipi/data a lze ji změnit v souboru souboru *mapping.yaml*. Upozornění: důrazně nedoporučujeme soubory .vlist editovat manuálně.

U konfiguračních souborů je třeba klást důraz na dodržování validního formátu .yaml. Pokud si nejste jistí, využijte online YAML validátor (např. https://codebeautify.org/yaml-validator). Rovněž do souboru nepřidávejte žádná pole, která nejsou zahrnutá v příkladu níže.

Struktura souboru mapping.yaml je popsána níže.

Povolení služby

Po dokončení konfigurace doporučujeme ověřit správnou funkčnost démona provedením následujících příkazů v popředí terminálu:

cd /opt/unipi/tools/
./sscp-sql-bridge

Pokud se ve výstupu nezobrazí žádná chybová hláška, služba je připravena k povolení a spuštění na pozadí (tj. v módu démona) skrze následující příkazy:

systemctl enable sscp-sql-daemon
systemctl start sscp-sql-daemon

Důsledně dodržujte YAML strukturu souboru. Nejsnadněji tak lze učinit prostou editací výchozího nastavení.

  • plc_n - seznam adresovaných PLC, na kterých je spuštěn Mervis. Lze definovat více než jedno PLC
  • sscp_ip — IP adresa zařízení se spuštěným mervisr (pokud je démon spuštěn na místní síti, lze použít adresu 127.0.0.1)
  • sscp_port — TCP port, na kterém mervisr naslouchá (12346 ve výchozím stavu)
  • sscp_username — přihlašovací jméno pro SSCP, lze nastavit v Mervis IDE
  • sscp_password — heslo pro SSCP, lze nastavit v Mervis IDE
  • db_user — přihlašovací jméno pro databázový server
  • db_pass — heslo pro databázový server
  • db_ip — IP adresa databázového serveru (pokud je spuštěn na stejném zařízení jako démon, lze použít adresu 127.0.0.1)
  • db_port — port databázového serveru (3306 ve výchozím stavu)
  • db_mysql_schema — název databázového schématu
  • vlist_filename — seznam proměnných (generováno Mervis IDE)
  • variable_sets - seznam provozních skupin - na jednom PLC lze definovat více skupin
    • type — typ operace (podporovány operace SELECT, UPDATE a INSERT)
    • set_name — název sady jedné či více proměnných
    • table_name — název tabulky v rámci db_mysql_schema
    • reading_period — vyčítací interval, nastavení probíhá v krocích po 100 ms
    • vars — seznam proměnných přiřazených k projektu
      • var_name — název proměnné v rámci Mervis projektu
      • field_name — název sloupce v table_name