1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Массивы в TIA Portal

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

Здравствуйте!
Прошу подсказать как правильно работать с массивами в TIA Portal а лучше показать на примере?
Не до понимаю как работать с массивами. Нет желания например в большом проекте перелопачивать однотипные данные в нетворках, но пока видел только такие проекты. От одного проекта у меня волосы под мышками дыбом встали, 500 однотипных сигналов перебиральсь в ручную :ges_slap: .

Про то что просто так массивы создать нельзя это я понял, надо создавать DB блок в котором и прописать массив.
Как например присвоить массиву значения входов с адреса %I0.0, ведь входа %I0.0-%I0.7 это массив бит.

Реализация TIA Portal с блоками DB мне показалась глупой, просто сравниваю с другой средой разработки.
Если кому не трудно можете в моём проекте показать TIA Portal 16, или в вашем... буду очень признателен.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Массивы в TIA Portal

Сообщение Михайло »

С массивами лучше работать на языке SCL, мне кажется, вы очень нуждались в таком совете... Что касаемо копирования I,M,Q-областей в массивы, то тут надо смотреть вроде обычный MOVE или MOVE_BLK...

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

Здравствуйте.
Спасибо за совет.
То что с массивами необходимо работать в SCL это я понял .
Вообше предпочитаю текстовый язык.
Не совсем понял как присваивать адреса массивам.
А также назначение DB.
Попробую ваши советы и отпишусь.

Roman_33
освоился
освоился
Сообщения: 271
Зарегистрирован: 25 ноя 2018, 17:55
Имя: Роман
Благодарил (а): 4 раза
Поблагодарили: 42 раза

Массивы в TIA Portal

Сообщение Roman_33 »

ZETs писал(а): 11 июн 2021, 09:54 Как например присвоить массиву значения входов с адреса %I0.0, ведь входа %I0.0-%I0.7 это массив бит.
Ну и записывайте необходимый байт,слово,двойное слово входов в нужный DB. IB0 Move DB1.DBB0 (DB1.DBX0.0 - DB1.DBX0.7),IW0 Move DB1.DBW0 (DB1.DBX0.0 - DB1.DBX1.7),ID0 Move DB1.DBD0 (DB1.DBX0.0 - DB1.DBX3.7).
Случается нередко нам
И труд и мудрость видеть там,
Где стоит только догадаться
За дело просто взяться.
Аватара пользователя

Nicolayy
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 16 раз
Поблагодарили: 72 раза

Массивы в TIA Portal

Сообщение Nicolayy »

ZETs, я правильно Вас понял, что Вам не нравится обращаться к дискретным входам по имени тега или по адресу типа %I0.0, а хочется обращаться через массив? Т.е. Вы бы хотели в разделе "PLC tags" объявить тип данных Array[0..xxx] of Bool, адресация которого начиналась бы с I0.0, и таким образом обращаться к дискретным входам по индексу?

Такой конструкции нет.

Вы можете воспользоваться простым присваиванием, как Вам уже написали, т.е. создать массив Array[0..xxx] of Bool в неоптимизированном DB и написать в начале программного цикла буквально несколько строк, где от 8 до 32 штук дискретных входов за раз присваивать типа

%DB0.DBD0 := %ID0;
%DB0.DBD4 := %ID4;
%DB0.DBW8 := %IW8;
%DB0.DBB10 := %ID10
и т.п.,
потом работать с этими данными в DB, обращаясь к ним по индексу вместо того, чтобы обращаться к тегам дискретных входов напрямую. Проблема - не проблема на самом деле...

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Массивы в TIA Portal

Сообщение Михайло »

I, M, Q - это древняя дремучая структура памяти из 80-х годов.
Датаблок DB - это аналог структуры struct{...} из языка С++.
DB - это вполне современная структура, но и тут есть нюанс:
1. неоптимизированный DB - датаблок дремучего типа
2. оптимизированный DB - современный датаблок.
Многие по старинке предпочитают неоптимизированные DB, иногда использование такого типа датаблока дает преимущества - по аналогии преимущества использования указателей перед ссылками в языке С++.

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

Некоторые программисты хранят свои переменные в памяти M. Это прошлый век. Надо хранить данные в датаблоке и тогда не придется думать, по какому аппаратному адресу хранятся данные.

В моих программах в памяти M хранятся только системный байт и тактовый байт, все остальные данные лежат в датаблоках DB.

