Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 51

Тема: PLC 110-30 v2 & сокеты

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

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

    По умолчанию

    Цитата Сообщение от Андрей Шатохин Посмотреть сообщение
    ОВЕНцы, дайте пример работы с сокета!! И самое главное! исправленная логика будет обратно совместима с предыдущими контроллерами и прошивками???
    не будет

    CASE FASE_CONNECT OF

    0: (* ОТКРЫТИЕ СОКЕТА *)
    sock_UDP := SysSockCreate( SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP );

    sock_adr_in.sin_addr := SOCKET_INADDR_ANY; (* АДРЕС ДЛЯ ПОЛУЧЕНИЯ ПАКЕТОВ - ЛЮБОЙ *)
    sock_adr_in.sin_family := SOCKET_AF_INET; (* протокол IPv4 *)
    sock_adr_in.sin_port := SysSockHtons( 5555 ); (* НОМЕР ПОРТА ДЛЯ ПОЛУЧЕНИЯ ВХОДНЫХ ПАКЕТОВ. используем функцию привода номера порта к стандарту *)

    FASE_CONNECT := 90;

    90:
    RES_OPT := SysSockSetOption( sock_UDP, SOCKET_SOL, SOCKET_SO_REUSEADDR, 0, 0 );

    BIND_RES := SysSockBind( sock_UDP, ADR( sock_adr_in ), SIZEOF( sock_adr_in ) ); (* ПРИВЯЗАТЬ СОКЕТ к портам и адресам ДЛЯ ПРОСЛУШКИ *)

    (* поля структуры будут заполнены при приеме пакета *)
    sock_adr_out.sin_addr := 16#0A000601; (* АДРЕС ДЛЯ ОТПРАВКИ ПАКЕТОВ, ПОЛЯ МОГУТ БЫТЬ ПРОИЗВОЛЬНЫМИ - БУДУТ ЗАПОЛНЕНЫ ПРИ ПОЛУЕНИИ ДАТАГРАММЫ *)
    sock_adr_out.sin_family := SOCKET_AF_INET;
    sock_adr_out.sin_port := SysSockHtons( 5555 ); (* НОМЕР ПОРТА НА КОТОРЫЙ ОТВЕЧАЕМ - БУДЕТ ЗАПОЛНЕН ПО ПОЛУЧЕНИЮ ВХОДНОГО ПАКЕТА *)


    RES_OPT := SysSockSetOption( sock_UDP, SOCKET_SOL, SOCK_NBIO, 0, 0 ); (* ПЕРЕВЕСТИ СОКЕТ В НЕБЛОКИРУЮЩИЙСЯ РЕЖИМ для М02 *)

    FASE_CONNECT := 1;

    (* TRUE_ADDR := SysSockHtonl( 16#0A000601 );*)

    1: (* ОЖИДАЕМ ПРИЕМ *)
    READ_BYTES := SysSockRecvFrom( sock_UDP, ADR( BUF_RCV[0] ), 1535, 0, ADR( sock_adr_out ), SIZEOF( sock_adr_out ) ); (* ПРИНЯТЬ ДАННЫЕ, НАКОПЛЕННЫЕ ЗА ИНТЕРВАЛ - поместить в структуру обратный адрес пакета *)
    (* read_bytes - количество байт данных
    buf_rcv - данные
    sock_adr_out - адрес и порт откуда получена датаграмма *)



    IF READ_BYTES > 0 THEN
    (* ЕСТЬ ПРИНЯТЫЕ ДАННЫЕ В ТЕКУЩЕМ ЦИКЛЕ - ДАННЫЕ ИЗ ПРОИЗВОЛЬНОГО ИСТОЧНИКА *)
    (*
    TEST_D := TEST_D + READ_BYTES;
    *)
    PACK_COUNTER := PACK_COUNTER + 1;

    (* нужно было в прошивке 0.3.53 *) (* так в прошивке 0.3.66 *)
    IF sock_adr_out.sin_addr = (*SysSockHtonl( 16#0A000601 )*) (*TRUE_ADDR*) 16#0A000601 THEN (* используем функцию привода адреса к стандарту *)
    (* ДАТАГРАММА ОТ КОМПЬЮТЕРА - ПРАВИЛЬНОГО ХОСТА! *)
    FASE_CONNECT := 22;
    END_IF
    END_IF

    22* ОБРАБОТАТЬ ПРИНЯТЫЙ ПАКЕТ, ПОДГОТОВИТЬ ОТВЕТ *)
    FASE_CONNECT := 33;
    (* ПЕРЕДАЕМ БУФЕР В СОКЕТ *)
    RES := SysSockSendTo( sock_UDP, ADR( BUF_SND[0] ), LENGHT + 5, 0, ADR( sock_adr_out ), SIZEOF( sock_adr_out ) ); (* ПЕРЕДАТЬ ДАННЫЕ В СОКЕТ *)

    (* УСТАНОВИМ ФАЗУ ОЖИДАНИЯ ВХОДЯЩЕГО ПАКЕТА *)
    FASE_CONNECT := 1;

    END_CASE

  2. #2

    По умолчанию

    Спасибо! Буду разбираться.

  3. #3

    По умолчанию

    задублировалосьь

  4. #4

    По умолчанию

    Дмитрий, спасибо! А для tcp/ip? Сделал по аналогии, пока не работает )

    SysSockBind!!!

    Выключаем плк. Включаем, создаем сокет. Доходим до SysSockBind - она все время возвращает false.
    Делаем программный сброс ПЛК. Запускаем программу, cоздаем сокет, доходим до SysSockBind - она все время возвращает true!

    ЗЫ: похоже, SysSockBind должен возвратить false (0) только нужно несколько раз вызвать.
    Последний раз редактировалось lazy; 17.03.2017 в 12:21.

  5. #5

    По умолчанию

    а он (ответ) вам нужен? вызвали функцию один раз и забыли

  6. #6

    По умолчанию

    Дык не работает, что с ответами, что без ). Можно пример для тср ip? вы же не головоломки продаете, облегчИте жизнь не легкую )

  7. #7

    По умолчанию

    Ребята, Овен, пример сервера на TCP IP, для 110 v2. Вопрос все еще актуален!
    Впрочем, клиента тоже не плохо было бы выложить )

  8. #8

    По умолчанию

    Все снова и снова поднимаю тему сервера TCP IP, для 110 v2. И снова и снова в ответ тишина. )

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

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    Все снова и снова поднимаю тему сервера TCP IP, для 110 v2. И снова и снова в ответ тишина. )
    Я сервер на [M02] не поднимал но TCP-клиент у меня работает отлично. Выложите свой код может удастся помочь...
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  10. #10

    По умолчанию

    Прикладываю modbusTCP клиент. оформлен не до конца, делал для себя.
    тестировал на Lectus , PLC110_slave и некоторых других устройствах.

    обращаю внимание Ваше. для стабильной работы сокетов используйте компилятор версии 2.3.8.1
    Вложения Вложения

Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя

Похожие темы

  1. ПЛК100 2.17 не работают сокеты
    от murdemon в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 02.07.2018, 21:15
  2. ПЛК100 + Сокеты
    от ribamuka в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 30.08.2017, 11:55
  3. Возможно ли в режиме эмуляции Codesys тестировать работу через сокеты TCP
    от Денис Бердяев в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 09.10.2014, 07:23

Ваши права

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