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

Тема: СПК207. Несколько однотипных процессов.

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

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

    По умолчанию

    Цитата Сообщение от vniko Посмотреть сообщение
    Данный вариант (без использования массива FB) возможно будет работать только с простейшей логикой. Если в FB будет, например, таймер, то однозначно не подойдет, т.к. экземпляр FB один на все 4 котла.
    Я использую в этом случае массивы FB:
    Создается один функциональный блок FB_KOTEL, а в программе объявляется массив функциональных блоков KOTEL[i]:
    VAR
    ...
    KOTEL: ARRAY[1..i_max] OF FB_KOTEL;
    ...
    END_VAR

    Вызов экземпляров функциональных блоков из PLC_PRG:
    FOR i:=1 TO i_max DO
    ...
    KOTEL[i](i:=i, ...);
    ...
    END_FOR

    Входные, выходные и другие индивидуальные переменные экземпляров функциональных блоков удобнее задавать массивом структуры, хотя двухмерный массив думаю тоже подойдет.
    Добрый день, Vniko. С написанием ФБ и последующем размножением через массив понятно. Цикл FOR для "оживления" также ясен. А вот что имеется ввиду в последней строке сообщения: "Входные, выходные и другие индивидуальные переменные экземпляров..." Я обычно использую область VAR_INPUT и VAR_OUTPUT сответсвенно. Могли бы Вы написать коротенький пример с применением структуры. Заранее спасибо..

  2. #2

    По умолчанию

    Цитата Сообщение от sa_mut Посмотреть сообщение
    Добрый день, Vniko. С написанием ФБ и последующем размножением через массив понятно. Цикл FOR для "оживления" также ясен. А вот что имеется ввиду в последней строке сообщения: "Входные, выходные и другие индивидуальные переменные экземпляров..." Я обычно использую область VAR_INPUT и VAR_OUTPUT сответсвенно. Могли бы Вы написать коротенький пример с применением структуры. Заранее спасибо..
    Сложно сказать, что именно предлагал Vniko, опишу варианты.
    Предположим есть у нас ФБ, отвечающий за зону нагрева:

    Код:
    FUNCTION_BLOCK Zone
    VAR_INPUT
    	// Температура в зоне
    	rTemperature			: REAL;
    	// Давление в зоне
    	rPressure			: REAL;
    END_VAR
    VAR_OUTPUT
    	// Какое положение задвижки необходимо задать
    	rValvePosition			: REAL;
    END_VAR
    А зон таких у нас может быть до 20ти.
    1) Делаем так:
    1.1) Объявляем структуру, содержащую значения для входов

    Код:
    TYPE ZoneInputs :
    STRUCT
    	// Температура в зоне
    	rTemperature			: REAL;
    	// Давление в зоне
    	rPressure			: REAL;
    END_STRUCT
    END_TYPE
    1.2) Объявляем структуру, содержащую значения для выходов
    Код:
    TYPE ZoneOutputs :
    STRUCT
    	// Температура в зоне
    	rTemperature			: REAL;
    	// Давление в зоне
    	rPressure			: REAL;
    END_STRUCT
    END_TYPE
    1.3) Объявляем массивы структур, содержащие данные для входов и выходов
    Код:
    PROGRAM PLC_PRG
    VAR CONSTANT
    	m_c_usiMaxZones			: USINT				:= 20;
    END_VAR
    VAR
    	m_astInputs			: ARRAY [1..m_c_usiMaxZones] OF ZoneInputs;
    	m_astOutputs			: ARRAY [1..m_c_usiMaxZones] OF ZoneOutputs;
    END_VAR
    1.4) Объявляем массив ФБ наших зон:
    Код:
    PROGRAM PLC_PRG
    VAR CONSTANT
    	m_c_usiMaxZones		: USINT				:= 20;
    END_VAR
    VAR
    	m_astInputs			: ARRAY [1..m_c_usiMaxZones] OF ZoneInputs;
    	m_astOutputs			: ARRAY [1..m_c_usiMaxZones] OF ZoneOutputs;
    	m_afbZones			: ARRAY [1..m_c_usiMaxZones] OF Zone;
    END_VAR
    1.5) Наполнение PLC_PRG делаем примерно таким:
    Код:
    m_astInputs[1].rTemperature := 10.0; // Тут скорее будут данные с датчиков
    m_astInputs[1].rPressure := 12.2; 	
    // ... и т.д.
    
    FOR i := 1 TO m_c_usiMaxZones DO
    	m_afbZones[i].rPressure := m_astInputs[i].rPressure;
    	m_afbZones[i].rTemperature := m_astInputs[i].rTemperature;
    	m_afbZones[i]();
    	m_astOutputs[i].rValvePosition := m_afbZones[i].rValvePosition;
    END_FOR
    
    // Устанавливаем положения задвижек получив значения из m_astOutputs[i].rValvePosition
    2) Честно говоря особых преимуществ перед следующим подходом не вижу:
    2.1) В том месте, где нужны наши зоны объявляем массив ФБ
    Код:
    PROGRAM PLC_PRG
    VAR CONSTANT
    	m_c_usiMaxZones		: USINT				:= 20;
    END_VAR
    VAR
    	m_afbZones		: ARRAY [1..m_c_usiMaxZones] OF Zone;
    	i			: USINT;
    END_VAR
    2.2) Тело программы делаем примерно таким:
    Код:
    m_afbZones[1].rTemperature := 10.0; // Тут скорее будут данные с датчиков
    m_afbZones[1].rPressure := 12.2; 	
    // ... и т.д.
    
    FOR i := 1 TO m_c_usiMaxZones DO
    	m_afbZones[i]();
    END_FOR
    
    // Устанавливаем положения задвижек получив значения из m_afbZones[i].rValvePosition
    OSCAT.ru читать стандарты и статьи по автоматизации на русском без регистрации и СМС

  3. #3

    По умолчанию

    Спасибо, Алексей

    согласен с Вами:
    2) Честно говоря особых преимуществ перед следующим подходом не вижу:
    Я также делаю по версии 2. Вот и хотел понять, что подразумевает Vniko и для используется массив структур. Ведь если алгоритм все равно обрабатывается в ФБ, то INPUT/OUTPUT переменные ФБ-ков получается просто будут дублировать данные массива структур. Что собственно и видно из приведенного Вами примера. Будем надеется Vniko объявится и подскажет какую пользу несут эти дополнительные массивы.

Похожие темы

  1. SysExecute и приоритеты процессов, СПК207
    от Makarovas в разделе СПК2xx (архив)
    Ответов: 7
    Последнее сообщение: 16.06.2015, 20:36
  2. Несколько частотников и ПЛК
    от Ascanio в разделе Подбор Оборудования
    Ответов: 4
    Последнее сообщение: 02.06.2015, 12:21
  3. Несколько вопросов
    от sa1ntik в разделе Master SCADA 3
    Ответов: 129
    Последнее сообщение: 10.01.2013, 09:38
  4. Ответов: 1
    Последнее сообщение: 05.12.2008, 18:38
  5. Несколько AND и OR в языке ST
    от Wanted в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 18.11.2008, 15:19

Ваши права

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