FAQ – 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.

HEXDECData typeDescriptionReading HEXCommandRespondUnit
00000INT32Pos acc energy0000000D01 03 00 00 00 02 C4 0B01 03 04 00 00 00 0D 3B F6 kWh
00022INT32Neg acc energy0000002401 03 00 02 00 02 65 CB01 03 04 00 00 00 24 FA 28 kWh
00044INT32Temperature sensor Red0000096C01 03 00 04 00 02 85 CA01 03 04 00 00 09 6C FC 4E 0.01 °C
00066INT32Temperature sensor Blue0000097001 03 00 06 00 02 24 0A01 03 04 00 00 09 70 FD 87 0.01 °C
00088INT32Temperature difference0000000901 03 00 08 00 02 45 C901 03 04 00 00 00 09 3A 35 0.01 °C
000A10INT32Acc flow0000002601 03 00 0A 00 02 E4 0901 03 04 00 00 00 26 7B E9 0.01 m^3
000C12INT32Flow0000000001 03 00 00 00 02 04 0801 03 04 00 00 00 00 FA 33 0.01 m^3/h
000E14INT32Power0000000001 03 00 0E 00 02 A5 C801 03 04 00 00 00 00 FA 33 0.01 kW
001016INT32Fault code000001 03 00 10 00 01 85 CF01 03 02 00 00 B8 44
001117INT32Pulse 1 volume0.01 m^3
001319INT32Pulse 2 volume0.01 m^3
001521INT16Pulse 1 scale factor (R/W)L/p
001622INT16Pulse 2 scale factor (R/W)L/p
001723INT16Pulse output scale factor (R/W)kWh/pulse
001824INT16Pulse width 148 h, (R/W)
0200512INT64Acc flow000000000000000001 03 02 00 00 04 45 B101 03 08 00 00 00 00 00 00 01 7C 95 A6 L
0204516INT64Acc heat00000000000032C801 03 02 04 00 04 04 7001 03 08 00 00 00 00 00 00 32 C8 81 21 Wh
0208520INT64Monthly acc heat000000000000000001 03 02 08 00 04 C4 7301 03 08 00 00 00 00 00 00 00 00 95 D7 Wh
0212530INT64Acc cooling0000000000008CA001 03 02 12 00 04 E5 B401 03 08 00 00 00 00 00 00 8C A0 F1 6F Wh
0216534INT64Monthly Acc cooling000000000000000001 03 02 16 00 04 A4 7501 03 08 00 00 00 00 00 00 00 00 95 D7 Wh
021A538INT64Pulse 1 acc flow L
021E542INT64Pulse 2 acc flow L
0222546INT16Pulse 1 scale factor (R/W) L
0223547INT16Pulse 2 scale factor (R/W) L
0224548INT16Pulse out scale factor (R/W) kWh/pulse
0225549INT16Pulse width 148 h, (R/W)
04001024Float (32)Flow rate0000000001 03 04 00 00 02 C5 3B01 03 04 00 00 00 00 FA 33 m^3/h
04021026Float (32)Flow temperature41BF0A3D01 03 04 00 00 02 C5 3B01 03 04 00 00 00 00 FA 33 °C
04041028Float (32)Return temperature41BFC28F01 03 04 04 00 02 84 FA01 03 04 41 BF C2 8F CF 2F °C
04061030Float (32)Temperature differenceBDF5C28F01 03 04 06 00 02 25 3A01 03 04 BD F5 C2 8F DE A9 K
04081032Float (32)Heat power0000000001 03 04 08 00 02 44 F901 03 04 00 00 00 00 FA 33 kW
05001280Int16Operating time000001 03 05 00 00 01 84 C601 03 02 00 00 B8 44 h
05031283Int16Fault code000001 03 04 03 00 01 74 C601 03 02 00 00 B8 44
06071543Int16Address000101 03 06 07 00 01 35 4301 03 02 00 01 79 84
06081544Int16Communication parameters001601 03 06 08 00 01 05 4001 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

HEXError code
0OK, no faults
2Flow temp sensor error
4Return temp sensor error
6Return temp sensor error, flow temp error
8Low power
ALow power, flow temp error
CLow power, return temp error
ELow 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

HEXParitet (bit 1)Baudrate bps (bit 0)
0Even parity2400
1None parity300
2Even parity600
3Odd parity1200
42400
54800
69600
72400

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~BIT6BIT5BIT4BIT3BIT2BIT1BIT0
Reserved00b:even parity 01b:none parity 10b:even parity 11b:odd parity0000b: 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

FelkodBeskrivning
8001Setting data error
8002Address error
8003The sum of address and lenght if fault (too long or zero)
8030Address 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.