Site icon Peťanovo.cz

Programování Siemens Logo! #11 – Komunikace s aplikací v PC

Stejně jako „dospělá PLC“ umí komunikovat s počítačem, i Siemens Logo! umožňuje komunikovat s aplikací, která běží v počítači. Nevýhodou Loga je nemožnost složitějších výpočtů, komplikované řešení nějaké logiky apod. Na druhou stranu jde o osvědčený hardware, který dokáže zpracovat digitální i analogové vstupy a výstupy. Má displej a umí komunikovat i s HMI displejem Simatic, případně se vzdálenými periferiemi, … Lze tedy kombinovat logiku Loga a řízení z nadřazené aplikace.

Potřebujete řídit jednodušší technologii pomocí Siemens Logo!, ale neumíte programovat?
Nebo si potřebujete jenom manuálně zapínat/vypínat výstupy Loga?
Můžete zkusit aplikaci Logo! Step Control, která s pomocí počítače dokáže ovládat připojenou technologii.

Propojení s aplikací je podobné jako např. s displejem. Využívá se stejný paměťový prostor, ze kterého se dá číst, nebo se do něho dá zapisovat. V počítači běží aplikace s knihovnou ze skupiny Snap7. Ta je jednoduše použitelná v programech na platformě Windows, Linux i MacOS. Dokonce je možné to rozjet i na Arduinu. Podporované jsou jazyky C, C++, C#, Python, VB.NET atd.
Uvedený příklad bude naprogramován v C# pro který existuje samostatný port Sharp7. Na webu je k dispozici hromada informací a je tam i samotná stránka pro komunikaci s Logem. Implementace je velice jednoduchá.

Konfigurace modulu Siemens Logo!

V Logu existuje jeden souvislý paměťový prostor. První část je tzv. VM (variable memory) – pameť, do které je možné přenášet hodnoty z jednotlivých bloků. Tímto způsobem je možné číst a zapisovat hodnoty z jakéhokoliv bloku (např. časovače). Druhá část obsahuje data vstupů, výstupů, markery apod. Vše je přehledně zobrazeno v tabulce níže – ta platí pro Logo! v 8.4. U starších verzí se to může trochu lišit, doporučuji tedy podívat se do nápovědy ke konkrétnímu modulu.

BLOCKVM ADDRESS STARTVM ADDRESS ENDFIELD LENGTH (BYTE)
VM (uživatelská paměť)010231024
I (dig. vstupy)102410318
AI (analog. vstupy)1032106332
Q (dig. výstupy)106410718
AQ (analog. výstupy)1072110332
M (flagy)1104111714
AM (analog. flagy)11181245128
NI (síťové dig. vstupy)1246126116
NAI (síťové analog. vstupy)12621389128
NQ (síťové dig. výstupy)1390140516
NAQ (síťové analog. výstupy)1406146964
Rozložení dat v paměti

Logo! tedy může být i naprosto bez programu a program v PC může modul využívat jako interface – využívat jeho vstupy a výstupy. Nebo může být komplet logika zpracovávána v logickém modulu a nastavení a ovládání být z nadřazeného počítače.

Důležité je nastavení komunikačního kanálu. Pro komunikaci se používá tzv. S7 connection. V Logo Soft Comfort nutné provést konfiguraci serveru, viz screenshoty níže. Tato konfigurace umožní propojení s počítačem.
Z hlediska kybernetické bezpečnosti se jedná o bezpečnostní riziko. Jakýkoliv otevřený komunikační kanál může být napaden. LSC na to upozorní při nahrávání programu do modulu. Je tedy dobré používat toto propojení v uzavřené síti, či zabezpečit nějakým jiným způsobem.

Nastavení komunikačního kanálu S7 comm.
Jednoduchý program v Logu a přenos dat do VM paměti.Data z časovačů B001 a B002 jsou přenášena do VM na adresy 0, 2 a 4

Aplikace v počítači

Jak je uvedeno výše, ukázkový příklad bude naprogramován v C#. Pro zjednodušení neobsahuje žádné testování propojení, reakci na chyby apod. Pouze kód, který přímo čte/zapisuje. V reálu je samozřejmě nutné řešit více věcí (např. jestli je modul stále připojen, jestli přišla správná odpověď apod.).

