PDA

Просмотр полной версии : ПЛК200 и NBS.TCP_Server не видит отключение клиента.



vasgai
28.08.2023, 13:00
Здраствуйте.
ПЛК200 и пример NBS.TCP_Server из "Реализация обмена через сокеты" не видит отключение клиента, "fbTcpConnection.xDone" не происходит и xActive = TRUE.
?

Евгений Кислов
28.08.2023, 13:06
Здраствуйте.
ПЛК200 и пример NBS.TCP_Server из "Реализация обмена через сокеты" не видит отключение клиента, "fbTcpConnection.xDone" не происходит и xActive = TRUE.
?

Добрый день.
А каким именно образом происходит отключение TCP-клиента? Он присылает FIN или RST?

vasgai
28.08.2023, 13:30
hercules_3-2-8 кнопка Отключить.
Oтключением кабеля, потеря соединения.

Евгений Кислов
28.08.2023, 13:31
hercules_3-2-8 кнопка Отключить.
Oтключением кабеля, потеря соединения.

У меня проблема не воспроизводится:
https://disk.yandex.ru/i/zJ1itrdvtEuePw

vasgai
28.08.2023, 18:18
У меня проблема не воспроизводится:
https://disk.yandex.ru/i/zJ1itrdvtEuePw

Ваш пример на библиотеке 3.5.17 с плк 200 не работает, сервер на запускается информируя об ошибке.

Евгений Кислов
28.08.2023, 18:41
В упомянутом вами в первом посте документе и моем видео используется библиотека CAA NetBaseServices.
По вашим скриншотам видно, что вы добавили в проект библиотеку NetBaseServices (без CAA). Это другая библиотека с несколько иным принципом использования.
Замените ее на CAA NetBaseServices и повторите эксперимент.

vasgai
28.08.2023, 22:06
В упомянутом вами в первом посте документе и моем видео используется библиотека 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.

В ближайшее время внесем правки в документацию и примеры.

vasgai
29.08.2023, 08:36
// регистрируем отключение одного из клиентов
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

vasgai
29.08.2023, 12:55
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

Судя по вашему видео - еще нет.

vasgai
29.08.2023, 13:09
https://disk.yandex.ru/i/FCXzmf21l8_DJA

vasgai
29.08.2023, 13:20
Спасибо! Заработало по вашим рекоендациям.