Module author: Galen Collins <bashwork@gmail.com>
Section author: Galen Collins <bashwork@gmail.com>
For each server, you will create a ModbusServerContext and pass in the default address space for each data access. The class will create and manage the data.
Further modification of said data accesses should be performed with [get,set][access]Values(address, count)
There are two ways that the server datastore can be implemented. The first is a complete range from ‘address’ start to ‘count’ number of indecies. This can be thought of as a straight array:
data = range(1, 1 + count)
[1,2,3,...,count]
The other way that the datastore can be implemented (and how many devices implement it) is a associate-array:
data = {1:'1', 3:'3', ..., count:'count'}
[1,3,...,count]
The difference between the two is that the latter will allow arbitrary gaps in its datastore while the former will not. This is seen quite commonly in some modbus implementations. What follows is a clear example from the field:
Say a company makes two devices to monitor power usage on a rack. One works with three-phase and the other with a single phase. The company will dictate a modbus data mapping such that registers:
n: phase 1 power
n+1: phase 2 power
n+2: phase 3 power
Using this, layout, the first device will implement n, n+1, and n+2, however, the second device may set the latter two values to 0 or will simply not implmented the registers thus causing a single read or a range read to fail.
I have both methods implemented, and leave it up to the user to change based on their preference.
Base class for a modbus datastore
Used to initialize a store to one value
Parameters: |
|
---|
Returns the requested values from the datastore
Parameters: |
|
---|---|
Returns: | The requested values from a:a+c |
Resets the datastore to the initialized default value
Returns the requested values from the datastore
Parameters: |
|
---|
Checks to see if the request is in range
Parameters: |
|
---|---|
Returns: | True if the request in within range, False otherwise |
Creates a sequential modbus datastore
Returns the requested values of the datastore
Parameters: |
|
---|---|
Returns: | The requested values from a:a+c |
Sets the requested values of the datastore
Parameters: |
|
---|
Checks to see if the request is in range
Parameters: |
|
---|---|
Returns: | True if the request in within range, False otherwise |
Creates a sparse modbus datastore
Returns the requested values of the datastore
Parameters: |
|
---|---|
Returns: | The requested values from a:a+c |
Sets the requested values of the datastore
Parameters: |
|
---|
Checks to see if the request is in range
Parameters: |
|
---|---|
Returns: | True if the request in within range, False otherwise |
This represents a master collection of slave contexts. If single is set to true, it will be treated as a single context so every unit-id returns the same context. If single is set to false, it will be interpreted as a collection of slave contexts.