master.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # -*- coding: utf_8 -*-
  2. import binascii
  3. import sys
  4. import logging
  5. import time
  6. import traceback
  7. import modbus_tk
  8. import modbus_tk.defines as cst
  9. import modbus_tk.modbus_tcp as modbus_tcp
  10. import modbus_tk.modbus_rtu_over_tcp as modbus_rtu_over_tcp
  11. import modbus_rtu_over_tcp_special
  12. logger = modbus_tk.utils.create_logger("console")
  13. import struct
  14. if __name__ == "__main__":
  15. try:
  16. # 连接MODBUS TCP从机
  17. # master = modbus_tcp.TcpMaster(host="192.168.1.254", port=4001)
  18. master = modbus_rtu_over_tcp_special.RtuOverTcpMasterSpecial(host="192.168.1.48", port=4001)
  19. # master = modbus_tcp.TcpMaster(host="192.168.1.48", port=4001)
  20. # master = modbus_tcp.TcpMaster(host="192.168.127.254", port=502)
  21. logger.info("connected")
  22. print('connected')
  23. # 读保持寄存器
  24. master.set_timeout(10)
  25. master.set_verbose(True)
  26. try:
  27. msg = time.strftime('%Y-%m-%y %H:%M:%S')
  28. res1 = master.execute(0xcb, 3, 0x1000, 0x0014)
  29. # res1 = master.execute(0x01, 0x02, 0x0000, 16)
  30. # res1 = master.execute(0xcb, 3, 4230, 124)
  31. # res1 = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10)
  32. # res1 = master.execute(1, 2, 1, 0xF)
  33. print('res1 = ', res1)
  34. # t1 = hex(res1[0])[2:] + hex(res1[1])[2:]
  35. # print("t1", t1)
  36. # t2 = struct.unpack('>f', binascii.unhexlify(t1.replace(' ', '')))[0]
  37. # print("t2", t2)
  38. except Exception as e:
  39. print("e=", e)
  40. # 读输入寄存器
  41. # logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 0, 16)) #功能码 4
  42. # # 读线圈寄存器
  43. # logger.info(master.execute(1, cst.READ_COILS, 0, 16)) #功能码 1
  44. # # 读离散输入寄存器
  45. # logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 16)) #功能码 2
  46. # 单个读写寄存器操作
  47. # # 写寄存器地址为0的线圈寄存器,写入内容为0(位操作)
  48. # logger.info(master.execute(3, cst.WRITE_SINGLE_COIL, 0x0143, output_value=1)) #功能码 5
  49. # logger.info(master.execute(3, cst.READ_COILS, 0x0140, 6)) #功能码 1
  50. # 多个寄存器读写操作
  51. # 写寄存器起始地址为0的保持寄存器,操作寄存器个数为4
  52. # logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 0, output_value=[5, 4, 3, 2, 1])) #功能码 15
  53. # logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 4)) #功能码 3
  54. # # 写寄存器起始地址为0的线圈寄存器
  55. # logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS, 0, output_value=[1, 1, 1, 1])) #功能码 16
  56. # logger.info(master.execute(1, cst.READ_COILS, 0, 4)) #功能码 1
  57. except modbus_tk.modbus.ModbusError as e:
  58. logger.error("%s- Code=%d" % (e, e.get_exception_code()))