Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 27

Тема: UDP и SysLibSockets.lib

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

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

    По умолчанию

    i have set target to 3s CodeSys PLCWinNT V2.4, As i said before i dont have any real hardware device. i just want to simulate it in CodeSys tool.

  2. #2

    По умолчанию

    Доброго времени суток!

    Подскажите пожалуйста, такая ситуация.

    Организовал связь по UDP симулятора CoDeSys SP PLCWinNT v2.4 с коммутатором EtherWAN EX87604 с помощью библиотеки SysLibSockets.lib. Посылка уходит, пакет приходит, все нормально. Заливаю проект на ПЛК ОВЕН 110-30М. Пытаюсь связать ПЛК с коммутатором EtherWAN EX87604. Посылка уходит, ответ приходит нулевой:
    (diNumByte_Recv := SysSockRecvFrom( diSocket_SendRecv, ADR(byRecv[0]), SIZEOF(byRecv), 0, ADR(sa_SendRecv), SIZEOF(sa_SendRecv)); (*тут diNumByte_Recv = 0*)).

    Заметил такую особенность, в симуляторе функция SysSockHtons(wPort) смещает биты влево на 8 разрядов, а в ПЛК ОВЕН110-30M данная функция оставляет переменную wPort без изменения.

    Что может быть не так?

    Заранее спасибо!
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Может, проект покажете?

  4. #4

    По умолчанию

    Вопрос решился.

    Походу конвертирование IP адреса на ПЛК ОВЕН 110-30М происходит в другой последовательности нежели на симуляторе PLC WinNT v2.4. В итоге из ПЛК посылка уходила на другой айпишник (вместо 192.168.220.18 уходила на 18.220.168.192), а в симуляторе посылка шла на айпи 192.168.220.18. Код использовался один и тот же.

    + шлюз на ПЛК прописал айпи коммутатора (на всяк случай), теперь все работает
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  5. #5

    По умолчанию

    и тут же возникает вопрос =)

    как можно узнать на какой айпишник отправляет ПЛК пакет. WireShark я так понял цепляет пакеты отправленные только на его сокет. А что делать если пакеты летят на неизвестный сокет, какими-то средствами это вычислить можно? Куда улетел пакет? =))))
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  6. #6
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Цитата Сообщение от vooodooo22 Посмотреть сообщение
    и тут же возникает вопрос =)

    как можно узнать на какой айпишник отправляет ПЛК пакет. WireShark я так понял цепляет пакеты отправленные только на его сокет. А что делать если пакеты летят на неизвестный сокет, какими-то средствами это вычислить можно? Куда улетел пакет? =))))
    что значит на его сокет? WireShark покажет все пакеты связанные с вашим ПК, тоесть ваш ip в source или distanation, чтобы отследить другие пакеты нужна другая ОС и другие средства.

  7. #7

    По умолчанию

    да, прошу прощения не правильно выразился =)

    "чтобы отследить другие пакеты нужна другая ОС и другие средства." - не подскажите что за такие средства и ОС? Линукс?
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  8. #8

    По умолчанию

    Цитата Сообщение от vooodooo22 Посмотреть сообщение
    Вопрос решился.

    Походу конвертирование IP адреса на ПЛК ОВЕН 110-30М происходит в другой последовательности нежели на симуляторе PLC WinNT v2.4. В итоге из ПЛК посылка уходила на другой айпишник (вместо 192.168.220.18 уходила на 18.220.168.192), а в симуляторе посылка шла на айпи 192.168.220.18. Код использовался один и тот же.

    + шлюз на ПЛК прописал айпи коммутатора (на всяк случай), теперь все работает
    На симуляторе ВЕ а на ПЛК LE. Функции htons() и htonl() придумали не просто так
    Тролль-наседка, добрый, нежный и ласковый

  9. #9

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    На симуляторе ВЕ а на ПЛК LE. Функции htons() и htonl() придумали не просто так
    Эммм... а как расшифровывается BE, LE?

    Подскажите пожалуйста, как в данном случае можно указать адрес (.sin_addr) в правильном формате с помощью htonl() ?

    Вот отрывок из рабочего кода на данный момент в ПЛК ОВЕН110-30М:

    IF diSocket = SOCKET_INVALID THEN

    diSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);

    IF diSocket <> SOCKET_INVALID THEN
    sa_SendRecv.sin_addr := SHL( SHL( SHL(
    BYTE_TO_DWORD(strIPaddress[0] ), 8 )
    OR BYTE_TO_DWORD( strIPaddress[1] ), 8 )
    OR BYTE_TO_DWORD( strIPaddress[2] ), 8 )
    OR BYTE_TO_DWORD( strIPaddress[3] );
    sa_SendRecv.sin_family := SOCKET_AF_INET;
    sa_SendRecv.sin_port := SysSockHtons(wPort);
    END_IF
    END_IF
    Последний раз редактировалось vooodooo22; 28.01.2016 в 13:32.
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  10. #10

    По умолчанию

    BE vs LE это как битва тупо и остроконечников.
    Порядок байт, на Интел BE (Big Endian), на ARM LE (little endian).
    Соответственно
    sa_SendRecv.sin_addr := SysSockHtonl(IP_addr);
    И ведь 1/2 Вы сделали, поставив sa_SendRecv.sin_port := SysSockHtons(wPort); ?!?
    Тролль-наседка, добрый, нежный и ласковый

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

Похожие темы

  1. SysLibSockets
    от mettled в разделе ПЛК1хх
    Ответов: 36
    Последнее сообщение: 20.01.2014, 14:23
  2. помогите: использование библиотеки SysLibSockets.lib
    от незарегистрированный в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 26.11.2007, 22:19

Ваши права

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