Просмотр полной версии : ПЛК200 и NBS.TCP_Server не видит отключение клиента.
Здраствуйте.
ПЛК200 и пример NBS.TCP_Server из "Реализация обмена через сокеты" не видит отключение клиента, "fbTcpConnection.xDone" не происходит и xActive = TRUE.
?
Евгений Кислов
28.08.2023, 13:06
Здраствуйте.
ПЛК200 и пример NBS.TCP_Server из "Реализация обмена через сокеты" не видит отключение клиента, "fbTcpConnection.xDone" не происходит и xActive = TRUE.
?
Добрый день.
А каким именно образом происходит отключение TCP-клиента? Он присылает FIN или RST?
hercules_3-2-8 кнопка Отключить.
Oтключением кабеля, потеря соединения.
Евгений Кислов
28.08.2023, 13:31
hercules_3-2-8 кнопка Отключить.
Oтключением кабеля, потеря соединения.
У меня проблема не воспроизводится:
https://disk.yandex.ru/i/zJ1itrdvtEuePw
У меня проблема не воспроизводится:
https://disk.yandex.ru/i/zJ1itrdvtEuePw
Ваш пример на библиотеке 3.5.17 с плк 200 не работает, сервер на запускается информируя об ошибке.
Евгений Кислов
28.08.2023, 18:41
В упомянутом вами в первом посте документе и моем видео используется библиотека CAA NetBaseServices.
По вашим скриншотам видно, что вы добавили в проект библиотеку NetBaseServices (без CAA). Это другая библиотека с несколько иным принципом использования.
Замените ее на CAA NetBaseServices и повторите эксперимент.
В упомянутом вами в первом посте документе и моем видео используется библиотека CAA NetBaseServices.
По вашим скриншотам видно, что вы добавили в проект библиотеку NetBaseServices (без CAA). Это другая библиотека с несколько иным принципом использования.
Замените ее на CAA NetBaseServices и повторите эксперимент.
Заменил на CAA NetBaseService, проблема осталась не видит отключение клиента.
Евгений Кислов
29.08.2023, 07:29
В soc10.project вы не полностью повторили пример из моего видео. В рамках подключения нужно производить какие-то операции (например, вызывать экземпляр TCP_Read), чтобы получать на выходах экземпляра TCP_Connection актуальные значения.
В soc11.project есть ряд ошибок:
1. При вызове fbTcpRead не передается указатель на буфер данных (pData)
2. Фрагмент кода
IF astClients[i].fbTcpConnection.xDone THEN
usiActiveClientCounter := usiActiveClientCounter - 1;
END_IF
у вас продублирован.
3. Есть недочет в исходном примере - нужно делать так:
// регистрируем отключение одного из клиентов
IF astClients[i].fbTcpConnection.xDone THEN
usiActiveClientCounter := usiActiveClientCounter - 1;
astClients[i].fbTcpConnection(xEnable := FALSE);
END_IF
Также в примере есть неудачный момент в вызове fbTcpWrite - вместо SIZEOF там разумнее использовать LEN.
В ближайшее время внесем правки в документацию и примеры.
// регистрируем отключение одного из клиентов
IF astClients[i].fbTcpConnection.xDone THEN
usiActiveClientCounter := usiActiveClientCounter - 1;
astClients[i].fbTcpConnection(xEnable := FALSE);
END_IF
Это событие никогда не происходит, при отключении клиента всегда astClients[i].fbTcpConnection.xDone = FALSE.
Евгений Кислов
29.08.2023, 08:52
// регистрируем отключение одного из клиентов
IF astClients[i].fbTcpConnection.xDone THEN
usiActiveClientCounter := usiActiveClientCounter - 1;
astClients[i].fbTcpConnection(xEnable := FALSE);
END_IF
Это событие никогда не происходит, при отключении клиента всегда astClients[i].fbTcpConnection.xDone = FALSE.
https://disk.yandex.ru/i/v3dNzEg_T2jl_g
https://disk.yandex.ru/i/URHv3XRjdw_cYw
Это событие никогда не происходит, при отключении клиента всегда astClients[i].fbTcpConnection.xDone = FALSE.
Евгений Кислов
29.08.2023, 13:00
https://disk.yandex.ru/i/URHv3XRjdw_cYw
Это событие никогда не происходит, при отключении клиента всегда astClients[i].fbTcpConnection.xDone = FALSE.
Вы исправили п. 1?
https://owen.ru/forum/showthread.php?t=38319&p=415242&viewfull=1#post415242
Судя по вашему видео - еще нет.
https://disk.yandex.ru/i/FCXzmf21l8_DJA
Спасибо! Заработало по вашим рекоендациям.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot