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

Инициализация комбобокса

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

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

Здравствуйте.
В HMI панели TP1200 и TP700 используются комбобоксы для выбора рецептов и продуктов. Комбобокс через ссылки связан с DB в контроллере. Дело в том, что когда жмёшь на комбобокс открывается пустой список. Когда жмёшь по любому из элементов списка, название этого элемента появляется в списке до следующей перезагрузки панели. Как сделать, чтобы элементы из DB контроллера выгружались в комбобокс при старте панели, либо при открытии страницы?

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

Это HMI теги, которые ссылаются на DB в контроллере:
8.jpg
Это Textlist, элементы которого HMI теги:
Это
9.jpg
А вот в чём проблема. Когда открываешь комбобокс, элементы в нём пустые:
5.jpg
Когда нажимаешь на пустой элемент, в нём появляется строка из DB.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

В свойствах комбобокса есть вкладка "Events". Для события "Activate" написал скрипт:
[+]

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

Call GetDataRecordTagsFromPLC (SmartTags("Product_1"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_2"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_3"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_4"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_5"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_6"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_7"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_8"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_9"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_10"),"Err1")
Call GetDataRecordTagsFromPLC (SmartTags("Product_11"),"Err1")
Не получилось сделать в цикле, так как доступ к тегам только через SmartTags("Product_1").
SmartTags не принимает переменные с адресом тега.
Есть более костыльный способ: Добавить на страницу Текстбоксы с ссылками(Всего 15 ссылок) на теги, используемые в Textlist.

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Инициализация комбобокса

Сообщение LexSL »

Если не ошибаюсь, то если теги не используются в архивах, событиях и их нет на экране (в виде каких то IO Field) - то они не опрашиваются панелью. Даже документ от Siemens был какой-то.
Попробуйте добавить теги, которые привязаны к TextList, в архив и посмотрите, пустой или нет TextList (cкрипт Activate уберите)

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

LexSL писал(а): 06 июн 2019, 08:49 Если не ошибаюсь, то если теги не используются в архивах, событиях и их нет на экране (в виде каких то IO Field) - то они не опрашиваются панелью. Даже документ от Siemens был какой-то.
Попробуйте добавить теги, которые привязаны к TextList, в архив и посмотрите, пустой или нет TextList (cкрипт Activate уберите)
Не могу понять про какие архивы Вы говорите. Вы про логи?
4.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Инициализация комбобокса

Сообщение LexSL »

Historical data в дереве проекта

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

LexSL писал(а): 06 июн 2019, 14:03 Historical data в дереве проекта
4.jpg
Мои теги туда не добавляются. Возможно, всё дело в типе String. Честно говоря, не нравится мне такой способ. У меня этих тегов - 400 штук. Не хочу загружать панель цикличной записью.
Но всё равно, спасибо за помощь.
В моём способе я вижу два недостатка. Во-первых, не получается использовать SmartTags() в цикле. Во-вторых, я бы вызывал этот скрипт один раз при загрузке панели. Интересно, есть такое событие? Если есть, как прикрепить к нему скрипт?
Возможно, есть еще какие-то недостатки у моего способа?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Инициализация комбобокса

Сообщение LexSL »

Al4nse писал(а): 06 июн 2019, 14:46 Во-вторых, я бы вызывал этот скрипт один раз при загрузке панели. Интересно, есть такое событие? Если есть, как прикрепить к нему скрипт?
заводите тег (firstRun : bool, init value = true)
пишете скрипт:

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

dim firstRun
Set firstRun = SmartTags("firstRun")
if firstRun then
   firstRun := false;
   'дальше какие-то действия при старте
end if
Вызываете этот скрипт при открытии стартового screen (Events->Loaded - не помню точно).
Al4nse писал(а): 06 июн 2019, 14:46 Возможно, всё дело в типе String. Честно говоря, не нравится мне такой способ. У меня этих тегов - 400 штук. Не хочу загружать панель цикличной записью.
Честно говоря, мне не нравится способ хранения string в контроллере. Вы не хотите загружать панель, однако контроллер у Вас использует дофига памяти под эти string. Дело Ваше.

Автор темы
Al4nse
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 13 май 2019, 14:00
Имя: Евгений
Страна: Россия
город/регион: Ступино

Инициализация комбобокса

Сообщение Al4nse »

LexSL писал(а): 06 июн 2019, 14:58 Честно говоря, мне не нравится способ хранения string в контроллере. Вы не хотите загружать панель, однако контроллер у Вас использует дофига памяти под эти string. Дело Ваше.
Вы правы, мне тоже не нравится. Я на заводе в качестве подрядчика. Зарубежные партнёры поставили оборудование и прекратили своё существование. Нас наняли устранять недостатки. Руководство завода отклонило наше предложение переписывать программу. Работаем с тем, что есть, точечно.
заводите тег (firstRun : bool, init value = true)
пишете скрипт:
Спасибо. Попробую.
контроллер у Вас использует дофига памяти под эти string
Они хранятся в DB. У меня в контроллере "work memory 300 KB code and 1.5 MB data;" DB используют только 1.5 мб или можно как-нибудь настроить взаимодействие с SD картой?
Есть ли способ проверить на сколько загружен контроллер? в "online & diagnostic" есть инструменты, которые покажут сколько памяти использовано? (контроллер далеко, а симулировать не получается, потому что есть ноу-хау блок)
Ответить

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