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:
- Käynnistä OpenPSC, valitse Ekstrat -> Työkalut -> Ohjaimen asennus.
- Napsauta painiketta ja valitse kansio, jossa on purettu cab-tiedosto.
- 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.