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