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 byte | Second byte | |||||||
HEX | DEC | Data type | Description | Reading HEX | Command | Respond | Unit | No of decimals |
0200 | 512 | INT32 | Pos acc flow | 00000000 | 01 03 02 00 00 02 C5 B3 | 01 03 04 00 00 00 00 FA 33 | ||
0202 | 514 | INT16 | Pos acc flow – unit and fractional part | 2C01 | 01 03 02 02 00 01 24 72 | 01 03 02 2C 01 65 44 | 44 | 1 |
0203 | 515 | INT32 | Neg acc flow | 00000000 | 01 03 02 03 00 02 35 B3 | 01 03 04 00 00 00 00 FA 33 | ||
0205 | 517 | INT16 | Pos acc flow – unit and fractional part | 2C01 | 01 03 02 05 00 01 95 B3 | 01 03 02 2C 01 65 44 | 44 | 1 |
0400 | 1024 | INT32 | Flow rate | 00000000 | 01 03 04 00 00 02 C5 3B | 01 03 04 00 00 00 00 FA 33 | ||
0402 | 1026 | INT16 | Flow rate – unit and fractional part | 3501 | 01 03 04 02 00 01 24 FA | 01 03 02 35 03 EF 15 | 53 | 1 |
0403 | 1027 | INT32 | Temperature | 00000001 | 01 03 04 03 00 02 35 3B | 01 03 04 00 00 00 01 3B F3 | ||
0405 | 1029 | INT16 | Temperature – unit and fractional part | 4002 | 01 03 04 05 00 01 95 3B | 01 03 02 40 02 0B 45 | 64 | 2 |
0406 | 1030 | INT32 | Time | 00000000 | 01 03 04 06 00 02 25 3A | 01 03 04 00 00 00 00 FA 33 | ||
0408 | 1032 | INT16 | Time – unit and fractional part | 5000 | 01 03 04 08 00 01 84 44 | 01 03 02 50 00 84 44 | 80 | 0 |
0409 | 1033 | INT32 | Time alarm | 00000000 | 01 03 04 09 00 02 15 39 | 01 03 04 00 00 00 00 FA 33 | ||
040B | 1035 | INT16 | Time alarm – unit and fractional part | 5000 | 01 03 04 0B 00 01 F4 F8 | 01 03 02 50 00 84 44 | 80 | 0 |
040C | 1036 | INT16 | Status | 00D0 | 01 03 04 0C 00 01 45 39 | 01 03 02 00 D0 B9 D8 | ||
0600 | 1536 | INT16 | Software version | 0042 | 01 03 06 00 00 01 84 82 | 01 03 02 00 42 38 75 | Software version | 00.42 |
0601 | 1537 | INT16 | Hardware version | 0411 | 01 03 06 01 00 01 D5 42 | 01 03 02 04 11 7A 88 | Hardware version | 04.11 |
0602 | 1538 | INT32 | Secondary address | 013B4053 | 01 03 06 02 00 02 65 43 | 01 03 04 01 3B 40 53 FB FF | ||
0604 | 1540 | INT16 | Primary address (R/W) | 0001 | 01 03 06 04 00 01 C5 43 | 01 03 02 00 01 79 84 | ||
0605 | 1541 | INT16 | Read communication parameters (R/W) | 0056 | 01 03 06 05 00 01 94 83 | 01 03 02 00 56 38 7A | ||
FEFF | 65279 | Char(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
HEX | 29 | 2C | 32 | 35 | 40 | 41 | 50 | 51 |
DEC | 41 | 44 | 50 | 53 | 64 | 65 | 80 | 81 |
Units | L | m^3 | L/h | m^3/h | °C | K | h | d |
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
Value | BIT15 – BIT8 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
0 | Reserved | Factory flag is not set | Reset seals | Not sensor error | Reserved | Reserved | Not power low | Temp normal | Reserved |
1 | Factory flag is set | Set seals | Sensor error | Power low | Water 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~BIT8 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
Reserved | 01b:Modbus protocol | 00b:even parity 01b:none parity 10b:even parity 11b:odd parity | 0b:one stop 1b:two stop | 000b: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
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 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.