|
3 | 3 | Modbus TCP server script for debugging
|
4 | 4 | Author: Michael Oberdorf IT-Consulting
|
5 | 5 | Datum: 2020-03-30
|
6 |
| -Last modified by: Hackergarden Meetup@Codecentric |
7 |
| -Last modified at: 2023-11-08 |
| 6 | +Last modified by: Michael Oberdorf |
| 7 | +Last modified at: 2023-11-13 |
8 | 8 | *************************************************************************** """
|
9 | 9 | import sys
|
10 | 10 | import os
|
|
21 | 21 |
|
22 | 22 | # default configuration file path
|
23 | 23 | config_file='/app/modbus_server.json'
|
24 |
| -VERSION='1.1.5' |
| 24 | +VERSION='1.2.0' |
25 | 25 | """
|
26 | 26 | ###############################################################################
|
27 | 27 | # F U N C T I O N S
|
@@ -123,7 +123,7 @@ def run_server(listener_address: str = '0.0.0.0', listener_port: int = 5020, tls
|
123 | 123 | identity.VendorUrl = 'http://github.com/riptideio/pymodbus/'
|
124 | 124 | identity.ProductName = 'Pymodbus Server'
|
125 | 125 | identity.ModelName = 'Pymodbus Server'
|
126 |
| - identity.MajorMinorRevision = '2.3.0' |
| 126 | + identity.MajorMinorRevision = '2.5.3' |
127 | 127 |
|
128 | 128 | # ----------------------------------------------------------------------- #
|
129 | 129 | # run the server
|
@@ -156,27 +156,33 @@ def prepareRegister(register: dict, initType: str, initializeUndefinedRegisters:
|
156 | 156 | if len(register) == 0: return(outRegister)
|
157 | 157 |
|
158 | 158 | for key in register:
|
159 |
| - if isinstance(key, str): |
160 |
| - keyOut = int(key, 0) |
161 |
| - log.debug(' Transform register id: ' + str(key) + ' ('+ str(type(key)) + ') to: ' + str(keyOut) + ' (' + str(type(keyOut)) + ')') |
162 |
| - else: keyOut = key |
| 159 | + if isinstance(key, str): |
| 160 | + keyOut = int(key, 0) |
| 161 | + log.debug(' Transform register id: ' + str(key) + ' ('+ str(type(key)) + ') to: ' + str(keyOut) + ' (' + str(type(keyOut)) + ')') |
| 162 | + else: keyOut = key |
163 | 163 |
|
164 |
| - val = register[key] |
| 164 | + val = register[key] |
| 165 | + valOut = val |
| 166 | + if initType == 'word' and isinstance(val, str) and str(val)[0:2] == '0x' and len(val) >= 3 and len(val) <= 6: |
| 167 | + valOut = int(val, 16) |
| 168 | + log.debug(' Transform value for register: ' + str(keyOut) + ' from: ' + str(val) + ' ('+ str(type(key)) + ') to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
| 169 | + elif initType == 'word' and isinstance(val, int) and val >=0 and val <= 65535: |
165 | 170 | valOut = val
|
166 |
| - if initType == 'word' and isinstance(val, str) and str(val)[0:2] == '0x': |
167 |
| - valOut = int(val, 16) |
168 |
| - log.debug(' Transform value for register: ' + str(keyOut) + ' from: ' + str(val) + ' ('+ str(type(key)) + ') to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
169 |
| - elif initType == 'boolean': |
170 |
| - if isinstance(val, bool): |
171 |
| - valOut = val |
172 |
| - log.debug(' Set register: ' + str(keyOut) + ' to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
173 |
| - elif isinstance(val, int): |
174 |
| - if val == 0: |
175 |
| - valOut = False |
176 |
| - else: |
177 |
| - valOut = True |
178 |
| - log.debug(' Transform value for register: ' + str(keyOut) + ' from: ' + str(val) + ' ('+ str(type(key)) + ') to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
179 |
| - outRegister[keyOut] = valOut |
| 171 | + log.debug(' Use value for register: {}: {}'.format(str(keyOut), str(valOut))) |
| 172 | + elif initType == 'boolean': |
| 173 | + if isinstance(val, bool): |
| 174 | + valOut = val |
| 175 | + log.debug(' Set register: ' + str(keyOut) + ' to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
| 176 | + elif isinstance(val, int): |
| 177 | + if val == 0: |
| 178 | + valOut = False |
| 179 | + else: |
| 180 | + valOut = True |
| 181 | + log.debug(' Transform value for register: ' + str(keyOut) + ' from: ' + str(val) + ' ('+ str(type(key)) + ') to: ' + str(valOut) + ' (' + str(type(valOut)) + ')') |
| 182 | + else: |
| 183 | + log.error(' Malformed input or input is out of range for register: {} -> value is {} - skip this register initialization!'.format(str(keyOut), str(val))) |
| 184 | + continue |
| 185 | + outRegister[keyOut] = valOut |
180 | 186 |
|
181 | 187 | if initializeUndefinedRegisters:
|
182 | 188 | if initType == 'word':
|
|
0 commit comments