modbus_convert.py 693 B

12345678910111213141516171819202122232425262728293031323334353637
  1. def convert_to_modbus(num):
  2. # 判断输入数值的符号
  3. if num >= 0:
  4. sign = 0
  5. else:
  6. sign = 1
  7. # 如果是负数,将其转换为补码形式
  8. if sign:
  9. num = (~(-num) + 1) & 0xFFFF
  10. return num
  11. def convert_from_modbus(num):
  12. # 判断输入数值的符号
  13. if (num & 0x8000):
  14. sign = 1
  15. else:
  16. sign = 0
  17. # 如果是负数,将其转换回原始的负数形式
  18. if sign:
  19. num = -((~num + 1) & 0xFFFF)
  20. return num
  21. # 测试示例
  22. num = -10
  23. modbus_value = convert_to_modbus(num)
  24. original_value = convert_from_modbus(modbus_value)
  25. assert modbus_value == 65526
  26. assert original_value == -10
  27. print("PASS")