Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 13 из 13

Тема: Связь по ModBus Tcp/ip между двумя ПЛК 100 подключенными в сеть.

  1. #11

    По умолчанию

    ужс...
    Представители "Овен" что либо могут пояснить по поводу SysLibSocket? )

    PS: Это сообщение ответ на:
    Цитата Сообщение от capzap Посмотреть сообщение
    одинаковая информация, это температура из модуля статистики, само значение этой температуры как понимаете ни когда одинаковым не бывает. Я ни чего не решал, библиотека сама решает, какой клиент запросил инфу и ответит на запрос именно ему, в этом и отличие TCP от UDP
    а не по поводу версий библиотек. )
    Последний раз редактировалось lazy; 29.05.2012 в 13:01.

  2. #12

    По умолчанию

    1) По поводу работы библиотеки.
    Не нужно испытывать иллюзий. Стек TCP/IP в ПЛК очень ограниченный - это не виндовс и не линукс. Шаг влево-шаг вправо расстрел. Прыжок на месте провокация. Соответственно есть очень большие ограничения - один клиент - один сокет, числу открытых сокетов и т.д. Кривизна в библиотеке есть. В основном это связанно с тем что в новой версии поддержаны дополнительные фичи, а в старом заголовочном файле все было не совсем так.
    2) OSCAT oscat network на Овеновских плк как после кодесис 2 , так и 3 заработала после допиливания напильником. Ничего особенного - но пришлось поработать. Библиотеку не могу дать - т.к. она часть проекта - я накопировал блоки в проект.
    3) SocketAccept - не получится взять удаленный адрес клиент - ее можно вообще не использовать.
    Если работать только с нужными IP используйте ...RecvFrom ...SendTo
    4) Кусочек кода для клиента
    CASE STATE_SEND OF
    0: SOCK_OUT := SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP );
    TCP_ADR_OUT.sin_family := SOCKET_AF_INET;
    TCP_ADR_OUT.sin_port := port; TCP_ADR_OUT.sin_addr := server; (* 192.168.200.207 *)

    PADDR_OUT := ADR( TCP_ADR_OUT );
    OUT_TON( IN := FALSE, PT := T#50MS ); STATE_SEND := 1;
    1: RES_OUT := SysSockConnect( SOCK_OUT, PADDR_OUT, SIZEOF( PADDR_OUT) ); OUT_TON( IN := TRUE, PT := T#2S ); (* ?????? ?? 20 ??? *)
    IF OUT_TON.Q THEN
    STATE_SEND := 2;
    END_IF

    5) Для сервера
    Настойчиво рекомендую посмотреть повнимательнее пример Web сервера.
    Последний раз редактировалось Малышев Олег; 29.05.2012 в 13:37.
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

  3. #13

    По умолчанию

    Может кому понадобицо. Вобщем, ТСР удалось поднять. SysSockListen и SysSockConnect завершившись корректно возвращают ноль. То есть код нужно поправить приблизительно так:

    для сервера:
    IF BOOL_TO_INT( SysSockListen( m_dnSocket, 1 ) ) = 0 THEN
    (* законектились *);
    END_IF;

    для клиента
    IF BOOL_TO_INT( SysSockConnect( m_dnSocket, ADR( m_SAddress ), SIZEOF( m_SAddress ) ) ) = 0 THEN
    (* законектились *);
    END_IF;

    Соответственно, вызывать их нужно по таймеру. пока не будет конекта, а не один раз... ))
    Причем сокет должен быть настроен для блокирующего режима. где то так:
    m_dwVal := 1;
    SysSockSetOption( m_dnSocket, SOCKET_IPPROTO_TCP, SOCKET_TCP_NODELAY, ADR( m_dwVal ), SIZEOF( m_dwVal ) );
    Последний раз редактировалось lazy; 07.06.2012 в 18:04.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Датчики с двумя ЧЭ
    от energohran в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 07.04.2012, 13:46
  2. Подключение приборов Owen в сеть ModBus
    от alex_sinjawin в разделе Сетевые технологии
    Ответов: 10
    Последнее сообщение: 01.04.2010, 10:02
  3. Ответов: 9
    Последнее сообщение: 05.11.2009, 09:40
  4. Сеть ModBus верхнего и нижнего уровня
    от dani1978 в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 09.02.2009, 07:10

Ваши права

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