FAQ – Emodus RC 82 – Modbus

Mätare: Värmemängdsmätare EM-RC82
Version: 03/2016
Standard kommunikationsparametrar: 9600-N-8-1
Adress i exempel nedan: 1

Modbus protokoll
Nedan exempel med fråga och svar är för att tydliggöra och för eventuell felsökning. Beroende på vilket program som används så kan adressering ske i antingen HEX eller decimalt, varvid vi uppgett båda alternativen.
Kontrollera först kabelanslutningar mot kabelmärkningen. Modbus A och Modbus B samt spänningsmatning måste alltid vara kopplade. Kontrollmät spänning vid värmemängdsmätaren för att säkerställa att korrekt spänning och polaritet är anslutet.

HEX DEC Data type Description Reading HEX Command Respond Unit
0000 0 INT32 Pos acc energy 0000000D 01 03 00 00 00 02 C4 0B 01 03 04 00 00 00 0D 3B F6  kWh
0002 2 INT32 Neg acc energy 00000024 01 03 00 02 00 02 65 CB 01 03 04 00 00 00 24 FA 28  kWh
0004 4 INT32 Temperature sensor Red 0000096C 01 03 00 04 00 02 85 CA 01 03 04 00 00 09 6C FC 4E  0.01 °C
0006 6 INT32 Temperature sensor Blue 00000970 01 03 00 06 00 02 24 0A 01 03 04 00 00 09 70 FD 87  0.01 °C
0008 8 INT32 Temperature difference 00000009 01 03 00 08 00 02 45 C9 01 03 04 00 00 00 09 3A 35  0.01 °C
000A 10 INT32 Acc flow 00000026 01 03 00 0A 00 02 E4 09 01 03 04 00 00 00 26 7B E9  0.01 m^3
000C 12 INT32 Flow 00000000 01 03 00 00 00 02 04 08 01 03 04 00 00 00 00 FA 33  0.01 m^3/h
000E 14 INT32 Power 00000000 01 03 00 0E 00 02 A5 C8 01 03 04 00 00 00 00 FA 33  0.01 kW
0010 16 INT32 Fault code 0000 01 03 00 10 00 01 85 CF 01 03 02 00 00 B8 44
0011 17 INT32 Pulse 1 volume 0.01 m^3
0013 19 INT32 Pulse 2 volume 0.01 m^3
0015 21 INT16 Pulse 1 scale factor (R/W) L/p
0016 22 INT16 Pulse 2 scale factor (R/W) L/p
0017 23 INT16 Pulse output scale factor (R/W) kWh/pulse
0018 24 INT16 Pulse width 148 h, (R/W)
0200 512 INT64 Acc flow 0000000000000000 01 03 02 00 00 04 45 B1 01 03 08 00 00 00 00 00 00 01 7C 95 A6  L
0204 516 INT64 Acc heat 00000000000032C8 01 03 02 04 00 04 04 70 01 03 08 00 00 00 00 00 00 32 C8 81 21  Wh
0208 520 INT64 Monthly acc heat 0000000000000000 01 03 02 08 00 04 C4 73 01 03 08 00 00 00 00 00 00 00 00 95 D7  Wh
0212 530 INT64 Acc cooling 0000000000008CA0 01 03 02 12 00 04 E5 B4 01 03 08 00 00 00 00 00 00 8C A0 F1 6F  Wh
0216 534 INT64 Monthly Acc cooling 0000000000000000 01 03 02 16 00 04 A4 75 01 03 08 00 00 00 00 00 00 00 00 95 D7  Wh
021A 538 INT64 Pulse 1 acc flow  L
021E 542 INT64 Pulse 2 acc flow  L
0222 546 INT16 Pulse 1 scale factor (R/W)  L
0223 547 INT16 Pulse 2 scale factor (R/W)  L
0224 548 INT16 Pulse out scale factor (R/W)  kWh/pulse
0225 549 INT16 Pulse width 148 h, (R/W)
0400 1024 Float (32) Flow rate 00000000 01 03 04 00 00 02 C5 3B 01 03 04 00 00 00 00 FA 33  m^3/h
0402 1026 Float (32) Flow temperature 41BF0A3D 01 03 04 00 00 02 C5 3B 01 03 04 00 00 00 00 FA 33  °C
0404 1028 Float (32) Return temperature 41BFC28F 01 03 04 04 00 02 84 FA 01 03 04 41 BF C2 8F CF 2F  °C
0406 1030 Float (32) Temperature difference BDF5C28F 01 03 04 06 00 02 25 3A 01 03 04 BD F5 C2 8F DE A9  K
0408 1032 Float (32) Heat power 00000000 01 03 04 08 00 02 44 F9 01 03 04 00 00 00 00 FA 33  kW
0500 1280 Int16 Operating time 0000 01 03 05 00 00 01 84 C6 01 03 02 00 00 B8 44  h
0503 1283 Int16 Fault code 0000 01 03 04 03 00 01 74 C6 01 03 02 00 00 B8 44
0607 1543 Int16 Address 0001 01 03 06 07 00 01 35 43 01 03 02 00 01 79 84
0608 1544 Int16 Communication parameters 0016 01 03 06 08 00 01 05 40 01 03 02 00 16 39 8A

Tabell 1 Modbus register med exempel

Register 0xFEFF (65279) används ändats till att skriva adress och tid.
Register 0x0607 och 0x0608 är båda öppna för att läsa och skriva.

