PDA

Просмотр полной версии : SysSockGetLastError



monteg
30.03.2018, 10:51
Здравствуйте,
знающие люди, подскажите SysSockGetLastError вообще реализовано? Если реализовано, то как этим пользоваться?

monteg
02.04.2018, 18:04
Техподдержка сказала, что эта функция не поддержана. Жаль.

capzap
02.04.2018, 18:13
Обычно упоминают о каких моделях контроллеров идет речь. И напрашивается вопрос какие такие ошибки Вы хотите отлавливать применительно к плк. Для КДС2.3 код установки соединения и самой работы предельно прост, если что то идет не так просто не создается соединение с дальнейшим перезапуском, во время работы ни чего кроме отслеживания таймаута больше не надо. Для КДС3.х в самих функциях аргументом идет указатель на возвращаемую ошибку, которую потом можно посмотреть через библиотеку ошибок, там тоже бывает где то одна две ошибки, которые сообщают об очевидных вещах. Поэтому мне так не жаль что её нет, пользы от неё ноль

monteg
02.04.2018, 18:41
Сейчас меня интересует тема сокетов в cds2. Надеялся применить SysSockGetLastError для отслеживания состояния соединения. Ну нет, так нет.

capzap
02.04.2018, 18:52
если у Вас возникли проблемы с потерей соединения, то в большинстве случаев это период отправки данных в сеть более 10 секунд, соединение автоматически рвется

monteg
02.04.2018, 19:20
если у Вас возникли проблемы с потерей соединения, то в большинстве случаев это период отправки данных в сеть более 10 секунд, соединение автоматически рвется

Да вроде пока все хорошо. Стенд с 4 ПЛК* на выходные оставлял, связь не падает. После "сбоя" питания или "обрыва линии" связь восстанавливается.

* - для тестирования использовал Modbus TCP, ПЛК110-30 М01, ПЛК110-30 М02, и два ПЛК100

Gazdovsky
30.03.2019, 16:15
если у Вас возникли проблемы с потерей соединения, то в большинстве случаев это период отправки данных в сеть более 10 секунд, соединение автоматически рвется
Использую SysLibSockets. Обмен по UDP. Периодически сокет падает. Вопрос как узнать что сокет "протух" и открыть заново? Иногда по несколько недель работает и все ок, а иногда рушится каждые два дня и ПЛК превращается в тыкву. Помогает только перезагруз с отключением питания

capzap
30.03.2019, 16:29
если связь только в одну сторону, то ни как

Gazdovsky
30.03.2019, 16:45
если связь только в одну сторону, то ни как
Связь по UDP в обе стороны, но как это поможет?

IVM
30.03.2019, 17:24
Связь по UDP в обе стороны, но как это поможет?

Организуй счетчик и гоняй его значение по кольцу. Если то, что принимаешь перестало меняться, значит связь пропала.

Gazdovsky
30.03.2019, 17:35
Сегодня нагуглил вот такое:


l := SysSockRecvFrom(diSocket, pbyData, diDataSize, 0, ADR(sa), SIZEOF(sa));
IF l < 0 THEN
SysSockClose(socket);
socket := SOCKET_INVALID;
RETURN;
END_IF


Интересно, рабочий вариант? Если да, работает ли это и и для SysSockSendTo()?