PDA

Просмотр полной версии : ПЛК100 HTTP-запрос методом GET



Михаил Ч.
25.08.2014, 17:37
Добрый день! Хотелось бы узнать, есть ли возможность ПЛК100 послать HTTP-запрос методом GET другому устройству в локальной сети?

capzap
25.08.2014, 18:05
можно, если есть опыт

Михаил Ч.
26.08.2014, 09:08
Не подскажете, в каком направлении копать? Есть ли какие то примеры?
Я так понимаю, это связано с библиотекой SysLibSockets.lib?

capzap
26.08.2014, 09:43
Угу, ищите библиотеку оскат-нетворк, там есть клиент хттп

Дмитрий Артюховский
26.08.2014, 09:57
(* ПЕРЕМЕННЫЕ СОКЕТА *)
CONNECT: BOOL;
STATE: INT := 0;
SOCK: DINT;
SOCK_ACC: DINT;
TCP_ADR: SOCKADDRESS;
ACC_ADR: SOCKADDRESS;
PADDR: DWORD;
RES: BOOL;
PARAM_CTRL: DINT;
RCV_BYTES_CNT: DINT := 0;
SND_CNT: DINT := 0;
SYMBOL_COUNT: DWORD := 0;
ANSVER_REQ: BOOL := FALSE;

P_DINT: POINTER TO DINT;
P_BYTE: POINTER TO BYTE;
DATA: BYTE;
(* ЗАКОНЧЕНЫ ПЕРЕМЕННЫЕ СОКЕТА *)


(* ОТКРЫТИЕ СОКЕТА - ОБМЕН С КОМПЬЮТЕРОМ *)
SOCK := SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP );
TCP_ADR.sin_family := SOCKET_AF_INET;
TCP_ADR.sin_port := 5555;
TCP_ADR.sin_addr := SOCKET_INADDR_ANY;
PADDR := ADR( TCP_ADR );
RES := SysSockBind( SOCK, PADDR, SIZEOF( TCP_ADR ) );
RES := SysSockListen( SOCK, 1 );
PADDR := ADR( ACC_ADR );
SOCK_ACC := SOCK;
PARAM_CTRL := 1;
SysSockIoctl( SOCK_ACC, SOCKET_FIONBIO, ADR( PARAM_CTRL ) );
CONNECT := FALSE;
(* ЗАКОНЧЕНО ОТКРЫТИЕ СОКЕТА *)


(* СВЯЗЬ С ХОСТОМ *)
RCV_BYTES_CNT := SysSockRecv( SOCK_ACC, ADR( RCVBUF[ 0 ] ) , 1536, SOCKET_MSG_OOB ); (* ЧИТАЕМ БУФЕР *)
IF ( RCV_BYTES_CNT > 0 ) AND ( RCVBUF[0] = 104 ) AND ( RCVBUF[1] = 111 ) THEN (* ПРЕРЫВАЕМ ЦИКЛ ЕСЛИ НЕТ ПРИНЯТЫХ БАЙТ *)
(* обработка принятого сообщения *)

CASE BYTE_TO_INT( RCVBUF[4] ) OF
0: (* УПРАВЛЕНИЕ *)
(* ПОСЫЛКА ОТ ХОСТА В КОНТРОЛЛЕР *)
READ_DATA();
END_CASE

ANSVER_REQ := TRUE;

ELSE
(* ОТВЕТ ГЕНЕРИРУЕМ В СЛЕДУЮЩЕМ ЦИКЛЕ ПОСЛЕ ОБРАБОТКИ ЗАПРОСА *)
IF ANSVER_REQ THEN
ANSVER_REQ := FALSE;
(* ПОСЫЛКА ОТ КОНТРОЛЛЕРА В ХОСТ *)
WRITE_DATA();
SYMBOL_COUNT := WRITE_DATA.COUNT;
SND_CNT := SysSockSend( SOCK_ACC, ADR( SEND_BUF[ 0 ] ), SYMBOL_COUNT, 0 );
END_IF (* ANSVER_REQ *)
END_IF (* RCV_BYTES_CNT > 0 *)
(* ЗАКОНЧЕНА СВЯЗЬ С ХОСТОМ *)


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

GET http://www.yandex.ru/index.htm$R$N$R$N

ну или подобное для вашего сайта

capzap
26.08.2014, 10:19
Дмитрий слегка перепутал, задача из плк отправить пк запрос, а не в качестве веб-сервера использовать контроллер