Observera att 0x0000 till 0x0010 är sammanställning av standardregister och i de flesta fall räcker det att läsa dessa register. Som exempel så kan decimalt register läsas från register 0 med en längd på 18 byte för att läsa in samtliga samtliga standardregister.

Tolkning av register 0x0010 / 0x0503
Följande betydelse gäller för nedan angivna HEX koder

HEX Error code
0 OK, no faults
2 Flow temp sensor error
4 Return temp sensor error
6 Return temp sensor error, flow temp error
8 Low power
A Low power, flow temp error
C Low power, return temp error
E Low power,flow temp error, return temp error

Tabell 2 Tolkning av svar från register 0x0010 / 0x0503

 

Tolkning av register 0x0608
Följande betydelse gäller för nedan angivna HEX koder

HEX Paritet (bit 1) Baudrate bps (bit 0)
0 Even parity 2400
1 None parity 300
2 Even parity 600
3 Odd parity 1200
4 2400
5 4800
6 9600
7 2400

Tabell 3 Tolkning av svar från register 0x0608

Exempel:
Erhållet svar: 0016 (ABCD)
A – Reserverad
B – Reserverad
C – Paritet None
D – Baudrate 9600 bps

Ovan tolkningar hänförs till tabell 4 nedan gällande bit kodning.

BIT15~BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

Reserved

00beven parity

01bnone parity

10beven parity

11bodd parity

0000b: 2400bps

0001b: 300bps

0010b: 600bps

0011b: 1200bps

0100b: 2400bps

0101b: 4800bps

0110b: 9600bps

0111b: 2400bps

Tabell 4 Bit kodning av register 0x0608

Funktionskod 6 – Skriva enstaka register
Exempel skriv ny adress
Nuvarande adress: 0x01
Register: 0x0607
Funktionskod: 0x06
Ny adress: 0x0002
CRC16 kod: 0xB9 0x42
Koden vi skickar är således: 01 06 06 07 00 02 B9 42
Svaret vi får är: 01 06 06 07 00 02 B9 42
01 – Adress före ändring
06 – Funktionskod
06 07 – Register
00 02 – Ny adress
B9 42 – CRC16

Funktionskod 16 – Skriva multipla register
Exempel skriv ny adress
Nuvarande adress: 0x01
Funktionskod: 0x10 (observera att HEX 10 = 16)
Register: 0x0607
Starta skriv från register: 0x001
Antal register som skall skrivas: 0x02
Ny adress: 0x0002
CRC16 kod: 0x40 0x26
Koden vi skickar är således: 01 10 06 07 00 01 02 00 02 40 26
Svaret vi får är: 01 10 06 07 00 01 B0 80
01 – Adress före ändring
10 – Funktionskod
06 07 – Register
00 01 – Skriven längd
B0 80 – CRC16

Funktionskod 16 – Skriva nya kommunikationsparametrar
Adress: 0x01
Funktionskod: 0x10
Register: 0x0608
Starta skriv från register: 0x001
Antal register som skall skrivas: 0x02
Skrivet värde: 0x0035 (se tabell 3 – odd, 4800 bps)
CRC16 kod: 0x01 0x0F
Koden vi skickar är således: 01 10 06 08 00 01 02 00 35 01 0F
Svaret vi får är: 01 10 06 08 00 01 80 83
01 – Adress
10 – Funktionskod
06 08 – Register
00 01 – Skriven längd
80 83 – CRC16

Beräkning av pulslängd
Register: 0x0018 eller 0x0225
Beräkning av faktor görs enligt formel x*32768/1000, x utgör önskad pulslängd i ms.
Ex:
Önskad pulslängd: 200 mS
Beräkning: 200*32768/1000=6554
Konvertering av 6554 till HEX: 0x199A

 

Ställ datum och tid
Adress: 0x01
Funktionskod: 0x10
Register: 0xFEFF
Starta skriv från register: 0x001
Antal register som skall skrivas: 0x0C
Skrivet värde: 0x31 0x32 (månad 12), 0x30 0x35 (dag 5), 0x31 0x35 (år 15), 0x31 0x36 (timme 16), 0x 33 0x31 (minut 31), 0x 31 0x 36 (sekund 16)
CRC16 kod: 0xAF 0x96
Koden vi skickar är således: 01 10 FE 00 01 0C 31 32 30 35 31 35 31 35 31 36 33 31 31 36 AF 96

Förtydligande:
Ett tal skrivs per byte. Sista siffran motsvarar HEX tal, tex 0x31 = 1 HEX, 0x32 = HEX 2. Det innebär att för att skriva månad 12 delar men upp det på 1 2 och kommandot blir 31 32.

Svaret vi får är: 01 10 FE FF 00 01 00 11
01 – Adress
10 – Funktionskod
FE FF – Register
00 01 – Skriven längd
00 11 –  CRC16

Tolkning av erhållen felkod
Exempel: Svar 01 80 01 80 80 00
01 – Adress
80 01 – Felkod (Setting data error, tabell 4)
FE FF – Register
80 00 –  CRC16

Felkod Beskrivning
8001 Setting data error
8002 Address error
8003 The sum of address and lenght if fault (too long or zero)
8030 Address it larger then F7 (247)

Tabell 5 Tolkning av felkod

Vi reserverar oss mot fel i texten ovan och användare använder denna information på egen risk. Tänk på att vara noggrann med att inte skriva till andra register än ovan angivna.