Giới thiệu chung Giao thức DLMS là một chuẩn giao thức mô tả việc truy xuất dữ liệu trong công tơ điện tử.. Tất cả các đối tượng COSEM của công tơ như IC, SN, OBIS code đều được liệt kê
Trang 1Tìm hiểu giao thức DLMS của Landis+Gyr
Người lập: Dungmanu
I Tổng quan về giao thức DLMS
1 Giới thiệu chung
Giao thức DLMS là một chuẩn giao thức mô tả việc truy xuất dữ liệu trong công
tơ điện tử Giao thức này dựa trên chuẩn IEC 62056
Có nhiều công tơ điện tử trên thế giới sử dụng chuẩn giao thức DLMS như Landis+Gyr (Thuỵ Sỹ), Hexing (Trung Quốc) v.v
2 Các tài liệu tham khảo
3 Các từ viết tắt
II Các lớp dữ liệu
1 Lớp vật lý – Physical Layer
Trang 21.1 Optical interface
Theo giao tiếp này thì giao thức DLMS tuân theo mode E trong giao thức IEC 62056-21 Tốc độ baudrate không cần thiết lập mà được scan tự động 1.2 Electrical interface
Theo giao thức này thì có 3 lựa chọn phần cứng có thể dùng được là: CL0 (20 mA), RS485, RS232
Tốc độ kết nối cần được thiết lập trước Giữa Client và Server cần có tốc
độ giống nhau
2 Lớp liên kết dữ liệu – Data Link Layer (HDLC)
II.1 Tạo và ngắt kết nối HDLC
Để tạo kết nối thành công giữa Client (thiết bị/máy tính) và Server (công tơ) thì cần có giao tiếp thành công của SNRM (set normal response mode request) và UA (unnumbered acknowledge response)
Theo giao thức IEC 62056-46 thì có 2 lý do khiến mất kết nối HDLC là:
- Giữa Client và Server có trao đổi dữ liệu DISC (disconnect request) và
UA (unnumbered acknowledge response)
- Xảy ra lỗi timeout
II.2 Giải pháp chống time-out
Để giải quyết vấn đề time-out thì công tơ sẽ phản hồi lại dữ liệu HDLC
RR (receive ready) của Client bằng chính bản tin RR của công tơ
II.3 Ví dụ bản tin SNRM và UA response
Gửi đi:
7E A0 07 03 21 93 0F 01 7E
Trả về:
7E A0 1E 21 03 73 C3 7A 81 80 12 05 01 80 06 01 3E 07 04 00 00 00 01
08 04 00 00 00 01 07 22 7E
II.4 Cấu trúc chuỗi bản tin HDLC
Trong lớp con MAC sử dụng chuỗi HDLC type 3 có dạng như sau:
Ví dụ:
7E A0 11 03 21 32 B7 3D E6 E6 00 05 01 02 1C 28 53 02 7E
7E : Open Flag
A0 11 : Frame format (type and length) HDLC frame type 3 and length
= 1116 = 1710
03 21 : Address - 03 địa chỉ nguồn; 21 địa chỉ đích
32 : Control (chỉ chứa 1 byte) chỉ ra dạng bản tin yêu cầu hay phản hồi
B7 3D : HCS header check sequence
E6 E6 00 : LLC addresses
05 01 : đọc 1 short name (nếu đọc nhiều short name thì có dạng 05 n)
02
1C 28 : SN đọc value của mã OBIS 1.8.0
53 02 : FCS Frame check sequence
7E : Close Flag
Trang 33 Lớp trình ứng dụng – Application Layer (COSEM)
3.1 Thiết lập liên kết ứng dụng
Để tạo thiết lập cần gửi đúng bản tin AARQ từ Client đến công tơ 3.2 Mức truy xuất dữ liệu và mật khẩu
Chi tiết tham khảo bảng dưới đây:
Chú ý: Tất cả mật khẩu đều có giá trị khởi tạo dạng octel-string[8] là 30 30
30 30 30 30 30 30 (00000000)
III Các đối tượng dữ liệu – Data Objects
1 Đối tượng SN (short name)
Công tơ hỗ trợ mối liên hệ bằng SN dựa theo chuẩn giao thức IEC 62056-53 và 62056-62 Điều đó có nghĩa rằng các đối tượng có thể truy xuất (các thuộc tính và các phương pháp) đều có SN riêng của nó và được truy xuất thông qua SN này Tất cả các đối tượng COSEM của công tơ như IC, SN, OBIS code đều được liệt
kê trong Association SN IC (IC id 12) Để tạo ra Association SN IC (object list)
cần thực hiện tác vụ Collecting Objects
Chú ý: Sau khi cấu hình lại công tơ cần thực hiện lại việc Collecting Objects Phụ lục A.1 mô tả chi tiết các object có thể đọc được bằng DLMS
2 Các lớp giao diện được dùng – Used Interface classes
Tất cả các lớp giao diện được dùng (ICs), Id của chúng, version của chúng được liệt kê theo bảng dưới đây:
Các ICs tuân theo chuẩn IEC 62056-62
3 Các loại dữ liệu được dùng – Used data types
Trang 4Tất cả các loại dữ liệu được dùng tuân theo chuẩn IEC 62056-53 và được liệt kê như bảng dưới đây:
4 Các thuộc tính của IC – register
Class Register thì có 3 attribute: logic name, scaler unit và value được xác định như bảng dưới đây:
Ví dụ:
Khi đọc các thông tin liên quan đến thông số 1.8.1 (công suất hữu công chiều giao tại thời điểm hiện tại theo biểu giá 1) ta có SN của logical_name = 03 E8
Như vậy
SN của Value = 03 E8 + 0x08 = 03 F0
SN của Scaler_unit = 03 E8 + 0x10 = 03 F8
(trích dữ liệu từ Gurux)
Read object type Register index: 3
7E A0 11 03 21 B6 9B FF E6 E6 00 05 01 02 03 F8 87 C2 7E
Reveived data
7E A0 15 21 03 9A 19 C0 E6 E7 00 0C 01 00 02 02 0F FF 16 1E 3F F2 7E
0F
FF = -1 (giá trị bù 2) - 10-1=0.1 scaler
16
1E = 30 (Wh) unit (tra bảng phụ lục A.2)
Trang 5Read object type Register index: 1
7E A0 11 03 21 D8 E3 75 E6 E6 00 05 01 02 03 E8 06 D2 7E
Reveived data
7E A0 17 21 03 BC 5B BD E6 E7 00 0C 01 00 09 06 01 01 01 08 01 FF 7A 30 7E
01 01 01 08 01 FF = 1.1.1.8.1.255
Read object type Register index: 2
7E A0 11 03 21 FA F3 77 E6 E6 00 05 01 02 03 F0 CF 4E 7E
Reveived data
7E A0 18 21 03 DE B6 4F E6 E7 00 0C 01 00 14 00 00 00 00 00 00 1C EB F0 76 7E
00 00 00 00 00 00 1C EB = 7403 (raw value)
5 Các thuộc tính của IC – extended register
Class extended register thì có 5 attribute (có thêm trạng thái và thời gian tính toán) được xác định như bảng dưới đây:
Ví dụ:
Khi đọc các thông tin liên quan đến thông số 1.6.1 (maximum demand theo biểu giá 1) ta có SN của logical_name = D2 F0
Như vậy
SN của Value = D2 F0 + 0x08 = D2 F8
SN của Scaler_unit = D2 F0 + 0x10 = D3 00
SN của Status = D2 F0 + 0x18 = D3 08
SN của Capture Time = D2 F0 + 0x20 = D3 10
(trích dữ liệu từ Gurux)
Read object type ExtendedRegister index: 3
7E A0 11 03 21 1C CB F5 E6 E6 00 05 01 02 D3 00 7B E6 7E
Reveived data
7E A0 15 21 03 F0 45 0C E6 E7 00 0C 01 00 02 02 0F FF 16 1B 92 A5 7E
0F
FF = -1 (10-1=0.1) scaler
16
1B = 27 (W) unit (tra bảng phụ lục A.2)
Read object type ExtendedRegister index: 1
7E A0 11 03 21 3E DB F7 E6 E6 00 05 01 02 D2 F0 2C 08 7E
Reveived data
7E A0 17 21 03 12 2F F1 E6 E7 00 0C 01 00 09 06 01 01 01 06 01 FF 61 20 7E
01 01 01 06 01 FF = 1.1.1.6.1.255 (logic name)
Trang 6Read object type ExtendedRegister index: 2
7E A0 11 03 21 50 A3 7D E6 E6 00 05 01 02 D2 F8 64 84 7E
Reveived data
7E A0 14 21 03 34 D6 90 E6 E7 00 0C 01 00 05 00 00 03 E8 08 DF 7E
00 00 03 E8 = 1000 (raw value)
Read object type ExtendedRegister index: 4
7E A0 11 03 21 72 B3 7F E6 E6 00 05 01 02 D3 08 33 6A 7E
Reveived data
7E A0 11 21 03 56 95 BE E6 E7 00 0C 01 00 11 01 E1 75 7E
11
01 = 1 (00 thì status = null)
Read object type ExtendedRegister index: 5
7E A0 11 03 21 94 8B FD E6 E6 00 05 01 02 D3 10 FA F6 7E
Reveived data
7E A0 1D 21 03 78 DD E1 E6 E7 00 0C 01 00 09 0C 07 DD 0B 08 05 08 1A 2B
FF 80 00 00 07 D0 7E
07 DD 0B 08 = 2013/11/8
05
08 1A 2B = 8:26:43
IV Hệ thống xác định đối tượng – OBject Indentification System (OBIS)
1 Mô tả chung
OBIS định nghĩa các mã định danh (ID-code) cho các mục dữ liệu được dùng trong đo lường công tơ
OBIS code dùng trong đo lường công tơ bao gồm 6 nhóm như hình vẽ
2 Dữ liệu nhóm A
Dữ liệu nhóm A định nghĩa loại năng lượng mà công tơ đo đếm như: Nước, ga, điện
3 Dữ liệu nhóm B
Dữ liệu nhóm B định nghĩa kênh đo lường hoặc kênh truyền thông (dùng trong trường hợp dữ liệu đo đếm xuất phát từ nhiều nguồn khác nhau)
4 Dữ liệu nhóm C
Dưới đây là Bảng mô tả cấu trúc OBIS trong đo lường Điện
Trang 8Bảng định nghĩa góc phần tư - quadrant
Trang 95 Dữ liệu nhóm D
Dưới đây là Bảng mô tả cấu trúc OBIS trong đo lường Điện
Trang 116 Dữ liệu nhóm E
Dưới đây là Bảng mô tả cấu trúc OBIS trong đo lường Điện
a Các biểu giá
b Mối quan hệ GÓC
7 Dữ liệu nhóm F
8 Các bảng dữ liệu khác
a Bảng dữ liệu LỖI
b Bảng list các Object
Trang 12V Cách thức liệt kê các Object – Collecting Object
1 Mô tả chung
Bằng việc Collecting Object ta có thể map được SN tương ứng với mã OBIS Chú ý rằng tuỳ theo model mà cùng 1 OBIS lại có SN khác nhau Do vậy việc thực hiện Collecting Object là điều bắt buộc khi bắt đầu đọc 1 công tơ “mới”
2 Chu trình truyền nhận khi thực hiện quá trình Collecting Object
Request Object
7E A0 11 03 21 38 ED 92 E6 E6 00 05 01 02 FA 08 18 9E 7E
*) FA 08 là thuộc tính về Value của SN “FA 00” tức là liệt kê các object tồn tại trong công tơ
Reveived data
7E A8 5B 21 03 52 88 68 E6 E7 00 0C 01 00 01 82 01 15 02 04 10 00 08 12 27
14 11 50 09 06 00 00 F0 0D 00 FF 02 04 10 90 88 12 00 03 11 00 09 06 00 00 61
61 00 FF 02 04 10 01 68 12 00 03 11 00 09 06 00 00 60 F0 0C FF 02 04 10 60 E0
12 00 07 11 01 09 06 01 00 63 62 00 FF DC 97 7E
Get next frame:
7E A0 07 03 21 51 11 E4 7E
Reveived data
7E A8 75 21 03 54 AF 2C 02 04 10 62 70 12 00 07 11 01 09 06 01 00 63 01 00
FF 02 04 10 64 00 12 00 07 11 01 09 06 00 00 62 01 00 7E 02 04 10 2B C0 12 00
08 11 00 09 06 00 00 01 00 00 FF 02 04 10 44 28 12 2A 94 11 00 09 06 01 01 63
62 96 FF 02 04 10 44 A0 12 2A 9E 11 00 09 06 01 01 63 62 81 FF 02 04 10 45 48
12 2A 9E 11 00 09 06 01 01 63 62 82 FF DC E7 7E
Get next frame:
7E A0 07 03 21 71 13 C5 7E
Reveived data
7E A8 75 21 03 56 BD 0F 02 04 10 45 F0 12 2A 9E 11 00 09 06 01 01 63 62 83
FF 02 04 10 46 98 12 2A 9E 11 00 09 06 00 00 7F 00 00 00 02 04 10 47 40 12 2A 9E 11 00 09 06 00 00 7F 00 00 00 02 04 10 47 E8 12 2A 9E 11 00 09 06 01 01 63
62 8D FF 02 04 10 48 90 12 2A 9E 11 00 09 06 00 00 7F 00 00 00 02 04 10 49 38
12 2A 9E 11 00 09 06 00 00 7F 00 00 00 C2 D8 7E
……
Get next frame:
7E A0 07 03 21 91 1D 22 7E
Reveived data
7E A0 3F 21 03 38 FC 15 02 04 10 8F 10 12 00 03 11 00 09 06 01 01 01 02 04 FF
02 04 10 8F 78 12 00 03 11 00 09 06 01 01 02 02 04 FF 02 04 10 8F E0 12 00 03
11 00 09 06 01 01 0D 23 00 FF 71 6A 7E
Phân tích:
Trong các chuỗi dữ liệu trả về ta quan tâm tới các chuỗi con có length = 18 bytes thường bắt đầu bằng 02 04 10
Ví dụ 1:
02 04 10 00 08 12 27 14 11 50 09 06 00 00 F0 0D 00 FF
Cụ thể:
Trang 1302 04 : tag của chuỗi trong đó 02 thể hiện kiểu datastruct và 04 thể hiện số phần
tử nằm trong datastruct
10 : remain length
00 08 : logical_name (tên dữ liệu)
12 27 : tag 12 với giá trị 27 thể hiện là object này ko tồn tại trong công tơ tag 12 với giá trị 00 sẽ thể hiện object là tồn tại trong công tơ (xét ở ví dụ dưới)
14 : tag IC_id (tham khảo bảng phía trên)
11 50 : tag 11 là version với giá trị là 50(hex) -> ko quan trọng
09 06 : tag thể hiện obis code với độ dài bằng 6
00 00 F0 0D 00 FF : bảng obis với 6 bytes
Như vậy dựa trên chuỗi trên ta có thể map được giữa “00 08” và “00 00 F0 0D
00 FF”
Ví dụ 2:
02 04 10 90 88 12 00 03 11 00 09 06 00 00 61 61 00 FF
02 04 : tag của chuỗi
10 : remain length
90 88 : logical_name (tên dữ liệu)
12 00 : tag 12 với giá trị 00 sẽ thể tện object là tồn tại trong công tơ
03 : tag IC_id (tham khảo bảng phía trên)
11 00 : tag 11 là version với giá trị là 00(hex)
09 06 : tag thể hiện obis code có độ dài 6 bytes
00 00 61 61 00 FF : bảng obis với 6 bytes = 0.0.97.97.0.255
VI Các bảng phụ lục
Phụ lục A.1 Các đối tượng dữ liệu
Trang 16Phụ lục A.2 Bảng mã Đơn vị