Использование для HTTP_GET из библиотеки OSCAT_NETWORK - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь использовать контроллер ПЛК, работающий с CODESYS, чтобы сделать http-запрос к icanhazip.com и сохранить тело ответа в строковую переменную.Я знаю, что контроллер подключен к Интернету, поскольку на нем работают другие функции, которые его используют.Для этого конкретного сайта ответ содержит только IP-адрес, который я хочу сохранить.Поэтому мне просто нужно преобразовать тело ответа в строку без разбора.

Ниже я включил код CoDeSys, который я использую.

PROGRAM PLC_PRG
VAR
    URLVALUE: OSCAT_NETWORK.URL;
    HTTP_GETTER : OSCAT_NETWORK.HTTP_GET;
    IP_C: OSCAT_NETWORK.IP_C;
    S_BUF: OSCAT_NETWORK.NETWORK_BUFFER;
    R_BUF: OSCAT_NETWORK.NETWORK_BUFFER;
    GETBOOL: BOOL;
    res: STRING;
    ip: STRING;
    Request_TON : TON;
END_VAR
Request_TON(IN := NOT GETBOOL, PT := T#5000MS);

IF Request_TON.Q THEN
    GETBOOL := TRUE;
END_IF

URLVALUE := OSCAT_NETWORK.STRING_TO_URL(STR := 'icanhazip.com', DEFAULT_PROTOCOL := 'http', DEFAULT_PATH := '/');
URLVALUE.PORT := 80;

HTTP_GETTER( URL_DATA := URLVALUE,
                        IP_C     := IP_C,
                        S_BUF    := S_BUF,
                        R_BUF    := R_BUF,
                        IP4      := 0,
                        GET      := GETBOOL,
                        MODE     := 1,
                        UNLOCK_BUF := FALSE);


IF HTTP_GETTER.DONE THEN                        
    res := OSCAT_BASIC.BUFFER_TO_STRING( PT:=ADR(R_BUF.BUFFER), SIZE:=R_BUF.SIZE, START:=0, STOP:=R_BUF.SIZE - 1);
    ip := OSCAT_BASIC.TRIM( str:=res );
    GETBOOL := FALSE;
END_IF

Как яПройдя по коду с помощью функции отладки CoDeSys, я вижу, что он застревает в состоянии 30 внутри функционального блока HTTP_GET (HTTP_GETTER).Есть строка, которая сравнивает размер S_BUF с нулем, и если он не равен, он ничего не делает.Поскольку функциональный блок HTTP_GET публикуется как часть библиотеки OSCAT_NETWORK, вероятно, мне нужно что-то изменить в моем вызове, чтобы запрос работал правильно.

Спасибо

...