Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 41

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

  1. #21

    По умолчанию

    Спасибо за совет, я придумал такой таймер (ниже). Но таймер как и цикл плк останавливается после Recv и ждет данных . Как только Recv закрыват (* *), то таймер каждые 2 секунды как задумывалось закрывает Сокет. Это приводит к первому условию ветвления HandleSOCKET<0 и создате новый. Но при появлении Recv таймер не работает как хотелось бы. Я такое поведение понял бы, если не SysSockIoctl, который должне был перевести в неблокирующее состояние сокеты и цикл шел как обычно.
    IF start THEN
    IF HandleSocket<0 THEN
    HandleSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, 0);
    result:= SysSockIoctl (HandleSocket, SOCKET_FIONBIO, ADR(mode));
    sa.sin_family:=SOCKET_AF_INET;
    sa.sin_addr:=SOCKET_INADDR_ANY;
    sa.sin_port:=SysSockHtons(1300);

    result_bind:=SysSockBind(HandleSocket, ADR(sa), SIZEOF(sa)) ;
    ELSE
    tik(IN:=tik.IN,PT:=T#2s);
    Tik.in:=TRUE;
    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
    SysSockClose(HandleSocket);
    HandleSocket:=SOCKET_INVALID;
    MessageFromPC:=Zero;
    END_IF
    END_IF

    IF tik.Q THEN
    SysSockClose(HandleSocket);
    tik(IN:=FALSE);
    HandleSocket := SOCKET_INVALID;
    END_IF;

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

    По умолчанию

    а у меня срабатывает, правда пример по ТСР, http://www.owen.ru/forum/showthread....742#post234742
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #23

    По умолчанию

    Попробовал отправку с помощью библиотеки NETVARUDP
    ПЛК не зависает, но на ПК (Hercules) ничего не приходит. Порт и IP адрес те, проверил неоднократно.
    IF start THEN
    IF HandleSocket<0 THEN
    HandleSocket:=UdpOpenSendSocket(iPort);
    ELSE
    tik(IN:=tik.IN,PT:=T#2s);
    Tik.in:=TRUE;

    numberofbytes:=UdpSendData(HANDLESocket, iPort, stDestIPAddress, ADR(bySend), SIZEOF(bySend));

    END_IF
    ELSE
    IF HandleSocket<>SOCKET_INVALID THEN
    SysSockClose(HandleSocket);
    HandleSocket:=SOCKET_INVALID;
    MessageFromPC:=Zero;
    END_IF
    END_IF

    tik(IN:=tik.IN,PT:=T#2s);
    IF tik.Q THEN
    SysSockClose(HandleSocket);
    tik(IN:=FALSE);
    HandleSocket := SOCKET_INVALID;
    END_IF;

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

    По умолчанию

    NETVARUDP если и упоминается UDP то только как протокол передачи, ни какого отношения к взаимодействию не контроллеров она не имеет. То что Вы тут постоянно выкладываете, какой то не понятный недоделанный, лишенный смысла код. Примеров как организовать я выложил предостаточно, лучше разберитесь с ними, чем задавать вопросы по собственным кускам программы
    Последний раз редактировалось capzap; 31.01.2017 в 07:43.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  5. #25

    По умолчанию

    ytnvarudp это что?
    capzap, помогите разобраться. Я выкладываю код смысл которого (я так думаю) после старта создать сокет, Отправить данные ( в последнем варианте). Старт исчез тогда сокет закрылся. Вот и весь смысл который я вкладываю, для начала делать что-то попроще надо.
    Касаемо, того что Вы выкладываете. Большое спасибо, прежде всего. Но, почему я не могу ими воспользоваться напрямую, когда меняю целевую платформу скомпилировать уже не получаете. КДС ссылается что эти блоки есть в билиотеке NetVarUDP. Ладно, пытаюсь воспроизвести в своем проекте. Вникаю в Ваш алгоритм, по смыслу близкий (проверка наличия, сокета, создание, заполнение SA и т.п.). Но результат получается вот такой. Если данные не отправляю, ПЛК выходит в потерю связи. Но если отправить с ПК на ПЛК, то он принимает их и отлично дальше реагирует на взаимодействие с ним. И start обнулить получается и запустить его заново, принять новый пакет. Но если его не отправлю, 10 секунд где-то и потеря связи КДС ПЛК.

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

    По умолчанию

    Еще раз повторяю, NETVARUDP НЕ НУЖНА, выкиньте её из проекта. О том что связь рвется, читаем следующий пост после данной мной ссылки
    Ваше сделать по проще, оборачивается сделать не правильно
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  7. #27

    По умолчанию

    Ваш пример udp_test.pro Я его открываю, компилирую все нормально. Меняю целевую платформу на ПЛК 110 M02 (свою). Библиотеки NETvarUDP еще нет в менеджере. Компилирую и тут выпадает следующее:
    ОшибкиNetVar.png
    Захожу в менеджере, Там эта присловутая библиотека появилась. Удаляю её. Нажимаю компиляцию и снова эти ошибки и в библиотеках появляется NetVarUDP. Но, повторюсь, до установки целевой платформы компиляция успешна проходит, этой библиотеки не появляется.

    Я Ваши примеры, безусловно, читаю и стараюсь вникнуть в каждую строчку. Поэтому в принципе и мне удалось создать проект, который получает посылку от ПК. НО! Как пишет Филоненко Владислав
    "Разрыв соединения при отсутствии по нему обмена - штатный функционал любой реализации сокетов. В ПЛК, т.к. это всё же промавтоматика, а не офисный компьютер, таймаут обмена сильно сокращён (с часов до секунд).
    Просто надо что-нибудь посылать - и разрывов не будет."
    Я бы с радостью таймером закрывал и поднимал сокет каждые 2 секунды. Но, таймер не работает при наличии строк Recv. Прошу Вас посмотреть мой проект. Я его создал без библиотеке NETVARUDP, без FUNкций. На Вашем ПЛК с моим проектом таймер работает?
    Вложения Вложения

  8. #28

    По умолчанию

    Ещё есть нюанс с разворотом адресов и номера порта.
    пример правильной работы с UDP смотрим в NetVarUDP.lib
    Тролль-наседка, добрый, нежный и ласковый

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

    По умолчанию

    у меня сейчас проверять не начем
    но вот же код count := TcpReceiveData(Client.diSocket, ADR(BUF_RCV[0]), SIZEOF(BUF_RCV));
    если count равна -1 нет соединения, если равно нулю соединение есть и нет данных, если больше нуля данные есть можно обрабатывать
    вывод если соединение есть а данных нет длительное время то ОС разорвет соединение и программе надо где то в это же время или чуть раньше перезапустить сервер
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  10. #30

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Ещё есть нюанс с разворотом адресов и номера порта.
    пример правильной работы с UDP смотрим в NetVarUDP.lib
    Владислав, прошу прощенья, где в структуре этой библиотеки пример? в pdf файле к этой библиотеке только про сетевые переменные рассказано. Структура NetVar.png

    но вот же код count := TcpReceiveData(Client.diSocket, ADR(BUF_RCV[0]), SIZEOF(BUF_RCV));
    если count равна -1 нет соединения, если равно нулю соединение есть и нет данных, если больше нуля данные есть можно обрабатывать
    вывод если соединение есть а данных нет длительное время то ОС разорвет соединение и программе надо где то в это же время или чуть раньше перезапустить сервер
    Да, конечно, я изучал Ваш пример. Спасибо за его предоставление. И этот эпизод мне тоже был понятен. Но ни таймеры, ни ветвления.. да ничего, после Recv не работает. А посылочку послал и заработала связь КДС-ПЛК и никакого выхода в ошибку типа связь потеряна через несколько секунд нету. Проверяю массив приема данных и там те данные что отправлял с ПК.

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Похожие темы

  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

Ваши права

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