Stiskněte "Enter" pro přeskočení obsahu

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

0

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.

BLOCK VM ADDRESS START VM ADDRESS END FIELD LENGTH (BYTE)
VM (uživatelská paměť) 0 1023 1024
I (dig. vstupy) 1024 1031 8
AI (analog. vstupy) 1032 1063 32
Q (dig. výstupy) 1064 1071 8
AQ (analog. výstupy) 1072 1103 32
M (flagy) 1104 1117 14
AM (analog. flagy) 1118 1245 128
NI (síťové dig. vstupy) 1246 1261 16
NAI (síťové analog. vstupy) 1262 1389 128
NQ (síťové dig. výstupy) 1390 1405 16
NAQ (síťové analog. výstupy) 1406 1469 64
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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *