|
|
@@ -15,7 +15,6 @@ from pymodbus.client import ModbusTcpClient
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
|
|
|
|
from app_config import load_config # noqa: E402
|
|
|
-from constants import DEFAULT_BATCH_SIZE # noqa: E402
|
|
|
from db import create_connection # noqa: E402
|
|
|
from http_value_provider import HttpValueProvider # noqa: E402
|
|
|
from modbus_context import ReadonlyHoldingRegisterContext # noqa: E402
|
|
|
@@ -57,8 +56,16 @@ def main() -> int:
|
|
|
if args.self_start:
|
|
|
host = args.modbus_host or "127.0.0.1"
|
|
|
print(f"开始读取HTTP实时值接口快照,url={config.http_provider.url}, 点位数={len(points)}")
|
|
|
- http_values = _read_http_values(provider, [point.point_id for point in points])
|
|
|
- _start_embedded_modbus_server(host, port, points, http_values, config.modbus.interval, args.timeout)
|
|
|
+ http_values = _read_http_values(provider, [point.point_id for point in points], config.http_provider.batch_size)
|
|
|
+ _start_embedded_modbus_server(
|
|
|
+ host,
|
|
|
+ port,
|
|
|
+ points,
|
|
|
+ http_values,
|
|
|
+ config.http_provider.interval,
|
|
|
+ config.http_provider.batch_size,
|
|
|
+ args.timeout,
|
|
|
+ )
|
|
|
else:
|
|
|
http_values = None
|
|
|
|
|
|
@@ -67,7 +74,7 @@ def main() -> int:
|
|
|
|
|
|
if http_values is None:
|
|
|
print(f"开始读取HTTP实时值接口,url={config.http_provider.url}, 点位数={len(points)}")
|
|
|
- http_values = _read_http_values(provider, [point.point_id for point in points])
|
|
|
+ http_values = _read_http_values(provider, [point.point_id for point in points], config.http_provider.batch_size)
|
|
|
|
|
|
return _compare(points, modbus_results, http_values, args.max_details)
|
|
|
|
|
|
@@ -104,11 +111,12 @@ def _start_embedded_modbus_server(
|
|
|
points: list[ModbusPoint],
|
|
|
http_values: dict[str, object],
|
|
|
interval_seconds: int,
|
|
|
+ batch_size: int,
|
|
|
timeout_seconds: float,
|
|
|
) -> None:
|
|
|
store = RegisterStore()
|
|
|
initialize_register_store(points, store)
|
|
|
- ValueRefreshWorker(points, SnapshotProvider(http_values), store, interval_seconds).refresh_once(initial=True)
|
|
|
+ ValueRefreshWorker(points, SnapshotProvider(http_values), store, interval_seconds, batch_size).refresh_once(initial=True)
|
|
|
context = ReadonlyHoldingRegisterContext(store)
|
|
|
thread = threading.Thread(
|
|
|
target=run_modbus_server,
|
|
|
@@ -164,10 +172,10 @@ def _read_modbus_values(host: str, port: int, timeout: float, points: list[Modbu
|
|
|
client.close()
|
|
|
|
|
|
|
|
|
-def _read_http_values(provider: HttpValueProvider, point_ids: list[str]) -> dict[str, object]:
|
|
|
+def _read_http_values(provider: HttpValueProvider, point_ids: list[str], batch_size: int) -> dict[str, object]:
|
|
|
values: dict[str, object] = {}
|
|
|
- for start in range(0, len(point_ids), DEFAULT_BATCH_SIZE):
|
|
|
- batch = point_ids[start:start + DEFAULT_BATCH_SIZE]
|
|
|
+ for start in range(0, len(point_ids), batch_size):
|
|
|
+ batch = point_ids[start:start + batch_size]
|
|
|
values.update(provider.fetch_values(batch))
|
|
|
return values
|
|
|
|