Tools


«Сименс» в России

«Сименс» в России

Как в STL оптимально скопировать отдельные ячейки между DBs ?

Пакеты программирования STEP5/STEP7, инженерное программное обеспечение, программное обеспечение RunTime

Модераторы: gulenok_andrey, Кухаренко Сергей, pavel_puchkov

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 12 авг 2020, 12:50

Всем привет!

Нужно скопировать не все, а определенные ячейки DB1 в определенные ячейки DB2.
Ячейки, копируемые из DB1, расположены на фиксированном расстоянии «1» друг от друга.
Ячейки, копируемые в DB2, также расположены на фиксированном расстоянии «2» друг от друга.
Расстояния «1» и «2» не равны.

Есть ли у кого-нибудь код на STL (для НЕ «тиапортального» STEP7) для реализации задачи ?
Для минимизации количества кода полагаю, что нужно использовать LAR1, LAR2 и «циклы».

Заранее благодарен.

Негатив
Сообщения: 74
Зарегистрирован: 30 май 2019, 08:25

Сообщение Негатив » 12 авг 2020, 13:30

Не стоит этого делать. Сотворив шедевр непрямой адресации с использованием всех 4 аккумуляторов процессора(если это 400-й), вы уменьшите количество кода. Почти ничего не выиграете в быстродействии, так как количество действий будет примерно таким же, как если вы "тупо" скопируете ячейки в ячейки, явно указав все адреса. И получите write-only программу, которую никто кроме вас не разберёт потом, а через год и вы можете не вспомнить. А потом окажется, что нужно чуть двинуть одно значение - и вместо правки одного адреса вам всё заново переписывать.

Принцип KISS(Keep It Simple and Stupid) не зря придуман. Оптимальным будет копирование ячеек операторами L и T. По одной.

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 13 авг 2020, 12:07

Негатив писал(а):
12 авг 2020, 13:30
Не стоит этого делать. .....Почти ничего не выиграете в быстродействии, так как количество действий будет примерно таким же, как если вы "тупо" скопируете ячейки в ячейки, явно указав все адреса.
Oh, yes ! Этой фразы я ждал от кого-нибудь много лет :) Если это не намного облегчит работу CPU и не намного увеличит быстродействие программы в целом, то может действительно не стоит усложнять себе жизнь всяческими "выпендронами" с LAR1, LAR2 и "петлями". Тогда даже можно всё в LAD - де изобразить. В конце концов ячеек-то всего 27, а не 270. ВОт если бы их было 270, то скорее всего нужно было бы в STL реализовывать с "выпендронами" ... :?
В крайнем случае можно было бы использовать SFC20 (копирование исходного DB блока целиком или кусками в новый) и уже оттуда, из нового, потом брать нужные ячейки.

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 16 сен 2020, 09:33

Однако подсказали как.
Сделал компактно и элегантно в виде полу-универсальной функции с внешними входами. Работает.

Негатив
Сообщения: 74
Зарегистрирован: 30 май 2019, 08:25

Сообщение Негатив » 16 сен 2020, 11:13

Главное, чтобы через пару лет, разбирая этот код, не пришлось ломать голову "что это за функция и что она делает? И почему именно так?"

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 19 сен 2020, 21:58

Так у меня ж все ходы записаны :)

cron