Morning all
I sometimes struggle with importing Python Libraries, right now I need to do some weird ModbusTCP stuff, retrieving stored data tables, I know what to do but I can’t do it with the Modbus driver or Kepware etc.
The python library pyModbushttps://github.com/bashwork/pymodbus looks just the job and claims it will work with any python version above 2.3 without any third party dependencies (I don’t need serial).
So the question is: has anyone got it to work?
I’m just trying the the basic example
client = ModbusTcpClient('192.168.2.21')
client.write_coil(1, True)
result = client.read_coils(1,1)
print result.bits[0]
client.close()
The client is a working modbus device that will respond monitored with wireshark.
I keep getting the same error
[quote]Traceback (most recent call last):
File “”, line 3, in
File “C:\Users\Chris.ignition\cache\gw127.0.0.1_8088_443_main\C0\pylib\pymodbus\client\common.py”, line 65, in write_coil
return self.execute(request)
File “C:\Users\Chris.ignition\cache\gw127.0.0.1_8088_443_main\C0\pylib\pymodbus\client\sync.py”, line 81, in execute
if not self.connect():
File “C:\Users\Chris.ignition\cache\gw127.0.0.1_8088_443_main\C0\pylib\pymodbus\client\sync.py”, line 143, in connect
self.socket = socket.create_connection((self.host, self.port),
File “C:\Users\Chris.ignition\cache\gw127.0.0.1_8088_443_main\C0\pylib\pymodbus\client\sync.py”, line 143, in connect
self.socket = socket.create_connection((self.host, self.port),
TypeError: create_connection() got an unexpected keyword argument ‘source_address’
[/quote]
now part of the ModbusTcpClient class looks like this:
[code]class ModbusTcpClient(BaseModbusClient):
‘’’ Implementation of a modbus tcp client
‘’’
def __init__(self, host='127.0.0.1', port=Defaults.Port,
framer=ModbusSocketFramer, **kwargs):
''' Initialize a client instance
:param host: The host to connect to (default 127.0.0.1)
:param port: The modbus port to connect to (default 502)
:param source_address: The source address tuple to bind to (default ('', 0))
:param framer: The modbus framer to use (default ModbusSocketFramer)
.. note:: The host argument will accept ipv4 and ipv6 hosts
'''
self.host = host
self.port = port
self.source_address = kwargs.get('source_address', ('', 0))
self.socket = None
BaseModbusClient.__init__(self, framer(ClientDecoder()), **kwargs)
def connect(self):
''' Connect to the modbus tcp server
:returns: True if connection succeeded, False otherwise
'''
if self.socket: return True
try:
address = (self.host, self.port)
self.socket = socket.create_connection((self.host, self.port),
timeout=Defaults.Timeout, source_address=self.source_address)
except socket.error, msg:
_logger.error('Connection to (%s, %s) failed: %s' % \
(self.host, self.port, msg))
self.close()
return self.socket != None[/code]
line 143 is
self.socket = socket.create_connection((self.host, self.port),
timeout=Defaults.Timeout, source_address=self.source_address)
I can’t see the error, its driving me nuts! I guess its back to school, again
anyone feeling bored and want to tackle it, any pointers?
BTW, should I suggest a fourth topic on the 3rd Party Add-ons section of the forum for this type of post?