Qui đổi số âm, số thập phân Modbus

Ngày đăng: 15:12:54 27-10-2018

Số 8 bit

2^7 = 128

2^8 = 256

0111.0000 = 112 (112 < 128) - bit đầu tiên là 0 => số dương

1111.0000 = 240 (240 > 128) - bit đầu tiên là 1 => số âm

Vậy 1111.0000 là số âm bao nhiêu ?

=> 1111.0000B = 240-256 = -16

số 8 bit nếu không dấu : 0~255(0000.0000B ~ 1111.1111B)

số 8 bit nếu có dấu : -128~127(1000.0000B ~ 0111.1111B)

Qui tắc qui đổi A (số thập phân)

If A < 128 then kết quả = A (kết quả>0, max=127)

If A > 127 then kết quả = A-256 (kết quả<0, min=-128)

Ứng dụng vào xử lý thanh ghi Modbus dạng Word.

Các giá trị cần xử lý thường kết hợp 2 thanh ghi High(word=16bit) và Low(word=16bit) = 32bit

Nếu bạn đã từng đọc các thanh ghi Modbus sẽ gặp các vấn đề sau.

Nếu là số không dấu thì quá dễ : kq = A = (H*65536) + L

Nếu là số có dấu :

A = (H*65536) + L

If H < 32768 then kết quả = A

If (NOT (H < 32768)) then kết quả = {[(H-32768)*65536] + L}-2.147.483.648

2^31=2.147.483.648

2^32=4.294.967.296

Để có số thập phân thì bảng địa chỉ modbus sẽ cho hệ số nhân ví dụ 0.001, nhân hệ số vào kết quả để có được số thập phân

(NOT (H < 32768)) # H >= 32768