modbus_tk模塊


 

  modbus_tk模塊 通過modbus-RTU 讀取地址,調用后返回反饋數值和故障信息。

  modbus_tk模塊安裝

  pip install pymodbus_tk

下面代碼功能;讀取地址為0x42700 長度為43個數值。

 1 # -*- coding: utf_8 -*-
 2 
 3  
 4 import serial
 5 import modbus_tk
 6 import modbus_tk.defines as cst
 7 from modbus_tk import modbus_rtu
 8 
 9 def mod(PORT="com10"):
10     #print("加載modbus_tk 完成")
11     red = []
12     alarm = ""
13     try:
14         #設定串口為從站
15         master = modbus_rtu.RtuMaster(serial.Serial(port=PORT,
16         baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0))  
17         master.set_timeout(5.0)
18         master.set_verbose(True)
19             
20         #讀保持寄存器 03H 1站號 地址2700 長度0-42 
21         red = master.execute(1, cst.READ_HOLDING_REGISTERS, 2700, 43) #這里可以修改需要讀取的功能碼
22         #print(red)
23         alarm="正常"
24         return list(red),alarm 
25     
26     except Exception as exc:
27         #print(str(exc))
28         alarm = (str(exc))
29         
30     return red, alarm      ##如果異常就返回[],故障信息
31     
32 if __name__ == "__main__":  
33     mod()

讀取其它數值的功能碼,帶反饋報文。

功能碼:

READ_COILS                                            H01  讀線圈
READ_DISCRETE_INPUTS                      H02  讀離散輸入
READ_HOLDING_REGISTERS                H03  讀寄存器
READ_INPUT_REGISTERS                      H04  讀輸入寄存器
WRITE_SINGLE_COIL                               H05  寫單一線圈
WRITE_SINGLE_REGISTER                     H06  寫單一寄存器
WRITE_MULTIPLE_COILS                        H15  寫多個線圈 
WRITE_MULTIPLE_REGISTERS              H16  寫多寄存器 

        #讀保持寄存器 03H 1站號 0地址 長度2 
        logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 2))
        #01 03 00 00 00 02 C4 0B


        # 讀輸入寄存器 04H    
        logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 0, 8))
        #反饋:01 04 00 00 00 08 F1 CC

        
        # 讀線圈寄存器 01H   
        logger.info(master.execute(1, cst.READ_COILS, 0, 6))
        #反饋:01 01 00 00 00 06 BC 08


        
        # 讀離散輸入寄存器 02H
        logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 16))
        #反饋:01 02 00 00 00 10 79 C6 



        # 單個讀寫寄存器操作 06H
        # 寫寄存器地址為0的保持寄存器 06H  
        logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=6))
        #反饋:01 06 00 00 00 06 09 C8 
        logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 1))
        #反饋:01 03 00 00 00 01 84 0A


        
        # 寫寄存器地址為0的線圈寄存器,寫入內容為0(位操作) 05H
        logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 0, output_value=0))
        #反饋:01 05 00 00 00 00 CD CA 
        logger.info(master.execute(1, cst.READ_COILS, 0, 1))
        #反饋:01 01 00 00 00 01 FD CA


        
        # 多個寄存器讀寫操作 10H
        # 寫寄存器起始地址為0的保持寄存器,操作寄存器個數為4
        logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 11, output_value=[20,21,22,23]))
        #反饋:01 10 00 0B 00 04 08 00 14 00 15 00 16 00 17 AB A9
        logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 4))
        #反饋:01 03 00 00 00 04 44 09

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM