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

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

  1. #1

    По умолчанию PLC 110-30 v2 & сокеты

    PLC model MODEL PLC 110-30 v2
    Binary VERSION 0.3.67
    Target version = 3.11
    Compiled: 12:54:22 Feb 8 2017
    STM32 binary version 114

    Добрался до сокетов. Пока, поднять TCP IP Не получаецо )

    IF m_dnSocket = SOCKET_INVALID THEN
    m_dnSocket := SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP );
    END_IF

    на 100м и старом 110м при каждом новом создании сокета (если не закрывать старые) SysSockCreate возвращал в m_dnSocket числа от 1 до 15. На новом могу получить 4, затем 8 или 52, затем 128 итд...

    Хорошо, создадим сокет и сразу закроем.

    IF SysSockClose ( m_dnSocket ) THEN
    m_dnSocket := SOCKET_INVALID;
    END_IF

    Корректный SysSockClose на 100м контроллере возвращал 1 (true), на старом 110м 0 (false).
    Новый всегда возвращает 1 (true), что ему не скармливай, реальный сокет или любое число, хоть -1. Сам сокет, похоже не закрывается, т.к после SysSockClose SysSockCreate возвращает любое бОльшее число чем ранее вызванный SysSockCreate. Тогда как старые ПЛК: создал сокет скажем dnSocket = 3, закрыл его, создаешь новый и снова dnSocket = 3.

    У кого ни будь сокеты на новом 110м пашут? )

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

    По умолчанию

    Сокеты на 110 М02 работают нормально. Дескриптор действительно увеличивается, но это нормально. Есть ньюанс с переводом в неблокирующий режим поищите в теме про новый плк 110.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  3. #3

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Есть ньюанс с переводом в неблокирующий режим поищите в теме про новый плк 110.
    Правильно ли я это делаю?

    o_dnRes := SysSockIoctl( m_dnSocket, SOCKET_FIONBIO, ADR( m_dwParam ) );

    SysSockIoctl постоянно возвращает ноль, может и делает чо... )

    Еще вопрос. Что должна возвращать SysSockBind? Все время ведет себя по разному. То true, то false... А связи пока все нет )

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

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    Правильно ли я это делаю?

    o_dnRes := SysSockIoctl( m_dnSocket, SOCKET_FIONBIO, ADR( m_dwParam ) );

    SysSockIoctl постоянно возвращает ноль, может и делает чо... )

    Не, неправильно, теперь это работает так:

    SysSockSetOption(m_dnSocket, SOCKET_SOL, SOCK_NBIO, 0, 0);

    где: SOCK_NBIO: WORD:=16#1014;
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  5. #5

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Не, неправильно, теперь это работает так:

    SysSockSetOption(m_dnSocket, SOCKET_SOL, SOCK_NBIO, 0, 0);

    где: SOCK_NBIO: WORD:=16#1014;


    Представители ОВЕНА че молчат?
    Павел вы не из ОВЕНА?
    Последний раз редактировалось Андрей Шатохин; 16.03.2017 в 20:13.

  6. #6

    По умолчанию

    У меня тоже с этой прошивкой не пашут сокеты,

    PLC model MODEL PLC 110-32
    Binary VERSION 0.3.52
    Need Target version >= 3.07
    Compiled: 14:59:00 Mar 22 2016
    STM32 binary version 114

    а вот с такой прошивкой все ОК

  7. #7

    По умолчанию

    OwenCloud гасит сокеты похоже!!! =))
    Как вернуть прошивку предыдущую????


    0.3.67 - Исправлен обмен при групповых запросах RS-485
    - Исправлено появление ошибки 81 на RS-485-1 при корректном опросе

    0.3.66 - Исправлена работа с TCP сокетами через библиотеку SysLibSocket.lib
    - Добавлена поддержка OwenCloud

    0.3.65 - Исправлена возможность перезагрузки ПЛК при работе по RS-485 при нестабильном соединении

    0.3.64 - Улучшен обмен по RS-485

    0.3.57 - Исправлен механизм Network Variables при обмене между ПЛК на Codesys v2 и v3
    - Добавлена поддержка функций побитового чтения/записи в Modbus

    0.3.56 - Улучшен обмен по RS-485

    0.3.55 - Улучшена работа Modbus TCP при работе с несколькими slave при обрывах связи
    - Поправлен функционал сетевых переменных (режим приемника)

    0.3.53 - Исправлено чтение файлов при использовании 20 функции Modbus

    0.3.52 - Исправлена невозможность повторного подключения к ПЛК при отключении опроса OPC сервера по Modbus TCP

    0.3.51 - Добавлена поддержка чипов FTDI2322, подключаемых по USB
    - Улучшена совместимость с библиотекой UNM

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

    Цитата Сообщение от Андрей Шатохин Посмотреть сообщение
    Исправленная логика будет обратно совместима с предыдущими контроллерами и прошивками???
    Я уже отдельный параметр завел в настройках сокетов - тип ПЛК, ибо они все разные значения возвращают в SysLibSockets'e )

    А на твоей прошивке RS485 не работает )
    Хотя, контроллер хороший, быстрый )

  10. #10

    По умолчанию

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

    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

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

Похожие темы

  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, 08:23

Ваши права

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