Форум » » Энергонезависимые параметры » Ответить
Энергонезависимые параметры
kislez2015: Подскажите, что можно сделать с переменными типа digital и string, чтобы они были энергонезависимыми? Это нужно чтобы создать определенные пресеты. Еще вопрос - можно ли что-то сделать в simpl+ модуле, чтобы так же хранить глобальные переменные в памяти даже при перещагрузке процессора? Спасибо
Ответов - 13
Игорь K.: Можно, объявляйте DIGITAL переменные как NONVOLATILE. Пример: NONVOLATILE INTEGER L1; DIGITAL_INPUT In1,Recall; DIGITAL_OUTPUT O1; PUSH Recall { O1=L1; } PUSH In1 { L1=1; O1=L1; } RELEASE In1 { L1=0; O1=L1; } На случай перезагрузки, в том числе по питанию нужна процедура начальной загрузки этих NONVOLATILE переменных. Насчет String - спроектируйте ваше ПО по-другому, храните ключевые данные в ANALOG или DIGITAL. А по запуску формируйте STRING из строчных Констант и ANALOG и (или) DIGITAL сохраненных данных.
kislez2015: Игорь K. это только к внутренним переменным относится, или к выходным тоже?
Игорь K.: Относится к решению задачи по сохранению переменных в энергонезависимой памяти процессора. Попробуйте собственноручно сохранять и вызывать эти переменные после перезагрузки процессора и все поймете.
kislez2015: Игорь K. спасибо, а как должна выглядеть процедура загрузки пепеменных после перезагрузки переменных?
Игорь K.: ОК, выше в пример добавил процедуру присвоения выходу состояния NONVOLATILE переменной по сигналу извне - Recall. Есть и классический подход - использование Function(Main). Все на любителя.
Вячеслав: Так вроде и строковые можно nonvolatile объявлять. Как раз с digital осторожнее надо быть. После перезагрузки 1 может стать совсем не 1, поэтому либо используйте integer со значениями не 0 и 1, а например 555 и 666 (работает стабильно) Либо в Main конструкцию типа: if (var_nv>1){var_nv=1;} //потом можно: if (var_nv=1){OUT=1;}else{OUT=0;}
kislez2015: Игорь K. а вот вижу в самом симпле есть serial ram, он разве не сгодится, чтобы текст сохранить?
Вячеслав: Все дело в привычке. По мне так в SIMPL+ все изящнее и главное нагляднее получается. Хотя код более ресурсный. Кому то проще на "квадратиках", а чуть позже вкуривать хитросплетения этой паутины согласуя тайминги и боясь сделать шаг в сторону, чтобы не упереться в какое нибудь ограничение. Надо сказать что и + есть свои бяки, которые можно подпереть парой костылей ) К примеру выше про 0 и 1, есть например проблемка с инициализацией выходов (особенно типа string) в цикле. Так если написать в main: Function Main() { WaitForInitializationComplete(); for (k=1 to 10) { Out[k]=ITOA(k); } } не факт что все выходы будут иметь значения от 1 до 10. Но стоит добавить маленький delay(5); в цикл и все будет гораздо стабильнее (но тоже не всегда). И processlogic() не помогает. Инициализация при старте текстовых выходов сущая беда. А вот по PUSH потом нет проблем ).
Игорь K.: Вячеслав пишет: Как раз с digital осторожнее надо быть. После перезагрузки 1 может стать совсем не 1, поэтому либо используйте... Это будущий мем. Супер.
kislez2015: Игорь K. а нет какого-то способа хитрого сохранить string? просто нужно сохранить нестандартизированный текст, который пользователь сам вводит для названия? и тут вроде никак его и не привяжешь к какой-то digital велечине
Игорь K.: Ничего хитрого нет. Можно и String хранить - в Help к SIMPL+ все описано. На практике тоже работает, это хранение цепочки символов.
kislez2015: Игорь K. да, присвоив nonvolotile глобальной строковой переменной тоже удалось хранить но Вы же говорили, что надо хранить string через digital - я подумал изначально, что с текстом это не работает
Игорь K.: Я предложил подход к решению, исходя из того, как я понял проблему.
полная версия страницы