P.S. Кто-то ранее поднимал тему, как одной строкой скопировать все I в DB. Я колупался с этой темой и выдал вердикт: никакие MOVE, MOVE_BLK, MOVE_VARIANT, Serialize/Deserialize такое не умеют. Хотя инструментарий у S7-1x00 очень богатый, но память I/M/Q дремучая как говно мамонта, ничего не получается. Надо копировать побайтно с помощью MOVE, но это одной строкой не получится. Но пусть будет сотня строк, ерунда ведь.

Roman_33
освоился
освоился
Сообщения: 271
Зарегистрирован: 25 ноя 2018, 17:55
Имя: Роман
Благодарил (а): 4 раза
Поблагодарили: 42 раза

Массивы в TIA Portal

Сообщение Roman_33 »

А какой вообще в этом смысл? Построчный перебор я еще могу оправдать тем, что бывает неизвестно какой сигнал (используемый во многих местах программы) будет заведен в контроллер на ПНР (н.о или н.з) и что бы потом не лазить по всей (порой довольно большой) программе его можно инвертировать в одном месте. Или вдруг понадобится сделать задержку включения/выключения входа и т.д. Или я чего то не понимаю?
Случается нередко нам
И труд и мудрость видеть там,
Где стоит только догадаться
За дело просто взяться.

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Массивы в TIA Portal

Сообщение Sergy6661 »

ZETs писал(а): 13 июн 2021, 15:38 Не совсем понял как присваивать адреса массивам.
А также назначение DB.
Товарищ! А вот изучить документацию по Тиа, да хоть Хелп, встроенный задействовать не вариант. Это начало-начал, фундамент любой системы программирования- типы данных и их реализация, сам дата-блок по факту структура, но если заполнить его однотипными данными, можно лихо оперировать ими при помощи приемов косвенной адресации.
А с массивом(и с любым другим типом данных) в дата-блоке адресоваться можно несколькими способами-символьный самый простой DB_Data1.Array1[Num_element].
Аватара пользователя

Nicolayy
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 16 раз
Поблагодарили: 72 раза

Массивы в TIA Portal

Сообщение Nicolayy »

Михайло писал(а): 14 июн 2021, 22:13 неоптимизированный DB - датаблок дремучего типа
Только неоптимизированные и надо использовать. Чтобы применять для HMI драйвер S7-300/400, а не S7-1200. Чтобы заказчик не имел в будущем вот таких проблем:

https://support.industry.siemens.com/cs ... 0&lc=en-TR

Никаких преимуществ у оптимизированного DB нет, кроме небольшой экономии памяти. Соответственно, если контроллер не забит под завязку и памяти хватает, то нет в этой "оптимизации" никакого толку.
Roman_33 писал(а): 15 июн 2021, 08:57 А какой вообще в этом смысл?
Напишет он цикл и будет перебирать по индексу все DI. В функцию какую-то их отправлять в качестве аргумента, например.

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

Nicolayy писал(а): 15 июн 2021, 09:40 Напишет он цикл и будет перебирать по индексу все DI. В функцию какую-то их отправлять в качестве аргумента, например.
Совершенно верно. Например нет смысла 40 температурных датчиков перебирать в ручную.

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Массивы в TIA Portal

Сообщение Sergy6661 »

ZETs писал(а): 15 июн 2021, 12:38 Совершенно верно. Например нет смысла 40 температурных датчиков перебирать в ручную.
Все это можно делать используя функционал дата-блока, без всяких приблуд, типа массивов, учите мат.часть

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

Sergy6661 писал(а): 15 июн 2021, 12:41
ZETs писал(а): 15 июн 2021, 12:38 Совершенно верно. Например нет смысла 40 температурных датчиков перебирать в ручную.
Все это можно делать используя функционал дата-блока, без всяких приблуд, типа массивов, учите мат.часть
Примером не поделитесь?

Отправлено спустя 3 минуты 17 секунд:
Со структурой то разговоров нет это пользовательский тип данных.
Просто я не совсем понял для чего в ТИА массив определяется как структура...?? тип данных определён, а для меня как для программиста это совершенно очевидно что массив есть массив с типом, размерностью и т.д. вот и в тупил.

Просто когда видел в проектах по 50 и более нетворков то это угнетало моё сознание.

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Массивы в TIA Portal

Сообщение Sergy6661 »

ZETs писал(а): 15 июн 2021, 12:50 Примером не поделитесь
Нет. Т.к в данный момент занят проектом не на Сименсе. Там на поиск и прочтение информации надо потратить минут надцать, зато потом сами сможете примерами делиться.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Массивы в TIA Portal

