Может быть, кому-то будет интересно. Разбор работы функций библиотеки. Описание пока не закончено, но планирую доделать его в ближайшем будущем. Хотелось бы выслушать комментарии и прочие замечания-предложения.
Может быть, кому-то будет интересно. Разбор работы функций библиотеки. Описание пока не закончено, но планирую доделать его в ближайшем будущем. Хотелось бы выслушать комментарии и прочие замечания-предложения.
Последний раз редактировалось Кирилл Валюнин; 08.11.2018 в 14:53.
Любителям конструкций BOOL_TO_DINT(SysLibSocketFunction()) посвящается..![]()
Молодец, классно! Думаю Владислав должен прокомментировать сие..
Самое печальное то, что эту инфу нужно собирать по крупицам по форуму, что усложняет вход новичков и вызывает отторжение у некоторых.
Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.
Самое печальное - это то, что подобное, мягко выражаясь, безобразие тиражируется из прошивки в прошивку. При том, что косяки (нет. правильнее КОСЯКИ) видны невооружённым взглядом.
Ау! Владислав!!! Хоть бы спасибо сказали за проделанную работу?
ЗЫ. Большинство этих косяков исправляется элементарно даже в обычном HEX-редакторе, безо всяких исходников. И этот тяжёлый труд в "Овене" не смогли осилить за десяток лет?
Да, кстати, все свои выводы по функциям библиотеки могу подтвердить мелкими программками на CoDeSys.
Чтобы не быть голословным, приведу пример для проверки правильности выводов по первой функции. Ну, где "ошибко":
SysSockShutdown.JPG
Окно telnet-сервера:
3.JPG
Упс?
ЗЗЫ. Описание закончено.
Последний раз редактировалось ufaman; 03.11.2018 в 15:00.
Ещё одна ошибка работы сокетов. Возьмём для примера самую простую программу:
Как Вы думаете, что произойдёт при соединении с этим сервером? Правильный ответ - ничего хорошего. Данные через SysSockRecv не принимаются, ПЛК через примерно 5 секунд после установки соединения уходит в reboot (видимо, по тайм-ауту соединения). Если закомментировать строку с установкой блокирующего режима, то данные через SysSockRecv принимаются, но если в сокет ничего не посылать, то соединение закроется по тайм-ауту (хотя бы без reboot'а - и то хорошо) и повторно с ним соединиться уже не получится.VAR
tcp_adr: SOCKADDRESS;
diSocket: DINT := SOCKET_INVALID;
diParam: DINT := 0;
recv_buf: STRING[250];
res: DINT;
resIoctl: DINT;
first_run: BOOL := TRUE;
counter: DWORD;
END_VAR
IF first_run THEN
diSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP);
resIoctl := SysSockIoctl(diSocket, SOCKET_FIONBIO, ADR(diParam)); (* Включаем блокирующий режим - diParam<>1 *)
tcp_adr.sin_family := SOCKET_AF_INET;
tcp_adr.sin_addr := 16#C0A80135;
tcp_adr.sin_port := 23;
SysSockBind(diSocket, ADR(tcp_adr), SIZEOF(tcp_adr));
SysSockListen(diSocket, 1);
first_run := FALSE;
END_IF
res := SysSockRecv(diSocket, ADR(recv_buf), SIZEOF(recv_buf), 0);
counter := counter +1; (* просто счётчик. посмотреть, работает ли программа *)
Обнаружил я это при изучении неблокирующего режима. Выяснилось, что сокеты работают по умолчанию в неблокирующем режиме, а при попытке его отключения видим то, что видим.
В дальнейшем попробую разобраться, почему это происходит.
Вот это заклинание переводит ПЛК110 М02 в неблокирующий режим
А зачем Вам вообще блокирующий режим?Код:SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 );
Какой у Вас ПЛК?
Последний раз редактировалось monteg; 06.11.2018 в 16:27.
замечательное видео разбора полётов с сокетами на примере кодесис 3. отлично описано различие блокирующего и неблокирующего режимов. станет понятно, почему у вас срабатывает ватчдог при работе указанного сервера в блокирующем режиме
https://www.youtube.com/watch?v=ThVLXygHnnU&t=29s
ну есть же поясняющий пример работы с сокетами от S3Software, известны особенности овеновской разработки с булями, но сперва же мастерят код собственного изготовления, а потом жалуются что не работает чегойто
Как уже выше писалось, только ради самопиара поднимает тему в верх списка, чтоб больше народу увидело какой он молодец, дизасемблировал закрытую библиотеку
ЗЫ бибку я тоже выкладывал, повторно загружать не буду
ЗЫЫ ссылка на бибку
Последний раз редактировалось capzap; 10.11.2018 в 17:04.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран