Показано с 1 по 3 из 3

Тема: Программирование блинк-кодов

  1. #1

    По умолчанию Программирование блинк-кодов

    Добрый день!
    Стоит задача организовать диагностику блинк-кодом (как на авто).
    Контроллер ПЛК110[М02] + модули AI.
    В программе написаны уставки для аналог. входов, при превышении уставки в retain массив (Alarms_mass:ARRAY [0..3] OF INT) записывается число.
    Каждому событию присвоено свое число (Avar_s).
    IF Alarm_123.Avar_s <> Alarms_mass[0] THEN
    Alarms_mass[3]:=Alarms_mass[2];
    Alarms_mass[2]:=Alarms_mass[1];
    Alarms_mass[1]:=Alarms_mass[0];
    Alarms_mass[0]:=Alarm_123.Avar_s;
    END_IF;
    При нажатии на диагностическую кнопку (сидит на дискретном входе) необходимо вытащить число Alarms_mass[1] и воспроизвести соответствующий блинк-код (лампа на дискретном выходе), далее Alarms_mass[2] -> блинк, далее Alarms_mass[3] - > блинк.
    Например
    Alarms_mass[1]=21 - блинк код: 2 коротких, пауза, 1 короткий;
    .....
    Alarms_mass[2]=39 - блинк код: 3 коротких, пауза, 9 коротких.

    Вопрос:
    1. как организовать блинк-коды?
    писать с помощью TON и TOF слишком громоздко, 17 событий, соответственно 17 блинк-кодов;
    2. может быть каким то образом можно прикрутить матрицу или массив?
    вытаскивание чисел, сравнение с номером блинка, последовательное возпроизведение я сделаю без проблем.
    3. буду признателен, если найдется что то похожее в качестве примера.

    Всем спасибо за ответы.

  2. #2

    По умолчанию

    Формирователь блинк-кода оформил в виде ФБ
    Код:
    FUNCTION_BLOCK BL_CODE
    VAR_INPUT
    	IN: BOOL;		(*Старт выдачи кода*)
    	Code: WORD;		(*Код*)
    	Ti: TIME := t#500ms;	(*Длительность импульса и паузы между имп*)
    	Tp: TIME := t#2s;		(*Длительность паузы между цифрами*)
    END_VAR
    VAR_OUTPUT
    	Q: BOOL;		(*Импульсы блинк-кода*)
    	BUSY: BOOL;		(*Занят формированием импульсов*)
    END_VAR
    VAR
    	HiCode: WORD;		(*Ст.цифра в коде*)
    	LoCode: WORD;		(*Мл.цифра в коде*)
    	Now: TIME;
    	clk: BOOL;
    	StartTime: TIME;
    	State: INT;
    	N: WORD;	(*Номер импульса в цифре*)
    	K: WORD;		(*Номер цифры в коде 1 - старшая, 0 - младшая*)
    	Char: WORD;
    END_VAR
    
    Now:= TIME();
    
    CASE State OF
    0:
    	Q:= FALSE;
    	BUSY:= FALSE;
    	clk:= FALSE;
    	N:= 0;
    	K:= 1;
    	IF IN  THEN
    		StartTime:= Now;
    		clk:= TRUE;
    		BUSY:= TRUE;
    		LoCode:= Code MOD 10;
    		HiCode:= Code / 10;
    		Char:= HiCode;	(*Начнем со старшей цифры*)
    		State:= 1;
    	END_IF
    1: (* Один Импульс цифры*)
    	Q:= NOT (Now - StartTime >= Ti);
    	State:= State + BOOL_TO_INT(NOT Q);
    2: (*Импульс закончился*)
    	StartTime:= Now;
    	N:= N + 1;
    	IF N >= Char THEN (*если все импульсы для цифры, то*)
    		State:= 5; (*идем на паузу между цифрами*)
    	ELSE
    		State:= 3; (*иначе формировать паузу между импульсами*)
    	END_IF
    3: (*Пауза между импульсами цифры*)
    	State:= State + BOOL_TO_INT((Now - StartTime >= Ti));
    4: (*Пауза между импульсами цифры закончилась,*)
    	StartTime:= Now;
    	State:= 1;	(*идем на следующий Импульс цифры*)
    5:
    	IF K= 0 THEN (*Если Цифры кончились*)
    		State:= 20; (*Значит конец*)
    	ELSE (*Иначе пауза между цифрами*)
    		State:= State + BOOL_TO_INT((Now - StartTime >= Tp));
    	END_IF
    6:(*Пауза между цифрами закончилась,*)
    	N:= 0;
    	K:= 0; (*Выбрать младшую цифру*)
    	Char:= LoCode;
    	StartTime:= Now;
    	State:= 1;	(*идем к младшей цифре*)
    20: (*КОНЕЦ*)
    	IF NOT IN THEN State:= 0; END_IF
    END_CASE
    Формирование выходных импульсов (Q) стартует по фронту на входе IN.
    На время формирования всей последовательности блинк-кода выход BUSY активный, т.е. TRUE

    Захват-1.png

    Захват-3.png
    Вложения Вложения
    Последний раз редактировалось Мимоход; 12.10.2018 в 02:19.

  3. #3

    По умолчанию

    Огромное спасибо!!! *с уважением жму руку*
    Прям то, что нужно)) Приятно удивлен, уже даже не надеялся, что кто то прочитает, а тут готовый FB! Здорово!
    Спасибо, Мимоход!

Похожие темы

  1. Можно ли к ПЛК150 подключить сканер штрих кодов?
    от figarokj в разделе Сетевые технологии
    Ответов: 6
    Последнее сообщение: 26.09.2014, 14:25
  2. Программирование на SFC
    от TYER в разделе ПЛК1хх
    Ответов: 32
    Последнее сообщение: 02.11.2012, 19:02
  3. Расшифровка кодов ошибок МСД-100
    от Serjik в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 27.12.2011, 14:56
  4. Программирование СИ-8
    от rozhko76 в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 10.10.2011, 10:51
  5. Ответов: 2
    Последнее сообщение: 03.03.2010, 07:43

Ваши права

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