|
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