Страница 1 из 6 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 58

Тема: Немного о SysLibSockets

  1. #1
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию Немного о SysLibSockets

    Может быть, кому-то будет интересно. Разбор работы функций библиотеки. Описание пока не закончено, но планирую доделать его в ближайшем будущем. Хотелось бы выслушать комментарии и прочие замечания-предложения.
    Последний раз редактировалось Кирилл Валюнин; 08.11.2018 в 14:53.

  2. #2
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Любителям конструкций BOOL_TO_DINT(SysLibSocketFunction()) посвящается..

  3. #3
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Молодец, классно! Думаю Владислав должен прокомментировать сие..
    Самое печальное то, что эту инфу нужно собирать по крупицам по форуму, что усложняет вход новичков и вызывает отторжение у некоторых.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  4. #4
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Самое печальное - это то, что подобное, мягко выражаясь, безобразие тиражируется из прошивки в прошивку. При том, что косяки (нет. правильнее КОСЯКИ) видны невооружённым взглядом.

  5. #5
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Хороший самопиар, но уже для первой функции ошибко.
    Ау! Владислав!!! Хоть бы спасибо сказали за проделанную работу?

    ЗЫ. Большинство этих косяков исправляется элементарно даже в обычном HEX-редакторе, безо всяких исходников. И этот тяжёлый труд в "Овене" не смогли осилить за десяток лет?

    Да, кстати, все свои выводы по функциям библиотеки могу подтвердить мелкими программками на CoDeSys.

    Чтобы не быть голословным, приведу пример для проверки правильности выводов по первой функции. Ну, где "ошибко":

    SysSockShutdown.JPG

    Окно telnet-сервера:
    3.JPG

    Упс?

    ЗЗЫ. Описание закончено.
    Последний раз редактировалось ufaman; 03.11.2018 в 15:00.

  6. #6
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Ещё одна ошибка работы сокетов. Возьмём для примера самую простую программу:

    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; (* просто счётчик. посмотреть, работает ли программа *)
    Как Вы думаете, что произойдёт при соединении с этим сервером? Правильный ответ - ничего хорошего. Данные через SysSockRecv не принимаются, ПЛК через примерно 5 секунд после установки соединения уходит в reboot (видимо, по тайм-ауту соединения). Если закомментировать строку с установкой блокирующего режима, то данные через SysSockRecv принимаются, но если в сокет ничего не посылать, то соединение закроется по тайм-ауту (хотя бы без reboot'а - и то хорошо) и повторно с ним соединиться уже не получится.

    Обнаружил я это при изучении неблокирующего режима. Выяснилось, что сокеты работают по умолчанию в неблокирующем режиме, а при попытке его отключения видим то, что видим.

    В дальнейшем попробую разобраться, почему это происходит.

  7. #7

    По умолчанию

    Вот это заклинание переводит ПЛК110 М02 в неблокирующий режим
    Код:
    SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 );
    А зачем Вам вообще блокирующий режим?
    Какой у Вас ПЛК?
    Последний раз редактировалось monteg; 06.11.2018 в 16:27.

  8. #8

    По умолчанию

    замечательное видео разбора полётов с сокетами на примере кодесис 3. отлично описано различие блокирующего и неблокирующего режимов. станет понятно, почему у вас срабатывает ватчдог при работе указанного сервера в блокирующем режиме
    https://www.youtube.com/watch?v=ThVLXygHnnU&t=29s

  9. #9
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,212

    По умолчанию

    ну есть же поясняющий пример работы с сокетами от S3Software, известны особенности овеновской разработки с булями, но сперва же мастерят код собственного изготовления, а потом жалуются что не работает чегойто
    Как уже выше писалось, только ради самопиара поднимает тему в верх списка, чтоб больше народу увидело какой он молодец, дизасемблировал закрытую библиотеку
    ЗЫ бибку я тоже выкладывал, повторно загружать не буду

    ЗЫЫ ссылка на бибку
    Вложения Вложения
    Последний раз редактировалось capzap; 10.11.2018 в 17:04.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  10. #10
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Вот это заклинание переводит ПЛК110 М02 в неблокирующий режим
    Код:
    SysSockSetOption( handle, SOCKET_SOL, 16#1014, 0, 0 );
    А зачем Вам вообще блокирующий режим?
    Какой у Вас ПЛК?
    М02, может, и переводит. Для версий с прошивками 2.17.0 SysSockSetOption не делает ровно ничего.

Страница 1 из 6 123 ... ПоследняяПоследняя

Похожие темы

  1. Продам ПЛК OWEN + немного обвязки
    от bodjaka в разделе Трёп (Курилка)
    Ответов: 15
    Последнее сообщение: 06.11.2015, 11:14
  2. Макросы -- объясните немного....
    от tigdin в разделе Программируемые реле
    Ответов: 20
    Последнее сообщение: 28.08.2014, 15:18
  3. SysLibSockets
    от mettled в разделе ПЛК1хх
    Ответов: 36
    Последнее сообщение: 20.01.2014, 15:23
  4. Немного про библиотеку SyslibTime
    от Ильнур в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 05.11.2012, 00:19
  5. немного теории
    от Safron в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 28.01.2010, 21:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •