DL/T 645

Electric Energy Meter Communication Protocol

Definition

DL/T 645 is the national standard "Multifunctional Electric Energy Meter Communication Protocol," which specifies the data frame format, data identifiers (DI), and reading procedures between smart meters and meter reading devices. It uses RS485 half-duplex, master-slave mode, supporting forward active power, reverse active power, demand, voltage, current, and other data items. Meter reading collectors acquire meter data via DL/T 645, suitable for AMR, energy management, and sub-metering.

Protocol Structure

DL/T 645 has the 1997 version and the 2007 version, with the 2007 version expanding data items and security mechanisms. The frame format includes: frame start (68H), address field (meter address, 6-byte BCD), control code, data field length, data field, checksum, frame end (16H). Data identifiers (DI0~DI3) define data item types, for example, 00 00 01 00 represents the total forward active energy. It supports commands such as read, write, broadcast time calibration, and reset. It uses baud rates of 2400/4800/9600 bps, with the master polling the slave, and the slave responding.

Data Items and Applications

Common data items include: total forward active energy, total reverse active energy, total forward reactive energy, maximum demand, voltage, current, power factor, power, frequency, etc. It supports multi-rate, time-of-use measurement, historical data, event recording, and other extended functions. Meter reading collectors or concentrators connect to meters via serial ports and collect data according to the DL/T 645 protocol. The data is reported to AMR platforms or EMS energy management systems via protocols such as Modbus and MQTT.

Comparison with M-Bus

DL/T 645 is specially used for electric meters and is a domestic power industry standard; M-Bus is mostly used for water meters, gas meters, and heat meters, and is a European standard. Both can be used for AMR meter reading, with different physical layers. Industrial gateways often support multiple meter protocols including DL/T 645, M-Bus, Modbus, etc., to achieve unified collection for multiple meters.

Data identifiers and freeze reads

Four bytes of data identifier decide whether the reply is a given kind of energy, demand, or variable. If the identifier is wrong by one digit, the meter still answers, and the content is a different item. When total forward active energy and the energy in one tariff are close, the mistake waits until settlement. The 1997 and 2007 identifier codes are not interchangeable. A master that reads an old meter with the newer identifiers gets a deny frame or a meaningless reply. Freeze data carries the freeze time. A real-time reading carries the time it was read. Settlement should use the freeze. The real-time value is only for monitoring. A broadcast time set affects every meter on the bus. Do not stack a time-set command and a read command in the same tight cycle.

The conditions are a unique meter address on the bus, the same baud rate and parity, and half-duplex polling: after one frame, wait for the reply or the timeout before sending the next. A meter is slower when it handles a freeze or a load profile, so the timeout cannot be taken from the fastest single-meter response on a bench. A wrong password or operator code may still allow a read, while a parameter write or a reset is refused. Record those separately. A subsequent-frame flag in the control code means the data is not finished. If the master parses only the first frame, the load profile loses its tail.

Address field and baud-rate mismatch

The six-byte address field stores decimal digits one byte at a time. Printed as a string, the order is easy to reverse. If the asset number, the meter number, and the communication address disagree, calling any one of them times out. Some meters accept a shortened address, while the master sends an all-zero wildcard. Several meters answer together, the waveforms overlap, and the collector reports a check error. After the baud rate is changed from the default and the archive is not updated, the next power-up still uses the old rate, and the whole line looks offline.

If a transformer ratio is changed only in the meter and not on the master, or only on the master while the meter still reports primary values, the two energy totals differ by the ratio, and the frame itself has no error flag. The data field is offset by 33 hexadecimal on the wire. Forgetting to subtract it back shifts both the identifier and the value, which looks like garbage rather than a failed link. When a collector sticks a partial frame to the next frame, the start character still lines up and the check fails, and retries increase the load on the bus. After a meter is replaced, read the address and the version once more before storing them. Do not keep the identifier list from the old archive. When water and heat have to be read as well, do not put this protocol's frame on a meter that is not an electricity meter.

Subsequent frames and the tail of a profile

A load profile often takes more than one frame. If the master sees the subsequent-frame flag and parses only the first frame, the second half of the profile is always missing. Daily energy matches and hourly energy does not. Before reading a profile, confirm the record interval and the block count. A wrong interval compresses the whole time axis. Classify a deny frame by its error-information word. An invalid reply, a bad password, and a missing data identifier are not the same failure, and none of them should be logged only as a timeout.

Do not mix a shortened address and a full address in the same poll. When they are mixed, several meters talk at once and check errors appear in a group. After a meter is replaced, read the communication address and the protocol version first, then decide which identifier set to use. If the data-field offset is skipped or applied twice, the identifier lands on a code that does not exist and looks like garbage. Isolate a meter whose baud rate differs from the bus before anything else. Otherwise its bad replies lengthen the wait for every meter. Use freeze time plus communication address as the settlement key. The asset number is only for display in the archive.

A failed read should record the control code and the error-information word. Logging only "no reply" mixes a bad password, a missing identifier, and a bus collision into one class. The time of a load profile is the freeze time inside the meter. The time the master received the frame is only for judging whether communication was prompt. When one catch-up crosses the day boundary, store the two days' freezes separately. Do not fold both into the day of the catch-up. If the meter clock and the master clock differ by more than one tariff period, set the time before reading the freeze, or peak and off-peak energy is already booked wrong. Do not send a time-set to the broadcast address at a busy time. Every meter on the bus will handle it at once. When several meters share a collector, keep each meter's protocol version on its own. One command template cannot cover both an old meter and a new one.

Related Terms

Return to hardware knowledge base