Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 27 из 27

Тема: UDP и SysLibSockets.lib

  1. #21

    По умолчанию

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

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

  2. #22

    По умолчанию

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

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

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

  3. #23

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    На симуляторе ВЕ а на ПЛК 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.
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  4. #24

    По умолчанию

    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); ?!?
    Тролль-наседка, добрый, нежный и ласковый

  5. #25

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    ...
    Соответственно
    sa_SendRecv.sin_addr := SysSockHtonl(IP_addr);...
    я так понимаю тип данных переменной IP_addr тут будет DWORD. Т.е. изначально все равно необходимо привести IP адрес к DWORD`у из байтового массива. Например:
    dwIP_addr : DWORD;
    abyIPaddress : ARRAY[0..3] OF BYTE := '192.168.225.021';

    dwIP_addr := SHL( SHL( SHL(
    BYTE_TO_DWORD(abyIPaddress[0] ), 8 )
    OR BYTE_TO_DWORD( abyIPaddress[1] ), 8 )
    OR BYTE_TO_DWORD( abyIPaddress[2] ), 8 )
    OR BYTE_TO_DWORD( abyIPaddress[3] );

    sa_SendRecv.sin_addr := SysSockHtonl(dwIP_addr);
    так? =)
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

  6. #26

    По умолчанию

    Цитата Сообщение от vooodooo22 Посмотреть сообщение
    я так понимаю тип данных переменной IP_addr тут будет DWORD. Т.е. изначально все равно необходимо привести IP адрес к DWORD`у из байтового массива. Например:
    так? =)
    да, именно так
    Тролль-наседка, добрый, нежный и ласковый

  7. #27

    По умолчанию

    Спасибо большое! Теперь все работает и на реальном ПЛК и на симуляторе!

    Сейчас разбираюсь с блокирующими сокетами. Есть такая функция SysSockSelect(). Не до конца понимаю что должны принимать ее параметры fdRead, fdWrite и fdExcept.

    Подскажите пожалуйста правильно ли я понимаю, что каждый из этих параметров это массив (тип данных не понял), который в каждой ячейке памяти хранит значение дискриптора сокета (или значение SOCKET_INVALID)?

    Как в таком случае правильно задать параметры для функции SysSockSelect()?

    Прошу прощения за расторопность, описание нашел в справке Codesys v2.3 =)
    Последний раз редактировалось vooodooo22; 01.02.2016 в 09:31.
    Делая что-то не правильно, вы никогда не потеряете полученный опыт

Страница 3 из 3 ПерваяПервая 123

Похожие темы

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

Ваши права

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