2

Пример работы ОВЕН ПЛК с ICMP протоколом.

Введение

Пример предназначен для демонстрации функционирования протокола ICMP на  ОВЕН ПЛК посредством посылки стандартной команды PING с ПЛК на любое удаленное устройство, подключенное к сети. Функционально программа   выполняет 1000 циклов в каждом из которых с помощью команды SysSockSendTo отсылается ICMP пакет с типом PING и кодом 0х00. После этого по прошествии задержки в 0.003с вызывается функция приема SysSockRecvFrom. Далее производится сравнивнение содержимго переданного и принятого пакета, и если проверяемое устройство корректно ответило, то  инкрементируется  флаг успеха suces, в противном случае флаг неудачи faul.

Проект, реализующий данный пример находится в файле «ISMP_TEST_PING.pro». При написании программы вызываются функции стандартной библиотеки SysLibSockets.

Типовая аппаратная конфигурация

Программа  испытывалась с двумя ОВЕН ПЛК 100 при подключении через сеть Ethernet.

При посылки 1000 запросов с временем ожидания 0.003с. ответ был получен на 970 запросов, что говорит о быстрой работе TCP/IP стека на ПЛК. При работе с другими устройствами время ожидания ответа необходимо увеличивать (например PC под управлением Windows) .

Описание программы

Программа функционирует через UDP сокеты, где при его создании необходимо указывать ICMP тип, в номере порта старший байт обозначает тип ICMP пакета, младший код пакета и IP адрес удаленной машины. Далее с помощью стандартных команд SysSockSendTo и  SysSockRecvFrom можно обмениваться данными с удаленной машиной через ICMP протокол.

Описание работы с ICMP протоколом

(*Программа опроса {Ping-запроса} через ICMP протокол*)

CASE web_stat OF

0:

(*Участок выполняемый при старте программы*)

web_stat:=1;

sock_adr.sin_addr:=16#0A00065F;

(*IP Адрес опрашиваемого устройства {создается сокет на опрашивающем устройстве}*)

sock_adr.sin_family:=SOCKET_AF_INET;

(*Стек протоколов TCP/IP*)

sock_adr.sin_port:=16#0800;

(*Старший байт- Тип ICMP пакета {08 — Ping} младший байт- код ICMP пакета { 0- Ping}*)

sock_adr1.sin_addr:=16#0A000626;

(*То же самое для функции чтения {в принципе не важно}*)

sock_adr1.sin_family:=SOCKET_AF_INET;

sock_adr1.sin_port:=16#1111;

my_BUFs:=’qwertyuiopasdfghjklzxcvbnm123456′;

(*Буфер передачи, данная информация используется для контроля ответа, может быть любой*)

my_BUFr:=»;

(*Буфер приема*)

sock:=SysSockCreate(SOCKET_AF_INET,SOCKET_DGRAM,SOCKET_IPPROTO_ICMP);

send:=FALSE;

suces:=0;

faul:=0;

count:=0;

1:

(*Участок выполняемый в цикле опроса*)

IF NOT send THEN

send:=TRUE;

resd:=SysSockSendTo(sock,ADR(my_bufs),32,0,ADR(sock_adr),SIZEOF(sock_adr));

(*Собственно посылаем запрос в ICMP формате c параметрами sock_adr*)

END_IF

tmr(IN:=start_TON,PT:=t#0.003s);

(*Организуем таймер для обеспечении временной задержки ожидания ответа*)

IF NOT start_TON THEN

start_TON:=TRUE;

END_IF

IF tmr.Q THEN

resd:=SysSockRecvFrom(sock,ADR(my_bufr),32,0,ADR(sock_adr1),SIZEOF(sock_adr1));

(*Время ожидания истекло считываем данные*)

IF FIND(my_BUFr,’pasd’)<>0           THEN

suces:=suces+1;

(*Сравниваем переданные и принятые данные в случае идентичности увеличиваем счетчик удачного Ping*)

ELSE

faul:=faul+1;

(*В противном случае увеличиваем счетчик неудачного Ping запроса*)

END_IF

my_BUFr:=»;

(*Очишаем буфер приема*)

send:=FALSE;

start_TON:=FALSE;

(*Устанавливаем переменные состояния для следующего запроса*)

count:=count+1;

(*Увеличиваем счетчик сформированных запрсов*)

END_IF

IF count=1000 THEN

(*Если выполнено определенное кол-во запрсов «останавливаем программу»*)

web_stat:=3;

END_IF

(*Участок выполняемый при останове программы*)

3:

;

END_CASE

 

Раздел: ОВЕН ПЛК, Программы ПЛК Метки: , , , ,

2 комментариев к "Пример работы ОВЕН ПЛК с ICMP протоколом."

  1. Алекандр:

    Пытаюсь применить на практике описанный алгоритм, но появились вопросы…
    Правильно ли я полагаю, приведенный в статье текст программы написан на ST?
    Собственно скомпилировать его не получается, поскольку нет описаний переменных, а у меня нет знаний в ST, чтобы самому их всех определить.

    Подскажите пожалуйста: в статье упомянут файл проекта «ISMP_TEST_PING.pro» —
    где его можно скачать?

    • Tomilov91:

      Что-то вроде такого по типам переменных получается, нужно подключить библиотеку SysLibSockets. Забавное слово ‘кавычки’, но они в тексте программы не те стоят.

      web_stat: word;
      sock_adr: sockaddress;
      sock_adr1: sockaddress;
      my_BUFs: STRING;
      my_BUFr: STRING;
      sock: DINT;
      send: BOOL;
      suces: WORD;
      faul: WORD;
      count: WORD;
      resd: DINT;
      tmr: TON;
      start_TON: BOOL;

Оставить комментарий

Отправить сообщение

CoDeSys GSM/GPRS модем Lectus OPC MasterSCADA Modbus MX110 Omron OPC-сервер owen OWEN Easy Logic owen logic PLC Configuration PROFIBUS s-200 SCADA scada системы siemens siemens plc SIMATIC Simplight SMS step7 TRACE MODE Динамизация ИП-320 ОВЕН ОВЕН ПЛК ОВЕН ПЧВ ПЛК ПЛК ОВЕН ПР 110 Панель оператора Программируемое реле Частотный преобразователь библиотека в CoDeSys визуализация диспетчеризация конфигурация панели программирование ПЛК серия NS сименс плк частотник частотное управление язык CFC язык ST
.