Всем привет ,может кто подскажет как вытащить ip адресс плк в среде codesys(не через браузер) , допустим есть библиотеки позволяющие вытащить время как переменную.Хочу реализовать горячую смену ip адреса.
можно переписать файл, хранящий адрес, но изменения вступят в силу только после перезагрузки, так что получется не такая и горячая замена
можно переписать файл, хранящий адрес, но изменения вступят в силу только после перезагрузки, так что получется не такая и горячая замена
А можно конкретнее пожалуйста , с перезагрузкой как нибудь разберусь.
А можно конкретнее пожалуйста , с перезагрузкой как нибудь разберусь.
Посмотрите здесь http://www.owen.ru/forum/showthread.php?t=17746
32021
PROGRAM File_IP
VAR
BUFER: ARRAY [1..76] OF BYTE;(*Буфер для чтения и записи файла local_addres.dat*)
EMAC: STRING; (*Смвольные значения в файле*)
IP: STRING(11); (*Смвольные значения в файле*)
GATE: STRING(11); (*Смвольные значения в файле*)
MASK: STRING(11); (*Смвольные значения в файле*)
StatusOfFile: INT:=100;
f: DWORD;
statusf: DWORD;
END_VAR
(*Используются глобальные переменные в модуле Modbus slave -регистры для обмена с панелью
dwIP: DWORD;
dwGATE: DWORD;
dwMASK: DWORD;
*)
CASE StatusOfFile OF
0: (*проверить не изменялись ли значения в панели и если да, то новые значения поместить в буфер*)
IF dwIP <> IP4hex_DECODE(IP) THEN
_STRING_TO_BUFFER(IP4_TO_STRH(dwIP), 27, ADR(BUFER), SIZEOF(BUFER)); StatusOfFile:=10;
END_IF
IF dwGATE <> IP4hex_DECODE(GATE) THEN
_STRING_TO_BUFFER(IP4_TO_STRH(dwGATE), 45, ADR(BUFER), SIZEOF(BUFER));StatusOfFile:=10;
END_IF
IF dwMASK <> IP4hex_DECODE(MASK) THEN
_STRING_TO_BUFFER(IP4_TO_STRH(dwMASK), 63, ADR(BUFER), SIZEOF(BUFER)); StatusOfFile:=10;
END_IF
10: (*сохранить предыдущее состояние файла*)
statusf:=SysFileCopy('local_addres.bak', 'local_addres.dat');StatusOfFile:=11;
11: (*открыть файл на запись*)
f:=SysFileOpen('local_addres.dat', 'w');StatusOfFile:=12;
12: (*записать буфер в файл*)
statusf:=SysFileWrite(f, ADR(BUFER), SIZEOF(BUFER));StatusOfFile:=102;
(*Эта часть выполняется однократно после старта ПЛК*)
100: (*Открыть файл на чтение*)
f:=SysFileOpen('local_addres.dat', 'r');
IF f=0 THEN
StatusOfFile:=200; (*Нет такого файла*)
ELSE
StatusOfFile:=101; (*ОК, файл существует*)
END_IF
101: (*Прочитать файл в буфер*)
statusf:=SysFileRead(f, ADR(BUFER), SIZEOF(BUFER));StatusOfFile:=102;
102: (*Закрываем файл*)
SysFileClose(f);StatusOfFile:=103;
103: (*Текущие значения из файла в панель*)
dwIP:=IP4hex_DECODE(IP);
dwGATE:=IP4hex_DECODE(GATE);
dwMASK:=IP4hex_DECODE(MASK);
StatusOfFile:=0;
200: (*Если файла нет, то попробовать его восстановить*)
statusf:=SysFileCopy('local_addres.dat', 'local_addres.bak');StatusOfFile:=201;
201:
IF statusf=0 THEN
(*старой версии файла нет, создать новый*)
_STRING_TO_BUFFER('EMAC=6A:77:00:22:01:98$n$rIP=C0 :A8:01:41$n$rGATE=C0:A8:01:01$n$rMASK=FF:FF:FF:00$ n$r', 0, ADR(BUFER), SIZEOF(BUFER));
StatusOfFile:=11; (*Записать новый файл*)
ELSE
StatusOfFile:=100;
END_IF
END_CASE
EMAC:=BUFFER_TO_STRING(ADR(BUFER), SIZEOF(BUFER), 5, 21);
IP:=BUFFER_TO_STRING(ADR(BUFER), SIZEOF(BUFER), 27, 37);
GATE:=BUFFER_TO_STRING(ADR(BUFER), SIZEOF(BUFER), 45, 55);
MASK:=BUFFER_TO_STRING(ADR(BUFER), SIZEOF(BUFER), 63, 73);
petera (http://www.owen.ru/forum/member.php?u=11873)Спасибо!
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot