Показано с 1 по 8 из 8

Тема: работа с сокетами по UDP помогите.

  1. #1

    По умолчанию работа с сокетами по UDP помогите.

    доброго времени суток всем, пытаюсь наладить связь с неким прибором с ПЛК 100 v2.17 по UDP. и вот в чем проблемы:

    создаю сокет
    IF hClientSocket <>16 THEN
    stClientSettings.sin_family := SOCKET_AF_INET; (*тип сокета*)
    stClientSettings.sin_port := wPort; (*порт севера*)
    stClientSettings.sin_addr := dwIPaddr;
    hClientSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);
    END_IF

    hClientSocket возвращает число 16 - сокет создался.

    отправляю массив
    diSendBytes := SysSockSendTo(hClientSocket, ADR(send_1), 10, c_diFlags, ADR(stClientSettings), SIZEOF(stClientSettings) );

    потом через небольшую задержку читаю
    diRecvBytes := SysSockRecvFrom(hClientSocket, ADR(sReadFromServer),100, c_diFlags, ADR(stClientSettings), SIZEOF(stClientSettings) );
    сокет не закрываю, так как нужен для диалога программа зациклена отправили, мониторю сниффером снимок1.jpg
    приходит один пакет и все...
    если из кода убираю функцию приема то запросы отправляются как положено....
    подскажите, что не так? почему я немогу организовать периодическую отправку ?
    Вложения Вложения
    • Тип файла: pro test.pro (60.5 Кб, Просмотров: 1)

  2. #2

    По умолчанию

    иеще вопрос: на скрине контроллер в роли клиента с адресом 10,119,129,200 создает у себя сокет с портом 10001 и обращается к серверу с адресом 10,119,129,17 портом 5001,
    как сделать что бы на контроллере обмен происходил всегда через порт 5001?

  3. #3

    По умолчанию

    я прошу прощения, https://owen.ru/forum/showthread.php...lib#post311580 а можно в кратце описать что этот пример делает?.....

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    пользуйте упомянутую библиотеку и примеры с ней и решайте свою задачу
    Вложения Вложения
    Последний раз редактировалось capzap; 23.06.2020 в 07:56.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5

    По умолчанию

    спасибо за библиотеку, я думаю это то что мне нужно, но появилась проблема - контроллер вместо нужного мне адреса отправляет посылки на адрес 255,255,255,255.... подскажите в какую сторону копать?
    PROGRAM PLC_PRG
    VAR
    diSendSocket : DINT;
    iPort : INT:=5001;
    stDestIPAddress : STRING := '10.119.129.10';
    diRecvSocket: DINT;
    bySend : ARRAY[0..9] OF BYTE := 255,255,01,03,63,254,00,00,40,36 ;
    bSent: BOOL;
    bActive: BOOL;
    END_VAR

    IF bActive THEN
    IF diSendSocket = 0 THEN
    diSendSocket := UdpOpenSendSocket(iPort);
    END_IF

    IF diSendSocket > 0 AND bSent THEN
    bSent := FALSE;
    UdpSendData(diSendSocket, iPort, stDestIPAddress, ADR(bySend), SIZEOF(bySend));
    END_IF
    END_IF

  6. #6

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    видимо из-за этих строк
    IF stIPAddress <> '' THEN
    sa.sin_addr:=GetIPAddress(stIPAddress);
    ELSE
    sa.sin_addr:=SOCKET_INADDR_BROADCAST;
    END_IF
    лучше адрес сделать массивом, типа stIPAddress : ARRAY [0..3] OF BYTE := 192,168,0,8;
    а sa.sin_addr переделать на sa.sin_addr := SHL( SHL( SHL(
    BYTE_TO_DWORD(stIPAddress[0] ), 8 )
    OR BYTE_TO_DWORD( stIPAddress[1] ), 8 )
    OR BYTE_TO_DWORD( stIPAddress[2] ), 8 )
    OR BYTE_TO_DWORD( stIPAddress[3] );
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #8

    По умолчанию

    что то ничего не получается.... в кратце: есть прибот (ВКТ-7) есть у него Ethernet и нестандартный протокол. описание читал. отсылаю с терминала запрос, ответ приходит. посылаю с контроллера ничего не приходит...
    вот код:

    iPort : INT:=5001;
    bySend : ARRAY[0..9] OF BYTE := 255,255,01,03,63,254,00,00,40,46 ;
    byRecv : ARRAY[0..100] OF BYTE;
    IP_1: ARRAY [0..3] OF BYTE:= 10,119,129,154;


    IF bSent THEN
    IF diSendSocket_1 = 0 THEN
    diSendSocket_1:= UdpOpenSendSocket(iPort);
    END_IF
    IF diSendSocket_1 > 0 THEN
    UdpSendData(diSendSocket_1, iPort, IP_1, ADR(bySend), SIZEOF(bySend));
    END_IF
    bSent:=FALSE;
    END_IF



    IF diRecvSocket = 0 THEN
    diRecvSocket := UdpOpenReceiveSocket(iPort);
    END_IF
    IF diRecvSocket > 0 THEN
    Reply := UdpReceiveData(diRecvSocket, iPort, ADR(byRecv), SIZEOF(byRecv));
    END_IF

    помогите кто нибудь!!!!

Похожие темы

  1. Работа с сокетами.
    от Antadalion в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 03.08.2016, 15:56
  2. как работать с сокетами ТСР на плк110
    от tishininoff в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 23.03.2016, 12:13
  3. Работа с сокетами в ПЛК308
    от Sergey_Byk в разделе ПЛК3хх
    Ответов: 1
    Последнее сообщение: 04.10.2011, 13:16
  4. проблема с сокетами
    от yuren в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 23.12.2009, 14:02
  5. Помогите примером работы с сокетами для ПЛК100
    от Заложник овена в разделе Сетевые технологии
    Ответов: 3
    Последнее сообщение: 19.10.2007, 22:10

Ваши права

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