Я в таких случаях делаю задержку разрешения обработки аналоговых сигналов после включения питания на время, достаточное чтобы периферия "пришла в себя". По-старинке именую сей таймер "задержка на прогрев". Пол-минуты обычно достаточно.
Вид для печати
И как делать эту задержку, можно по подробней? Пробовал после LE ставить AND и TON , но что то не получилось. Единственное может я время мало ставил, секунд 5Цитата:
Я в таких случаях делаю задержку
У меня проблема в том, что при подачи питания на плк и мв 8а на LE проскакивает импульс который активирует триггеры , хотя не должен температура плюсовая.
http://www.owen.ru/forum/attachment....2&d=1392751544Блин, столько постов наплодили.
Ни каких отрицательных значений при включении не проскакивает!
Ну не ужели не понятно, что условие "LE" по русски "меньше или равно". При старте программы переменная a_p однозначно равна "0" до тех пор пока не прочитается значение из модуля МВ. По этому при старте программы условие a_p=0 выполняется всегда, R_TRIG срабатывает и Ваши Pusk1 и A_pusk закономерно установятся в TRUE. Это даже в эмуляции можно проверить.
Вложение 18370http://www.owen.ru/forum/attachment....3&d=1392751579
Замените "LE" на "LT", или сравнивайте не с "0", а с"-0.5", например.
ЗЫ. Если уж очень хочется строгое выполнение условия "<=", то сделать так
Вложение 18371
Порядок ФБ важен, таймер ТР должен выполнятся раньше чем LE. Уставку для таймера подобрать по факту.
Спасибо, всё заработало.
Есть ПЛК63 с модулем МК110.8Д.4Р
в основной программе реализована связь между ними
в подпрограммах ST_1; - ST_5; реализация плавного регулирования 5ти групп светильников подключенных на выхода 0-10V от кнопок пульта(задание сцен освещения 4шт) и от выключателей.
От выключателей все работает нормально, каждая отдельная группа регулируется своим выключателем плавно изменяется напряжение на выходе от 0 до 10 или от 10 до 0
От одной кнопоки пульта регулируются сразу все группы освещения, так называемая сцена освещения.
Проблема: регулировка на первых двух выходах(AO2,АО3) происходит плавно, а на последних трех(АО4,5,6) скачком, хотя все подпрограммы одинаковы и в онлайн симуляции регулирование плавное, в реальности проверено тестером на выходах скачок
Пробовал увеличить время цикла выполнения программы отличное от 1ms - тогда пропадает связь.
Пробовал заменить контроллер - все тоже, плавности нет
задача перегнать bit в word и обратно, подскажите пожалуйста все ли я правильно делаю
Код:PROGRAM PLC_PRG
VAR
Var_Word: WORD;
Byte_low: BYTE;
Byte_hi: BYTE;
Byte_low2: BYTE;
Byte_hi2: BYTE;
Bit1: BOOL;
Bit2: BOOL;
Bit3: BOOL;
Bit4: BOOL;
Bit5: BOOL;
Bit7: BOOL;
Bit8: BOOL;
Bit9: BOOL;
Bit10: BOOL;
Bit6: BOOL;
Bit11: BOOL;
Bit12: BOOL;
Bit13: BOOL;
Bit14: BOOL;
Bit15: BOOL;
Bit16: BOOL;
Bits: ARRAY [1..16] OF BOOL;
UNPACK1: UNPACK;
UNPACK2: UNPACK;
PACK1: UNPACK;
PACK2: UNPACK;
END_VAR
(*заполняем биты (библиотека UTIL)*)
Bit1:=1;
Bit2:=0;
Bit3:=0;
Bit4:=0;
Bit5:=0;
Bit6:=0;
Bit7:=0;
Bit8:=0;
Bit9:=1;
Bit10:=0;
Bit11:=0;
Bit12:=0;
Bit13:=0;
Bit14:=0;
Bit15:=0;
Bit16:=0;
(*упаковываем биты в байты*)
Byte_low2:=PACK(Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7,Bit8);
Byte_hi2:=PACK(Bit9,Bit10,Bit11,Bit12,Bit13,Bit14,Bit15,Bit16);
(*ну и байты в слово объединям*)
Var_Word:=SHL(BYTE_TO_WORD(Byte_hi2),8) OR BYTE_TO_WORD(Byte_low2);
(*ОБРАТНАЯ ПРОЦЕДУРА Переменная Var_Word разбивается на два байта*)
Byte_low:=WORD_TO_BYTE(Var_word);
Byte_hi:=WORD_TO_BYTE(Var_word/256);
(*байты раскладываются на биты с помощью ФБ Unpack (библиотека UTIL)*)
UNPACK1(
B:=Byte_low ,
B0=>Bits[1],
B1=>Bits[2] ,
B2=>Bits[3] ,
B3=>Bits[4] ,
B4=>Bits[5] ,
B5=>Bits[6] ,
B6=>Bits[7] ,
B7=>Bits[8] );
UNPACK2(
B:=Byte_hi ,
B0=>Bits[9] ,
B1=>Bits[10] ,
B2=>Bits[11] ,
B3=>Bits[12],
B4=>Bits[13] ,
B5=>Bits[14],
B6=>Bits[15],
B7=>Bits[16]);
(*все получили массив Bits заполненный (другая переменная чтобы легче было оценивать результат) *)
Мда..... куда тут уж проще... жесть, товарищи
Вот это, просто.
ps. Еще интересно, писал в WORD_cmd, а читал из WORD_sts.Код:if bBool
then
wWord.0 := true;
wWord.1 := false;
wWord.2 := true;
wWord.3 := false;
wWord.4 := true;
...
wWord.14 := true;
wWord.15 := false;
end_if