Просмотр полной версии : Количество клиентов для веб-визуализации ПЛК200/210
S#716_0P
16.01.2026, 09:27
Добрый день!
Подскажите, пожалуйста:
1. Какое количество клиентов могут одновременно подключиться к веб-визуализации контроллера ПЛК200/210?
2. Сохранится ли при этом для всех подключенных клиентов возможность управления (кнопки, чекбоксы, контролы ввода аналоговых значений и пр)?
3. Есть ли возможность управлять количеством одновременных подключений/сессий через системные переменные или конфигурацию ПЛК?
Евгений Кислов
16.01.2026, 09:30
Добрый день!
Подскажите, пожалуйста:
1. Какое количество клиентов могут одновременно подключиться к веб-визуализации контроллера ПЛК200/210?
2. Сохранится ли при этом для всех подключенных клиентов возможность управления (кнопки, чекбоксы, контролы ввода аналоговых значений и пр)?
3. Есть ли возможность управлять количеством одновременных подключений/сессий через системные переменные или конфигурацию ПЛК?
Добрый день.
1. Зависит от свободной RAM, но не более значения ограничения, установленного в Менеджере визуализации на вкладке Advanced Settings (по умолчанию - 100).
2. Да.
3. Насколько я знаю - нет.
3. Есть ли возможность управлять количеством одновременных подключений/сессий через системные переменные или конфигурацию ПЛК?
есть вариант через установленный python. потребуется установить через консоль при доступе в интернет команду pip install flask
написать под свои задачи код из шаблона
from flask import Flask, redirect, render_template_string, request, jsonify
import threading
import time
app = Flask(__name__)
# Настройки
MAX_CONNECTIONS = 5 # Максимальное число одновременных подключений
SESSION_TIMEOUT = 300 # Таймаут неактивной сессии (сек)
# Хранилище сессий (в памяти)
active_sessions = {} # {session_id: last_active_time}
lock = threading.Lock() # Для потокобезопасности
def cleanup_sessions():
"""Удаляет просроченные сессии"""
now = time.time()
with lock:
for sid in list(active_sessions.keys()):
if now - active_sessions[sid] > SESSION_TIMEOUT:
del active_sessions[sid]
@app.before_request
def before_request():
"""Очищает просроченные сессии перед каждым запросом"""
cleanup_sessions()
@app.route('/')
def index():
# Получаем уникальный идентификатор клиента (например, по IP + User-Agent)
client_id = request.remote_addr + request.headers.get('User-Agent', '')
with lock:
now = time.time()
# Обновляем время последней активности для текущего клиента
if client_id in active_sessions:
active_sessions[client_id] = now
# Уже подключён — перенаправляем на webvisu
return redirect("http://ваш-плк-ip/webvisu")
else:
# Проверяем, есть ли свободное место
if len(active_sessions) < MAX_CONNECTIONS:
active_sessions[client_id] = now
return redirect("http://ваш-плк-ip/webvisu")
else:
# Нет свободных мест — возвращаем 429
return render_template_string('''
<h1>429 Too Many Requests</h1>
<p>Превышено число одновременных подключений.</p>
<p>Пожалуйста, подождите и попробуйте снова через {{ retry_after }} секунд.</p>
''', retry_after=SESSION_TIMEOUT), 429
@app.route('/status')
def status():
"""Вспомогательный маршрут для проверки числа подключений"""
with lock:
return jsonify({
"active_connections": len(active_sessions),
"max_connections": MAX_CONNECTIONS,
"available_slots": MAX_CONNECTIONS - len(active_sessions)
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, threaded=True)
запустить в консоли python3 app.py и далее обращаться по адресу http://ваш-плк-ip:5000 который если есть свободные места перенаправит на вебвизуализацию, а если нет то выдаст сообщение 429 87566
Примечание:
Ресурсы ПЛК200/210 физически не позволяют поддерживать более 5–7 стабильных сессий без деградации производительности. При высокой нагрузке (частые обновления экранов, большие графики) фактическое число стабильных подключений может быть меньше 5.
Изменения, внесённые одним клиентом (например, нажатие кнопки), синхронизируются со всеми остальными клиентами с задержкой, определяемой периодом опроса веб‑сервера и PLC‑цикла.
При конфликте действий (два клиента одновременно меняют одно значение) приоритет имеет последний полученный запрос (механизм «кто успел»)
S#716_0P
16.01.2026, 10:50
Спасибо за подробную информацию!
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot