5656from pymodbus .version import version
5757
5858
59- def setup_sync_server ( ):
59+ def setup_server ( args ):
6060 """Run server setup."""
61- args = get_commandline ()
61+ if not args :
62+ args = get_commandline ()
6263
6364 # The datastores only respond to the addresses that are initialized
6465 # If you initialize a DataBlock to addresses of 0x00 to 0xFF, a request to
@@ -132,16 +133,18 @@ def setup_sync_server():
132133 "MajorMinorRevision" : version .short (),
133134 }
134135 )
135- return args .comm , args .port , store , identity , args .framer
136+ if args .comm != "serial" :
137+ args .port = int (args .port )
138+ return args .comm , args .port , store , identity , args .framer , args .prepare
136139
137140
138- def run_server ():
141+ def run_server (args = None ):
139142 """Run server."""
140- server , port , store , identity , framer = setup_sync_server ( )
143+ server_id , port , store , identity , framer , prepare = setup_server ( args )
141144
142145 _logger .info ("### start server" )
143- if server == "tcp" :
144- StartTcpServer (
146+ if server_id == "tcp" :
147+ server = StartTcpServer (
145148 context = store , # Data storage
146149 identity = identity , # server identify
147150 # TBD host=
@@ -155,9 +158,10 @@ def run_server():
155158 # broadcast_enable=False, # treat unit_id 0 as broadcast address,
156159 # TBD timeout=1, # waiting time for request to complete
157160 # TBD strict=True, # use strict timing, t1.5 for Modbus RTU
161+ prepare = prepare # Only prepare server do not activate, INTERNAL.
158162 )
159- elif server == "udp" :
160- StartUdpServer (
163+ elif server_id == "udp" :
164+ server = StartUdpServer (
161165 context = store , # Data storage
162166 identity = identity , # server identify
163167 address = ("" , port ), # listen address
@@ -170,10 +174,10 @@ def run_server():
170174 # TBD timeout=1, # waiting time for request to complete
171175 # TBD strict=True, # use strict timing, t1.5 for Modbus RTU
172176 )
173- elif server == "serial" :
177+ elif server_id == "serial" :
174178 # socat -d -d PTY,link=/tmp/ptyp0,raw,echo=0,ispeed=9600 PTY,
175179 # link=/tmp/ttyp0,raw,echo=0,ospeed=9600
176- StartSerialServer (
180+ server = StartSerialServer (
177181 context = store , # Data storage
178182 identity = identity , # server identify
179183 timeout = 0.005 , # waiting time for request to complete
@@ -190,8 +194,8 @@ def run_server():
190194 broadcast_enable = False , # treat unit_id 0 as broadcast address,
191195 strict = True , # use strict timing, t1.5 for Modbus RTU
192196 )
193- elif server == "tls" :
194- StartTlsServer (
197+ elif server_id == "tls" :
198+ server = StartTlsServer (
195199 context = store , # Data storage
196200 host = "localhost" , # define tcp address where to connect to.
197201 port = port , # on which port
@@ -211,6 +215,7 @@ def run_server():
211215 # TBD timeout=1, # waiting time for request to complete
212216 # TBD strict=True, # use strict timing, t1.5 for Modbus RTU
213217 )
218+ return server
214219
215220
216221# --------------------------------------------------------------------------- #
@@ -284,11 +289,10 @@ def get_commandline():
284289 if not args .framer :
285290 args .framer = comm_defaults [args .comm ][0 ]
286291 args .port = args .port or comm_defaults [args .comm ][1 ]
287- if args .comm != "serial" :
288- args .port = int (args .port )
289292 args .framer = framers [args .framer ]
290293 return args
291294
292295
293296if __name__ == "__main__" :
294- run_server ()
297+ server = run_server ()
298+ server .shutdown ()
0 commit comments