UNI-T UTE9811+ Smart Digital Power Meter User Manual
- October 30, 2023
- UNI-T
Table of Contents
UTE9811+ Smart Digital Power Meter
User Manual
UTE9811+ Smart Digital Power Meter
Modbus Programming Manual
REV 00 2023.2
Copyright
2023 Uni-Trend Technology (China) Co., Ltd.
Brand Information
UNI-T is the registered trademark of Uni-Trend Technology (China) Co., Ltd.
Software Version
00.00.01
Software upgrade may have some change and add more function, please subscribe
UNI-T website to get the new version or contact UNI-T.
Statement
- UNI-T products are protected by patents (including obtained and pending) in China and other countries and regions.
- UNI-T reserves the right to change specifications and prices.
- The information provided in this manual supersedes all previous publications.
- The information provided in this manual is subject to change without notice.
- UNI-T shall not be liable for any errors that may be contained in this manual. For any incidental or consequential damages arising out of the use or the information and deductive functions provided in this manual.
- No part of this manual shall be photocopied, reproduced or adapted without the prior written permission of UNI-T.
Product Certification
UNI-T has certified that the product conforms to China national product standard and industry product standard as well as ISO9001:2008 standard and ISO14001:2004 standard. UNI-T will go further to certificate product to meet the standard of other member of the international standards organization.
Chapter 1 Modbus Progamming
1.1 Modbus
Modbus is a widely used field bus protocol. Multiple slave machines can easily
network with the host through Modbus, the host computer can be PC or PLC.
Modbus has two varieties, which is Modbus-RTU and ModbusASC.
UTE9811+only supports Modbus-RTU.
1.2 Communication Interface and Setting
The detailed explanation can refer to “Chapter 6 Communication Setting” and
“Chapter 8 Communication Interface” of UTE9811+ User’s Manual.
1.3 Data Format of Communication
During communication, data is return in the format of word (two bytes) . Each
returned word with the high byte in the front and low byte in the behind. If
two words continuous return (such as floating point number number or long
integer), then high byte in the front, the low byte in the behind.
Data Format
| Number of Register| Number of Byte|
Description
---|---|---|---
Byte Data| | 1|
Integer Data| 1| 2| A return, high byte in the front and low byte in the
behind
Long Integer Data| 2| 4| Return in two words, high byte in the front and low
byte in the behind
Floating Point
Number Data
1.4 Interconversion of Word and Float Point
A register in Modbus protocol is 16 bits, that is a word. The previous section
mentioned that floating-point take up two registers, i.e., two words. After
receiving byte data, user needs to convert a word to a floating-point or a
floating-point number to a word.
The following code is good example for interconversion of word and float
point.
/ C program for converting a floating point number to two words /
void FloatToWord(float Data,u16 Word)
{
union
{
float Data;
unsigned char Byte[4];
}FloatData;
FloatData.Data=Data;
Word[0]=(u16)FloatData.Byte[3]<<8|FloatData.Byte[2];
Word[1]=(u16)FloatData.Byte[1]<<8|FloatData.Byte[0];
}
/ C program for converting two words to a floating point number /
float WordToFloat(const u16 Word)
{
union
{
float Data;
unsigned char Byte[4];
}FloatData;
FloatData.Byte[3]=(Word[0]>>8)&0xFF;
FloatData.Byte[2]=(Word[0])&0xFF;
FloatData.Byte[1]=(Word[1]>>8)&0xFF;
FloatData.Byte[0]=(Word[1])&0xFF;
return FloatData.Data;
}
1.5 Modbus-RTU
1.5 1 Function code 03H,read multiple words
This command can read at least one word. The following example issues a read
command from the master station to slave station 1, reading two consecutive
words that start from address 0096H (150) .
Command Message of Master Station
Slave address | 01H |
---|---|
Function code | 03H |
Position of initial data | 00H (high byte) |
96H (low byte)
Data number (calculating in word)| 00H
02H
CRC(Check Low)| 24H (low byte)
CRC(Check High)| 27H (high byte)
Respond Message of Slave Station(Normal)
Slave address | 01H |
---|---|
Function code | 03H |
Data number ( calculating in byte) | 04H |
Start data address 0096H | 40H (high byte) |
DDH (low byte)
The second data
address 0097H
| 1EH (high byte)
B8H (low byte)
CRC(Check Low)| 76H (low byte)
CRC(Check High)| 1BH (high byte)
Respond Message of Slave Station(Abnormal)
Slave address | 01H |
---|---|
Function code | 83H |
Error Code | 02H |
CRC(Check Low) | C0H (low byte) |
CRC(Check High) | F1H (high byte) |
1.5.2 Function code 10H,writing multiple words
This command can write at least one word. The following example issues a write
command from the master station to slave station 1, writing data of two words
0003H and 0002H from the start address 0065H(101) .
That is write 0003H into address 0065H, write 0002H into address 00066H. The
slave replies to the master station when the write is completed.
Command Message of Master Station
Slave address | 01H |
---|---|
Function code | 10H |
Position of initial data | 00H |
65H
Data number (calculating in word)| 00H (high byte)
02H (low byte)
Data number ( calculating in byte)| 04H
The first data address| 00H (high byte)
03H (low byte)
The second data
address
| 00H (high byte)
02H (low byte)
CRC(Check Low)| 44 (low byte)
CRC(Check High)| 79 (high byte)
Respond Message of Slave Station(Abnormal)
Slave address | 01H |
---|---|
Function code | 90H |
Error Code | 02H |
CRC(Check Low) | CDH (low byte) |
CRC(Check High) | C1H (high byte) |
Respond Message of Slave Station(Normal)
Slave address | 01H |
---|---|
Function code | 10H |
Position of initial data | 00H (high byte) |
65H (low byte)
Data number (calculating in
word)
| 00H (high byte)
02H (low byte)
CRC(Check Low)| 51H (low byte)
CRC(Check High)| D7H (high byte)
1.5 3 Description of Error Code
Error code parsing for respond message of slave station (abnormal) as shown in
the following figure.
Error Code | Name | Description |
---|---|---|
1 | Illegal function code | The slave machine does not support this function |
code.
2| Illegal data address| The starting data position or a combination of the
starting data position and the number of transmitted data received from the
machine is not allowed.
3| Illegal data value| Data received from the machine is not allowed.
1.6 Register List
The data register of UTE9811+ as shown in the following table.
*Notes:
1.R represents it can be read and supports command 03H. W represents it can be
written and supports command 10H.
2. “Voltage range”, “current range”, “user’s defined input signal frequency”
can only be used when set the user’s grade to High. The specific step can
refer to section 7.3 user’s grade in UTE9811+ User’s Manaul.
Data Name| Data Format| Unit| Initial Address| Number of Register|
Read/Write
|
Remarks
---|---|---|---|---|---|---
Product Information
Product information|
ASCII
| |
0
|
50
|
R
| “UNI-T,UTE9811+ ,012345678,F1.02”
Retain| | | 50| 50| R|
Parameter Setting
Measurement mode| U16| | 100| 1| R/W| 0: normal TRMS (RMS)
1: harmonic distortion (THD%) 2: measured value of harmonic (THD)
3: crest factor (CF)
4: TRMS harmonic (HARM-RMS)
Voltage range| U16| | 101| 1| R/W| 0 (Auto), 1 (75V), 2 (150V), 3 (300V), 4
(600V)
Current range| U16| | 102| 1| R/W| 0 (Auto), 1 (0.2A), 2 (1A), 3 (4A),4 (20A)
Update cycle| U16| | 103| 1| R/W| 0 (0.1s), 1 (0.25s), 2 (0.5s), 3 (1s), 4
(2s), 5 (5s)
Average| U16| | 104| 1| R/W| 0 (the average is turned off), 1 (8 times), 2 (16
times),3 (32 times), 4 (64 times)
Data hold| U16| | 105| 1| R/W| 0 (forbidden), 1 (enabled)
Display| U16| | 106| 1| R/W| 0 (display PF value), 1 (display frequency value)
Mute| U16| | 107| 1| R/W| 0 (forbidden), 1 (enabled)
Upper limit of current alarm| Float| A| 108| 2| R/W| 0.000~40.000,
When the upper limit and the lower limit is set to 0 at the same time, it
represents the alarm is forbidden.
---|---|---|---|---|---|---
Lower limit of current alarm| Float| A| 110| 2| R/W
Upper limit of power limit| Float| W| 112| 2| R/W| 0.000~48000.0,
When the upper limit and the lower limit is set to 0 at the same time, it
represents the alarm is forbidden.
Lower limit of power limit| Float| W| 114| 2| R/W
Alarm delay| Float| S| 116| 2| R/W| 0.0~99.9
User’s defined input signal frequency| Float| Hz| 118| 2| R/W| 0.0 or
40.0~70.0;0.0 represents this function is disabled.
Measurement data type| U16| | 120| 1| R/W| 0: real-time measurement data 1:
recently update TRMS data
Parament Configuration of Instrument
Default setting| U16| | 140| 1| W| 0 (forbidden), 1 (set the parameter to the
default value)
Save parameter| U16| | 141| 1| W| 0 (forbidden), 1 (save the parameter into
system storage for next use)
Measurement Data
Voltage value| Float| V| 150| 2| R| The numerical value is related to the
measurement model.
Current value| Float| A| 152| 2| R| The numerical value is related to the
measurement model.
Active power| Float| W| 154| 2| R|
Power factor| Float| | 156| 2| R|
Frequency of voltage| Float| Hz| 158| 2| R|
Alarm state of current| U16| | 160| 1| R| 0 (alarm forbidden), 1 (wait for
connect to the load),
2 (testing), 3 (the result is normal), 4 (the result is low), 5 (the result is
high)
Alarm state of power| U16| | 161| 1| R
Data update count| U16| | 162| 1| R| The latest measurements are available
when changes in this data are detected.
Measurement Data of Crest Factor
Voltage CF| Float| | 190| 2| R| The ratio of voltage crest value and RMS
voltage.
Current CF| Float| | 192| 2| R| The ratio of current crest value and RMS
current.
---|---|---|---|---|---|---
Measurement Data of Harmonic
Total voltage distortion factor| Float| %| 200| 2| R|
Total voltage distortion factor
Measured value of total voltage
distortion factor| Float| V| 202| 2| R| Measured value of total voltage
distortion factor
Total current distortion factor| Float| %| 204| 2| R| Total current distortion
factor
Measured value of total current distortion factor| Float| A| 206| 2| R|
Measured value of total current distortion factor
Voltage distortion factor of 1~50 times| Float| %| 208| 100| R| Voltage
distortion factor of 1~50 times
Measured voltage value of 1~50 times| Float| V| 308| 100| R| Measured voltage
value of 1~50 times
Current distortion factor of 1~50 times| Float| %| 408| 100| R| Current
distortion factor of 1~50 times
Measured current value of 1~50 times| Float| A| 508| 100| R| Measured current
value of 1~50 times
Total RMS voltage| Float| V| 608| 2| R| Total RMS voltage
Total RMS current| Float| A| 610| 2| R| Total RMS current
Total RMS active power| Float| W| 612| 2| R| Total RMS active power
Floating point number 9.91E+37 in measurement data, which represents invalid
data, window displays “—-“;
Floating point number 9.9E+37 in measurement data, which represents the data
is overrange or overflow, window displays “ –oL-“ or “–oF-“.
Appendix 1 CRC Calculation
const unsigned char aucCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00,
0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,
0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00,
0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
};
const unsigned char aucCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05,
0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA,
0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA,
0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15,
0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0,
0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35,
0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B,
0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA,
0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27,
0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64,
0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,
0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE,
0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7,
0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54,
0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99,
0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E,
0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46,
0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40
};
nsigned short usMBCRC16( unsigned char pucFrame, unsigned short usLen )
{
unsigned char ucCRCHi = 0xFF;
unsigned char ucCRCLo = 0xFF;
int iIndex;
while( usLen– )
{
iIndex = ucCRCLo ^ ( pucFrame++ );
ucCRCLo = ( unsigned char)( ucCRCHi ^ aucCRCHi[iIndex] );
ucCRCHi = aucCRCLo[iIndex];
}
return ( unsigned short )( ucCRCHi << 8 | ucCRCLo );
}
unsigned char SendBuf[30];
void main(void)
{
unsigned short CRC;
unsigned short SendLen;
SendLen = 0;
SendBuf[SendLen++] = 0x01;
SendBuf[SendLen++] = 0x03;
SendBuf[SendLen++] = 0x00;
SendBuf[SendLen++] = 0x96;
SendBuf[SendLen++] = 0x00;
SendBuf[SendLen++] = 0x02;
CRC = usMBCRC16(SendBuf,SendLen); /start to calculating CRC /
SendBuf[SendLen++] = CRC&0xFF; / CRC low byte /
SendBuf[SendLen++] = (CRC>>8)&0xFF; / CRC high byte /
}
Read User Manual Online (PDF format)
Read User Manual Online (PDF format) >>