Форум » » Энергонезависимые параметры » Ответить

Энергонезависимые параметры

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.: Я предложил подход к решению, исходя из того, как я понял проблему.



полная версия страницы