Я это прекрасно понимаю. Давайте начнем с начала. Была задача из четырех энергонезависимых переменных с диапазоном 0-255 сделать одну.
Вот её реализация, спасибо Сергей0308
Вложение 38487
Я пытаюсь сделать макрос
Вложение 38486
Не работает (
Вид для печати
Я это прекрасно понимаю. Давайте начнем с начала. Была задача из четырех энергонезависимых переменных с диапазоном 0-255 сделать одну.
Вот её реализация, спасибо Сергей0308
Вложение 38487
Я пытаюсь сделать макрос
Вложение 38486
Не работает (
Вопрос был выше, работа только с экраном или еще верхний уровень ?
Пока только экраны. Если возникнет задача с верхним уровнем - буду разбираться отдельно.
Все равно не понимаю логики, вы распаковываете одну 32-х битную переменную в программе на ЧЕТЫРЕ 32-х битных переменных в программе для отображения и ввода с экрана. Итого ПЯТЬ переменных съели и это не считая дополнительных FBD для реализации. СМЫСЛ ?
Объём энергонезависимой памяти ограничен, в данном случае позволяет использовать в четыре раза больше переменных(8 битных), диапазона 0-255 с функцией энергонезависимости! Что Вам не понятно, что такое в четыре раза??? И я программу готовую выложил, для демонстрации, Вы просто попробуйте, может тогда Вам станет понятней?! Короче, здесь разбивается одна 32 битная энергонезависимая переменная на 4 байта, четыре 8 битных переменных диапазона 0-255!
Или зайдём с другого конца: вам нужна энергонезависимая переменная диапазона 0-255, В ОЛ переменные 32 битные и хотя вам достаточно 8 бит, вы занимаете все 32 бита, то есть используете не более 25% ресурсов, остальные стоят мёртвым грузом(не используются), может так будет понятней!
К слову такое расточительство преобладает во Вселенной, например, если не ошибаюсь на Солнце(на всех подобных звёздах) используется около 2% топлива на главной последовательности(это когда из водорода гелий получается), что находится в центре звезды, так что 25% по звёздным меркам это очень много! https://ru.wikipedia.org/wiki/Звёздная_эволюция https://indicator.ru/article/2018/03...i-smert-zvezd/
Сергей0308 да что вы говорите, а переменные для экрана и редактирования уставок с него какой будут иметь тип ? и сколько будут занимать бит ?
Скачал посмотреть, интересно получилось, надо будет на ПР-ке погонять...
Если переменную для экрана предварительно вычитать из энергонезависимой переменной и преобразовать по маске, то все должно сработать, у меня в одном устройстве, так решается задача упаковки в 32 разрядное число 5 или 6 переменных, главное уложиться в диапазон для нужных переменных, при этом все они энергонезависимые, таких групп 10, итого вместо 60 переменных, используется 10 полноценно используемых в памяти.
Зачем Вы на другую тему перескакиваете? Ну если сильно хотите можно поговорить о переменных, что выводятся и редактируются с экрана: они тоже занимают 32 бита, но они не энергонезависимые и при включении при первом цикле они перезаписываются значением из энергонезависимой переменной, а так как диапазон этих переменных 0-255, то хватает одной энергонезависимой переменной для 4 таких диапазонов! Вы лучше попробуйте на практике, тогда и вопросов не будет!
Можно и побитно писать-читать как Юрий предлагает, но наверно проще побайтно!
Да, я уже понял идею, посмотрев программу Сергея... просто руки дойдут до ПР-ки опробую. Экран то на самом деле пол дела, еще надо Scada научить запаковывать часть неизменяемых переменных с одной изменяемой например и послать обратно в ПР, чтобы те переменные, которые мы не меняем в 0 не превратились.
В принципе тоже решаемо, зависит от возможностей Scada.
Ревака Юрий, а, ну еще из-за вашего глюка с Modbus переменными и возможностью задавать начальные значения тоже придется дополнительно разделять переменные, что приводит к увеличению переменных в два раза и необходимости использовать дополнительно FBD в программе. Не смотрел еще в новых версиях, вылечили или все по старому и конь не валялся ?
Ну или как простой вариант, после запуска ПР после прошивки необходимо все переменные отредактировать нужными значениями да не ошибиться, что есть что и какие значения должны быть...
Но вопрос остался открытым. Как эту программу запихнуть в макрос? У меня не получается. Это вообще возможно?