Device.Application.VisuElems.Visu_Globals.g_VisuMa nager
Может так?
Думаю нужно завести пользователей и попробовать
pcv_visu.jpg
Не работает без галочки напротив CurrentVisu
Device.Application.VisuElems.Visu_Globals.g_VisuMa nager
Может так?
Думаю нужно завести пользователей и попробовать
pcv_visu.jpg
Не работает без галочки напротив CurrentVisu
Последний раз редактировалось KAPITOSHKARU; 23.11.2015 в 14:08.
Без понятия.
Если не сложно, опишите, пожалуйста, еще раз, четко и пошагово, что вы ожидаете от визуализаций и фреймов?
Если я правильно понимаю, то это:
1. Вам нужно знать, какой экран открыт у каждого клиента визуализации (или достаточно знать, что хотя бы у одного из клиентов открыть данный экран?).
2. Вам нужно знать, какой экран открыт в каждом фрейме у каждого клиента визуализации (или достаточно знать, что хотя бы у одного из клиентов в данном фрейме открыт данный экран?)
3. Вам нужно переключать экраны визуализации для отдельных клиентов из кода программы.
4. Вам нужно переключать экраны в фреймах отдельных клиентов из кода программы.
Соответственно, у меня вопрос - как вы собираетесь идентифицировать клиентов? С помощью Управления пользователями ? (логины, пароли, группы пользователей)
Последний раз редактировалось Евгений Кислов; 23.11.2015 в 16:01.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
На данном этапе разработки программы нужно отследить какой экран открыт во фрейме. Т.е. во фрейме открыта визуализация управления ПЧВЕсли не сложно, опишите, пожалуйста, еще раз, четко и пошагово, что вы ожидаете от визуализаций и фреймов?
Содержание визуализации:
Пуск прямо, Пуск реверс, заданная частота, Напряжение , ток, слово состояние ПЧВ.
при активности данного экрана включаем триггеры опросов тех переменных которые опрашиваются по триггерам.
При не активности триггеры выключаем.
может опустить пока фреймы, сделаю я визуализации по больше с одинаковым содержанием, что бы от фреймов отказаться.
Это упростит задачу?
Приблизительно так
Последний раз редактировалось KAPITOSHKARU; 24.11.2015 в 11:10.
И, повторимся, мы хотим независимого переключения фреймов для клиентов.
Ну, а давайте попробуем так? Пример с тремя экранами в фрейме, независимое для клиентов переключение с помощью кнопок, определение активного экрана фрейма в программе.
1. Пишем такой вот код:
001.png
Здесь 10 - это максимальное число клиентов. Программа проходится по всем, считывая индекс открытого в фрейме экрана, тем самым определяя его название (порядок экранов определяется в конфигурации фрейма). Потом в программе мы можем проходиться по STRING массиву, и если хотя бы одно его значение совпадает с именем нужного нам экрана, то делаем, что хотим.
2. Экран визуализации будет выглядеть так:
002.png
3. К фрейму мы привязываем вот такую переменную:
003.png
4. А кнопки переключения будут выполнять такой код (остальные две, соответственно, будут присваивать 1 и 2):
004.png
5. Ну и к прямоугольнику привяжем уже понятно что:
005.png
Прикладываю архив для 3.5 SP7 Patch3. Скачать эту версию CODESYS можно здесь:
http://cleverhouse.club/scope/bms/re...7-patch-3.html
SP5 Patch5 у меня, к сожалению, нет.
Последний раз редактировалось Евгений Кислов; 24.11.2015 в 10:20.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Очень вам благодарен.
Буду применять.
Я это делаю без информации об активном экране/фрейме. Все обращения к регистрам слейва обёрнуты в функцию read_reg(). В этой функции формируется список переменных, которые нужно запросить у слейва (или у слейвов). В отдельной задаче, которая выполняет обмен со слейвами, данный списк используется по назначению.
Список требуемых регистров слейва:// Регистр шины MODBUS.
TYPE mb_reg :
STRUCT
vis: WORD; // Значение для визуализации; новые значения
// (те, которые вводит оператор) заносятся сюда же.
save: WORD; // полученное от слейва значение
END_STRUCT
END_TYPE
// Путём сравнения полей vis и save (в функции find_changed_val) будем определять
// изменние значения в регистре MODBUS для последующей передачи его слейву.
VAR_GLOBAL CONSTANT
ring_size: WORD := 100;
END_VAR
VAR_GLOBAL
arr: ARRAY [0..ring_size-1] OF WORD;
head_idx: WORD := 0;
tail_idx: WORD := 0;
END_VARFUNCTION ring_isIn : BOOL
VAR_INPUT
val: WORD;
END_VAR
VAR
test_idx: WORD;
ret_val: BOOL;
END_VAR
test_idx := ring.head_idx;
ret_val := FALSE;
WHILE ( NOT ret_val AND (test_idx <> ring.tail_idx) ) DO
IF ( ring.arr[test_idx] = val ) THEN
ret_val := TRUE;
ELSE
// test_idx := next_idx( test_idx );
IF ( test_idx = ring_size - 1 ) THEN //test_idx := next_idx( test_idx );
test_idx := 0;
ELSE
test_idx := test_idx + 1;
END_IF
END_IF
END_WHILE
ring_isIn := ret_val;При формировании телеграмм для слейва индексы регистров забираю из кольца во временный буфер и запрашиваю те регистры, индексы которых оказались в буфере. После опроса всех таких регистров цикл повторяю.FUNCTION read_reg : word
VAR_INPUT
idx: WORD;
END_VAR
IF ( NOT ring_isIn(idx) ) THEN
ring_put( idx );
END_IF
read_reg := mb.regs[idx].vis;
В высоконагруженной системе это будет не лучшее решение, но у меня СПК используется только как панелька, поэтому такое решение меня устраивает.
Илья