Kiểu dữ liệu Modbus

modbus poll

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.

Modbus Poll

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:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

zalo-icon
facebook-icon
tiktok-icon
phone-icon