Modbus TCP-IP Palvelin-Orja käyttöönotto

Miten aktivoidaan ja käyttöönotetaan Modbus TCP-IP palvelimen

Yleistä

Fidelix FX2030, FX2030A, FX-SPIDER, FX3000-C ja uudet FX-SPIDER 40/10 -aseman keskusyksiköt voidaan päivittää uudella ohjelmistoversiolla 12.30.06, joka tukee Modbus TCP/IP -palvelintoimintoja. Sen avulla FX-sarjan sähköasemat voivat vastata Modbus TCP -etälähettimiin, kuten SCADA-järjestelmiin tai AHU-yksiköihin, ja siirtää omia rekistereitä LAN IP verkkojen kautta.

HUOM! MODBUS SERVER-palvelimella on tiettyjä rajoituksia rekisteri- ja tiedonsiirtoasetuksissa. Lue ohjeet huolellisesti ennen Modbus-verkon suunnittelun aloittamista.

Käyttöönotto


FX CPU vaatimukset

Tarkista, onko FX CPU sisäinen Fidelix-ohjelmistoversiossa Modbus Server -ominaisuutta:
12.20.38 ja 12.30.10 ovat saatavilla 10.05.2021.
Tarkista uusimmat ohjelmistoversiot ja ajurit täältä:

https://info.fidelix.fi/fi/knowledge/lataukset

 


Modbus-palvelimen ominaisuuksien aktivointi


Jos FX-sarjan suorittimessasi ei ole tuoteaktivointia Modbus Server -ominaisuudelle, Asetukset -> Aktivoinnit - sivu näyttää seuraavalta:

Aktivoitu ominaisuus:

Aktivointi tehdään sivulla:

https://activations.fidelix.com/Activations

Pääsyä sivulle haetaan sivulla:

https://support.fidelix.fi/AccountApplication.aspx?Lang=FI

Syötä "Aktivointi"-asetussivun Modbus-palvelinkomponentin tuotekoodi sekä projektiin/laitteeseen liittyvät tiedot ja paina sitten "SUBMIT"-painiketta :

HUOM! Aktivointi saattaa olla laskutettavaa.

Kun aktivointiavain on syötetty FX-aseman käyttöliittymään, paina "Muuta"-painiketta :

  Kun näyttöön tulee teksti "PRODUCT ACTIVATION OK", Modbus-palvelimen ominaisuudet on aktivoitu.

Laitteisto


Modbus-palvelimen toimivuus testataan seuraavassa asennuksessa:

Modbus-palvelin -> FX-2030A SPIDER CPU.
Modbus-asiakas -> FX-3000-C CPU
Voi olla mikä tahansa Modbus TCP/IP "Master/Client": laite/ohjelmisto, kuten SCADA, IV-kone jne.

Web-selain samassa LAN-verkossa olevassa PC:ssä.

HUOM! Tarkista, että kaikki laitteet ovat samassa lähiverkon ip-osoitealueella.

Modbus rekisterien kartoitus


OpenPCS-ajurin päivitys

Palvelinrekisterien kartoitus on tehtävä IEC-koodissa. OpenPCS-ohjelmointiympäristöä (vaihtoehtoisesti FX-Editoria ja sen sovellusta ST-Edit) on käytettävä vastaavien rekisterinumeroiden, niiden muuttujien tietotyyppien ja arvolähteiden ohjelmointiin.

https://info.fidelix.fi/fi/knowledge/fidelix-downloads

TÄRKEÄ HUOMAUTUS! Tarkista, että Infoteamin OpenPCS-ajurit ovat ajan tasalla!

Lataa ja pura fidelix_V122036_V242.cab-tiedosto tietokoneellesi.
Päivitä ajuripaketti seuraavasti:

  1. Käynnistä OpenPSC, valitse Ekstrat -> Työkalut -> Ohjaimen asennus.
  2. Napsauta painiketta ja valitse kansio, jossa on purettu cab-tiedosto.
  3. Tarkista, että paketin versio on oikea: 122036.

Napsauta "Install"-painiketta, odota loppuun ja käynnistä OpenPCS manuaalisesti uudelleen.

Modbus-palvelimen rekisteritoiminnot


Huom!

