MBUS-64 TCP VF64 over MODBUS / TCP
Wijzigingen voorbehouden PS/16-05-2006
Inhoudsopgave
1
Inleiding --------------------------------------------------------------------------------------------- 3
2
Protocol beschrijving--------------------------------------------------------------------------- 3
3
4
2.1
Registeroverzicht ---------------------------------------------------------------------------- 3
2.2
Functiecode 03h : Read Holding Registers------------------------------------------- 4
2.3
Functiecode 05h : Write Single Coil ---------------------------------------------------- 5
2.4
Functiecode 06h : Write Single Register ---------------------------------------------- 5
Instellingen----------------------------------------------------------------------------------------- 6 3.1
Instellingen van de VF64 ------------------------------------------------------------------ 6
3.2
Instellingen van het Modbus / Scada programma ---------------------------------- 6
Index-------------------------------------------------------------------------------------------------- 7
2
1
Inleiding
Er worden diverse protocollen gebruikt voor het besturen en monitoren van apparaten in een gebouw. De software die wordt gebruikt is onderdeel van het Gebouw Beheer Systeem. De verschillende GBS’en werken meestal ook met verschillende protocollen, of te wel communicatietalen. Om aan alle talen tegemoet te komen gaat een beetje te ver, en daarom heeft Electro Drive gekozen voor een aantal protocollen. Eén van deze protocollen is het MODBUS protocol. Modbuscommunicatie kan over verschillende media, o.a. RS485 of Ethernet. Electro Drive heeft in deze gekozen voor Ethernet, met het onderliggende TCP/IP protocol. Dit heeft namelijk als voordeel dat het TCP/IP protocol de gegevens- en pakketoverdracht regelt, inclusief de foutafhandeling. Hieronder wordt het protocol beschreven en de verschillende instellingen die nodig zijn voor het correct functioneren.
2
Protocol beschrijving
2.1
Registeroverzicht
Het MODBUS protocol is gebaseerd op uitwisseling van informatie met behulp van registers. Elk van deze registers geeft een bepaalde grootheid of variabele weer. Er zijn ook registers die alleen de ‘aan’ of ‘uit’ toestand kennen. Deze registers noemen we COILS (van relaisspoelen). Omdat de VF64 een groot aantal parameters en grootheden kent, is voor deze toepassing een selectie gemaakt aan variabelen die met deze registers worden voorgesteld. Deze selectie is te vinden in onderstaande tabel. Bij elk register is aangegeven welke functiecode bij dat register hoort. Adres 40001 40002
Funktie Vrijgave Regeling selectie
Type Write Coil (Fc 05h) Write (Fc06h)
Omschrijving FF00=aan / 0000=uit 0001=PI / 0002=GS in / 0003=ext in / 0004=hand-remote
40003 40004 40005 40006 40007 40008 40009 40010 40011 40012 40013 40014 40015 40016
Dig ingang 3 ,, 4 Status regeling Uitstuurfrequentie Uitgangsstroom Uitgangskoppel Motorvermogen Regelaar ID Anal.ingang(druk) Bedrijfsuren Dig uitgang 1 ,, 2 Sturing Setpoint
Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Read (Fc 03h) Write Coil (Fc 05h) Write Coil(Fc 05h) Write (Fc 06h) Write (Fc 06h)
Digitale ingang: FF00 = aan / 0000 = uit Idem Status : 0000 = ok / FF00 = trip / 00FF = comm error Uitsturing 0-50Hz in % (0 – 100%) Uitgangsstroom in % (0 – 100%) Uitgangskoppel in % (0 – 100%) Aangesloten motorvermogen (A-02) (3kW = 3.0) Waarde van analoge ingang in 0,1V (10V = 100) Besturing dig uitgang : FF00 = aan / 0000 = uit Idem Insturing bij 40003=4 : 0000 – 0064h = 0-100% Setpoint bij drukreg., bij 40003=1 : 0000 – 0064h = 0-100%
De registers worden benaderd met behulp van lees- en schrijf commando’s, in het protocol weergegeven als functiecodes. Je kan dus een register benaderen met een bepaalde functiecode, welke aangeeft of het gaat om een lees- of schrijfaktie.
3
Er worden 3 functiecodes ondersteund, te weten: 03h (03 hex.) 05h 06h
Read register (lees register, Multiread is ook ondersteund) Write Single Coil (één register ‘aan’ of ‘uit’) Write register (schrijf register, Multiwrite is niet ondersteund)
Met een Multiread opdracht kunnen in één vraag een aantal registers tegelijk worden gevraagd, die dan in één bericht worden teruggestuurd. Een bericht bestaat uit een aantal delen. De samenstelling van het bericht is afhankelijk van de functiecode. Een bericht bestaat meestal uit een header met adressering, een functiecode, registernummer en data. Het registernummer wordt weergegeven met 2 bytes en kan worden verkregen door het eerste cijfer eraf te halen en van het resterende getal één af te trekken, dus register 40002 wordt 4 | 0002 –1 = 0001h, register 40003 wordt 0002h etc. De exacte bericht-samenstelling wordt later besproken per functiecode. Een MODBUS opdracht is als volgt opgebouwd: Bericht nr. Protocol ID lengte ID Func.code register data 2 bytes 2 bytes 2 bytes 1 byte 2 bytes 2 bytes 2 bytes Het bericht begint met het berichtnummer. Deze geeft aan om welk opdrachtnummer het gaat. Het kenmerk van Ethernet / TCP IP is namelijk dat er meerdere berichten tegelijk onderweg kunnen zijn. De zender en ontvanger kunnen zo de vraag-antwoord combinatie bij elkaar zoeken. Hierna volgt het protocol ID. Dit is een identificatie om aan te geven welk protocol wordt gebruikt. Voor MODBUS TCP is dit ID standaard 0x0000 (0000 hexadecimaal). De volgende 2 bytes geven de lengte van het gehele bericht weer, dit is voor de ontvanger de controle of het hele bericht is ontvangen. Vervolgens volgt een byte dat het Ontvanger-ID van de ontvanger bevat. Dit is een beetje overgenomen vanuit de basis van MODBUS, het MODBUS RTU (RS485). Bij TCP wordt de ontvanger al gedefinieerd door het IP-adres, maar toch moet voor iedere ontvanger een uniek ID worden ingevuld. Meestal wordt als ID het laatste cijfer van het IP-adres gekozen. Het bovengenoemde wordt de bericht header genoemd. Vervolgens geeft de functiecode aan wat met het register, dat daarna volgt, moet worden gedaan. Uiteindelijk bepaald de data de waarde van het register, of bij Multiread, hoeveel registers moeten worden uitgelezen.
2.2
Functiecode 03h : Read Holding Registers
Met Holding Registers worden variabelen bedoeld die een bepaalde waarde vertegenwoordigen. Dit kan bijvoorbeeld een toerental zijn, of stroomwaarde. Functiecode 03h kan ook gebruikt worden voor een Multiread opdracht. Hiermee kan in één bericht een aantal registers opeenvolgend worden uitgelezen. Een voorbeeld van een read-opdracht nr 21 is hieronder gegeven: Lees van apparaat 15 register 40002 t/m 40008. De opdracht is dan: Bericht nr. Protocol ID lengte ID Func.code register data 0x0015 0x0000 0x0007 0x0E 0x0003 0x0001 0x0007 Het berichtnummer is 21 (15h). Het protocol is MODBUS TCP (00h). Er volgen nog 7 bytes. Het is voor apparaat 15 (0Eh). Lees 7 registers, beginnend bij 0001 (=40002).
4
Het antwoord van het apparaat begint met ongeveer dezelfde bericht header:
Bericht nr. Protocol ID lengte ID Func.code bytecount data 0x0015 0x0000 0x12 0x0E 0x0003 0x0D 7 x 2 bytes data … De berichtlengte is aangepast vanwege de data (12h = 18 bytes totaal). Na de functiecode volgt een byte dat aangeeft hoeveel data er te verwachten is. Omdat de vraag 7 registers betrof, bestaat de data uit 7 x 2 = 14 bytes (0Dh). Om nu één register te lezen moet bij de vraag de data op 1 worden gezet (lees 1 register vanaf register xx).
2.3
Functiecode 05h : Write Single Coil
De functiecode Write Single Coil is bedoeld om een variabel register een ´aan´ of ´uit´ waarde te geven. Het is een waarde voor een digitale uitgang, die alleen hoog of laag kan worden. In de toepassing met de frequentieregelaar wordt deze functiecode gebruikt voor de vrijgave. Ook kunnen er optioneel nog twee digitale uitgangen worden geactiveerd. Het bericht van zender en ontvanger ziet er hetzelfde uit, de ontvanger kopieert de vraag ter bevestiging. Het bericht kan er als volgt uit zien: Commando: vrijgave voor regelaar met ID = 20. Vrijgave wordt voorgesteld door register 40001. Bericht nr. Protocol ID lengte ID Func.code register data 0x0030 0x0000 0x0007 0x14 0x0005 0x0000 0xFF00 Register 0000h (= 40001) van ID 14h (= 20) wordt op FF00h gezet (= aan). Het antwoord is hetzelfde als bovenstaand. Een zelfde commando kan worden gegeven voor een digitale uitgang.
2.4
Functiecode 06h : Write Single Register
Met functiecode 06h kan een register worden gevuld met een bepaalde willekeurige waarde. Deze waarde kan bijvoorbeeld voor sturing worden gebruikt. Bericht nr. Protocol ID lengte ID Func.code register data 2 bytes 2 bytes 2 bytes 1 byte 2 bytes 2 bytes 2 bytes Het bericht van zender en ontvanger ziet er hetzelfde uit, de ontvanger kopieert de vraag ter bevestiging. Het bericht kan er als volgt uit zien: Commando: sturing op 40% voor regelaar met ID = 22. Sturing wordt voorgesteld door register 40015. Bericht nr. Protocol ID lengte ID Func.code register data 0x0034 0x0000 0x0007 0x16 0x0006 0x000D 0x0028 Register 0014h (= 40015) van ID 16h (= 22) wordt op 0028h gezet (= 40). Het antwoord is hetzelfde als bovenstaand. Een zelfde commando kan worden gegeven voor een setpoint of regelingselectie.
5
3
Instellingen
Voor de goede werking moeten een aantal zaken goed worden ingesteld. Hieronder volgt een overzicht van de noodzakelijke instellingen.
3.1
Instellingen van de VF64
Op de frequentieregelaar moeten enkele instellingen worden gedaan om het geheel goed op elkaar af te stemmen. Vanwege het universele karakter gaat het slechts om enkele wijzigingen. Het is wel belangrijk dat de regelaar is voorzien van ED-programmering gedateerd 08-09-04 of recenter.
Parameter P-251 P-252 P-256 P-259
Omschrijving Bedrijfsuren Bedrijfsminuten ID Versie ED software
Waarde 0-65535 (read-only) 0-60 (read-only) 0-65535 Ter controle, read-only
Parameters P-251, P-252 zijn alleen bedoeld om uit te lezen en wordt gebruikt om resp. bedrijfsuren en –minuten op te slaan. Parameter P-259 wordt gebruikt als controle van het versienr. van de ED software en mag daarom niet worden gewijzigd! Parameter P-256 tenslotte wordt gebruikt als identifikatie van de regelaar door het Modbus systeem. Meestal wordt als ID-nummer het laatste cijfer van het IP-adres genomen.
3.2
Instellingen van het Modbus / Scada programma
Voor de instellingen die te maken hebben met het lezen en schrijven van en naar registers wordt verwezen naar de desbetreffende hoofdstukken. Voor overige instellingen wordt verwezen naar de handleiding of beschrijving van het gebruikte Scada en/of Modbus programma. Het enige waar rekening mee moet worden gehouden is de refresh-rate of opvraagtijd van een multiread opdracht. Tussen 2 read- of write opdrachten moet minimaal 4 à 5 seconden pauze zitten om de opdrachten te kunnen verwerken.
6
4
Index
B
M
Bedrijfsminuten · 6 bedrijfsuren · 6 bericht header · 4 berichtnummer · 4 bytecount · 4
MODBUS RTU · 4 MODBUS TCP · 4 Multiread · 3, 4 Multiwrite · 3 O
D Ontvanger-ID · 4 data · 4 digitale uitgangen · 5
P
F
protocol ID · 4
frequentieregelaar · 5 functiecodes · 3
R read-opdracht · 4 refresh-rate · 6 registernummer · 3 registers · 3 RS485 · 4
H Holding Registers · 4 L
S lengte · 4 Scada · 6 V VF64 · 3 vrijgave · 5
7