Показано с 1 по 10 из 41

Тема: ПЛК для обмена 700 словами по Ethernet UDP

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    После команды SysSockRecvFrom, ПЛК ожидает данных и видимо поэтому время цикла улетает в небо и происходит обрыв связи. Но если после пуска программы (полный код ниже) сразу из HerculesTerminal (например) послать данные, то ПЛК принимает данные и время цикла остается в разумных пределах и работа, и связь с ПЛК продолжается. Чтобы это избежать применил команду SysSockIoctl (неблокирующие сокеты, третий параметр 1 INT). Но это не помогло, если посылку с ПК не послать, то ПЛК блокируется и не реагирует на команды через 10 секунды КДС сообащет о потере связи. Как это обойти? И как отправлять данные командой SysSockSendTo? Пробовал отправлять ею заполненный массив на HerculesTerminal ничего не приходит. Почему NumberOfBytes не меняет свое значение, всегда (-1), хотя Recv прошел успешно

    IF start THEN
    IF HandleSocket<0 THEN (*нет сокета, тогда создаем*)
    HandleSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, 0); (*создали сокет DGRAM для которого третий параметр 0 означает UDP *)
    sa.sin_family:=SOCKET_AF_INET; (* заполняем структуру sa типа SOCKADDRESS*)
    sa.sin_addr:=SOCKET_INADDR_ANY;
    sa.sin_port:=SysSockHtons(1300);

    result_bind:=SysSockBind(HandleSocket, ADR(sa), SIZEOF(sa)) ; (*связываем сокет*)
    ELSE
    numberOfBytes := SysSockRecvFrom (HandleSocket,ADR(MessageFromPC),1600,0,ADR(sa),SI ZEOF(sa));

    IF numberofbytes<>-1 THEN SysSockClose(HandleSocket);
    END_IF

    END_IF

    ELSE
    IF HandleSocket<>SOCKET_INVALID THEN (* сокет закрываем, если START переведен в FALSE*)
    SysSockClose(HandleSocket);
    HandleSocket:=SOCKET_INVALID;
    MessageFromPC:=Zero;
    END_IF
    END_IF
    Последний раз редактировалось Maestro777; 29.01.2017 в 19:07.

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

    По умолчанию

    Цитата Сообщение от Maestro777 Посмотреть сообщение
    если посылку с ПК не послать, то ПЛК блокируется и не реагирует на команды через 10 секунды КДС сообащет о потере связи. Как это обойти?
    непойму, разве так сложно придумать таймер, который будет перезапускать сервер, если обмена нет более сколькито секунд
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Похожие темы

  1. Преобразователи 232-Ethernet, 485-Ethernet
    от and909 в разделе Разработки
    Ответов: 23
    Последнее сообщение: 13.04.2023, 00:21
  2. Настройка обмена с МСД 200
    от Евгений Гераськин в разделе Сетевые технологии
    Ответов: 6
    Последнее сообщение: 22.12.2016, 17:01
  3. Скорость обмена ИП-320
    от desperadoes в разделе Панели оператора (HMI)
    Ответов: 21
    Последнее сообщение: 15.04.2013, 10:52
  4. Возможность обмена ПКП
    от o_nik в разделе Подбор Оборудования
    Ответов: 1
    Последнее сообщение: 20.08.2009, 09:45
  5. Время обмена
    от Трефилов в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 20.07.2009, 07:43

Ваши права

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