Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
cs:sw:01-mervis:setting-modbus-server-hidden [2020/01/17 07:25] – created avsetulacs:sw:01-mervis:setting-modbus-server-hidden [2024/07/24 14:35] (aktuální) – [Nastavení Modbus TCP serveru (slave)] kcerny
Řádek 1: Řádek 1:
-FIXME - překlad +====== Nastavení Modbus slave (serverovéhozařízení  ====== 
-====== Setting a Modbus server (slave) ====== +<WRAP group> 
-So far in other tutorials, we used a UniPi controller as a Modbus master deviceThat is the download / upload of data to Modbus slaves (UniPi extensionsenergy meters,...were initiated by the UniPi controller In this tutorialwe will demonstrate how to set UniPi as Modbus server, or in other terminology Modbus slave.+<WRAP half column 81%> 
 +Doposud jsme v tutoriálech používali kontroléry Unipi jako master zařízení, tjveškeré stahování či nahrávání dat do Modbus slave zařízení (rozšiřující modulyelektroměry apodbyly iniciovány kontroléremV tomto tutoriálu si ukážemejak PLC Unipi nastavit jako Modbus server, či (při použití odlišné terminologie) jako Modbus slave.  
 +</WRAP> 
 +<WRAP half column 15%> 
 +;;# 
 +<html><span class="dev-tag dev-patron">Patron</span></html> \\ 
 +<html><span class="dev-tag dev-neuron">Neuron</span></html> \\ 
 +<html><span class="dev-tag dev-gate">Gate</span></html> \\ 
 +<html><span class="dev-tag dev-unipi11">Unipi&nbsp1.1</span></html> \\ 
 +<html><span class="dev-tag dev-axon">Axon</span></html> 
 +;;# 
 +</WRAP> 
 +</WRAP> 
  
-===== Physical layer ===== +===== Fyzická vrstva ===== 
-As a first thing, we need to decidewhat type of physical layer we will useOn UniPi running a Mervis, we can pick either from RS485 (ModbusRTUor ethernet (ModbusTCP). The decision will be based on the rest of your existing infrastructure and the capabilities of deviceswhich will communicate with your UniPi.+Prvním krokem je rozhodnutíjaký typ fyzické vrstvy budeme používatU PLC Unipi se spuštěným Mervis IDE máme na výběr buď RS485 (protokol Modbus RTU), případně ethernet (protokol Modbus TCP). Tato volba je založena na zbytku existující infrastruktury, a na možnostech zařízeníkterá mají s PLC komunikovat
  
-The RS485 physical layer is typically limited by its speed (115200bpsand nature of the [[https://en.wikipedia.org/wiki/Duplex_(telecommunications)#Half_duplex|half-duplex communication]], which limits the speed even furtherOn the other hand, the RS485 is easy to implement and still very popular in industrial automation.+Fyzická vrstva RS485 je typicky limitovaná svou max. rychlostí (115200 bpsa povahou [[https://en.wikipedia.org/wiki/Duplex_(telecommunications)#Half_duplex|poloduplexní komunikace]], která rychlost snižuje ještě víceNa druhou stranu je vrstva RS485 snadná na implementaci a stále jde na poli průmyslové automatizace o velmi populární volbu
  
-To achieve communication between master and slave, some sort of addressing has to be usedIn ModbusRTUeach slave device has to have unique ID or **address**, which is a number 0-255.+K nastavení komunikace mezi master slave je nutné používat nějakou formu adresaceV protokolu Modbus RTU musí mít každé slave zařízení unikátní identifikaciči **adresu**, která může být v rozsahu 0-255. 
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-On ModbusRTU network only one device can act as a master. Mervis will not allow you to create master and slave on the same RS485 portBut it cannot warn youif you are setting master on a networkwhere another master is already present.+V síti Modbus RTU může jako master fungovat pouze jedno zařízení. Mervis IDE proto nedovolí vytvořit master slave zařízení na jednom portu RS485. Zároveň ale nezobrazí varovánípokud nastavíte master zařízení na sítive které je master již přítomen
 </WRAP> </WRAP>
    
-The Ethernet physical layer allows connecting much more devices then RS485 and practically you are not limited by the speed or throughput of the network. **With ModbusTCP, you are also not limited to one master on one network**.+Fyzická vrstva Ethernetu umožňuje připojit výrazně více zařízení, než RS485. Zároveň zde neexistuje žádný praktický limit přenosové rychlosti či propustnosti. **S protokolem Modbus TCP rovněž nejste omezeni pouze na jedno master zařízení na síť**.
  
-The addressing on ModbusRTU is via IP address and port. Default port is 502.+V Modbus TCP probíhá adresování skrze IP adresu a port. Výchozím portem je port 502. 
  
-===== Setting ModbusRTU server (slave) ===== + 
-In our tutorial, we will use UniPi Neuron L503 which is equipped with two RS485 portsLet'start with generic project in **Full mode** - attached PLC, one FBD program, configured task and set autogen on the UniPi deviceMake surethat the build and deploy works without any problem. Your workspace should look like this.+===== Nastavení Modbus RTU serveru (slave) ===== 
 +V tomto tutoriálu budeme používat jednotku Unipi Neuron L503, která je vybavena dvěma porty RS485. Začněme běžným projektem v **plném módu**, ve kterém máme připojené PLC s nastaveným Autogenema jeden FBD program. Ujistěte seže kompilace i nahrání sestavy fungují bez problémůVáš pracovní prostor by měl vypadat následovně: 
  
 {{ :en:sw:01-mervis:modbus-server-01-workspace.png?direct |}} {{ :en:sw:01-mervis:modbus-server-01-workspace.png?direct |}}
  
-Now we need to add a **Server channel**. On the **Left panel**, right click on the **PLC** and in the context menu click on **Add Server Channel**.+Nyní je třeba přidat **kanál serveru**. **levém panelu** klikněte pravým tlačítkem na **PLC** a v kontextovém menu klikněte na **Přidat kanál serveru**. 
  
 {{ :en:sw:01-mervis:modbus-server-02-add-server-channel.png?direct |}} {{ :en:sw:01-mervis:modbus-server-02-add-server-channel.png?direct |}}
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-We are used to add **channel**, instead of **server channel**. **Channel** is for communication initated by UniPi controller. **Server channel** is for communication initiated by some other device to which the UniPi will respond to.+Doposud jsme přidávali **kanál**, nikoliv **kanál serveru**. **Kanál** je označení pro komunikaci iniciovanou kontrolérem Unipi. **Kanál serveru** je oproti tomu komunikace řízená jiným zařízením, kterému PLC odpovídá
 </WRAP> </WRAP>
  
-A new **server-channel** will appear under the **PLC**. Double click on it and on the **Properties panel** change the name to something more descriptiveThe channel will be for ModbusRTU master communicationso the name **ModbusRTU-master** makes sense.+Pod **PLC** se objeví položka **server-channel**. Dvojitě na ni klikněte a v panelu **Vlastnosti** změňte jeho název na něco více popisnéhoKanál bude sloužit pro komunikaci Modbus RTU v režimu slavenazvěme jej proto třeba **ModbusRTU-slave**.
  
 {{ :en:sw:01-mervis:modbus-server-03-channel-name.png?direct |}} {{ :en:sw:01-mervis:modbus-server-03-channel-name.png?direct |}}
  
-On the same panel, change the **Protocol** to ModbusServer.+Na stejném panelu změňte **Protokol** na ModbusServer. 
  
 {{ :en:sw:01-mervis:modbus-server-04-protocol.png?direct |}} {{ :en:sw:01-mervis:modbus-server-04-protocol.png?direct |}}
  
-The **Link Protocol** is already selected to **Serial**. But we need to set the correct port.+**Linkový protokol** je již přednastaven na **Serial**, nicméně stále je třeba nastavit správný port.  
  
 {{ :en:sw:01-mervis:modbus-server-05-port-number.png?direct |}} {{ :en:sw:01-mervis:modbus-server-05-port-number.png?direct |}}
  
-We have the channel configurednow we need to define some deviceRight click on the channel name in the **Left panel** and in the context menu click on the **Add Server Device**.+Kanál je nyní nakonfigurovanýje na čase nastavit na něm zařízení**levém panelu** klikněte pravým tlačítkem na název kanálu, a v kontextovém menu klikněte na **Přidat zařízení serveru**. 
  
 {{ :en:sw:01-mervis:modbus-server-06-add-server-device.png?direct |}} {{ :en:sw:01-mervis:modbus-server-06-add-server-device.png?direct |}}
  
-A new device will appear under the channel **ModbusRTU-master**. Double click on it and in the **Properties panel** change the **Device address** to something meaningfulWe could change the **Name** as wellbut on this channel we will have only one device.+Pod kanálem **ModbusRTU-slave** se objeví nové zařízeníDvojitě na něj klikněte a v panelu **Vlastnosti** změňte **Adresu zařízení** na něco více popisnéhoMůžeme změnit i jménona tomto kanálu ale budeme mít pouze jedno zařízení
  
 {{ :en:sw:01-mervis:modbus-server-07-device.png?direct |}} {{ :en:sw:01-mervis:modbus-server-07-device.png?direct |}}
  
-No we prepared everything we need to allow other devices to read and set variables in our PLC via ModbusRTUThe last thing is to define the Modbus registers and coil and their mapping to our variablesThis will be the same for ModbusTCP serverso jump to the section [[#defining_registers|Defining registers]]+Nyní máme připravené vše potřebné k tomu, abychom mohli ostatním zařízením povolit číst a zapisovat proměnné na naše PLC skrze protokol Modbus RTUPosledním krokem je definovat Modbus registry a coily, a namapovat je na naše proměnnéTento proces probíhá stejně i na serveru Modbus TCPu něj proto můžete přejít do sekce [[#definice_registru_a_coilu|Definice registrů]]
  
-===== Setting ModbusTCP server (slave) ===== + 
-Setting a ModbusTCP server (slave) is similar to the ModbusRTU serverbut with different configuration of the server channel. Let's start with the same basic projectYour workspace should look like this.+===== Nastavení Modbus TCP serveru (slave) ===== 
 +Nastavení Modbus TCP serveru (slave) probíhá podobně jako u Modbus RTU serverubudeme zde ale provádět jiná nastavení kanálu serveruZačněme se stejným základním projektemVáš pracovní prostor by měl vypadat následovně: 
  
 {{ :en:sw:01-mervis:modbus-server-01-workspace.png?direct |}} {{ :en:sw:01-mervis:modbus-server-01-workspace.png?direct |}}
  
-Now we need to add a **Server channel**. On the **Left panel**, right click on the **PLC** and in the context menu click on **Add Server Channel**.+Nyní je třeba přidat **Kanál serveru**. **levém panelu** klikněte pravým tlačítkem na **PLC** a v kontextovém menu klikněte na **Přidat kanál serveru**. 
  
 {{ :en:sw:01-mervis:modbus-server-02-add-server-channel.png?direct |}} {{ :en:sw:01-mervis:modbus-server-02-add-server-channel.png?direct |}}
  
-<WRAP center round info 60%> +Pod **PLC** se objeví položka **server-channel**. Dvojitě na ni klikněte a v panelu **Vlastnosti** změňte jeho název na něco více popisnéhoKanál bude sloužit pro komunikaci Modbus TCP v režimu slave, nazvěme jej proto třeba **ModbusTCP-slave**.
-We are used to add **channel**, instead of **server channel**. **Channel** is for communication initated by UniPi controller**Server channel** is for communication initiated by some other device to which the UniPi will respond to. +
-</WRAP> +
- +
-A new **server-channel** will appear under the **PLC**. Click on it and on the **Properties panel** change the name to something more descriptive. The channel will be for ModbusTCP slave communicationso the name **ModbusTCP-slave** makes sense.+
  
 {{ :en:sw:01-mervis:modbus-server-08-server-channel-name.png?direct |}} {{ :en:sw:01-mervis:modbus-server-08-server-channel-name.png?direct |}}
  
-On the same panel, change the **Protocol** to ModbusServer.+Na stejném místě změňte **Protokol** na ModbusServer. 
  
 {{ :en:sw:01-mervis:modbus-server-08-server-channel-protocol.png?direct |}} {{ :en:sw:01-mervis:modbus-server-08-server-channel-protocol.png?direct |}}
  
-And in the **Link Protocol** select **Tcp**+Jako **Linkový protokol** pak vyberte **Tcp**.
  
 {{ :en:sw:01-mervis:modbus-server-09-tcp-protocol.png?direct |}} {{ :en:sw:01-mervis:modbus-server-09-tcp-protocol.png?direct |}}
  
-That's all for the **Server channel** settingsnow we need to define the deviceRight click on the **ModbusTCP-slave** channel on the **Left panel** and in the context menu click on the **Add Server Device**.+Tím jsme dokončili nastavení **Kanálu serveru**, nyní je třeba nadefinovat zařízení**levém panelu** klikněte pravým tlačítkem na **ModbusTCP-slave** a v kontextovém menu klikněte na **Přidat zařízení serveru**. 
  
 {{ :en:sw:01-mervis:modbus-server-10-add-server-device.png?direct |}} {{ :en:sw:01-mervis:modbus-server-10-add-server-device.png?direct |}}
  
-New **device** will appear under the channel **ModbusTCP-slave**. Select it and in the **Properties panel**, change the **Device address** to something meaningful+Pod kanálem **ModbusTCP-slave** se objeví nové zařízení s názvem **device**. Vyberte jej a v panelu **Vlastnosti** změňte **Adresu zařízení** na platnou hodnotu
  
 {{ :en:sw:01-mervis:modbus-server-11-device-address.png?direct |}} {{ :en:sw:01-mervis:modbus-server-11-device-address.png?direct |}}
  
-In the **TCP Parameters** section, you can see **Device IP Address** and **Device Port**.+V sekci **Parametry TCP** můžete vidět kolonky **IP adresa zařízení** **Port zařízení**. 
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-You can leave the **Device IP Address** as is (0.0.0.0). The Mervis will internally set it to the current IP address of the PLC.+**IP adresu zařízení** můžete ponechat na výchozí hodnotě (0.0.0.0). Mervis IDE interně nastaví adresu stejnou jako pro PLC. 
  
-The **Device Port** however, you need to setTypical ModbusTCP port is 502, but there is already running internal application on this portSo set it to 503 for example+Od verze Mervis IDE 2.6.5 byl port 502 uvolněn volně k použití, pro starší verze platí následující: **Port zařízení** je třeba nastavitObvyklým Modbus TCP portem je port 502, na něm již ale jedna aplikace běží. Nastavte jej proto napřna 503. 
 </WRAP> </WRAP>
  
 {{ :en:sw:01-mervis:modbus-server-12-device-port.png?direct |}} {{ :en:sw:01-mervis:modbus-server-12-device-port.png?direct |}}
  
-No we prepared everything we need to allow other devices to read and set variables in our PLC via ModbusTCPThe last thing is to define the Modbus registers and coil and their mapping to our variables+Nyní máme připravené vše potřebné k tomu, abychom mohli ostatním zařízením povolit číst a zapisovat proměnné na naše PLC skrze protokol Modbus TCPPosledním krokem je definovat Modbus registry a coily, a namapovat je na naše proměnné 
-===== Defining registers and coils ===== + 
-The Modbus communication is for exchanging data onlyThe master reads and sets datapoints configured in the slave. In Modbus, there are four types of datapoints you can read or write, but they have only two data types: boolean and word (16bit integer). This is due to the age of the Modbus protocol (more than 40 years), and to keep the communication as simple as possibleAny other datatype (32bit real, string,...) has to be converted to 16bit valuefor example by using more datapoints.+ 
 +===== Definice registrů a coilů ===== 
 +Komunikace přes Modbus je určena pouze pro výměnu datMaster zařízení vyčítá a nastavuje datové body, které jsou nakonfigurovány na slave zařízeníV protokolu Modbus existují čtyři druhy datových bodů pro čtení i zápiskteré ale mohou používat pouze dva datové typy - boolean word (16-bitový integer). Toto omezení je zde kvůli stáří protokolu Modbusu (více než 40 leta k udržení komunikace co nejjednoduššíJakýkoliv jiný datový typ (32-bit real, string aj.) je třeba nejprve převést na 16-bitovou hodnotunapříklad použitím více datových bodů 
  
-==== Datapoints  ====+==== Datové body  ==== 
 +**Coil** je booleanovský datový bod, u kterého může master zařízení provádět čtení i zápis. Coily se obvykle používají pro ovládání digitálních či reléových výstupů, které mohou nabývat pouze hodnot ''TRUE'' nebo ''FALSE''
  
-A "**coil**" is a boolean datapoint which the master can read and set its valueThis datapoint is typically for controlling digital or relay outputs, which can only be set to ''TRUE'' or ''FALSE''+Druhým booleanovským datovým bodem je **vstup** či **stav vstupu**, který může master pouze čístTypicky jej využijete u digitálních vstupů
  
-The second boolean datapoint is called "**input**" or "input status" and master can only read its valueTypically, you would use this datapoint for digital input.+Datový bod typu word se nazývá **registr** či **holding registr** a master jej může číst i zapisovat do nějTento datový bod je vhodný pro výměnu analogových hodnot
  
-The word datapoint is called "**register**" or "holding register" and master can read and set its valueYou will use this datapoint for exchanging analog values.+Druhý datový bod typu word má název **vstupní registr**. Z něj může master pouze vyčítatObvykle se tento datový bod používá pro odečty teploty
  
-The second word datapoint is called "**input register**" and master can only read its value. Typically, you would use this datapoint for reading a temperature. 
  
-==== Setting a datapoints ==== +==== Vytvoření datového bodu ==== 
-To set the datapoints, double click on the **device** under your Modbus slave channel in the **Left panel**.+K nastavení datových bodů klikněte v **levém panelu** na položku **device** pod Modbus slave kanálem.
  
 {{ :en:sw:01-mervis:modbus-server-13-list-of-registers.png?direct |}} {{ :en:sw:01-mervis:modbus-server-13-list-of-registers.png?direct |}}
  
-The list of registers exported by the device will appear in the **Main window**. At the bottom of the **Main window**, you can see tabs **Analogs** and **Digitals**. On the **Analogs** tab, you can manage the **registers** and **input registers**. On the **Digitals** tab, you can manage the **coils** nad **inputs**. +**hlavním panelu** se objeví seznam registrů exportovaný zařízenímNa dolním okraji **hlavního panelu** můžete vidět záložky **Analogové** **Digitální**. V záložce **Analogové** můžete spravovat **registry** **vstupní registry**. V záložce **Digitální** pak můžete měnit nastavení **coilů** **vstupů**. 
  
-To add new register, right click on the empty list, and in the context menu, click on the **Add Variable**. This is the quicker way than selecting the **Add Register**.+Nový registr přidáte kliknutím pravým tlačítkem do prázdného prostoru. V kontextovém menu pak vyberte **Přidat proměnnou**. Tento způsob je rychlejší, než **Přidat registr**. 
  
 {{ :en:sw:01-mervis:modbus-server-14-add-variable.png?direct |}} {{ :en:sw:01-mervis:modbus-server-14-add-variable.png?direct |}}
  
-The list of available variables will appearand you can search in this listSearch for **CNT_1.01** and select the **Neuron_L503_CNT_1.01** variable, or the one with the similar nameAn confirm by clicking on **OK**.+Objeví se seznam dostupných proměnnýchve kterým můžete vyhledávatVyhledejte **CNT_1.01** a vyberte proměnnou s názvem "Neuron_L503_CNT_1.01" či podobnýmPotvrďte kliknutím na **OK**. 
  
 {{ :en:sw:01-mervis:modbus-server-15-select-variable.png?direct |}} {{ :en:sw:01-mervis:modbus-server-15-select-variable.png?direct |}}
  
-The new register will appear on the list. We can see it's properties:+V seznamu se objeví nový registr, u kterého můžeme vidět jeho vlastnosti
  
 {{ :en:sw:01-mervis:modbus-server-16-register-detail.png?direct |}} {{ :en:sw:01-mervis:modbus-server-16-register-detail.png?direct |}}
  
-The properties are+Těmito vlastnostmi jsou
-  - **Starting element** is the **address of the register**. The address cannot be changed +  - **Počáteční prvek** je **adresou registru**. Tuto adresu nelze změnit.  
-  - **Simple transform** offers a way how to transform the value from mapped variable to the Modbus registere.gconvert to int, if the mapped variable is real +  - **Prostá transformace** je způsobjakým se převádí hodnota z namapované proměnné na Modbus registr (napřpřevod na int, pokud je mapovaná proměnná typu real).  
-  - **Function** is the Modbus function by which the register can be read +  - **Funkce** označuje Modbusovou funkci, která umožňuje z registru vyčítat 
-  - **Mapped variable** contains name of the mapped variable +  - **Mapovaná proměnná** udává název namapované proměnné 
-  - **Type** shows the type of the mapped variable+  - **Typ** udává typ namapované proměnné
  
-To set the **coils**/**inputs** is practically the samejust proceed on the **Digitals** tab.+Nastavení **coilů** / **vstupů** probíhá prakticky shodněpouze se tak děje v záložce **Digitální**.