Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: ПЛК 110-30-М. Запрос HTTP. Библиотека SysLibSockets.lib.

  1. #1

    По умолчанию Выполнить запрос HTTP_GET

    Коллеги, нужен совет.

    В общем случае вопрос звучит так:

    - Какой механизм использовать для того чтоб реализовать отправку HTTP-GET запроса с ПЛК в Интернет?

    Чуть ниже поясню с чем столкнулся, может тут поможете.

    Связь через роутер+GSM-модем.
    ПЛК110-60 в боевом варианте (тещу на ПЛК100-24)

    Поиск по owen.ru ничего путного не показал.
    Гугление показало библиотеку oscat network версии 1.21 с жуткой документацией.
    Попытка её использовать (казалось бы на тревиальной задаче - отправка DNS запроса) не увенчалась успехом.
    Привожу ниже пример программы.

    172.1.2.201 это у меня роутер, на нём ДНС.
    Ошибку имею 65280 - по таблицам это что-то вроде таймаута.
    Что-то тут явно "мимо кассы", но примеры использования этого ФБ, которые мне удалось встретить, принципиально от моей программы не отличаются.

    <code>
    PROGRAM PLC_PRG
    VAR
    ip_con:IP_CONTROL;
    s_buf:NETWORK_BUFFER;
    r_buf:NETWORK_BUFFER;

    dns_req: DNS_CLIENT;
    dns_activate:BOOL:=FALSE;

    ip4_dns: DWORD;
    ip_c:IP_C;
    END_VAR

    IP_CON (
    IP_C := IP_C,
    S_BUF := S_BUF,
    R_BUF := R_BUF,
    TIME_OUT := T#15s,
    );

    DNS_REQ (
    activate := dns_activate,
    IP_C := IP_C,
    S_BUF := S_BUF,
    R_BUF := R_BUF,
    ip4_dns := IP4_DECODE('172.1.2.201'),
    DOMAIN := 'ya.ru'
    );

    RETURN;
    </code>
    Последний раз редактировалось Андрей Шатохин; 08.11.2014 в 21:32.

  2. #2

    По умолчанию

    Че-то так у меня и не срослось с oscat_network сделал через SysLibSockets.
    Прикрепляю проект - может кому-нить пригодится.

    Функциональность - простой HTTP клиент GET/POST запросы. CoDeSys 2.3
    Вложения Вложения
    Последний раз редактировалось Андрей Шатохин; 14.11.2014 в 21:56.

  3. #3
    Пользователь
    Регистрация
    13.09.2014
    Адрес
    Белгород
    Сообщений
    7

    По умолчанию

    Здравствуйте, Андрей.
    Я решаю подобную задачу отправке HTTP-GET запроса с ПЛК в Интернет.
    Наткнулся на Ваш пример. Только вот в Вашем примере в конфигурации ПЛК отсутствует соединение TCP. Подскажите, пожалуйста, по какому каналу этот запрос передается???
    Спасибо.

  4. #4
    Пользователь
    Регистрация
    13.09.2014
    Адрес
    Белгород
    Сообщений
    7

    По умолчанию ПЛК 110-30-М. Запрос HTTP. Библиотека SysLibSockets.lib.

    Пытаюсь запустить в ethernet HTTP запрос, используя библиотеку SysLibSockets.lib. Бьюсь над этой задачей уже несколько дней. Работаю по TCP. Порядок действий следующий:
    1. Создаю соккет. Он создается.
    2. Пытаюсь вызвать коннект... Возвращает FALSE;

    При этом, кабель ethernet соединяет ОВЕН ПЛК 110-30-М и роутер.
    IP роутера 192.168.1.1
    IP контроллера 192.168.1.101
    Маска подсети контроллера 255.255.255.0
    Шлюз контроллера 192.168.1.1

    Подключен также к роутеру комп. Его ip 192.168.1.7
    И роутер, и контроллер с компа пингуются.

    ПОЖАЛУЙСТА ПОМОГИТЕ!!! Почему не проходит коннект???

    Также выкладываю свой проект для того, чтобы смогли попробовать запустить у себя.

    network_counter:=network_counter+1;

    IF network_counter > http_period THEN

    network_counter:=0;

    IF network_status <> 0 THEN
    network_time_out:=network_time_out+1;
    END_IF

    network_status:=1;
    connect_counter:=0;
    IF sock>0 THEN SysSockClose(sock); END_IF;

    END_IF

    CASE network_status OF
    1: sock := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP);
    IF sock <> -1 THEN
    network_status:=2;
    END_IF

    2: IF connect_counter = 0 THEN
    h_adr.sin_addr:=SysSockInetAddr(host);
    h_adr.sin_family:=SOCKET_AF_INET;
    h_adr.sin_port:=SysSockHtons(80);
    h_adr.sin_zero[0] := 0;
    h_adr.sin_zero[1] := 0;
    h_adr.sin_zero[2] := 0;
    h_adr.sin_zero[3] := 0;
    h_adr.sin_zero[4] := 0;
    h_adr.sin_zero[5] := 0;
    h_adr.sin_zero[6] := 0;
    h_adr.sin_zero[7] := 0;
    ConnectResult := SysSockConnect(sock, ADR(h_adr), SIZEOF(h_adr));
    END_IF;
    connect_counter:=connect_counter+1;
    IF connect_counter > connect_pause THEN
    connect_counter:=0;
    END_IF;
    IF ConnectResult THEN
    network_status:=3;
    END_IF;

    3: diByte_s:=SysSockSend(sock, ADR(http_get), 0, SOCKET_MSG_OOB);
    byte_s_amount := byte_s_amount + diByte_s;
    IF diByte_s<>-1 THEN
    network_status:=4;
    END_IF;

    4: diByte_r:=SysSockRecv(sock, ADR(mas_otvet), 1500, SOCKET_MSG_OOB);
    IF BUFFER_SEARCH(ADR(mas_otvet), 1500, 'END', 0, FALSE ) > 0 THEN
    network_status:=0;
    SysSockClose(sock);
    sock:=0;
    byte_r_amount := byte_r_amount + diByte_r;
    END_IF;
    END_CASE

    Перечитал много тем по форуму. Многие сталкиваются с подобными проблемами. Но применяемые ими решения не работают. Напрашиваются 2 варианта: либо данная библиотека не работает, либо я не вижу какой-то мелочи.
    Вложения Вложения
    • Тип файла: rar 110-30.rar (228.4 Кб, Просмотров: 68)

  5. #5
    Пользователь
    Регистрация
    13.09.2014
    Адрес
    Белгород
    Сообщений
    7

    По умолчанию

    Вчера на форуме нашел Ваши коды. Извините за рекламу, но писать нужно именно так! Правда подробно не разбирался еще...

    Теперь по теме. В примере соединяются 2 контроллера. Мне необходимо соединить для начала контроллер с роутером, потом с компом. У роутера есть WEB-интерфейс, который он выдает по HTTP-запросу GET. На компе поднят WEB-сервер. Есть ли разница или может особенность в том, к чему я приконнектюсь? Кроме того, есть ли разница в исполняемой системе, типе контроллера, распределения памяти, настройках платформы для работы с TCP или же все должно работать по умолчанию?

    Почему задаю этот вопрос... Просто столкнулся с глупой ситуацией, когда вся связь проходила и даже получал сообщение в ответ, но неадекватное. проблема оказалась в следующем:
    В CodeSys 2.3 в параметрах связи была еще ветка, по которой CodeSys связывался по Ethernet. При установке сниффета и наблюдении за http сообщениями выяснилось, что CodeSys периодически опрашивает контроллер, и в этот же порт ПЛК бросал мои команды в перемешку с опросами CodeSys.

    Еще раз повторюсь: Есть ли разница или может особенность в том, к чему я приконнектюсь? Кроме того, есть ли разница в исполняемой системе, типе контроллера, распределения памяти, настройках платформы для работы с TCP или же все должно работать по умолчанию?

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

    По умолчанию

    насколько я понял до вопросов связанных с http запросами дело у Вас не дошло, на видео показано, что соединение на плк можно устанавливать и работать в качестве как сервера, так и клиента, так же в том примере нет второго контроллера, идет связка плк - роутер - ПК - роутер - плк , все объекты в одном экземпляре.
    Теперь о разнице, никакой разницы нет кто отправит правильно составленный запрос GET
    По поводу мешается ли CoDeSys, установите правило в своем снифере чтоб прослушивал только порт 80 и увидите, что плк с компом общаются в одиночестве, КДС работает по порту 1200
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  7. #7
    Пользователь
    Регистрация
    13.09.2014
    Адрес
    Белгород
    Сообщений
    7

    По умолчанию

    А есть ли необходимость в конфигурации каналов связи в CodeSys (Пункт меню "Онлайн" -> "Параметры связи...") для работы с TCP???

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

    По умолчанию

    нет, это только для работы с проектом
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  9. #9

    По умолчанию Отправка GET с ПЛК110

    Здравствуйте.
    Пытаюсь решить подобную проблему. На форуме нашел пример для ПЛК100.
    Поставил на ПЛК110-30L, подправил запрос для отправки на свой сервер,
    GET запрос проходит нормально, получаю адекватный ответ.
    Пытался ставить на ПЛК150 почему-то запрос не проходит.
    С данной проблемой пока не разобрался.
    Опыт работы с ТСР и библиотекой SysLibSocets нулевой.

  10. #10

    По умолчанию

    Большое спасибо Андрею Шатохину за рабочий пример.
    Давно искал решение аналогичной проблемы простыми средствами.
    У меня заработал на ПЛК110-30L, но на ПЛК150 не работает, пока разбираюсь.
    Опыт работы с ТСР и библиотекой SysLibSockets нулевой.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 24.06.2019, 14:56
  2. UDP и SysLibSockets.lib
    от cer_cer в разделе ПЛК1хх
    Ответов: 26
    Последнее сообщение: 29.01.2016, 17:39
  3. ПЛК100 HTTP-запрос методом GET
    от Михаил Ч. в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 26.08.2014, 10:19
  4. ПЛК-110-30
    от Скаут в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 13.03.2014, 13:51
  5. помогите: использование библиотеки SysLibSockets.lib
    от незарегистрированный в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 26.11.2007, 22:19

Ваши права

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