Sbírací Aplikace

Z Wiki DAQIS
Přejít na: navigace, hledání

Aplikace je primárně určena jako obecný programovatelný interface mezi fyzickými hardwarovými prostředky výrobní linky a rozhraním webových služeb systému DAQIS.

Smyslem aplikace – kromě zredukování aplikací sběru dat na textové skripty – je poskytnout skriptům (resp. jejich tvůrcům) komfortnější a výrazně jednodušší rozhraní pro nízkoúrovňovou komunikaci s hardwarovými prostředky, ať se již jedná o PC/PLC řízené stanice, nebo různá další komunikační rozhraní a I/O převodníky.

Koncept fungování celého řešení můžeme tedy znázornit v nejzjednodušenější podobě takto:

Sbiraci aplikace.png

Aplikace rovněž umožňuje převádět různé proprietární komunikační protokoly na objektovou a uživatelsky přívětivou formu. Určitou analogii lze nalézt v konceptu OPC serveru, na rozdíl od OPC serveru ale aplikace neusiluje o násilnou univerzalitu a zahrnutí veškerých komunikačních rozhraní do jedné šablony, ale ponechává prostor pro proprietární řešení, tam kde to bude účelné. A velmi podstatnou vlastností konceptu zvoleného pro systém DAQIS je možnost doplnění další inteligence formou programového skriptu.

Služba

Skripty jsou standardně vykonávány v hostitelské aplikaci, která zařídí jejich provádění. Nejedná se o interpreter v pravém slova smyslu, ale při spuštění aplikace bude skript zkompilován do mezikódu a ten následně vykonáván virtuálním procesorem.)

Hostitelská aplikace je realizována jako nevizuální, formou NT Service. Může tedy běžet na pozadí, bez nutnosti přihlášeného uživatele, ale rovněž bez možnosti přímé interakce s uživatelem – není to ani žádoucí a často ani možné – pokud je aplikace spuštěna na vzdáleném serveru.

Instalace/Odinstalace

Aby aplikace mohla být automaticky spouštěna jako služba při startu systému, bude třeba ji do systému zaregistrovat, což se provede tak, že se aplikace spustí na příkazovém řádku s parametrem /install:

C:\……>script_host.exe /install

Naopak odregistraci aplikace je možné provést spuštěním z příkazového řádku s parametrem /uninstall:

C:\……>script_host.exe /uninstall

Nebo je možné aplikaci odinstalovat přes správce služeb (service control) takto:

C:\……>sc delete script_host

Na základě uvážení je možné aplikaci nainstalovat opakovaně pod různým jménem služby. Aplikace se instaluje pod stejným jménem služby jako je jméno EXE souboru, tj. příkaz

C:\……>script_host_test.exe /install

nainstaluje službu pojmenovanou jako „script_host_test“.

Konfigurace

Každá služba hostitelské aplikace může provozovat libovolný počet skriptů v navzájem nezávislých vláknech, nicméně sdílející společné prostředky. To, jaké skripty bude služba spouštět, bude dáno jejím konfiguračním souborem – konfigurační soubor bude mít stejné jméno jako EXE soubor, příponu XML a bude se nacházet ve stejné složce jako EXE soubor aplikace. Tj. dvojice souborů

  • script_host_test.exe
  • script_host_test.xml

Konfigurační soubor

Soubor s vnitřní XML strukturou, popisující jaké skripty a knihovny má aplikace spustit, případně za jakých podmínek, a jaké jim má předat parametry. Například skript, který navazuje komunikaci s PLC, potřebuje znát jeho IP adresu, nicméně by na ní měl být nezávislý – řetězec s adresou PLC tak může být nadefinován v konfiguraci, a hostitelská aplikace jej předá skriptu formou pojmenovaného parametru. Obecná struktura podstatné části konfiguračního souboru:

<root>
  <log>
    <filename>Název logovacího souboru</filename>
    <port>Port pro logování</port>
  </log>
  <notification>
    <url>URL notifikačního serveru</url>
    <port>Port notifikačního serveru</port>
    <monitoringQueue>Fronta pro monitoring, kam aplikace hlásí svůj stav</monitoringQueue>
    <readQueue>Fronta kterou si aplikace čte pro pokyny ze serveru</readQueue>
  </notification>
  <scripts>
    <script> 
      <description>Popis skriptu</description>
      <nowiki><source></nowiki>URL hlavního programu skriptu<nowiki></source></nowiki>
      <includes>
        <include>
          <name>Název INC souboru jak bude použit ve skriptu</name>
          <nowiki><source></nowiki>Skutečné URL INC souboru<nowiki></source></nowiki>
        </include>
        ...
      </includes>
      <uses>
        <unit>
          <name>Název programové jednotky jak bude použita ve skriptu</name>
          <nowiki><source></nowiki>Skutečné URL programové jednotky<nowiki></source></nowiki>
        </unit>
        ...
      </uses>
      <resources>
        <resource>
          <name>Název datového obsahu</name>
          <nowiki><source></nowiki>Skutečné URL datového obsahu<nowiki></source></nowiki>
        </resource>
        ...
      </resources>
      <params>
        <param>
          <name>Název parametru</name>
          <value>Hodnota parametru</value>
          <type>Typ parametru(S=string,I=Integer,B=Boolean)</type>
        </param>
        ...
      </params>
    </script>
    ...
  </scripts>
</root>

Debugger

Skripty

Vlastní uživatelské skripty jsou řešeny objektově orientovaným jazykem pascalovské syntaxe. Konkrétně navrhujeme skripty řešit dialektem DWScript (Delphi Web Script), který na rozdíl od řady jiných podobných jazyků umožňuje v rámci skriptů tvořit uživatelské třídy objektů, včetně podpory dědičnosti. Nejdůležitější konstrukce, které jazyk skriptů bude obsahovat:

  • Základní datové typy (Integer, Float, Boolean, String, enumeration)
  • Složené datové typy (array, record, set, Variant, TComplex, Vector, Matrix)
  • Deklarace konstant a proměnných (plná podpora unicode i v názvech)
  • Statická a dynamická pole, iterátory
  • Deklarace tříd - classes (property, metody, virtuální i statické)
  • Knihovny utilit pro práci s řetězci, čísly (math), datem a časem, souborovým systémem
  • Řídicí příkazy if-then-else, while-do, repeat-until, for, for-in, case, with, begin-end
  • Programové jednotky (unit, uses, include)

Ukázka skriptu

var PLC : array[1..4] of TPLCSiemens;
var Blok: array[1..4] of TPLCBlock;

for i := 1 to 4 do begin
  PLC[i] := TPLCSiemens.Create;
  Blok[i]:= PLC[i].CreateBlock(30, 0, 256, 100);//DB30, začátek 0, délka 256, 100 msec
end; 
.
.
.
// zde by mělo být nastavení parametrů PLC (IP adresy atd.) a jejich aktivace
.
.
.
function NačtiNastavenýTyp(ČísloStanice: Integer): string;
begin
  case Blok[ČísloStanice].Word[22] of
  1 : Result := 'BU5A-9D000-BG';
  2 : Result := 'BU5A-9D000-CD';
  3 : Result := 'BU5A-9D000-AG';
  4 : Result := 'BU5A-9D000-DG';
  5 : Result := 'BU5A-9D000-FE';
  6 : Result := 'BU5A-9D000-GD';
  7 : Result := 'BU5A-9D000-MB';
  else
    Result := '';
  end;
end;