Page 1 of 1

Помогите создать базу данных

Posted: Fri Mar 15, 2019 2:56 pm
by Aleks333777333
Подскажите как организовать базу данных времени цикла, отображаемую на панели HMI?

С панелью всё понятно. Создал новый экран на нем поля ввода-вывода. Отдельно для минут поле и отдельно для секунд поле.
Image
Подсчет времени в контроллере ведется вот по такому нехитрому алгоритму.
Image

Время отображается на панели в окне вывода.
При каждом новом цикле сбрасывается, а хочется видеть базу на экране панели из 50 последних времён цикла.

Читал, скачанные с форума материалы, в разделе курсы Сименс, но там для классического Степа информация, а я в Портале делаю.
Если я правильно понимаю надо создать блок данных, в нем создать массив из 50 строк для минут и отдельно массив из 50 строк для секунд.
И писать время в этот блок данных, а для панели брать данные из этого блока данных. Но как писать данные в массивы я не знаю.
Помогите! Я вообще правильно мыслю или всё можно сделать проще, по другому, через меркерную память?

Re: Помогите создать базу данных

Posted: Fri Mar 15, 2019 5:03 pm
by CoMod
пример сохранения времени наработки двигателей за час, день, месяц в индексированные массивы
локальное время читается из ПЛК
время работы движка подсчитывается в одном счётчике в секундах... потом при необходимости можно поделить на 60 для получения минут или 3600 для поучения часов
Image

по полному заполнению потом можно оператором переноса блока данных скопировать массив в архивный блок и обнулить текущий
Image

Re: Помогите создать базу данных

Posted: Fri Mar 15, 2019 5:41 pm
by Aleks333777333
А как в моём случае сохранять %МW338 в массив? Чтобы из 50 ячеек массива всегда в следующую по порядку ячейку массива заполнялось. А по заполнению 50 ячеек, перезаписывалось заново, начиная с первой. Как-то это должно легко делаться. Не могу понять. Не работал с массивами раньше. Не получается. Обязательно ли создавать для этого функциональный блок и экземплярный блок данных, или можно создать глобальный блок данных и записывать туда данные из функции. Что-то запутался совсем.

Re: Помогите создать базу данных

Posted: Fri Mar 15, 2019 8:00 pm
by Yaroslav-70
Если предыдущая ячейка больше(не равна) "0", а текущая равна "0" то пишем в текущую и т.д.

Re: Помогите создать базу данных

Posted: Sat Mar 16, 2019 5:24 pm
by Aleks333777333
Такой алгоритм не сработает, когда заполнятся все 50 ячеек. (равных 0 не останется) Как писать в массив данные из MW?
Допустим по какому-то ключу "Конец времени цикла" надо перекинуть данные из MW в массив блока данных.

Re: Помогите создать базу данных

Posted: Sun Mar 17, 2019 6:50 pm
by Aleks333777333
Сделал пока так
Image
И таких 50 строчек для каждого значения счета количества срабатываний нижнего концевика и соответственно 50 ячеек ввода-вывода на панели оператора для отображение. (вернее 100 так как минуты и секунды отдельно считаются) До этой строчки подсчет срабатываний концевика, последней строчкой, когда значение равно 50 присвоить значению 0 и поехало по кругу писать.

Но это же не правильно. А если бы значений было 1000 или еще больше.
Надо как-то универсально делать и писать в массив.
К тому же жалко меркерную память.

Подскажите где почитать еще про массивы в ТИА портале. (Только не на английском)

Re: Помогите создать базу данных

Posted: Sun Mar 17, 2019 8:42 pm
by Rex2701
Косвенная адресация - наше всё. Т.е. твоё всё.

Re: Помогите создать базу данных

Posted: Sun Mar 17, 2019 9:21 pm
by Info
Rex2701 wrote:
Sun Mar 17, 2019 8:42 pm
Косвенная адресация - наше всё. Т.е. твоё всё.
(sfaq) How do you implement an array access with an S7-1200/S7-1500 with variable index?
https://support.industry.siemens.com/cs ... able-index
"Data_DB". Quantities ["i"] (one-dimensional ARRAY)
Image

как на картинке выше
Image

Re: Помогите создать базу данных

Posted: Mon Mar 18, 2019 2:23 pm
by Aleks333777333
Спасибо, буду разбираться с этим. Сходу ничего не понял.

Re: Помогите создать базу данных

Posted: Mon Mar 18, 2019 6:24 pm
by Yaroslav-70
Aleks333777333 wrote:
Sat Mar 16, 2019 5:24 pm
Такой алгоритм не сработает, когда заполнятся все 50 ячеек. (равных 0 не останется) Как писать в массив данные из MW?
Сработает набегом, если предыдущая ячейка больше "0", а текущая равна "0", пишем значение в текущую ячейку, а в следующую пишем "0" и т.д., когда дойдешь до ячейки 50 в первую будет записан "0", так и гоняй по кругу. Единственное,- это "колесо" нужно будет "толкнуть".
Да согласен, вариант "топорный", но работать будет.
ЗЫ. Ну или по счетчику к-ва отрезаний обнули первую ячейку и пиши по-новой.