- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Как передать данные из массива в теги?
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
Как передать данные из массива в теги?
Добрый день. Возможно вопрос глупый, только начинаю осваивать сименс. По ТСР собираю данные с различных устройств в массив, а дальше нужно передать эти данные в теги. Можно конечно обрабатывать каждый элемент массива и через move передать в меркер, но данных много. Работаю в tia portal v13
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Как передать данные из массива в теги?
Вопрос не глупый. Но объясните зачем Вы хотите перекладывать данные из массивов в отдельные тэги? Почему не работать с массивом напрямую или хотя бы с промежуточным массивом той же структуры?
Ответ на исходный вопрос:
1. Посмотрите Deserialize - это функция, которая позволяет развалить массив произвольной структуры в бесструктурный ряд отдельных тэгов, записанных подряд в памяти. Функция Serialize делает обратную операцию, если что.
2. Используйте неоптимизированные датаблоки (на самом деле Сименсом не рекомендуется, а что делать?).
Опишите Ваши конкретные массивы и отдельные тэги, чтобы посоветовать что-то. Где хранятся тэги? В датаблоках?
Ответ на исходный вопрос:
1. Посмотрите Deserialize - это функция, которая позволяет развалить массив произвольной структуры в бесструктурный ряд отдельных тэгов, записанных подряд в памяти. Функция Serialize делает обратную операцию, если что.
2. Используйте неоптимизированные датаблоки (на самом деле Сименсом не рекомендуется, а что делать?).
Опишите Ваши конкретные массивы и отдельные тэги, чтобы посоветовать что-то. Где хранятся тэги? В датаблоках?
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
Как передать данные из массива в теги?
Т.е. после получения данных с modbus tcp даные помещаются в db. Далее мы в двойном слове переставляем слова, чтобы получить правильные значения и помещаем их в массив. Далее эти данные нужно передать на hmi панель weintek. Панель связана с меркерами двойных слов md300-md500. Собственно и нужно данные загнать в эти ячейки.
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
Как передать данные из массива в теги?
Выкладываю скрины. Пока ничего не получается.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Как передать данные из массива в теги?
Ошибка 8254 - Invalid data type at the DEST_VARIABLE parameter.
Я в POS прописывал 0, в этом случае вроде размер передаваемых данных определяется автоматически. И потом: здесь хранится число байт, а не двойных слов. То есть вроде как надо писать 60, а не 15.
Я в POS прописывал 0, в этом случае вроде размер передаваемых данных определяется автоматически. И потом: здесь хранится число байт, а не двойных слов. То есть вроде как надо писать 60, а не 15.
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
Как передать данные из массива в теги?
При любых значениях POS данные присваиваются только указанному тэгу.
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Как передать данные из массива в теги?
На выходе DEST_VARIABLE блок ждет указатель на область памяти, куда нужно будет раскидать значения из массива (ANY, VARIANT, ARRAY, STRUCT). В общем - нужно указать не MD396, а что-то типа P#m396.0 dword 15. В этом случае блок возьмет из исходного массива 15 элементов и раскидает по 15 двойным словам, начиная с MD396.
Вообще, из хелпа я понял, что POS - индекс элемента массива, с которого нужно начинать десериализацию, а количество элементов, которые будут обработаны - зависит от размера целевой области данных (DEST_VARIABLE).
Просьба сильно не пинать, возможности проверить свои умозаключения на практике - нет, но попробуйте - вдруг получится
Вообще, из хелпа я понял, что POS - индекс элемента массива, с которого нужно начинать десериализацию, а количество элементов, которые будут обработаны - зависит от размера целевой области данных (DEST_VARIABLE).
Просьба сильно не пинать, возможности проверить свои умозаключения на практике - нет, но попробуйте - вдруг получится
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Как передать данные из массива в теги?
У меня похожый вопрос есть по теме:
Как с помощью тиапортала 13 упаковывать биты в слова в плк 315?
Конструкция упаковки из 1200 контроллера тут не работает, пробовал помещать в массив, но потом как мне обращаться к значению этого массива? Допустим я упаковал биты тревог а дальше сравниваю значение слова с нулем , если равно нулю то условие сработало... И в дальнейшем удобнее для алармов слова передавать на hmi...
Как с помощью тиапортала 13 упаковывать биты в слова в плк 315?
Конструкция упаковки из 1200 контроллера тут не работает, пробовал помещать в массив, но потом как мне обращаться к значению этого массива? Допустим я упаковал биты тревог а дальше сравниваю значение слова с нулем , если равно нулю то условие сработало... И в дальнейшем удобнее для алармов слова передавать на hmi...
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Как передать данные из массива в теги?
Самое простое, что приходит на ум...
Дано:
биты m0.0-m1.7
слово mw10
Программа:
a m0.0
= m10.0
...
a m1.7
=m11.7
Дано:
биты m0.0-m1.7
слово mw10
Программа:
a m0.0
= m10.0
...
a m1.7
=m11.7
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Как передать данные из массива в теги?
Мне тоже самое пришло))) а не работает. Биты аварий формируются в разных дб и при ображении к этим битам выдает ошибку :типа данные инструкции не поддерживаются.
Пробовал и mw10.0:=db2.dbx0.0 и
db1.dbw0.0:=db2.dbx0.0 и
Test_block1.test_word1.%x0:=test_block2.test_bit0 (на 1200 это работает)
Думаю это старые косяки 300ой серии, но как выйти из ситуации не знаю.
Пробовал по адресу массива обращаться, но при сравнении (обработке)появляется ошибка несовместимых типов данных.
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Как передать данные из массива в теги?
А обязательно SCL использовать? Есть ли возможность сборку слова выполнить на другом языке? На крайний случай - написать вспомогательную функцию, которая собирает биты в слово на языке низкого уровня (STL, например), и в SCL вызывать её с нужными параметрами. Или операцию ИЛИ применять к целевому слову с соответствующей битовой маской...
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Как передать данные из массива в теги?
Ну теоретически же МЭКовские языки компилируются призагрузке в низкоуровневый (машинный) язык...
потому разницы, думаю, в языках нет для машины. Но ради интереса попробую.
Сами не пробовали в тиапортале эти конструкции строить?)
потому разницы, думаю, в языках нет для машины. Но ради интереса попробую.
Сами не пробовали в тиапортале эти конструкции строить?)
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Как передать данные из массива в теги?
Пробовал, работало... Да и сейчас работает, проверил. Для меркерных слов - можно отдельно прописать теги для каждого бита. Для блока данных - в LAD, FBD, STL - можно использовать абсолютную адресацию для доступа к биту в слове - портал матерится, но принимает; в SCL тоже можно, но нужно явно указать, что используется абсолютная адресация (%DB1.DBX0.0 := "m0_1"; - знак процента перед переменной).
-
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 30 мар 2017, 18:01
- Имя: Юрий
Как передать данные из массива в теги?
Нет не получилось. Написали свою фб, сразу меняем слова местами и раскладывается куда надоwinb писал(а): На выходе DEST_VARIABLE блок ждет указатель на область памяти, куда нужно будет раскидать значения из массива (ANY, VARIANT, ARRAY, STRUCT). В общем - нужно указать не MD396, а что-то типа P#m396.0 dword 15. В этом случае блок возьмет из исходного массива 15 элементов и раскидает по 15 двойным словам, начиная с MD396.
Вообще, из хелпа я понял, что POS - индекс элемента массива, с которого нужно начинать десериализацию, а количество элементов, которые будут обработаны - зависит от размера целевой области данных (DEST_VARIABLE).
Просьба сильно не пинать, возможности проверить свои умозаключения на практике - нет, но попробуйте - вдруг получится