Сообщение от
lecsa
Все вопрос снимается. В конфигурацию через кодесис записать значение переменной НЕЛЬЗЯ.
Конфигурационные пользовательские параметры – значение этих парамет-ров считывается из EEPROM при запуске контроллера. Конфигурационные пользова-тельские параметры доступны для редактирования с передней панели и для чте-ния / записи по сети (при условии установленных атрибутов).
Введенные в ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») новые значения этих параметров не сохраняются в EEPROM и не до-ступны по сети RS.
Введенные с передней панели ПЛК или по сети значения конфигурационных па-раметров сохраняются в EEPROM, и при выключении питания будут сохранены.
здесь речь идет, НЕ о введенных в окне визуализации, а о тех случаях, когда вводятся значения вручную прямо в дерево ресурса конфигурация.
А так, в программе запросто, только использовать нужно функцию "SAVE_PARAMETER" из библиотеки ARM7_specific.lib
ЗЫ
Пример есть на диске ПЛК
Применение данной функции показано на примере ее вызова в составе
программы, которая при отпускании нажатых кнопок Альт+стрелка вверх записывает
значение параметра «Уставка 1», увеличенное на 1.
Вложение 29798
Код:
PROGRAM PLC_PRG
VAR
tm:TON;
fm:F_TRIG;
starting:BOOL:=FALSE;
param_ptr:POINTER TO parameter_descriptor;
param_adr: POINTER TO REAL;
param_adr2: POINTER TO ARRAY[0..15] OF BYTE;
temp: REAL;
temp2: ARRAY [0..15] OF BYTE;
END_VAR
VAR CONSTANT
key:BYTE:=136;
END_VAR
IF NOT starting THEN (*То что делается при начальной загрузке контроллера*)
SetWorkScreenCount(1); (*Установим количество экранов = 1 *)
ClearScreen(0); (*Очистим экран*)
starting:=TRUE; (*Установим аттрибут, чтобы больше не входить в этот цикл*)
END_IF
fm(clk:=kbrd=key); (*Если пользователь нажал Альт+стрелка вверх*)
IF fm.Q THEN (*и отпустил, то будет выполнен этот цикл*)
param_ptr:=READ_BY_HASH(16#37B7,0); (*чтение дескриптора параметра*)
temp:=sp1+1.0; (*в переменную temp занесём значение уставки + 1*)
param_adr:=ADR(temp); (*в param_adr -- адрес temp*)
param_adr2:=param_adr; (*Сделаем так, чтобы переменные param_adr и param_adr2 ссылались на одно и то же место в памяти*)
temp2:=param_adr2^; (*в temp2 занесём результат, считанный по адресу param_adr2, то есть фактически в temp2 попадает значение из temp с учётом преобразования типов*)
param_ptr^.value:=temp2; (*значение переменной в param_ptr занесём temp2*)
SAVE_PARAMETER(param_ptr); (*запись параметра в память контроллера*)
END_IF
tm(in:=NOT tm.Q, pt:=t#200ms); (*цикл индикации -- 200 мс*)
IF tm.Q THEN (*цикл будет запущен каждые 200 мс*)
ShowReal(0,0,0,'%2.1f',sp1); (*отображаем значение уставки*)
END_IF