Сообщение aranea »

ZETs писал(а): 15 июн 2021, 12:38 Например нет смысла 40 температурных датчиков перебирать в ручную
вы их каждый день перебирать будете пока программу пишете?
имхо, напишите 1 фб масштабирования и вызовите его 40 раз - это нагляднее и удобнее, чем в цикле что-то куда-то пересылать и потом отлаживать - в каждом вызове видно состояние входов и выходов блока
Изображение

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 36 раз

Массивы в TIA Portal

Сообщение ZuElecRu »

ZETs писал(а): 15 июн 2021, 12:50 Просто когда видел в проектах по 50 и более нетворков то это угнетало моё сознание.
Зато сознание ремонтника не угнетает. Очень потом легко искать, где чего не так при неисправности или отладке. А с вашими циклами еще потом разбираться, чего куда почем, пересылается. Если с "архитектурой" и "философией" мышлениея программиста не знаком, т.е видишь программу первый раз, вооще сложно. А если еще и комментариев нет, воще трэш. Когда программа написана методом "по 50 строк" работать с ней легче.

Roman_33
освоился
освоился
Сообщения: 271
Зарегистрирован: 25 ноя 2018, 17:55
Имя: Роман
Благодарил (а): 4 раза
Поблагодарили: 42 раза

Массивы в TIA Portal

Сообщение Roman_33 »

ZETs писал(а): 15 июн 2021, 12:50 Просто когда видел в проектах по 50 и более нетворков то это угнетало моё сознание.
Ну если это не вам запускать и налаживать, почему бы и нет. А вот когда в условиях ограниченного времени и пространства, придется ставить "костыли" вокруг "красивых" блоков,что бы хоть как то заработало,вы в следующий раз и 500 с радостью напишите.
Случается нередко нам
И труд и мудрость видеть там,
Где стоит только догадаться
За дело просто взяться.

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

В циклах есть свои плюсы и минусы.
Я в них вижу больше плюсов, хотя согласен что многим они не нравятся.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Массивы в TIA Portal

Сообщение aranea »

ZETs писал(а): 15 июн 2021, 17:03 В циклах есть свои плюсы и минусы.
Я в них вижу больше плюсов, хотя согласен что многим они не нравятся.
расскажите пожалуйста о своем опыте по работе с ПЛК в области промышленной автоматизации
Изображение

Andreywys
освоился
освоился
Сообщения: 299
Зарегистрирован: 15 сен 2016, 18:47
Имя: Андрей
Страна: Россия
город/регион: Вологда
Благодарил (а): 20 раз
Поблагодарили: 78 раз

Массивы в TIA Portal

Сообщение Andreywys »

На stl в STEP 7 можно скопировать любое количество значений вот так, если они расположены подряд:

Код: Выделить всё

          OPN DB10  //Открываем DB
          L     P#I 10.0 //Загружаем начальный адрес входа 
          LAR1             // в адресный регистр 1
          L P#dbx0.0    //Загружаем начальный адрес дата блока
          LAR2             // в адресный регистр 2

          L     500            //Загружаем количество итераций
