Спасибо. С праздничком! :)
Вид для печати
Спасибо. С праздничком! :)
Приветствую. Это опять я со своими тупыми вопросами :)
Все тот же ПЛК73м. Не могу понять как реализовать следующее, вернее реализовано все кроме 3го абзаца.
Кратко: Уставка (sp1) температуры в ПИД. Изменение уставки с панели (Sub_menu - Float - sp1 - тип "конфигурационный") По умолчанию "0". При вводе кнопками уставки, ПЛК запоминает ее значение при выключении питания. Тут все нормально. И как я понимаю, в этом случае sp1 является глобальной,так как обьявлена в sub_menu, правильно?
Далее, для познания не опознанного, сделал визуализацию, для более комфортного настраивания ПИД. Визуализация записывает переменные в плк в он-лайн режиме, допустим ту же уставку sp1, все отлично, но плк не запоминает ее при выключении.
Проба обьявить sp1 VAR_GLOBAL_RETAIN_PERSISTENT увенчалась конфликтом с глобальной sp1 .
Как правильно сделать. Я еще не силен чтоб самому додуматься. Если можно строчку кода или ссылку на пример или просто немного разжевать.
Наверное правильно будет спросить так " Как записать значение переменной в меню конфигурации самого плк через тег визуализации но чтобы осталась возможность, задавать значение переменной через ручной ввод на панели плк, меню конфигурации"
Файлик с проектом прилагаю.
Все вопрос снимается. В конфигурацию через кодесис записать значение переменной НЕЛЬЗЯ.
Конфигурационные пользовательские параметры – значение этих парамет-ров считывается из EEPROM при запуске контроллера. Конфигурационные пользова-тельские параметры доступны для редактирования с передней панели и для чте-ния / записи по сети (при условии установленных атрибутов).
Введенные в ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») новые значения этих параметров не сохраняются в EEPROM и не до-ступны по сети RS.
Введенные с передней панели ПЛК или по сети значения конфигурационных па-раметров сохраняются в EEPROM, и при выключении питания будут сохранены.
lecsa запишите по сети
здесь речь идет, НЕ о введенных в окне визуализации, а о тех случаях, когда вводятся значения вручную прямо в дерево ресурса конфигурация.
А так, в программе запросто, только использовать нужно функцию "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
О, petera благодарю! Попробую вникнуть!
Добрый вечер. Есть проблема. Нужно поднять ТРМ в кодесис на СFC. C cамим ТРМ проблем не возникло, но с гистерезисом никак не справлюсь. Подскажите как лучше это сделать.
Примеры смотрели на сайте?