Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя
Показано с 61 по 70 из 75

Тема: SysSockCreate

  1. #61
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Нет мыслей?
    Все обязательно постоянно чтото шлют? или только у меня отваливается.
    Еще вопрос, в библиотеке TcpUdplib в функциях tcpreceivedata, tcpsenddata и tcpserverwaitforconnect есть переменная SOCKET_FD_SET что это за переменная и где она описана?
    ------------------------------------------------------------------------
    Нашел её описание.

    Проблема не решена. Если плк подключается к серверу и не отправляет 15 секунд ничего, то происходит дисконнект, хочу чтобы он часами висел, а как только нужно сразу отправил данные.
    Помогите гуру решить проблему.
    Последний раз редактировалось Scream; 21.07.2014 в 10:29.

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

    По умолчанию

    точно речь о секундах, вроде не должно отваливаться, проект надо смотреть
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #63
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    Question

    Вот скрины
    Мои изменения в библиотеке:
    1) При передаче аргументов функции TcpClientOpenSocket передается порт (я удивился когда увидел что тип INT, у меня например порт нужен 54545, но не смертельно), IP в формате строки (я изменил на DINT и сам подсчитал, функция GetIPAddress у меня не работает, но она мне и не нужна), 3й аргумент я предположил что это размер кадров, поправьте если не так.

    2) В функции TcpClientOpenSocket закоментил проверку SysSockConnect на FALSE, у меня она не работает.

    Все изменения на скрине и полным кодом. Если нужно то и проект могу скинуть.

    Работа программы:
    1)x:=1 [открывается сокет и коннектится на 192.168.2.60:32320]
    сервер написан на делфи, ничего не делает кроме вывода в лог сообщений о открытии, присоединении и закрытии подключения.(если нужно кину исходники или exe)
    2)x:=2 [отправляется 10 байт]
    сервер их принимает и всё в принципе работает

    Если ничего плк не отсылает серверу в течении 15 секунд, то он отключается, сокет плк при этом не закрывается, тоесть не освобождается, только в ручную.
    Изображения Изображения
    • Тип файла: jpg SOck1.jpg (243.2 Кб, Просмотров: 41)
    • Тип файла: jpg SOck2.jpg (291.8 Кб, Просмотров: 33)

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

    По умолчанию

    Не приветствовал бы использование динамических адресов, есть куча свободных портов и в формате двухбайтового слова, со строчным представлением адреса я тоже не заморачивался, третий аргумент тоже не использую, см.ниже
    по проверке SysSockConnect тоже в приведенном коде

    diSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP);
    IF diSocket <> SOCKET_INVALID THEN
    SysSockIoctl(diSocket, SOCKET_FIONBIO, ADR(dint_true));
    sa.sin_family:=SOCKET_AF_INET;
    sa.sin_addr:=SysSockNtohl(DWORD_OF_BYTE(192,168,1, 99));
    IF sa.sin_addr <> SOCKET_INADDR_NONE THEN
    sa.sin_port:=SysSockNtohs(iPort);
    IF SysSockConnect(diSocket, ADR(sa), SIZEOF(sa)) <0 THEN
    SysSockClose(diSocket);
    diSocket:=SOCKET_INVALID;
    END_IF
    ELSE
    SysSockClose(diSocket);
    diSocket:=SOCKET_INVALID;
    END_IF
    END_IF
    TcpClientOpenSocket:=diSocket;
    так должно работать


    По поводу отключений, а зачем вообще держать клиента на связи длительное время, ладно бы речь шла о сервере. Получили ответ на запрос и отключились (причем корректно отключились, чтоб в процессе не напороться на проблему не закрытого сокета)

  5. #65
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Адрессы статичны.насчет остального согласен.
    Не понял где объявлена dint_true.

    А идея в следующем, есть 10 фасовочных аппаратов, у каждого свой плк, все они в промышленной сети. Персонал работает за аппаратом и могут ставить тару хаотично конечно. Сокет плк коннектится при включении аппарата к серверу и присылает налитый вес продукта, тоесть всегда данные идут асинхронно и хаотично, поэтому метод опрос\ответ не очень то и подходит. Плк сам контролирует изменение значения и отправляет по своему протоколу данные, никто никого не опрашивает. Персонал может уйти на обед (1 час), перекур (15 минут), за тарой (от 2 минут до 10) и т.д в этом случае слать никому ничего не надо (простой работы). Поэтому хотелось бы чтоб плк всегда был в онлайн если включена машина и без лишнего трафика.

    Как вариант вижу это раз например в 5 секунд слать данные типо "Привет, я №5 онлайн!" но это костыли помоему. Гдето ж должен быть этот таймаут или биндить надо или еще чтото не пойму(

    За критику и идеи буду очень признателен!
    Последний раз редактировалось Scream; 21.07.2014 в 13:39.

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

    По умолчанию

    слать приветы, это разве не трата трафика из Вашего концепта, а с другой стороны почему серверу(СКАДЕ) не знать каково состояние фасовочника в любой момент времени, http://www.owen.ru/forum/showthread....ll=1#post83833 на видео не могу сказать что пауза у клиента была более 10секунд, но если бы были проблемы я бы заметил, но что то не припоминаю чтоб у меня отключалось что то.

    Из идей я бы предложил перейти на UDP

  7. #67
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Если честно не понял задумку из видео.
    Но сама суть то очень простая, просто ждать и не отключаться, неужели невозможно это написать?
    Проверял на плк 100 и на плк 160, всё аналогично.

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

    По умолчанию

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


    ЗЫ
    Проверял на плк 100 и на плк 160, всё аналогично
    значит проблемы в Вашем коде

  9. #69
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Что ж Вы рассказываете?

    У Вас стоит таймер, который делает переменную foo=0, а посылка данных как раз каждый цикл проверка на foo = 0, после отсылки foo опять = 1, чтобы не слать постоянно.
    Так что нет у Вас никаких 30 секунд.
    Если не сложно проверьте моё обоснование, просто подключитесь к серверу и ждите отключение, так ли это?
    Спасибо.

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

    По умолчанию

    сейчас в командировке, не могу проверить,но повторю соединение должно держаться
    Вложения Вложения
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя

Ваши права

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