Добрый день!
Столкнулся тут с одной неприятной штукой. Сделал в Raspberry и CODESYS V3.5 SP17 сервер TCP/IP. Хотя, судя по всему, (западные форумы) эта проблема, особенно вторая, есть и на других контроллерах, но не видно, что бы кто-то ее решил. Итак, сервер сделан на CAA NBS. Сам по себе вроде работает. Данные ходят в обе стороны. Но - есть две серьезные проблемы.
Первая - если мы удаленную железку-клиент сбрасываем по питанию, то дескриптор соединения hConnection так и не сбрасывается в ноль. Далее только при ОПЯТЬ загруженной железке и посылке любого пакета ИЗ Codesys он обнуляется. Во всяком случае, ненулевым он может быть минут десять, хотя железки уже нет, что совершенно неприемлимо в большинстве случаев. Т.е. как будто нет возможности задать некий тайм-аут для входящих соединений. Но это еще как-то можно было бы решить периодической посылкой сообщений из Codesys в сторону железа.
Далее еще интереснее. Как только после иммитации сбоя железка пробует переподключится, то дескриптор обнуляется, флаг отключения клиента fbTcpConnection.xDonе также становится True, но сервер в Codesys больше не принимает от нее соединения! Пробовал по этому флагу в основном цикле выключать fbTcpConnection и fbTcpServer, а потом включать их - не помогает. Пришлось сделать ребут Системы исполнения, только это помогает:
IF fb_TcpServer.Client_Disconnect THEN
SysProcess.SysProcessExecuteCommand('sudo service codesyscontrol restart', pRes);
END_IF
Может, я вообще как-то неправильно работаю с сервером? В PLC_PRG он объявлен как fb_TcpServer: TcpServer; Далее я просто вызываю его в основном цикле как fb_TcpServer();. В этом же цикле обращение к данным например как fb_TcpServer.abyTx[0].... и так далее. Сами данные ходят в две стороны нормально.




Ответить с цитированием