Trong bài viết Modbus là gì, chúng ta đã tìm hiểu các kiến thức cơ bản về Modbus. Trong bài viết này, mình sẽ chia sẻ về các kiểu dữ liệu trong Modbus và các tên gọi khác nhau của chúng.

Signed / Short / INT16
Kiểu dữ liệu số nguyên có dấu 16 bit (hay còn gọi là 1 word). Giá trị của nó nằm trong dải từ -32768 tới +32767
Unsigned / Unsigned Short / UINT16
Kiểu dữ liệu số nguyên không dấu 16 bit (hay còn gọi là 1 word). Giá trị của nó nằm trong dải từ 0 tới 65535
32 Bit signed integer / INT32
Nó kết hợp 2 thanh ghi 16 bits (02 words) thành số nguyên có dấu 32 bit. Nó có 4 cách thể hiện phụ thuộc vào kiểu thứ tự của byte / word.
- 32 Bit signed Big-endian (ABCD)
- 32 Bit signed Little-endian(CDAB)
- 32 Bit signed Big-endian byte swap (BADC)
- 32 Bit signed Little-endian byte swap (DCBA)
Ví dụ:
Nếu thứ tự các byte theo kiểu Big-endian. Số thập phân 123456789, được thể hiện trong dạng hex là 07 5B CD 15. Các byte sẽ được truyền trên bus RS485 theo thứ tự 07 5B CD 15.
Ngược lại nếu thứ tự các byte theo kiểu Little-Endian. Các byte sẽ được truyền trên bus RS485 theo thứ tự 15 CD 5B 07.
Dải giá trị của INT32 từ -2.147.483.648 tới +2.147.483.647
32 Bits unsigned integer / UINT32
Tương tự INT32, UINT32 cũng bao gồm 2 thanh ghi. Nó cũng được thể hiện trong 4 dạng.
- 32 Bit unsigned Big-endian (ABCD)
- 32 Bit unsigned Little-endian(CDAB)
- 32 Bit unsigned Big-endian byte swap (BADC)
- 32 Bit unsigned Little-endian byte swap (DCBA)
Dải giá trị của UINT32 từ 0 tới +4.294.967.295
64 Bits signed integer / INT64
INT64 bao gồm 4 thanh ghi (4 words). Nó cũng được thể hiện trong 4 dạng.
- 64 Bit signed Big-endian (ABCD)
- 64 Bit signed Little-endian(CDAB)
- 64 Bit signed Big-endian byte swap (BADC)
- 64 Bit signed Little-endian byte swap (DCBA)
Dải giá trị của INT64 từ -9.223.372.036.854.775.808 tới 9.223.372.036.854.775.807
64 Bits signed integer / UINT64
INT64 bao gồm 4 thanh ghi (4 words). Nó cũng được thể hiện trong 4 dạng.
- 64 Bit unsigned Big-endian (ABCD)
- 64 Bit unsigned Little-endian(CDAB)
- 64 Bit unsigned Big-endian byte swap (BADC)
- 64 Bit unsigned Little-endian byte swap (DCBA)
Dải giá trị của UINT64 từ 0 tới 18.446.744.073.709.600.000
32 bit floating / FLOAT32
Kiểu dữ liệu bao gồm 2 thanh ghi. Nó cũng được thể hiện trong 4 dạng.
- float Big-endian (ABCD)
- float Little-endian(CDAB)
- float Big-endian byte swap (BADC)
- float Little-endian byte swap (DCBA)
Ví dụ:
Số float 123456.00 có dạng hex là 47 F1 20 00. Nếu thứ tự sắp xếp byte là Big-endian thì các byte sẽ được gửi qua RS485 bus theo tuần tự 47 F1 20 00.
Dải giá trị là từ -3.4028E+38 tới +3.4028E+38
Ngoài các kiểu dữ liệu phổ thông ở phía trên, một số bản tin modbus còn sử dụng một số kiểu dữ liệu như ASCII (bảng mã ASCII 8 bit), BITMAP (16 bits, 1 word) hoặc Double (4 words).
Các bạn có thể tham khảo thêm một số cách quy định kiểu dữ liệu trong Modbus:
