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 |

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.


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.).

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.