pymodbus-dev / pymodbus

A full modbus protocol written in python
Other
2.27k stars 929 forks source link

Print value in holding register in mode rtu #50

Closed ghost closed 10 years ago

ghost commented 10 years ago

Hello, I want to read and print the values stored in holding registers 00 to 03, and I succeeded with Modpoll, but when I tried with this code in python, the result is None ps: My python version is 2.7.3

!/usr/bin/env python

from pymodbus.client.sync import ModbusSerialClient as ModbusClient client=ModbusClient(method='rtu',port='/dev/ttyUSB0',baudrate=9600,timeout=1) client.connect()

response=client.read_holding_registers(0,4,unit=1) print response client.close()

Could you give a hand on this issue? tks in advance

karlp commented 10 years ago

Are you actually desiring unit 1? Do you want to use register or address numbering? (0 based or 1 based?) What logging do you get when you use the logging from the examples?

On 07/30/2014 06:17 PM, Haoming Wang wrote:

Hello, I want to read and print the values stored in holding registers 00 to 04, and I succeeded with Modpoll, but when I tried with this code in python, the result is None

!/usr/bin/env python

from pymodbus.client.sync import ModbusSerialClient as ModbusClient client=ModbusClient(method='rtu',port='/dev/ttyUSB0',baudrate=9600,timeout=1) client.connect()

response=client.read_holding_registers(0,4,unit=1) print response client.close()

Could you give a hand on this issue? tks in advance

— Reply to this email directly or view it on GitHub https://github.com/bashwork/pymodbus/issues/50.

ghost commented 10 years ago

My device's slave id is 1, so I think 'unit' should be 1. According to the documentation, it is 0 based. I try this code today without changing anything, and the result is different, which is 'ReadRegisterResponse (4)', its type is :class 'pymodbus.register_read_message.ReadHoldingRegistersResponse'

I just add a sentence: "print response.getRegister(number of the register)" and I succeed in reading its value! Thanks for your help.

tanmayee30 commented 7 years ago

Hello, I have successfully got the register values using code: code: ` import pymodbus import serial from pymodbus.pdu import ModbusRequest from pymodbus.client.sync import ModbusSerialClient as ModbusClient

initialize a serial RTU client instance

from pymodbus.transaction import ModbusRtuFramer

!/usr/bin/env python

from pymodbus.client.sync import ModbusSerialClient as ModbusClient

client=ModbusClient(method='rtu',port='/dev/ttyUSB0',baudrate=9600,timeout=1,parity='N') client.connect()

response=client.read_holding_registers(0004,6,unit=1) print response.getRegister(0); // This returns value of only one register print response.registers[0:] // This returns the response for whole length of registers client.close() ` hope it will be helpful.

007-akash commented 6 years ago

I have used the same process above. But I have 3 slaves and having different sets of holding registers. I want to create an event on one slave that if one of its holding register is high it master should process it first and then it will process the rest slaves holding registers. How can i do it. Any help will be highly appreciated.

karlp commented 6 years ago

@007-akash this is a closed issue, if you have a new issue, please make a new issue.

007-akash commented 6 years ago

What do u mean by closed issue. Is it solved already or cannot be solved?

dhoomakethu commented 6 years ago

@007-akash You will have come with your own business logic to achieve what you are asking. You can refer to the example callback_server. It may not be something that is a solution right out of the box for your but atleast should give you some hints on how to go ahead. Again , as I said in the beginning (if I understand correctly) your query falls out of the scope of pymodbus . If you think this is something Pymodbus should support, request you to create a new issue with more details as the status of this issue is Closed.