NEXT: T     MW10        // в меркер

          L     IW [AR1,P#0.0]        //считываем слово из входов по адресу AR1 со смещением 0.0
          T     DBW [AR2,P#0.0]    // сохраняем слово по адресу AR2 со смещением 0.0
          L     16                          // загружаем размер смещения (в битах)
          +AR1                            // увеличиваем адресные регистры на размер смещения
          +AR2  
          L     MW10
          LOOP  NEXT
Аватара пользователя

Nicolayy
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 16 раз
Поблагодарили: 72 раза

Массивы в TIA Portal

Сообщение Nicolayy »

ZuElecRu писал(а): 15 июн 2021, 14:44 Зато сознание ремонтника не угнетает. Очень потом легко искать, где чего не так при неисправности или отладке. А с вашими циклами еще потом разбираться, чего куда почем, пересылается. Если с "архитектурой" и "философией" мышлениея программиста не знаком, т.е видишь программу первый раз, вооще сложно. А если еще и комментариев нет, воще трэш. Когда программа написана методом "по 50 строк" работать с ней легче
Вы предлагаете программисту использовать "китайский код". Ну т.е. писать программу как можно тупее и примитивнее, просто чтобы с программой этой мог разобраться при желании любой условный "дядя Вася-электрик". Следующий совет из этой серии - писать на FBD, ну чтоб уж совсем... Это не может быть правильным подходом к делу. Возможно, что не надо пытаться рационализировать код прям до фанатизма, но и китайский код - это тоже неправильно.
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Массивы в TIA Portal

Сообщение VADR »

Не знаю, что вы имеете в виду под "китайским" кодом, но в промышленных применениях FBD и LAD (LD) - это нормально, а циклы - нет.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
Аватара пользователя

Nicolayy
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 16 раз
Поблагодарили: 72 раза

Массивы в TIA Portal

Сообщение Nicolayy »

VADR писал(а): 15 июн 2021, 22:12 Не знаю, что вы имеете в виду под "китайским" кодом
Немножко копипасты из lurkmore...
lurkmore.PNG
А насчет промышленного применения LAD И FBD - это абсолютно нормальная история для тех задач, где все алгоритмы сосредоточены на уровне булевой алгебры, с этим нет нареканий - действительно, все эти логические цепочки в виде схем весьма удобно выглядят. Для задач на уровне программируемого реле - вполне нормально.

Отправлено спустя 19 минут 14 секунд:
ZETs писал(а): 15 июн 2021, 12:50 Просто когда видел в проектах по 50 и более нетворков то это угнетало моё сознание.
Распишите подробнее, что у Вас за задача. Мне просто нечем открыть Ваш проект из первого сообщения в данный момент. Вообще вот эта история про "50 нетворков" странно очень выглядит.
Вот так правильнее на самом деле:
aranea писал(а): 15 июн 2021, 14:06 напишите 1 фб масштабирования и вызовите его 40 раз - это нагляднее и удобнее, чем в цикле что-то куда-то пересылать и потом отлаживать
//
только я не очень понял, Вы то про DI, то про температурные датчики пишете...
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
ZETs
здесь недавно
здесь недавно
Сообщения: 55
Зарегистрирован: 14 июл 2020, 04:29
Имя: Евгений
Страна: Россия
город/регион: Чита
Благодарил (а): 14 раз

Массивы в TIA Portal

Сообщение ZETs »

aranea писал(а): 15 июн 2021, 17:17 расскажите пожалуйста о своем опыте по работе с ПЛК в области промышленной автоматизации
Интересный вопрос.

Отправлено спустя 10 минут 15 секунд:
Nicolayy писал(а): 15 июн 2021, 23:12 только я не очень понял, Вы то про DI, то про температурные датчики пишете...
Извините за неточность будем считать это всего лишь данные...
Этот проект пустой для учебных целей.

Проект автоматизации ГВУ с пошаговым перебором датчиков навел на мысль их перебора в цикле.
Пример: В написании программы для МПСИ на CS, где более 40 датчиков температуры и давления (уставки предупр. и аварии) и 10 датчиков потока (не считая остальной логики).
Прогонял всё в цикле и радовался жизни.

Изучаю ТИА и мне стало интересно как массиву присвоить адрес и т.д..

UNTK_RAA
здесь недавно
здесь недавно
Сообщения: 89
Зарегистрирован: 01 мар 2010, 17:37
Имя: Алексей Алексеевич
Страна: Россия
город/регион: Нижний Тагил
Благодарил (а): 17 раз
Поблагодарили: 9 раз

Массивы в TIA Portal

Сообщение UNTK_RAA »

Roman_33 писал(а): 15 июн 2021, 15:53 Ну если это не вам запускать и налаживать, почему бы и нет. А вот когда в условиях ограниченного времени и пространства, придется ставить "костыли" вокруг "красивых" блоков,что бы хоть как то заработало,вы в следующий раз и 500 с радостью напишите.
Очень точно подмечено. Одинаковые объекты на практике очень часто получаются разными. Вся программная красота коту под хвост.
Программа должна быть в первую очередь быть хорошо читаема, и ее можно было бы легко поправить в условиях ПНР (сжатые сроки, шум, пыль, отсутствие рабочего места и пр.)

Сам люблю красиво завернуть. Но со временем меня перестал смущать "китайский код". В Excel забиваешь однотипные строчки, а потом копируешь их в Step7 или другую среду программирования. Все сигналы через Cross-Reference мгновенно находятся и состояние подсвечивается. В стрессовых условиях ПНР чем проще, наглядней - тем лучше.

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Массивы в TIA Portal

Сообщение Михайло »

У меня часть кода на SCL (циклы-массивы). Если там что-то не так работает, очень долго раскуривать. Мониторинг не улавливает внутрицикловые процессы, а сохранять результаты внутрицикловых операций в памяти - накладно.
Ответить

Вернуться в «Simatic TIA Portal»