IEC-kääntäjän INT-muuttujan enimmäisarvo on 32767 ja sitä suuremmat arvot on kirjoitettava heksadesimaalimuodossa (esim. 32769 vastaa 16#8001) - tai annettava näin: WORD_TO_INT(32769). Suuremmat arvot kuin 32767 näytetään negatiivisina OpenPCS:n katseluikkunassa. Heksadesimaalinen näyttömuoto voidaan valita valikosta "View-Number format".

Modbus rekisterien kirjoittaminen


Funktio SetModbusIntF asettaa rekisterin arvon ja palauttaa INT arvon 1 tai 0
Parametrit:
Address (INT) Rekisterinumero 0 .. 65535
Value (INT) Rekisterin arvo


Funktio SetModbusWordF asettaa rekisterin arvon ja palauttaa INT arvon 1 tai 0
Parametrit :
Address (INT) Rekisterinumero 0 .. 65535
Value (WORD) Rekisterin arvo


Funktio SetModbusDIntF asettaa kahden peräkkäisen rekisterin arvot ja palauttaa INT arvon 1/0
Parametrit :
Address (INT) Rekisterinumero 0 .. 65534
Value (DINT) 16 ylintä bittiä menee rekisteriin Address ja 16 alinta bittiä menee rekisteriin Address+1


Funktio SetModbusDWordF asettaa kahden peräkkäisen rekisterin arvot ja palauttaa INT arvon 1 tai 0
Parametrit :
Address (INT) Rekisterinumero 0 .. 65534

Value (DWORD) 16 ylintä bittiä menee rekisteriin Address ja 16 alinta bittiä menee rekisteriin Address+1

Funktio SetModbusRealF asettaa kahden peräkkäisen rekisterin arvot ja palauttaa INT arvon 1 tai 0
Parametrit :
Address (INT) Rekisterinumero 0 .. 65534
Value (REAL) 16 ylintä bittiä menee rekisteriin Address ja 16 alinta bittiä menee rekisteriin Address+1
Multiplier (INT)
Muunnoksessa käytettävä kerroin (0 = ei muunnosta) 
Jos Multiplier on suurempi kuin nolla niin REAL arvo tallennetaan rekistereihin DINT tyyppisenä siten että ensin REAL arvo kerrotaan Multiplier parametrillä ja sen jälkeen arvo muunnetaan kokonaisluvuksi.
Esim. SetModbusRealF(Address:=10, Value:=345.67, Multiplier:=100) tallentaa DINT arvon 34567
Jos haluat tallentaa rekistereihin REAL arvon ilman muunnosta kokonaisluvuksi niin aseta Multiplier parametrin arvoksi nolla. Tällöin tallennusmuotona on IEEE Standard for Floating-Point Arithmetic (IEEE 754)


Modbus rekisterien luenta


Funktio GetModbusIntF palauttaa rekisterin arvon INT tyyppisenä
Parametrit:
Address (INT) Rekisterinumero 0 .. 65535
IEC kääntäjä tulkitsee yli 32767 luvut negatiivisiksi arvoiksi. Jos haluat käyttää sellaista laskutoimituksissa etumerkittömänä niin toimi näin.
Lue ensin rekisteri WORD muuttujaan GetModbusWordF funktiolla ja sijoita se sitten DINT muuttujaan WORD_TO_DINT() funktiolla.

Funktio GetModbusWordF palauttaa rekisterin arvon WORD tyyppisenä
Parametrit:
Address (INT) Rekisterinumero 0 .. 65535

Funktio GetModbusDIntF palauttaa kahden peräkkäisen rekisterin arvot DINT tyyppisenä
Parametrit :

Address (INT) Rekisterinumero 0 .. 65534


Funktio GetModbusDWordF palauttaa kahden peräkkäisen rekisterin arvot DWORD tyyppisenä
Parametrit:

Address (INT) Rekisterinumero 0 .. 65534

Funktio GetModbusRealF palauttaa kahden peräkkäisen rekisterin arvot REAL tyyppisenä
Parametrit: 
Address (INT) Rekisterinumero 0 .. 65534
Multiplier (INT) Muunnoksessa käytettävä kerroin (0 = ei muunnosta)
Jos Multiplier on suurempi kuin nolla niin funktio palauttaa REAL arvon joka saadaan kun rekistereissä oleva DINT arvo muutetaan ensin REAL tyyppiseksi ja sitten jaetaan Multiplier arvolla.
Esim. GetModbusRealF(Address:=10, Multiplier:=100) palauttaa arvon 345.67 jos rekistereissä on DINT arvo 34567
Jos haluat lukea rekistereistä REAL arvon ilman muunnosta kokonaisluvusta niin aseta Multiplier parametrin arvoksi nolla. Tällöin rekistereissä on oltava luku muodossa IEEE Standard for Floating-Point Arithmetic (IEEE 754)


Modbus Palvelin ohjelman esimerkki

Rekisterien kirjoitus palvelimen puolelta

VAR
iResult :INT;
END_VAR
PROGRAM 

iResult := SetModbusIntF(Address := 1, Value:= 123);
(* Sets Holding register #1 with value 123 *)

iResult := SetModbusWordF(Address := 2, Value:= INT_TO_WORD(2345));
(* Sets Holding register #2 with value 2345 *)

iResult := SetModbusDIntF(Address := 3, Value:= 345678);
(* Sets Holding registers #3 and #4 with double INT value 345 678 (Hex 0x0005 and 0x464E) *)

iResult := SetModbusDWordF(Address := 5, Value:= DINT_TO_DWORD(1234567890));
(* Sets Holding registers #5 and #6 with double INT value 1 234 567 890 (Hex 0x4996 and 0x02D2) *)

iResult := SetModbusRealF(Address := 7, Value:= 67.89, Multiplier:=10);
(* Sets Holding registers #7 and #8 with value 345 678 (Hex 0x0005 and 0x464E) *)

iResult := SetModbusRealF(Address := 9, Value:= 11.12, Multiplier:=0);
(* Sets Holding registers #9 and #10 with value 345 678 (Hex 0x0005 and 0x464E) *)

END_PROGRAM

Kun OpenPCS (FX-Editor ja ST-Edit) lataa ja käynnistää IEC-ohjelman, rekisterit 1..10 ovat käytettävissä lukemista ja kirjoittamista varten Modbus Client / Slave -ohjelmasta.


Rekisterien luenta palvelimen puolelta

VAR
iResult : INT;
rResult : REAL;
wResult : WORD;
dwResult: DWORD;
dintResult : DINT;
END_VAR
PROGRAM 

iResult := GetModbusIntF (Address := 1);
(* Returns INT value of Holding register #1 *)

wResult := GetModbusWordF (Address := 2);
(* Returns WORD value of Holding register #2 *)

dintResult := GetModbusDIntF (Address := 3);
(* Returns DINT value of Holding registers #3 and #4 *)

dwResult := GetModbusDWordF (Address := 5);
(* Returns DWORD value of Holding registers #5 and #6 *)

rResult := GetModbusRealF(Address:=9, Multiplier:=100);
(* Returns REAL value divided by 100 of Holding registers #9 and #10 previously set with DINT value*)

END_PROGRAM

Kun OpenPCS (FX-Editor ja ST-Edit) lataa ja käynnistää IEC-ohjelman, rekisterit 1..10 ovat käytettävissä lukemista ja kirjoittamista varten Modbus Client / Slave -ohjelmasta.


 

Modbus rekissterien kartoitus klientin (Master) puolelta


Modbus TPC -asiakkaan "Master"-konfiguraatio SCADA:lle, AHU:lle ja muille laitteille tehdään valmistajan sääntöjen mukaisesti.

Testiasetuksessa käytämme Fidelix FX-sarjan sähköasemaa (IP 10.100.1.198) Modbus TCP -asiakkaana (MASTER). Modbus-rekisterien konfigurointi Master-puolella tehdään valikossa Käyttäjätila -> Ohjelmointi -> Modbuslaitteet.

Uusi Modbus-kartoitus voi sisältää 1 tai useamman pitorekisterin, jotka on liitetty "Server"-laitteen IP-osoitteeseen (10.100.1.192) IP-porttiin 502.

Määritä käytettävissä oleva sarjaportti muotoon "Modbus TCP".
Käyttäjätila -> Asetukset -> Portit --> 

Valikossa Käyttäjätila -> Ohjelmointi -> Modbus-laitteet.

Aseta portin numero ja Modbus-laitteen osoite.
Aseta "TCP/IP-moduuli" ja palvelimen IP-osoite.
Aseta aloitusrekisterin numero ja myöhemmin luettavien rekisterien lukumäärä.
Modbus-laitteen lisääminen

Varmista, että tiedonsiirto toimii ("Communication OK"). "Messages total" (Viestit yhteensä) osoittaa Modbus-palvelimelta hyväksyttyjen Modbus-viestien määrän.

Voit joutua säätämään lähetys- ja vastaanottoviiveitä, jos virheiden määrä kasvaa.

Kelvolliset Modbus-rekisterityypit (Modbus-toiminto) ovat:

- READ_MULTIPLE_REGISTERS (toiminto 3) rekisteriryhmien lukemiseen.
- WRITE_MULTIPLE_REGISTERS (toiminto 16) rekisteriryhmien kirjoittamiseen.
- WRITE_SINGLE_REGISTER (toiminto 6) yksittäisen rekisterin kirjoittamiseen.

Kun Modbus Server -rekistereitä kirjoitetaan OpenPCS:n IEC-toiminnoilla, niiden arvot näkyvät näytön alareunassa olevassa taulukossa.
Eri tietotyyppien avulla käyttäjä voi tarkistaa, ovatko arvot oikein.

Oletusarvoisesti palvelin kuuntelee IP-porttia 502, ja sitä voidaan muuttaa palomuurin asetuksissa. Käyttäjätila -> Asetukset -> Palomuuri


Rekisterien luenta palvelimen puolelta (Modbus Slave)

Kun edellä mainittu OpenPCS IEC -lukuohjelma on käynnissä Modbus Server FX-alaasemalla, se palauttaa Holding-rekisterin arvot, jos asiakas (Modbus Master) asettaa ne. Arvoja voidaan käyttää esim. asetusarvoina, ohjaussignaaleina, hälytyksinä jne.