Testovací aplikace*

Nejprve je nutné naimportovat knihovnu – Sharp7 je obyčejná třída pro C#. Stačí ji tedy jednoduše stáhnout, zkopírovat soubor Sharp7.cs do složky s projektem a přidat do jmenného prostoru příkazem

using Sharp7;

Dalším krokem je otevření spojení s Logem! Je nutné zadat IP adresu a TSAP, poté komunikační kanál otevřít. V ukázkovém programu je IP adresa napevno zadaná v kódu. Box k zadání adresy není funkční!!

//set connection parameters
errCode = client.SetConnectionParams("192.168.1.5", 768, 512);
//connect
errCode = client.Connect();
//of disconnect
//errCode = client.Disconnect();

if(errCode == 0) { MessageBox.Show("Connected");}else { MessageBox.Show("Disconnected!");}

Příkazy mají vždy nějakou návratovou hodnotu (zde errCode), která říká, jestli se příkaz vydařil, nebo jestli skončil nějakou chybou. Tu je možné odchytávat a podle toho řídit chování programu.

Načtení dat je potom jednoduché. Data jsou načtena do pole bajtů b[]. Metodou client.DBRead(…) se načtou data z databloku 1 (jiný Logo ani nemá, tato volba se hodí u PLC) od konkrétní adresy (zde 0). Délka načteného pole bude 4 bajty – tedy dva dvoubajtové Wordy. Tyto hodnoty je nutné převést na proměnnou Integer, aby se hodnota správně zobrazila. To lze provést vynásobením prvního bajtu hodnotou 0x0100 (256) a přičtením druhého bajtu.
Stejným způsobem je možné vyčítat např. stavy vstupů. Vyčtením bajtu z adresy 1024 se načte 8 vstupů jako hodnota 0 – 255 (0xff = 1111 1111b). Tu je pak programově potřeba rozdělit na jednotlivé bity.

int val1, val2; //values from Logo
 byte[] b = new byte[4]; // temporary array

//VM (W)0, 1

//get data DB, StartAddr, lenght, buffer

errCode = client.DBRead(1, 0, 4, b);

//get data vm0, vm1
 val1 = (b[0] * 256) + b[1];
 val2 = (b[2] * 256) + b[3];

Zápis dat je obdobný jako čtení. Opět se pracuje se stejným paměťovým prostorem a jednotlivými bajty.

byte[] b = new byte[1]; // temporary array
b[0] = 255; //set all (8) outputs to true
//set data - DB, StartAddr, lenght, buffer
errCode = client.DBWrite(1, 1064, 1, bufferData); //write data to addr. 1064

A to je vlastně vše! Nic složitého, zbývá doplnit logiku programu. To už je ale na každém programátorovi. Na stránkách projektu je obrovské množství dat k prostudování, něco lze vyčíst ze samotné třídy. Např. níže je Seznam návratových hodnot příkazů. Když vám tedy příkazy vrací nulu (ne null), tak je to ten lepší případ.

Code7Ok = 0x0000;Code7AddressOutOfRange = 0x0005;Code7InvalidTransportSize = 0x0006;Code7WriteDataSizeMismatch = 0x0007;Code7ResItemNotAvailable = 0x000A;Code7ResItemNotAvailable1 = 0xD209;Code7InvalidValue = 0xDC01;Code7NeedPassword = 0xD241;Code7InvalidPassword = 0xD602;Code7NoPasswordToClear = 0xD604;Code7NoPasswordToSet = 0xD605;Code7FunNotAvailable = 0x8104;Code7DataOverPDU = 0x8500;

Celý ukázkový program je možné stáhnout zde. Ve složce je jak samotný program v C#, tak i ukázkový program pro Logo! a obrázek s nastavením komunikace. Do Loga je tedy potřeba nahrát projekt „logo_prg.lsc“ a spustit aplikaci ve Visual Studiu. Po správném nastavení IP adres se budou v aplikaci zobrazovat hodnoty časovačů a bude možné nastavit digitální výstupy stiskem tlačítka.

Exit mobile version