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

Как передать данные из массива в теги?

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

Добрый день. Возможно вопрос глупый, только начинаю осваивать сименс. По ТСР собираю данные с различных устройств в массив, а дальше нужно передать эти данные в теги. Можно конечно обрабатывать каждый элемент массива и через move передать в меркер, но данных много. Работаю в tia portal v13

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3572
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 270 раз

Как передать данные из массива в теги?

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

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

Ответ на исходный вопрос:
1. Посмотрите Deserialize - это функция, которая позволяет развалить массив произвольной структуры в бесструктурный ряд отдельных тэгов, записанных подряд в памяти. Функция Serialize делает обратную операцию, если что.
2. Используйте неоптимизированные датаблоки (на самом деле Сименсом не рекомендуется, а что делать?).

Опишите Ваши конкретные массивы и отдельные тэги, чтобы посоветовать что-то. Где хранятся тэги? В датаблоках?

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

Т.е. после получения данных с modbus tcp даные помещаются в db. Далее мы в двойном слове переставляем слова, чтобы получить правильные значения и помещаем их в массив. Далее эти данные нужно передать на hmi панель weintek. Панель связана с меркерами двойных слов md300-md500. Собственно и нужно данные загнать в эти ячейки.

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

Выкладываю скрины. Пока ничего не получается.
[+]
DB_input_reg.jpg
DB_TCP_Val.jpg
tag.jpg
main.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3572
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 270 раз

Как передать данные из массива в теги?

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

Ошибка 8254 - Invalid data type at the DEST_VARIABLE parameter.
Я в POS прописывал 0, в этом случае вроде размер передаваемых данных определяется автоматически. И потом: здесь хранится число байт, а не двойных слов. То есть вроде как надо писать 60, а не 15.

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

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

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3572
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 270 раз

Как передать данные из массива в теги?

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

надо записать туда 0 или 60.

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Как передать данные из массива в теги?

Сообщение winb »

На выходе DEST_VARIABLE блок ждет указатель на область памяти, куда нужно будет раскидать значения из массива (ANY, VARIANT, ARRAY, STRUCT). В общем - нужно указать не MD396, а что-то типа P#m396.0 dword 15. В этом случае блок возьмет из исходного массива 15 элементов и раскидает по 15 двойным словам, начиная с MD396.
Вообще, из хелпа я понял, что POS - индекс элемента массива, с которого нужно начинать десериализацию, а количество элементов, которые будут обработаны - зависит от размера целевой области данных (DEST_VARIABLE).
Просьба сильно не пинать, возможности проверить свои умозаключения на практике - нет, но попробуйте - вдруг получится 8-)

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

Спасибо, будем пробовать.
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Как передать данные из массива в теги?

Сообщение megavolt86 »

У меня похожый вопрос есть по теме:
Как с помощью тиапортала 13 упаковывать биты в слова в плк 315?
Конструкция упаковки из 1200 контроллера тут не работает, пробовал помещать в массив, но потом как мне обращаться к значению этого массива? Допустим я упаковал биты тревог а дальше сравниваю значение слова с нулем , если равно нулю то условие сработало... И в дальнейшем удобнее для алармов слова передавать на hmi...
:ext_secret:

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Как передать данные из массива в теги?

Сообщение winb »

Самое простое, что приходит на ум...
Дано:
биты m0.0-m1.7
слово mw10
Программа:
a m0.0
= m10.0
...
a m1.7
=m11.7
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Как передать данные из массива в теги?

Сообщение megavolt86 »

winb писал(а): Самое простое, что приходит на ум
Мне тоже самое пришло))) а не работает. Биты аварий формируются в разных дб и при ображении к этим битам выдает ошибку :типа данные инструкции не поддерживаются.
Пробовал и mw10.0:=db2.dbx0.0 и
db1.dbw0.0:=db2.dbx0.0 и
Test_block1.test_word1.%x0:=test_block2.test_bit0 (на 1200 это работает)
Думаю это старые косяки 300ой серии, но как выйти из ситуации не знаю.
Пробовал по адресу массива обращаться, но при сравнении (обработке)появляется ошибка несовместимых типов данных.
:ext_secret:

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Как передать данные из массива в теги?

Сообщение winb »

А обязательно SCL использовать? Есть ли возможность сборку слова выполнить на другом языке? На крайний случай - написать вспомогательную функцию, которая собирает биты в слово на языке низкого уровня (STL, например), и в SCL вызывать её с нужными параметрами. Или операцию ИЛИ применять к целевому слову с соответствующей битовой маской...
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Как передать данные из массива в теги?

Сообщение megavolt86 »

Ну теоретически же МЭКовские языки компилируются призагрузке в низкоуровневый (машинный) язык...
потому разницы, думаю, в языках нет для машины. Но ради интереса попробую.
Сами не пробовали в тиапортале эти конструкции строить?)
:ext_secret:

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Как передать данные из массива в теги?

Сообщение winb »

Пробовал, работало... Да и сейчас работает, проверил. Для меркерных слов - можно отдельно прописать теги для каждого бита. Для блока данных - в LAD, FBD, STL - можно использовать абсолютную адресацию для доступа к биту в слове - портал матерится, но принимает; в SCL тоже можно, но нужно явно указать, что используется абсолютная адресация (%DB1.DBX0.0 := "m0_1"; - знак процента перед переменной).

Автор темы
Yuran66
здесь недавно
здесь недавно
Сообщения: 29
Зарегистрирован: 30 мар 2017, 18:01
Имя: Юрий

Как передать данные из массива в теги?

Сообщение Yuran66 »

winb писал(а): На выходе DEST_VARIABLE блок ждет указатель на область памяти, куда нужно будет раскидать значения из массива (ANY, VARIANT, ARRAY, STRUCT). В общем - нужно указать не MD396, а что-то типа P#m396.0 dword 15. В этом случае блок возьмет из исходного массива 15 элементов и раскидает по 15 двойным словам, начиная с MD396.
Вообще, из хелпа я понял, что POS - индекс элемента массива, с которого нужно начинать десериализацию, а количество элементов, которые будут обработаны - зависит от размера целевой области данных (DEST_VARIABLE).
Просьба сильно не пинать, возможности проверить свои умозаключения на практике - нет, но попробуйте - вдруг получится 8-)
Нет не получилось. Написали свою фб, сразу меняем слова местами и раскладывается куда надо
Ответить

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