ЖУРНАЛ «СТА» №3/2007

земпляр функционального блока, в отличие от функции, со- храняют свое состояние между вызовами. Иными словами, внутренние переменные программы и экземпляра функ- ционального блока сохраняют значения между вызовами. В адаптированной среде CoDeSys для Fastwel I/O поддержи- ваются следующие примитивные типы МЭК 611313: BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL и TIME. К непримитивным типам от- носятся массив (ARRAY) и структура (STRUCT). Специаль- ными типами являются указатель (POINTER TO), перечисле- ние, поддиапазон, ссылка и строка (STRING). Более подроб- ная информация приведена в документации по CoDeSys. Размер области памяти, отведённой под размещение внутренних переменных POU и глобальных переменных, доступных всем POU (и использование которых, по мнению автора, крайне нежелательно!) в адаптированном варианте среды исполнения CoDeSys для Fastwel I/O, составляет 24576 байт. В этой области компилятор среды разработки CoDeSys размещает все переменные состояния всех единиц организации программы и, к сожалению, все константы и временные переменные (переменные, объявляемые в сек- циях VAR_TEMP). Почему мы остановились на таком раз- мере памяти внутренних переменных? Компилятор CoDeSys для 80186 обеспечивает возможность размещения входных, выходных, глобальных и внутренних переменных в единственном сегменте процессора, размер которого не может превышать 64 кбайт. В этом же сегменте компилятор располагает некоторую служебную информацию, поэтому нам пришлось искать некоторое более или менее сбаланси- рованное соотношение размеров областей с учётом возмож- ностей контроллера по вводувыводу, а также по сложности и размеру разрабатываемых программ. Сохраняемые (VAR RETAIN) и не изменяемые после «го- рячей» перезагрузки программы (VAR PERSISTENT) пере- менные нашей адаптацией CoDeSys в настоящее время не поддерживаются. Мы также исключили поддержку флагов, которые могут задаваться для некоторых переменных про- граммы (noinit, nowatch и т.д.). Исключение поддержки флагов обусловлено необходимо- стью экономить память, так как компилятор CoDeSys для 80186 размещает и адресует эту информацию в том же сег- менте, где находятся входные, выходные и внутренние пере- менные. Отсутствие поддержки сохраняемых (VAR RETAIN) пере- менных в текущей версии объясняется следующими сообра- жениями. VAR RETAIN представляют стандартный по МЭК 611313 механизм автоматического сохранения некоторой части значений переменных программ в энергонезависимой памяти. Семантика VAR RETAIN состоит в том, что значения переменных, помещённых в данную секцию, должны сохра- няться в энергонезависимой памяти контроллера и загру- жаться из неё даже после внезапного отключения питания. Возможны два основных варианта технической реализа- ции сохраняемых переменных: 1)сохранение переменных области VAR RETAIN только в момент пропадания питания контроллера и восстановле- ние при последующем включении; 2)сохранение и восстановление области VAR RETAIN пере- менных между циклами программы, содержащей данную область. При использовании обоих способов в состав контроллера должна входить быстрая энергонезависимая память, разме- ра которой достаточно для размещения области сохраняе- мых переменных. Насколько «быстрой» должна быть данная память? На- пример, типовая программа для контроллера Fastwel I/O, оп- рашивающая дюжину модулей вводавывода, спокойно ук- ладывается в цикл 1 мс. Время записи любого количества данных размером до 8 кбайт во встроеннуюNAND флэшпа- мять составляет 1520 мс. Поэтому необходима либо стати- ческая память (SRAM) с питанием от батарейки, либо фер- роэлектрическая память с произвольным доступом (FRAM). Статическая память с питанием от батарейки означает не- избежный выход из строя батарейки в самый неподходящий момент. При этом пользователю придётся либо самостоя- тельно заменять батарейку, либо везти контроллер в ремонт. FRAM прекрасно подходит по скорости доступа (250 нс), однако имеет ограниченное количество циклов записи (от нескольких миллионов до 10 миллиардов). Что же такое 10 миллиардов циклов достоверной записи, с точки зрения программы контроллера? Если считать, что запись произво- дится между двумя соседними циклами программы, срок службы контроллера в часах составит около 2700 × T мс , где T мс — период вызова программы в миллисекундах. То есть при периоде, равном 10 мс, память будет изношена пример- но через 3 года. Таким образом, непосредственное использование второго варианта реализации механизма VAR RETAIN приемлемо далеко не для всех возможных применений контроллера. Иными словами – неприемлемо. Возможны компромисс- ные решения. 1. Указать в документации, что сохраняемые переменные могут изменяться только очень редко (уставки и коэффи- циенты регуляторов и т.п.), и перезаписывать данные только по изменению. Но вообще говоря, формально ни- чем не гарантируется, что они не начнут изменяться в каждом цикле. В ряде случаев уставки могут изменяться в каждом цикле в соответствии с алгоритмом. 2. Перезаписывать по изменению и «не чаще чем», оговари- вая величину «не чаще чем» в документации. Такой вари- ант непригоден для ситуаций, когда в программе имеются адаптивные регуляторы, которые на определённых фазах управления процессом пересчитывают свои коэффициен- ты и уставки в каждом цикле контроллера. Кроме того, пользователь будет вынужден обеспечивать сохранность переменных из области VAR RETAIN специальными средствами поддержки питания (источник бесперебойно- го питания и т.п.). Теперь о сохранении области VAR RETAIN только в мо- мент пропадания питания с помощью обработчика прерыва- ния, формируемого аппаратным монитором питания. Встро- енный преобразователь питания контроллеров Fastwel I/O рассчитан на максимальный ток потребления 1,2 А. Время, необходимое для копирования 8 кбайт данных из оператив- ной памяти в FRAM на процессоре R1610C, составит около 400 мкс. Диапазон значений напряжения, в пределах кото- рого сохраняется работоспособность основных подсистем вычислительного ядра контроллера с момента срабатывания монитора питания при пропадании внешнего напряжения, составляет около 5% от номинала. Тогда ёмкость конденса- тора, устанавливаемого в выходной цепи вторичного преоб- разователя питания контроллера, должна составлять около 1800 мкФ. Два танталовых конденсатора, с некоторым запа- сом образующих требуемую ёмкость, займут площадь около 25 × 20 мм, что практически неприемлемо при использовании конструктива WAGO. В приведённых рассуждениях не учи- тывается тот факт, что разные подсистемы вычислительного ядра имеют разные номинальные значения напряжения пи- АППА РАТ НЫ Е С Р Е Д С Т В А / П Р ОМЫШЛ Е ННЫ Е КОН Т Р ОЛЛ Е Р Ы 69 СТА 3/2007 www.cta.ru

RkJQdWJsaXNoZXIy MTQ4NjUy