Показано с 1 по 10 из 2891

Тема: CODESYS V3.5. Визуализация

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Device.Application.VisuElems.Visu_Globals.g_VisuMa nager
    Может так?

    Думаю нужно завести пользователей и попробовать
    pcv_visu.jpg

    Не работает без галочки напротив CurrentVisu
    Последний раз редактировалось KAPITOSHKARU; 23.11.2015 в 14:08.

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,597

    По умолчанию

    Цитата Сообщение от KAPITOSHKARU Посмотреть сообщение
    Device.Application.VisuElems.Visu_Globals.g_VisuMa nager
    Может так?
    Без понятия.

    Если не сложно, опишите, пожалуйста, еще раз, четко и пошагово, что вы ожидаете от визуализаций и фреймов?

    Если я правильно понимаю, то это:

    1. Вам нужно знать, какой экран открыт у каждого клиента визуализации (или достаточно знать, что хотя бы у одного из клиентов открыть данный экран?).
    2. Вам нужно знать, какой экран открыт в каждом фрейме у каждого клиента визуализации (или достаточно знать, что хотя бы у одного из клиентов в данном фрейме открыт данный экран?)
    3. Вам нужно переключать экраны визуализации для отдельных клиентов из кода программы.
    4. Вам нужно переключать экраны в фреймах отдельных клиентов из кода программы.

    Соответственно, у меня вопрос - как вы собираетесь идентифицировать клиентов? С помощью Управления пользователями ? (логины, пароли, группы пользователей)

  3. #3

    По умолчанию

    Если не сложно, опишите, пожалуйста, еще раз, четко и пошагово, что вы ожидаете от визуализаций и фреймов?
    На данном этапе разработки программы нужно отследить какой экран открыт во фрейме. Т.е. во фрейме открыта визуализация управления ПЧВ
    Содержание визуализации:
    Пуск прямо, Пуск реверс, заданная частота, Напряжение , ток, слово состояние ПЧВ.
    при активности данного экрана включаем триггеры опросов тех переменных которые опрашиваются по триггерам.
    При не активности триггеры выключаем.
    может опустить пока фреймы, сделаю я визуализации по больше с одинаковым содержанием, что бы от фреймов отказаться.
    Это упростит задачу?

    Приблизительно так
    Последний раз редактировалось KAPITOSHKARU; 24.11.2015 в 11:10.

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,597

    По умолчанию

    Цитата Сообщение от KAPITOSHKARU Посмотреть сообщение
    На данном этапе разработки программы нужно отследить какой экран открыт во фрейме. Т.е. во фрейме открыта визуализация управления ПЧВ
    Содержание визуализации:
    Пуск прямо, Пуск реверс, заданная частота, Напряжение , ток, слово состояние ПЧВ.
    при активности данного экрана включаем триггеры опросов тех переменных которые опрашиваются по триггерам.
    При не активности триггеры выключаем.
    Приблизительно так
    И, повторимся, мы хотим независимого переключения фреймов для клиентов.

    Ну, а давайте попробуем так? Пример с тремя экранами в фрейме, независимое для клиентов переключение с помощью кнопок, определение активного экрана фрейма в программе.

    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 у меня, к сожалению, нет.


    Вложения Вложения

  5. #5

    По умолчанию

    Очень вам благодарен.
    Буду применять.

  6. #6
    Пользователь
    Регистрация
    27.08.2015
    Адрес
    Екатеринбург
    Сообщений
    22

    По умолчанию

    Цитата Сообщение от KAPITOSHKARU Посмотреть сообщение
    при активности данного экрана включаем триггеры опросов тех переменных которые опрашиваются по триггерам.
    При не активности триггеры выключаем.
    Я это делаю без информации об активном экране/фрейме. Все обращения к регистрам слейва обёрнуты в функцию 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_VAR
    FUNCTION 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;
    При формировании телеграмм для слейва индексы регистров забираю из кольца во временный буфер и запрашиваю те регистры, индексы которых оказались в буфере. После опроса всех таких регистров цикл повторяю.

    В высоконагруженной системе это будет не лучшее решение, но у меня СПК используется только как панелька, поэтому такое решение меня устраивает.

    Илья

Похожие темы

  1. Визуализация CoDeSys
    от Newcomer в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 24.04.2018, 15:26
  2. Визуализация в CoDeSys
    от Newcomer в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 10.05.2017, 21:11
  3. Визуализация CodeSys
    от DanJer в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 30.08.2012, 03:53
  4. Визуализация Codesys
    от Slipknot в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 31.10.2008, 11:36
  5. Визуализация в CoDeSys 2.3
    от Slawa в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 29.08.2008, 17:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •