Мы проанализировали присланные журналы. Никаких ошибок в Службе опроса или в Сервере не зафиксировано. В момент вашей последней попытки после отключения GSM-модема в Системных параметрах Служба опроса в 07:44:06 зафиксировала, что таймаут истек, и в этот же момент времени приходит ответ от модема.
Я описывал проблему с таймаутом - в лог сообщение записывается с опозданием примерно в 10-15 сек. Даже приводил видео, в котором видно, что в strace уже есть сообщение CONNECT, а в логе оно появляется спустя время.
Привожу видео и скрин (часовой пояс в docker и ОС отличается, поэтому часы отличаются)
Видео:
Скрин:
Как ранее писал, при изменении в Docker environment переменной коннекта на новую базу и заведения прибора заново проблема решилась. При этом сервер, com-порт, docker, модем итд не заменялись. И год назад другой человек создавал тему с подобной ошибкой. После переноса на PG также по таймауту приходил CONNECT. Как я понимаю, с разными приборами отправляются разные команды, которые скорее всего хранятся в БД…
Что еще можно проверить? Могу предоставить доступ к системе. Данная проблема для нас критична.
Данное предположение не соответствует действительности. Я уже писал ранее, что с БД работает только Сервер ЛЭРС УЧЕТ. Служба опроса принимает команды от Сервера и с БД никак не работает.
Каждому прибору действительно отправляются разные команды, которые завися от внутреннего драйвера Службы опроса, но в вашем случае до опроса прибора учета процесс не доходит, так как не удается установить соединение с модемом. Процедура установки соединения по каналу GSM всегда одинаковая, независимо от опрашиваемого прибора учета.
Попробуйте подключить прибор учета к COM-порту вместо модема и произвести его опрос по прямому подключению в ЛЭРС УЧЕТ.
Хорошо. Сегодня попробую подключить прибор, ищем кабель.
Включил логирование SQL запросов в PostgreSQL. Может что-то увидите в нем.
Лог SQL:
Время обпроса:
2023-06-20 04:39:21.4921 ---- Порт открыт
2023-06-20 04:39:21.4938 >> ATZ
2023-06-20 04:39:21.5661 <<
OK
2023-06-20 04:39:21.5661 >> ATD89640847763
2023-06-20 04:39:56.5741 <<
CONNECT 9600
2023-06-20 04:39:57.3806 ---- Порт закрыт
В присланном журнале каких либо ошибок не обнаружено. В нем в принципе не может быть каких то ошибок, влияющих на своевременный ответ модема Службе опроса. Я уже неоднократно писал, что Служба опроса не взаимодействует с БД. Повторюсь еще раз: с БД взаимодействует только Сервер и все данные из/в нее получает/отправляет только он. Если бы проблема была на уровне БД, то Опрос не начался бы вовсе, так как Сервер не смог бы получить необходимые данные из базы, а значит не смог бы отправить команду Службе опроса.
Протестировать прямое подключение сможем к концу недели (нет прибора и кабеля сейчас).
Может что-то еще можно проверить? И какие объекты влияют на опрос (кроме портов опроса), планирую удалить и заново создать их в интерфейсе. Пока даже не знаю, что еще проверить( Исключили все, кроме самого ЛЭРС.
Каких либо предположений о причинах возникновения описываемой ситуации на данный момент нет. Предположение о том, что рассматриваемый модем используется одновременно Службой опроса как диспетчерский и Сервером как вызывной, в результате чего могла возникнуть конфликтная ситуация, было опровергнуто результатами вашей проверки.
Пока что рано говорить о причинах. Собственно для этого мы и запросили опрос прибора учета через тот же самый COM-порт, чтобы проверить работу порта в целом. По хорошему для объективного анализа стоило бы произвести опрос этого же прибора заводской программой через тот же COM-порт, но заводских программ под linux не существует.
Попробовал сегодня ночью еще раз перенести данные с основной базы MS SQL в Postgres.
- В Linux запустил сервер, при запуске он инициализировал пустую базу в PG
- Остановил сервер и службу опроса в Linux
- Остановил сервер, службу опроса и обновления в Windows
- Запустил перенос данных командой:
Lers.Sqls2Pg.exe db --source-connection “Data Source=IP-сервера;Initial Catalog=LERS;User ID=mxl;Password=PASSWORD;Encrypt=false” --target-connection “Host=адрес-БД;Database=lers;Username=lers;Password=PASSWORD”
Последняя запись при переносе:
“Обрабатывается таблица PollSessionLog (128 из 128): 99%”
После этого процесс завершился без ошибок. Но база перенесена не полностью. Например, есть объекты учета, но нет точек учета.
Версии в Windows и Linux 3.51.3.
Лог переноса:
mstopg.log (2,7 МБ)
Уточните как это относится к текущей теме? Я не запрашивал у вас перенос БД.
Попробовали через прямое подключение прибора (предварительно на модеме заменили порт на COM1). Опрос прошел. COM порт и кабель тот же, куда был подключен модем.
Лог:
tail -f /var/LERS/Logs/PollService/dump.2222.2023-06-21.log
2023-06-21 05:16:58.5824 << 00 10 3F FD 00 00 5C 3C
2023-06-21 05:16:58.5824 >> FF FF 00 03 3F E9 00 01 58 3B
2023-06-21 05:17:00.5862 << 00 03 03 00 C0 00 14 5F
2023-06-21 05:17:00.5862 >> FF FF 00 10 3F F7 00 00 02 28 05 AE 7B
2023-06-21 05:17:00.7061 << 00 10 3F F7 00 00 7C 3E
2023-06-21 05:17:00.7061 >> FF FF 00 03 3F F8 00 00 C9 FE
2023-06-21 05:17:01.0074 << 00 03 80 23 14 83 81 30 30 30 30 30 30 30 31 00 00 00 02 01 00 00 00 64 00 03 01 00 00 00 00 00 00 00 00 00 00 19 00 00 00 00 00 00 03 02 01 00 01 00 00 00 00 00 9E 00 01 00 00 20 41 00 00 00 00 00 00 00 00 00 40 00 00 80 3F 00 00 00 00 05 00 00 00 00 00 00 00 00 00 C8 32 00 00 00 00 00 00 BC 02 00 01 00 00 20 41 00 00 00 00 00 00 00 00 00 40 00 00 80 3F 00 00 00 00 05 00 00 00 00 00 00 00 11 23
2023-06-21 05:17:01.0074 >> FF FF 00 03 3F FB 00 00 39 FE
2023-06-21 05:17:01.1519 << 00 03 08 1D 09 09 01 07 0B C0 00 D5 51
2023-06-21 05:17:01.1535 ---- Порт закрыт
Настройки:
То есть при опросе прибора через этот же порт ответы к Службе опроса приходят своевременно. Проблема только в своевременном ответе от модема. Не понятно по какой причине к Службе опроса данный ответ приходит позже, чем его фиксирует трассировка, и где он застревает.
Ранее вы писали, что в пустой БД проблема не возникает. Давайте пойдем от обратного. Сделайте резервную копию вашей БД и удалите все объекты вместе с точками, оставив только 1 объект, в котором находится ранее опрашиваемая точка, удалив в нем все остальные точки. Проверьте будет ли возникать описываемая ситуация при опросе данной точки.
Удаление всех точек учета и объектов, кроме одной, не помогло.
2023-06-21 08:19:36.6985 ---- Порт открыт
2023-06-21 08:19:36.6985 >> ATZ
2023-06-21 08:19:36.7700 <<
OK
2023-06-21 08:19:36.7700 >> ATD89237545695
2023-06-21 08:20:11.7738 <<
CONNECT 9600/RLP
2023-06-21 08:20:12.2772 ---- Порт закрыт
Попробуйте создать отдельный контейнер docker только со Службой опроса (образ “lersamr/pollservice:latest”), направив на нее рассматриваемый COM-порт с модемом в файле docker, настроить ее на подключение к вашему Серверу с перенесенной БД по IP-адресу интерфейса (фигурирует на ваших скриншотах браузера с Веб-интерфейсом) либо по токену и завести ее в нем, завести для нее данный COM-порт и произвести опрос по GSM через данную Службу опроса. Сообщите будет ли возникать описываемая ситуация при этом.
Возникли вопросы при запуске службы опроса в отдельном контейнере:
- Какой порт нужно пробросить в контейнере lersamr/pollservice? Если использовать 10000, как читал в инструкции, то он уже занят сервером…
- Нужно ли передавать environment c LERS_SERVER_DATABASE__ConnectionString и LERS_SERVER_DATABASE__Provider?
- Служба опроса не слушает порт 10000. Это порт Сервера ЛЭРС УЧЕТ. Поэтому данный порт пробрасывать не нужно. Вам нужно пробросить только COM-порт, одновременно убрав проброс из контейнера Сервера.
- Нет, эти параметры, как следует из их наименования, относятся к Серверу. Вам необходимо задать адрес Сервера, к котором подключается Служба опроса. Это можно сделать с помощью параметра
LERS_POLLSERVICE_PollHost__Connection. Как вы можете заметить, имя данного параметра строится с учетом структуры конфигурационного файла Службы опроса, также как наименования параметров Сервера. То естьLERS_POLLSERVICE_PollHost__Connectionможно расшифровать как указание параметра Connection в блоке PollHost настроек Службы опроса (LERS_POLLSERVICE). Соответственно, если вам необходимо задать другие параметры конфигурационного файла, вы можете по аналогии составить наименование соответствующего параметра.
Вроде настроил, но COM порт неактивен.
Переменную LERS_POLLSERVICE_PollHost__Connection пробовал как с портом, так и без порта.
version: “3.9”
services:
lers:
image: lersamr/full:3.51.3
depends_on:
- “lerspool”
restart: always
ports:
- 10000:10000
volumes:
- /var/LERS:/var/LERS
- /etc/LERS:/etc/LERS
environment:
LERS_SERVER_DATABASE__ConnectionString: “Host=DB-хост;Database=lers;Username=lers;Password=PASSWORD”
LERS_SERVER_DATABASE__Provider: “Postgres”
lerspool:
image: lersamr/pollservice:3.51.3
restart: always
volumes:
- /var/LERS:/var/LERS
- /etc/LERS:/etc/LERS
devices:
- “/dev/ttyS0:/dev/ttyS0” # COM-порт, к которому подключен модем
environment:
LERS_POLLSERVICE_PollHost__Connection: “10.224.5.15:10000”
Скрин настройки порта:
Лог:
cat PollService_Error.2023-06-22.log
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService == Запущена служба опроса.
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:04.1841 E:-1 Lers.PollService.PollService Ошибка подключения к серверу. An error occurred while sending the request. Следующая попытка через 00:01:00.
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService == Запущена служба опроса.
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:11.1661 E:-1 Lers.PollService.PollService Ошибка подключения к серверу. Cannot assign requested address (localhost:10000) Следующая попытка через 00:01:00.
cat PollService.2023-06-22.log
2023-06-22 04:25:04.0298 I:-1 PollerCore.Poller Протоколирование отладочных сообщений отключено
2023-06-22 04:25:04.0413 I:-1 PollerCore.DumpCleaner Удаление старых файлов с журналами протоколирования. Максимально возможное количество файлов с журналами: 7
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService == Запущена служба опроса.
2023-06-22 04:25:04.0667 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:04.0667 I:-1 Lers.PollService.PollService Версия ОС: Unix 5.10.0.23
2023-06-22 04:25:04.0667 I:-1 Lers.PollService.PollService Версия CLR: 7.0.5
2023-06-22 04:25:04.0691 I:-1 Lers.PollService.PollService Имя компьютера: b98c6f50adc9
2023-06-22 04:25:04.0691 I:-1 Lers.PollService.PollService Версия службы опроса 3.51.3.35108
2023-06-22 04:25:04.1841 E:-1 Lers.PollService.PollService Ошибка подключения к серверу. An error occurred while sending the request. Следующая попытка через 00:01:00.
2023-06-22 04:25:11.0138 I:-1 PollerCore.Poller Протоколирование отладочных сообщений отключено
2023-06-22 04:25:11.0250 I:-1 PollerCore.DumpCleaner Удаление старых файлов с журналами протоколирования. Максимально возможное количество файлов с журналами: 7
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService == Запущена служба опроса.
2023-06-22 04:25:11.0537 E:-1 Lers.PollService.PollService ====================================
2023-06-22 04:25:11.0537 I:-1 Lers.PollService.PollService Версия ОС: Unix 5.10.0.23
2023-06-22 04:25:11.0537 I:-1 Lers.PollService.PollService Версия CLR: 7.0.5
2023-06-22 04:25:11.0537 I:-1 Lers.PollService.PollService Имя компьютера: be6b2c3014d9
2023-06-22 04:25:11.0537 I:-1 Lers.PollService.PollService Версия службы опроса 3.51.3.35108
2023-06-22 04:25:11.1661 E:-1 Lers.PollService.PollService Ошибка подключения к серверу. Cannot assign requested address (localhost:10000) Следующая попытка через 00:01:00.
2023-06-22 04:26:06.1251 I:-1 PollerCore.Poller Удаление портов опроса
2023-06-22 04:26:06.1383 I:-1 Lers.PollService.PollService Подключены к серверу.
2023-06-22 04:26:06.1652 W:-1 PollerCore.Poller Служба опроса не зарегистрирована на сервере.
2023-06-22 04:26:11.7328 I:-1 PollerCore.Poller Удаление портов опроса
2023-06-22 04:26:11.7481 I:-1 Lers.PollService.PollService Подключены к серверу.
2023-06-22 04:26:12.0169 I:-1 PollerCore.Poller Протоколирование отладочных сообщений отключено
2023-06-22 04:26:12.0246 I:-1 PollerCore.MTPoll.InternetPoller Инициализация IP-порта интернет
2023-06-22 04:26:12.1044 I:-1 PollerCore.Poller Активирован порт опроса ID=2. интернет
2023-06-22 04:26:12.1262 I:-1 PollerCore.Poller Протоколирование отладочных сообщений отключено
2023-06-22 04:26:12.2237 E:-1 PollerCore.Poller Ошибка получения портов опроса. Запрос разрешён только авторизованной службе опроса.
2023-06-22 04:26:12.2272 W:-1 PollerCore.IPollServiceClientExtensions Разрываем связь с сервером.
2023-06-22 04:26:12.2974 W:-1 Lers.PollService.PollService Утеряно подключение к серверу.
2023-06-22 04:26:12.3013 I:-1 PollerCore.Poller Остановка потоков портов опроса без ожидания завершения
2023-06-22 04:26:12.3013 I:-1 PollerCore.Poller Удаление портов опроса
2023-06-22 04:26:12.3013 I:-1 Lers.PollService.PollService Попытка подключения через 00:01:00.
Подключил в такой конфигурации:
LERS_POLLSERVICE_PollHost__Connection: “lers:10000”
и в ip указал ip docker контейнера 172.22.0.2, а не хостовой адрес.
Чуть похже проверю опрос.
version: “3.9”
services:
lers:
image: lersamr/full:3.51.3
depends_on:
- “lerspool”
restart: always
ports:
- 10000:10000 # Порт для подключения к серверу ЛЭРС УЧЁТ
volumes:
- /var/LERS:/var/LERS
- /etc/LERS:/etc/LERS
environment:
LERS_SERVER_DATABASE__ConnectionString: “Host=HOST;Database=lers;Username=lers;Password=PASS”
LERS_SERVER_DATABASE__Provider: “Postgres”
lerspool:
image: lersamr/pollservice:3.51.3
restart: always
volumes:
- /var/LERS:/var/LERS
- /etc/LERS:/etc/LERS
devices:
- “/dev/ttyS0:/dev/ttyS0” # COM-порт, к которому подключен модем
environment:
LERS_POLLSERVICE_PollHost__Connection: “lers:10000”
С опросом через внешнюю службу опроса та же ошибка(((
tail -f /var/LERS/Logs/PollService/dump.mc36i.2023-06-22.log
AT
2023-06-22 04:57:24.6693 ---- Порт закрыт
2023-06-22 04:59:20.2351 ---- Порт открыт
2023-06-22 04:59:20.2351 >> ATZ
2023-06-22 04:59:20.3070 <<
OK
2023-06-22 04:59:20.3070 >> ATD89237545695
2023-06-22 04:59:55.3109 <<
CONNECT 9600/RLP
2023-06-22 04:59:55.8126 ---- Порт закрыт
Ранее я писал:
Вы создали вашу службу опроса в том же контейнере, что и Сервер. Пожалуйста, создайте именно отдельный контейнер docker только со Службой опроса, как было запрошено, и проверьте опрос через нее.






