簡體   English   中英

pymodbus讀取儀表寄存器

[英]pymodbus read meter registers

我是Modbus的新手,但是我有一個小項目需要處理。 我需要從電表讀取一些值。 我是從互聯網上的一些示例中編寫的:

import logging
from pymodbus.client.sync import ModbusTcpClient as ModbusClient

logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

client = ModbusClient('192.168.80.210')
client.connect() 
rr = client.read_holding_registers(40012, 1)
print rr

client.close()

似乎正在連接到儀表,因為這是我的輸出:

DEBUG:pymodbus.transaction:Current transaction state - IDLE
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x3 0x9c 0x4c 0x0 0x1
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Transaction failed. (Modbus Error: [Invalid Message] Incomplete message received, expected at least 8 bytes (0 received)) 
DEBUG:pymodbus.framer.socket_framer:Processing: 
DEBUG:pymodbus.transaction:Getting transaction 1
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 8 bytes (0 received)

我想從寄存器40012讀取到40014 ,這是我擁有的Modbusdbus映射: Modbus映射

我感謝您的幫助。 問候,

我認為您應該設置unitport參數,並使用rr.registers來獲取該值,因此您需要知道unit_ID值以及設備端口。

在大多數情況下, unit1port502作為modbus的默認值。

如果要從地址4001240014進行讀取,則可以從40012讀取,其count=3


我改進了您的代碼,嘗試一下:

from pymodbus.client.sync import ModbusTcpClient

client = ModbusTcpClient('192.168.80.210', port=502)

if client.connect():
    res = client.read_holding_registers(40012, count=3, unit=1)

    if not res.isError():
    '''.isError() was implemented in pymodbus version 1.4.0 and above.'''
        print(res.registers)
    else:
        # handling error
        print(res)

client.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM