PDA

Просмотр полной версии : ПЛК110-хх[M02] Инициализация переменных



Sergey666
25.06.2021, 10:00
Всем привет.

Итак имеем ПЛК110-60[M02] Retain переменные в списке с предустановленными значениями (Var_i1 :int:=123; ), изначально в "чистый" ПЛК с завода все зашилось и проинициализировалось, далее при обновлении программы все Retain сбросились в "0" и что только я не делал, дабы они снова проинициализировались, перепробовал все виды сбросов, полную перекомпиляцию.
Собственно вопрос- какой правильный алгоритм действий для инициализации переменных после перепрошивки ПЛК. ПЛК свежий, версия прошивки последняя.

Sulfur
25.06.2021, 11:43
алгоритм действий для инициализации переменных после перепрошивки ПЛК.
Не знаю на сколько правильный, но я делал так:

init:bool; флаг инициализации.
POU FirstInit; подпрограмма инициализации.
DefaultVolume:bool; флаг установки значений по умолчанию, если о присвоении дефолтных значений надо знать в основной программе.
---
В ПЛЦ_ПРГ в самом начале.

IF NOT init THEN FirstInit();
init:=TRUE;
END_IF;
В FirstInit


IF *нужная переменная 1*=0 AND *нужная переменная 2*=0 AND *нужная переменная N*=0
THEN
*нужная переменная 1*:=*нужное значение 1*;
*нужная переменная 2*:=*нужное значение 2*;
.
.
*нужная переменная N*:=*нужное значение N*;
DefaultVolume:=TRUE;
END_IF;
--
Как это работает.
При включении\сбросе\перепрошивке ПЛК флаг init равен FALSE.
Следовательно происходит вызов подпрограммы FirstInit. Там проверяются несколько переменных на нулевое значение, и если да, то переменным присваиваются первоначальные\безопасные значения. Проверять можно не все требуемые переменные, а только несколько, однако желательно из тех, чье значение по замыслу не может быть нулевым. А вот присваивать можно всем.
После однократного вызова FirstInit флаг init устанавливается в TRUE, что в последующих циклах отключает вызов FirstInit.
Далее эти переменные можно изменять как угодно.

capzap
25.06.2021, 12:25
Как это работает. .

забавно, это как в мультфильме про простоквашино, теперь за ним еще полдня бегать чтоб фото отдать
обоснуйте теперь как сюда впихнуть ретайны? Человек залил первоначально проект, в ретайнах появились значения, им заданные. После он их на кой-то обнулил и теперь ищет почему после перезагрузки они равны нулям

Sulfur
25.06.2021, 12:39
При перепрошивке ретайны и область модбаса по определению в нулях. У меня не получилось делать методом присваивания в области описания переменных, к тому же имел опыт проблем с ПЛК110 старой версии, когда все слетало в нули при мертвом встроенном аккумуляторе при снятии питания. Вот и наработал такой способ. Я и не говорил что он правильный, я говорил что он рабочий.
Да, не уточнил, что я все подобные переменные делаю глобальными. Область модбас(слейв) по определению ретайн и глобальна, работал в основном с ней.

как сюда впихнуть ретайны?
Так же как и любые другие. В чем проблема-то?

Sergey666
25.06.2021, 12:57
з Человек залил первоначально проект, в ретайнах появились значения, им заданные. После он их на кой-то обнулил и теперь ищет почему после перезагрузки они равны нулям

Это вот не надо, я не умею "на кой-то", по должности не положено. Ретайн при прошивке "нулевого" заводского ПЛК нормально инициализируются, а вот потооом фифти-фифти.

Sulfur, я подобные костыли давно знаю, применять имеет смысл только на ПЛК Овен! Потому как другие ПЛКшки стараются хранить в себе все что надо сколько есть у них сил и при обновлении программы всегда подтягиваются значения инициализации.

Ретайн область модбас слэйв это тоже, так себе изобретение и работать с ним ...тоже зло, но это все не в тему.
Вопрос остается в силе, если коротко то- почему в ПЛК с завода переменные инициализируются после прошивки, а потом после холодного сброса нет?

capzap
25.06.2021, 13:29
Так же как и любые другие. В чем проблема-то?
Допустим первый раз, ретайнов еще нет, заливают проект переменные инициализировались некими значениями из области объявлений, в Вашем случае при пуске программы своими фиксированными значениями. Во время работы выяснилось что переменная foo должна быть равна 75, её успешно присвоили из окна визуализации, а в Вашем коде инициализации остается значение 50. Внимание вопрос, какое значение будет у переменной после, как писалось в первом посте
перепробовал все виды сбросов, полную перекомпиляцию

capzap
25.06.2021, 13:31
Это вот не надо, я не умею "на кой-то", по должности не положено. Ретайн при прошивке "нулевого" заводского ПЛК нормально инициализируются, а вот потооом фифти-фифти.

не запостил, значит небыл. Какие Ваши доказательства?

Sulfur
25.06.2021, 14:50
capzap
Насколько я понимаю, речь идет не о сохранении переменных на веки вечные для будущих поколений, а про защиту от сбоев или после перепрошивки. Если необходимо сохранять на веки вечные, то есть способы записать все нужное в файл. Только это будет усложнять код. И необходимость такого способа зависит от задачи. В моем случае сохранения в файл не требовалось, а необходимо было только установить безопасные значения на случай сбоя.
Кстати, не совсем понятно как будет влиять изменения в визуализации, если проверка и первичная инициализация по моему способу выполняется в самом начале самого первого цикла ПЛК, и дальше никак на работу не виляет.

capzap
25.06.2021, 14:53
речь идет о ретайн, поэтому инициализация в коде вышеизложенным способом тут ни каким боком не подходит. Проблема совершенно в другом, в непонимании как работает ретайн, если залить проект и потом его сбрасывать ни одна ретайн переменная не сохранится. Сохраняются они только при корректном выключении питания и только после этого их можно увидеть при следующем запуске плк

Sergey666
25.06.2021, 14:55
не запостил, значит небыл. Какие Ваши доказательства?
Чего доказательства? Вы бредите?
Если конкретно информации нет- не надо постить!

Sergey666
25.06.2021, 15:00
Проблема совершенно в другом, в непонимании как работает ретайн, если залить проект и потом его сбрасывать ни одна ретайн переменная не сохранится.
Садитесь 5! Естесссно я перезагружаю ПЛК корректным способом!
Повторяю мне наколки, догадки и предположения не нужны, зырим в 1й пост внимательно, минусуем свои предположения и ...нужен четкий алгоритм без бла-бла-бла

melky
25.06.2021, 15:22
Sergey666 что значит сброс корректным способом ? интересует применительно к ПЛК100 например.

Sergey666
25.06.2021, 15:34
Sergey666 что значит сброс корректным способом ? интересует применительно к ПЛК100 например.

Я понимаю, сегодня пятница, но можно было и до вечера подождать... Где вы взяли слова "сброс корректным способом"??? Вы чего-то выдернули из контекста, прогнали через свое сознание, получилось на выходе вообще что-то иное и я это должен это разбирать?

melky
25.06.2021, 16:27
Естесссно я перезагружаю ПЛК корректным способом!

Простите это чьи слова? вот и как вы перегружаете ПЛК корректным способом ? извиняюсь за слово "сброс".

Sergey666
25.06.2021, 16:29
Отключением питания, а что?