FAQ – SC07 – Modbus

Mätare: Flödesmätare FM-SC07
Version: 02/2016
Standard kommunikationsparametrar: 9600-N-8-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.
Adress i tabellen nedan: 1

First byteSecond byte
HEXDECData typeDescriptionReading HEXCommandRespondUnitNo of decimals
0200512INT32Pos acc flow0000000001 03 02 00 00 02 C5 B301 03 04 00 00 00 00 FA 33
0202514INT16Pos acc flow – unit and fractional part2C0101 03 02 02 00 01 24 7201 03 02 2C 01 65 44441
0203515INT32Neg acc flow0000000001 03 02 03 00 02 35 B301 03 04 00 00 00 00 FA 33
0205517INT16Pos acc flow – unit and fractional part2C0101 03 02 05 00 01 95 B301 03 02 2C 01 65 44441
04001024INT32Flow rate0000000001 03 04 00 00 02 C5 3B01 03 04 00 00 00 00 FA 33
04021026INT16Flow rate – unit and fractional part350101 03 04 02 00 01 24 FA01 03 02 35 03 EF 15531
04031027INT32Temperature0000000101 03 04 03 00 02 35 3B01 03 04 00 00 00 01 3B F3
04051029INT16Temperature – unit and fractional part400201 03 04 05 00 01 95 3B01 03 02 40 02 0B 45642
04061030INT32Time0000000001 03 04 06 00 02 25 3A01 03 04 00 00 00 00 FA 33
04081032INT16Time – unit and fractional part500001 03 04 08 00 01 84 4401 03 02 50 00 84 44800
04091033INT32Time alarm0000000001 03 04 09 00 02 15 3901 03 04 00 00 00 00 FA 33
040B1035INT16Time alarm – unit and fractional part500001 03 04 0B 00 01 F4 F801 03 02 50 00 84 44800
040C1036INT16Status00D001 03 04 0C 00 01 45 3901 03 02 00 D0 B9 D8
06001536INT16Software version004201 03 06 00 00 01 84 8201 03 02 00 42 38 75Software version00.42
06011537INT16Hardware version041101 03 06 01 00 01 D5 4201 03 02 04 11 7A 88Hardware version04.11
06021538INT32Secondary address013B405301 03 06 02 00 02 65 4301 03 04 01 3B 40 53 FB FF
06041540INT16Primary address (R/W)000101 03 06 04 00 01 C5 4301 03 02 00 01 79 84
06051541INT16Read communication parameters (R/W)005601 03 06 05 00 01 94 8301 03 02 00 56 38 7A
FEFF65279Char(12)Date and time (R/W)

Tabell 1 Modbus register med exempel

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

Utläsning av enheter
Följande betydelse gäller för nedan angivna svar gällande register 0x0202, 0x0205, 0x0402, 0x0405, 0x0408, 0x040B

HEX292C323540415051
DEC4144505364658081
UnitsLm^3L/hm^3/h°CKhd

Förklaring av register 0x040C
Register 0x040C skall tolkas via 16 bit, dock är BIT 15 till B8 ej aktiva utan reserverade för framtida funktioner .

Exempel:
Erhållet värde vid läsning av register 0X040C: 0000 0020 (DEC 32)
Omvandling HEX till BIT: 00000000 00100000, dvs BIT5=1
Betydelse: Sensorsfel

 ValueBIT15 – BIT8BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
0ReservedFactory flag is not setReset sealsNot sensor errorReservedReservedNot power lowTemp normalReserved
1Factory flag is setSet sealsSensor errorPower lowWater temp low

Tabell 2 Tolkning av svar från register 0X040C

Tolkning av register 0x0605
Register 0x0605 skall tolkas via 16 bit, dock är BIT 15 till BIT8 ej aktiva utan reserverade för framtida funktioner.

Erhållet värde vid läsning av register 0X0605: 0000 0056 (DEC 86)
Omvandling HEX till BIT: 00000000 01010100
Betydelse:
BIT 7 & BIT 6: 01 – Modbus
BIT 5 & BIT 4: 01 – Paritet None
BIT 3: 0 – En stop bit
BIT2 till BIT 0: 110 – Baudrate 9600 bps

BIT15~BIT8BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
Reserved01b:Modbus protocol00b:even parity 01b:none parity 10b:even parity 11b:odd parity0b:one stop 1b:two stop000b:2400bps 001b:300bps 010b:600bps 011b:1200bps 100b:2400bps 101b:4800bps 110b:9600bps 111b:2400bps

Tabell 3 Tolkning av svar från register 0x0605

Funktionskod 6 – Skriva enstaka register
Exempel skriv ny adress
Nuvarande adress: 0x02
Funktionskod: 0x06
Register: 0x0604
Ny adress: 0x0003
CRC16 kod: 0x88 0xB1
Koden vi skickar är således: 02 06 06 04 00 03 88 B1
Svaret vi får är: 02 06 06 04 00 03 88 B1
02 – Adress före ändring
06 – Funktionskod
06 04 – Register
00 03 – Ny adress
88 B1 – CRC16

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

Funktionskod 16 – Skriva nya kommunikationsparametrar
Adress: 0x03
Funktionskod: 0x10
Register: 0x0605
Starta skriv från register: 0x001
Antal register som skall skrivas: 0x02
Skrivet värde: 0x0025 (se tabell 3 – odd, 4800 bps)
CRC16 kod: 0x18 0xBE
Koden vi skickar är således: 03 10 06 05 00 01 02 00 25 18 BE
Svaret vi får är: 03 10 06 05 00 01 10 A2
03 – Adress
10 – Funktionskod
06 085- Register
00 01 – Skriven längd
10 A2 – CRC16

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 05), 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 4 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.