Есть необходимость по какому-то событию производить инициализацию всех DB. Прочитал Бергера про рестарт CPU - запутался...
Согласно приведенной ниже странице разница между "холодным" и "полным" рестартами получается только в сбросе данных: в первом случае это несохраняемые, во втором - данные пользователя ... а в чем разница между этими данными? Переменные данные DB к чему относятся?
Далее: как вызвать эти самые ОB100, OB101, OB102 ? Есть ли иной способ провести инициализацию как отдельно взятого DB, так и всех блоков программы пользователя?
Конкретный случай - СPU S7-315, но про S7-400 тоже хотел бы услышать мнение специалистов.
Спасибо за помощь!
[?] Програмная инициализация DB.
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
-
- Posts: 501
- Joined: Tue Jun 27, 2006 5:52 am
- Location: Russia
Re: [?] Програмная инициализация DB.
Для 300 серии актуальны:
Холодный пуск. При этом сбрасываются все данные и сохраняемые и не сохраняемые, и DB. Такой пуск можно произвести только из режима PG в окне оперативного управления. Либо после MRES, хотя это несколько больше
Теплый пуск (новый пуск) - сбрасываются только не сохраняемые данные. Данные в DB сохраняются. Переключателем RUN->STOP выполняется.
Для 400 серии еще добавляется горячий пуск. Соответственно сохраняются все данные и программа начинается с места останова.Также, такой пуск можно произвести только из режима PG в окне оперативного управления.
ОВ100 для теплого пуска. ОВ101 для горячего пуска.
ОВ100 надо создать в своей программе и загрузить в контроллер. К примеру, в него рекомендуют сконфигурировать ПИД-регулятор с командой сброса накопленных промежуточных данных в DB. Контроллер вызывает ОВ100 сам, ничего нигде указывать не нужно.
Переинициализация FB, DB в программе пользователя - задача инженера-программиста.
С оф. сайта скачайте данные по процессорным модулям. Там все - и концепция памяти, и виды пусков описаны. Про все сразу, рассказать затруднительно
Холодный пуск. При этом сбрасываются все данные и сохраняемые и не сохраняемые, и DB. Такой пуск можно произвести только из режима PG в окне оперативного управления. Либо после MRES, хотя это несколько больше
Теплый пуск (новый пуск) - сбрасываются только не сохраняемые данные. Данные в DB сохраняются. Переключателем RUN->STOP выполняется.
Для 400 серии еще добавляется горячий пуск. Соответственно сохраняются все данные и программа начинается с места останова.Также, такой пуск можно произвести только из режима PG в окне оперативного управления.
ОВ100 для теплого пуска. ОВ101 для горячего пуска.
ОВ100 надо создать в своей программе и загрузить в контроллер. К примеру, в него рекомендуют сконфигурировать ПИД-регулятор с командой сброса накопленных промежуточных данных в DB. Контроллер вызывает ОВ100 сам, ничего нигде указывать не нужно.
Переинициализация FB, DB в программе пользователя - задача инженера-программиста.
С оф. сайта скачайте данные по процессорным модулям. Там все - и концепция памяти, и виды пусков описаны. Про все сразу, рассказать затруднительно
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?] Програмная инициализация DB.
Значит програмным способом (в программе пользователя) вызвать ОВ102 (холодный рестарт) нельзя? Я правильно понял? Если так - то жаль...
Рассматриваю другой вариант: системная функция SFC21 - nitializing a Memory Area with SFC 21 "FILL"
Если я сделаю такой вызов:
Произойдет ли заполнение DB100 нолями? Нужно-ли указывать как-то где-то длинну DB, или данная функция будет обрабатывать весь блок до конца?
На момент написания сообщения нет возможности проверить работоспособность этого кода, поэтому прорабатываю вопрос теоретически.
Рассматриваю другой вариант: системная функция SFC21 - nitializing a Memory Area with SFC 21 "FILL"
Если я сделаю такой вызов:
Code: Select all
CALL SFC 21
BVAL :=0
RET_VAL:=#ret_value
BLK :=DB100
На момент написания сообщения нет возможности проверить работоспособность этого кода, поэтому прорабатываю вопрос теоретически.
-
- Posts: 65
- Joined: Thu Nov 01, 2007 9:41 pm
- Location: Belarus
Re: [?] Програмная инициализация DB.
Code: Select all
CALL "FILL"
BVAL :=MB10
RET_VAL:=#ret_value
BLK :=P#DB100.DBX10.0 BYTE 10
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?] Програмная инициализация DB.
Указатель P# в последней строке означает, что 0 (примем: МВ10 содержит 0) заполнятся 10 байт блока DB100 начиная с адреса DBX10.0 ?Yury wrote:Code: Select all
CALL "FILL" BVAL :=MB10 RET_VAL:=#ret_value BLK :=P#DB100.DBX10.0 BYTE 10
Прошу прощения если вопрос ламерский - не очень дружу с косвенной адресацией в LAD...
Получается, что для полного заполнения нолями блоков разной длины надо вызывать функцию отдельно для каждого блока и в параметрах указывать количество заполняемых байт - то есть длину DB?
-
- Posts: 65
- Joined: Thu Nov 01, 2007 9:41 pm
- Location: Belarus
Re: [?] Програмная инициализация DB.
Да, именно так...
Если Вам нужно на определённом шаге программы произвести возврат к отличным от нуля initial value, можно создать блок (блоки) данных предназначенный именно для хранения переменных (данные в котором не будут меняться в процессе выполнения программы), и в необходимый момент копировать при помощи SFC 20 данные из резервного DB, в DB учавствующий в выполнении программы.
Если Вам нужно на определённом шаге программы произвести возврат к отличным от нуля initial value, можно создать блок (блоки) данных предназначенный именно для хранения переменных (данные в котором не будут меняться в процессе выполнения программы), и в необходимый момент копировать при помощи SFC 20 данные из резервного DB, в DB учавствующий в выполнении программы.
-
- Posts: 501
- Joined: Tue Jun 27, 2006 5:52 am
- Location: Russia
Re: [?] Програмная инициализация DB.
Еще, обратите внимание на временную переменную OB1_SCAN_1 в ОВ1. Она имеет ряд значений которые можно использовать при инициализации:
B#16#01: завершение теплого рестарта
B#16#02: завершение горячего рестарта
B#16#03: завершение основного цикла
B#16#04: завершение холодного рестарта
Т.е. Вы можете вполне точно задать условия - какие данные нужны в той или иной DB при старте ОВ1, в зависимости от того какой вид рестарта был выполнен.
B#16#01: завершение теплого рестарта
B#16#02: завершение горячего рестарта
B#16#03: завершение основного цикла
B#16#04: завершение холодного рестарта
Т.е. Вы можете вполне точно задать условия - какие данные нужны в той или иной DB при старте ОВ1, в зависимости от того какой вид рестарта был выполнен.