Стартовая страница › Форумы › Разработка и интеграция › ModArcMSSql
- В этой теме 77 ответов, 5 участников, последнее обновление 2 года, 9 месяцев назад сделано
Mikhail.
-
АвторЗаписи
-
28.11.2022 в 12:17 #26300
JurasskParkУчастник[2022-11-28 13:39:20.186] System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10055): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. [::ffff:*.*.*.*]:10000
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
at Scada.Client.ClientBase.Connect()
at Scada.Client.ClientBase.RestoreConnection()
at Scada.Client.ScadaClient.GetCurrentData(Int32[] cnlNums, Boolean useCache, Int64& cnlListID)
at Scada.Comm.Drivers.DrvExportDataFromScada.DriverClient.WriteCurrentData()Нашёл интересный момент.
У меня каждую сессию генерируется подключение. Но по прошествии времени сервер говорит, что мол слишком долго твоя сессия и необходимо перезапускать линию и он опять работает. Тоже поставлю перезапуск линии как и @manjey73.
Но! Собственно DBExport тоже в 5 версии страдал такой проблемой. Так как что нужно Михаилу об этом подумать и обратить внимание. 🙂-
Ответ изменён 3 года, 8 месяцев назад пользователем
JurasskPark. Причина: Удалил IP- адрес сервера
28.11.2022 в 12:46 #26305
manjey73УчастникЭто настройки потустороннего сервера. И перезапускать линию нет необходимости, используйте общую переменную для Линии связи и используйте ее как флаг необходимости авторизоваться.
В драйвере OwenCloud так сделал.
Пример есть в драйвере Меркурий для версии 6. там правда для каждого устройства, но это не мешает сделать на линии. Могу кусок кода кинуть-
Ответ изменён 3 года, 8 месяцев назад пользователем
manjey73.
28.11.2022 в 12:48 #26307
manjey73УчастникУ меня линия перезапускалась из других соображений, чтение данных, автоматическое создание шаблона для устройства, перезапуск с новыми данными шаблона и создание каналов.
У вас другой случай
28.11.2022 в 13:26 #26316
JurasskParkУчастникЭто настройки потустороннего сервера.
Не совсем понял, что значит настройки потустороннего сервера? 🙂
P.S. Я из драйвера подключаюсь к серверу SCADA. Оба стоят на одной машине.
28.11.2022 в 14:20 #26320
manjey73УчастникА ошибку сокета вам кто сообщает?
Да собственно не важно, если есть пуза на сокет при неактивности, который закрывается, вам и надо это контролировать и просто его открывать снова.Перезапускать Линию связи при этом точно не обязательно, достаточно контролировать сокет
28.11.2022 в 15:01 #26323
JurasskParkУчастникХм… А ведь точно надо посмотреть и проверить, есть ли эта проверка)
28.11.2022 в 15:19 #26324
JurasskParkУчастникКороче, у меня написано, что client == null, то делают заново коннект.
Значит в это условие не попадает…
Т.к. проверка коннекта происходит 3 секунды, то сделать в коде исключения переподключение если произошла ошибка.
Главное отловить этот кусок кода.28.11.2022 в 15:29 #26325
manjey73УчастникТак вы ошибку получаете, ткнитесь отладчиком где, и можно просто в try завернуть наверное.
28.11.2022 в 15:34 #26328
JurasskParkУчастникОшибка происходит через N дней)
Просто так ткнуть сложно. Это должен быть отладчик неделю запущен)29.11.2022 в 13:08 #26343
MikhailМодераторВ случае невозможности подключиться, попробуйте очищать пул соединений SQL-сервера. Перезапускать линию — расписаться в том, что проблема не устранена.
02.12.2022 в 00:47 #26380
JurasskParkУчастникВ случае невозможности подключиться, попробуйте очищать пул соединений SQL-сервера.
Так проблема в подключении к RapidScada серверу 🙂
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10055): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. [::ffff:*.*.*.*]:10000
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
at Scada.Client.ClientBase.Connect()
at Scada.Client.ClientBase.RestoreConnection()
at Scada.Client.ScadaClient.GetCurrentData(Int32[] cnlNums, Boolean useCache, Int64& cnlListID)
at Scada.Comm.Drivers.DrvExportDataFromScada.DriverClient.WriteCurrentData()5 дней назад запустил… Пока жду новых падений.
https://www.youtube.com/watch?v=WOdNdjqZ7zM
Текущая стадия разработки.
Пока есть тормоза при разворачивании базы, можно всё ускорить, допилить, но пока так.
Работает расписание задач… Думал использовать в синхронизации, пока писал ролик, опять осознал, что без перезапуска сервера синхронизации не будет… Ну а вдруг у вас коммуникатор будет находится на другом сервере) и не будет перезапускаться. )Сейчас делаю так, чтобы в основной базе были данные за месяц, а по расписанию каждый месяц создавалась база historian_data_год_месяц, куда тоже складывались текущие данные, месяц закрылся — база спустя 2 месяца отключается.
02.12.2022 в 09:25 #26381
manjey73Участник@JurasskPark У вас же часть данных по ошибке есть, начните с этого. Я обычно при непонимании делаю в коде Log.WriteLine
А у вас первым идет at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) — Вот где-то там (кто это может вызвать) и заворачивать в try со своим тестом логирования, потом находите где и разбираетесь. Уже отладку натравливать с точкой останова в нужном месте, хотя иногда да, бывает невозможно прицепиться до ошибкиПроблема может быть не в сервере Scada кстати…
-
Ответ изменён 3 года, 8 месяцев назад пользователем
manjey73.
02.12.2022 в 17:20 #26389
MikhailМодераторВозможно, клиентские приложения генерируют слишком много подключений к одному серверу. Не одно какое-то приложение, а несколько приложений на разные порты сервера.
25.09.2023 в 11:51 #29805
JurasskParkУчастникВосстанавливаю тему. 😀
https://www.youtube.com/watch?v=RMP2D3e0IBE
Если коротко, то драйвер был написан, часть функционала уже неактуальна по причине того, что Михаил доделал Export.
Если коротко, то модуль хранит в БД структуру проекта со всеми записями и позволяет из названия устройства, канал и девайса сделать тег, который позволит другим системам обращаться за данными по названию тегу, а не его номеру.Вводная часть закончилась.
Сейчас я хочу перенести драйвер коммуникатора в модуль сервера.
Вопрос. Если из драйвера коммуникатора я подключаюсь к серверу через клиент, то как я могу из модуля обратиться к структуре таблиц? 🙂25.09.2023 в 13:39 #29807
MikhailМодераторВозможность записывать архивы в MSSQL представляется востребованной.
Вопрос не совсем понятен, приведите пример, пожалуйста. -
Ответ изменён 3 года, 8 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.