Перегружается OPC сервер

Вопросы по программе Lectus Modbus OPC/DDE server
asuzri
Сообщения: 3
Зарегистрирован: 29 янв 2016, 06:36

Перегружается OPC сервер

Сообщение asuzri »

Lectus servеr 3.9.133
Два счетчика расхода воды Взлета (разные модели)
Написан свой сервис который считывает данные с Лектуса в реальном времени и складывает в БД. Ночью запускает сбор архивных данных с расходомеров почасовых и дневных. Всё работало, но вот пару недель как ночью ломается на сборе архивов.

Код: Выделить всё

02:57:21.912 [11892] TIOPCSyncIO.Write - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Read, Group=MyGroup, dwSource=1, dwCount=1, phServer=([1] 21)
02:57:21.912 [11892] TIOPCSyncIO.Read - OK, Result=OK (0x0), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V), ppItemValues=([1] hClient=0, ftTimeStamp=20.05.16 02:57:21, wQuality=0, vDataValue=0)
02:57:21.912 [11892] TIOPCSyncIO.Write, Group=MyGroup, dwCount=1, phServer=([1] 21), pItemValues=([1] 16777219)
02:57:21.912 [11892] TIOPCSyncIO.AsyncWrite, CountItems=1
02:58:21.958 [11892] WARNING: TIOPCSyncIO.AsyncWrite - timeout
02:58:21.958 [11892] TIOPCSyncIO.Write - Fail, Result=Неопределенная ошибка (0x80004005), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V)
02:58:21.958 [11892] TIOPCSyncIO.Write, Group=MyGroup, dwCount=1, phServer=([1] 21), pItemValues=([1] 16777219)
02:58:21.958 [11892] TIOPCSyncIO.AsyncWrite, CountItems=1
02:58:21.958 [11892] WARNING: TIOPCSyncIO.AsyncWrite - advise limit
02:58:21.958 [11892] TIOPCSyncIO.Write - Fail, Result=В очереди задач уже есть данная задача (0x80040201), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours_V)
02:58:21.958 [11892] TIOPCSyncIO.Write, Group=MyGroup, dwCount=1, phServer=([1] 21), pItemValues=([1] 16777219)
02:58:21.958 [11892] TIOPCSyncIO.AsyncWrite, CountItems=1
И последние сообщения начинают спамить в лог.
Через несколько минут Lectus ломается и перезапускает сам себя.

Код: Выделить всё

03:01:25.051 [11892] TIOPCSyncIO.Write, Group=MyGroup, dwCount=1, phServer=([1] 20), pItemValues=([1] 16777867)
03:01:25.051 [11892] TIOPCSyncIO.AsyncWrite, CountItems=1
03:01:25.051 [11892] WARNING: TIOPCSyncIO.AsyncWrite - advise limit
03:01:25.160 [11892] TIOPCSyncIO.Write - Fail, Result=В очереди задач уже есть данная задача (0x80040201), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours)
03:01:25.176 [11892] TIOPCSyncIO.Write, Group=MyGroup, dwCount=1, phServer=([1] 20), pItemValues=([1] 16777867)
03:01:25.176 [11892] TIOPCSyncIO.AsyncWrite, CountItems=1
03:01:25.176 [11892] WARNING: TIOPCSyncIO.AsyncWrite - advise limit
03:01:25.176 [11892] TIOPCSyncIO.Write - Fail, Result=В очереди задач уже есть данная задача (0x80040201), SyncReadFromCash=True, ItemIDs=([1] k3.Arh_Hours)
03:01:25.410 [11364] ERROR: Сервер завис. Перезагрузка сервера ...
03:01:25.567 [10872] 
03:01:25.567 [10872] ******************************
03:01:25.567 [10872] Старт(Lectus Modbus OPC/DDE server, версия 3.9, сборка: 133 от 20.04.15)
03:01:25.567 [10872] TfrmMain.FormCreate
03:01:25.598 [10872] РАБОЧИЙ РЕЖИМ
Подскажите, пожалуйста:
1. В чем может быть причина ситуации возникшей в 02:58:21.958?
2. Как можно настроить Lectus чтобы предотвратить его перезагрузку?
3. Если это невозможно, то каким образом сервису переподключиться к новому экземпляру сервера? Наши попытки переподключения приводят только рождению нового процесса Lectusa
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: Перегружается OPC сервер

Сообщение admin »

1) Не нужно постоянно читать с OPC сервера.
Для асинхронного получения данные есть подписка. Данные будут приходить через IOPCDataCallback.
2) Используйте асинхронную запись
3) Ожидайте завершения предыдущей операции записи данной переменной.
Иначе запись все равно не отработается и возвратится ошибка
4) Сервер перегружается когда один из используемых потоков завис.
Чаще всего зависает вызов IOPCDataCallback.OnDataChange на стороне OPC клиента.
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя