forked from pymodbus-dev/pymodbus
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding an example and adding tcp timeout
- Loading branch information
Galen Collins
committed
Jan 5, 2015
1 parent
eb51b4d
commit b13c89d
Showing
3 changed files
with
89 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
================================================== | ||
Custom Datablock Example | ||
================================================== | ||
|
||
.. literalinclude:: ../../../examples/common/custom-datablock.py | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
#!/usr/bin/env python | ||
''' | ||
Pymodbus Server With Custom Datablock Side Effect | ||
-------------------------------------------------------------------------- | ||
This is an example of performing custom logic after a value has been | ||
written to the datastore. | ||
''' | ||
#---------------------------------------------------------------------------# | ||
# import the modbus libraries we need | ||
#---------------------------------------------------------------------------# | ||
from pymodbus.server.async import StartTcpServer | ||
from pymodbus.device import ModbusDeviceIdentification | ||
from pymodbus.datastore import ModbusSparseDataBlock | ||
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext | ||
from pymodbus.transaction import ModbusRtuFramer, ModbusAsciiFramer | ||
|
||
#---------------------------------------------------------------------------# | ||
# configure the service logging | ||
#---------------------------------------------------------------------------# | ||
|
||
import logging | ||
logging.basicConfig() | ||
log = logging.getLogger() | ||
log.setLevel(logging.DEBUG) | ||
|
||
#---------------------------------------------------------------------------# | ||
# create your custom data block here | ||
#---------------------------------------------------------------------------# | ||
|
||
class CustomDataBlock(ModbusSparseDataBlock): | ||
''' A datablock that stores the new value in memory | ||
and performs a custom action after it has been stored. | ||
''' | ||
|
||
def setValues(self, address, value): | ||
''' Sets the requested values of the datastore | ||
:param address: The starting address | ||
:param values: The new values to be set | ||
''' | ||
super(ModbusSparseDataBlock, self).setValues(address, value) | ||
|
||
# whatever you want to do with the written value is done here, | ||
# however make sure not to do too much work here or it will | ||
# block the server, espectially if the server is being written | ||
# to very quickly | ||
print "wrote {} to {}".format(value, address) | ||
|
||
|
||
#---------------------------------------------------------------------------# | ||
# initialize your data store | ||
#---------------------------------------------------------------------------# | ||
|
||
block = CustomDataBlock() | ||
store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block) | ||
context = ModbusServerContext(slaves=store, single=True) | ||
|
||
#---------------------------------------------------------------------------# | ||
# initialize the server information | ||
#---------------------------------------------------------------------------# | ||
|
||
identity = ModbusDeviceIdentification() | ||
identity.VendorName = 'pymodbus' | ||
identity.ProductCode = 'PM' | ||
identity.VendorUrl = 'http://github.com/bashwork/pymodbus/' | ||
identity.ProductName = 'pymodbus Server' | ||
identity.ModelName = 'pymodbus Server' | ||
identity.MajorMinorRevision = '1.0' | ||
|
||
#---------------------------------------------------------------------------# | ||
# run the server you want | ||
#---------------------------------------------------------------------------# | ||
|
||
p = Process(target=device_writer, args=(queue,)) | ||
p.start() | ||
StartTcpServer(context, identity=identity, address=("localhost", 5020)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters