В диспетчере устройств ничего не появляется с ! знаком ?
Оно там и по тихому может появляться.
Вид для печати
В диспетчере устройств ничего не появляется с ! знаком ?
Оно там и по тихому может появляться.
UPD
Сегодня утром подключаю, вылазит уведомление винды, что подключено неопознанное устройство, в диспетчере устройств появляется "устройство с восклицательным знаком", жму "Обновить драйвер", указываю где он лежит, а мне в ответ, что драйвер уже установлен, восклицательный знак ни куда не исчез, переподключаю, типа выдернул разъем, и воткнул снова, и опять ничего, т.е. вообще ничего не происходит, как будто ничего и нет, вот что это такое!? :D
А и еще, я сначала релюху подкдючил к USB и на ней несколько раз моргнул красный светодиодик, второй с верху (треугольник с восклицательным знаком), и после этого вылезло сообщение винды, после подачи питания сообщение исчезло и потом появилось вновь, короче хрень какая то.... :)
UPD-2
Пока писал этот текст, решил таки поменять шнурок, нашел где то в ящике стола какой то короткий от какой то старой гарнитуры с micro-USB, еле воткнул, шнурок очень короткий :) и таки да, комп увидел релюху! Кто бы мог подумать что ей не нравиться два шнурка, один из которых поставлялся Овеном в комплекте с АС-4М и через которые все кроме ПР205 работает без проблем, не, ну правда, я уже такое второй раз вижу, ПР200 такая же хрень была, когда подключал не через штатный шнурок, который был более длинный, но там было по другому, он то подключался, то отключался, а здесь вообще пустота и какоето невнятное сообщение о неопознанном устройстве, похоже у Овена какая то страсть к слишком коротким шнуркам... :D
Про кабель, написал в первом сообщении.
И у меня прекрасно работает фирменный шнур длиной в метр с ПР103. И не работает китайское дешёвое фуфло.
как и Овен, шнурки в нем тоже китайские :)
з.ы. дома есть шнур от фотика Canon, длиной 1 метр, на вид тонкий как и прочая, но никогда с ним не было проблем при подключениях ни с чем. В отличии от этих коротышей, которые вкладывает Овен в коробки.
Ну дык, я ж тоже писал, что с этими двумя кабелями все остальное, кроме как оказалось, этой ПР205, все работало, вот буквально все ПР100, СМИ-2М, АС-4М, это то что из Овена, кроме этого еще он со старым смартом коннектился и еще с чем то я не помню уже, в общем рабочий был шнурок, да и сейчас он рабочий, это знаете, когда все идут не в ногу, один Овен ПР205 в ногу... :D
Вот вот, грю же вообще заработало с каким то коротким и даже весьма тонким, который шел в комплекте с гарнитурой именно для зарядки, правда вот сейчас тоже как то через раз подключается, но хоть подключается, в общем не все шнурки одинаково полезны... :)
В общем нужно адаптер прикупить USB-C на micro-USB, и шить через нормальные кабели, не понимаю, вроде реле нового поколения, а че туда этот говенный micro-USB запихали им чё жалко что ли!? :)
Следующий вопрос, может что упустил, в общем как сделать так что бы при включении ПР205 включался нужный экран, а то сначала идет стартовый, а потом просто пустой?
Добрый день!
Имеется задача написать программу для ПР на установку мойки КЕГ по заданной циклограмме (во вложении)
Сначала попробовал написать на основе логистических функций, но понял что будет очень громоздко.
Перерыл форум нашёл похожий проект https://owen.ru/forum/showthread.php...l=1#post106727 , но к сожалению файлы уже не доступны и связи с авторами нет.
Суть работы установки: по нажатию кнопки "ПУСК" (I1) происходит запуск цикла из последовательных 40 шагов, у каждого шага своё время на которое должны открываются заданные клапана соответствующие выходам (Q1-Q8)
В теории понимаю, что нужно использовать макросы ПЗУ, так же нашёл на форуме https://owen.ru/forum/showthread.php...l=1#post322919, но не хватает тяма адаптировать их под свой проект.
Буду очень признателен за помощь.
Вложение 88872
то есть вы даже не потрудилсь таблицу перевести в нормальный вид и предлагаете разбирать в мятой бумажке?
то есть вы для себя поставили задачу так - найти чьёто готовое, отрихтовать малось под себя и готово?Цитата:
Перерыл форум нашёл похожий проект https://owen.ru/forum/showthread.php...l=1#post106727 , но к сожалению файлы уже не доступны и связи с авторами нет.
и установка по мойке кег - это коммерция, это даже не ленивый студент, который может встретить понимание
и в чём проблема?Цитата:
по нажатию кнопки "ПУСК" (I1) происходит запуск цикла из последовательных 40 шагов, у каждого шага своё время на которое должны открываются заданные клапана соответствующие выходам (Q1-Q8)
вы не сделали ни единого куска кода?
На 40 шагов, лучше использовать язык ST, тут пример на 6 режимов по 0+12 шагов, или Шаговик - можно сделать и 40 шагов.
И ещё помочь, это не значит сделать за вас, так что делайте сами и спрашивайте, что не понятно.
Простой шаговый автомат, новый TON с паузой_____ https://owen.ru/forum/showthread.php...39&page=43#424
Прогр. управление 6 нагрузками 6 реж. 12 шагов _ФБ_фунции_____https://owen.ru/forum/showthread.php...39&page=11#105
Добрый день!
Можете использовать подобные конструкции :
FUNCTION_BLOCK STE_P
VAR_INPUT
U : BOOL; // Сигнал запуска / импульс
Res : BOOL; // Сброс
END_VAR
VAR_OUTPUT
Q : UDINT; // Текущее значение счётчика
I1, I2, I3, I4: BOOL; // Выходы таймеров
En_d : BOOL; // Флаг завершения (CounterValue = 5)
END_VAR
VAR
CounterValue : UDINT := 0;
// Фронты
FTrig, FTriga, FTrigb, FTrigc, FTrigd : BOOL;
// Таймеры
TP1, TP2, TP3, TP4 : SYS.TP;
FT1, FT2, FT3, FT4 : SYS.FTRIG;
END_VAR
// Сброс счётчика и состояний
IF Res THEN
CounterValue := 0;
FTrig := FALSE;
FTriga := FALSE;
FTrigb := FALSE;
FTrigc := FALSE;
FTrigd := FALSE;
En_d := FALSE;
END_IF;
// Шаг 1: Приход импульса U (фронт) — установка счётчика в 1
IF U AND NOT FTrig THEN
FTrig := TRUE;
IF NOT Res THEN
CounterValue := 1;
END_IF;
END_IF;
// Сброс фронта U после отпускания
IF NOT U THEN
FTrig := FALSE;
END_IF;
// Таймер TP1: активен при U и счётчике = 1
TP1(I := (CounterValue = 1), T := T#3s, Q => I1);
// Фиксируем завершение TP1
FT1(I := TP1.Q);
IF FT1.Q THEN
FTriga := TRUE; // Готов к шагу 2
END_IF;
// Шаг 2: после TP1.Q и если счётчик = 1 → увеличиваем до 2
IF FTriga AND (CounterValue = 1) THEN
CounterValue := 2;
FTriga := FALSE; // Сброс флага, чтобы не повторить
END_IF;
// Таймер TP2: активен при счётчике = 2
TP2(I := (CounterValue = 2), T := T#4s, Q => I2);
// Фиксируем завершение TP2
FT2(I := TP2.Q);
IF FT2.Q THEN
FTrigb := TRUE;
END_IF;
// Шаг 3: переход к 3
IF FTrigb AND (CounterValue = 2) THEN
CounterValue := 3;
FTrigb := FALSE;
END_IF;
// Таймер TP3: при счётчике = 3
TP3(I := (CounterValue = 3), T := T#5s, Q => I3);
FT3(I := TP3.Q);
IF FT3.Q THEN
FTrigc := TRUE;
END_IF;
// Шаг 4: переход к 4
IF FTrigc AND (CounterValue = 3) THEN
CounterValue := 4;
FTrigc := FALSE;
END_IF;
// Таймер TP4: при счётчике = 4
TP4(I := (CounterValue = 4), T := T#6s, Q => I4);
FT4(I := TP4.Q);
IF FT4.Q THEN
FTrigd := TRUE;
END_IF;
// Шаг 5: переход к 5
IF FTrigd AND (CounterValue = 4) THEN
CounterValue := 5;
FTrigd := FALSE;
END_IF;
// Выход Q — текущее значение счётчика
Q := CounterValue;
// Сигнал завершения
IF CounterValue = 5 THEN
En_d := TRUE;
ELSE
En_d := FALSE;
END_IF;
END_FUNCTION_BLOCK
А с выхода Q udint зная номер шага через CASE можно как угодно
Не очень
1. Если у нас таймеры не работают одновременно, то можно использовать только 1 таймер
2. Конструкция
это вы реализовали в целом детектор переднего фронта (RTRIG)Код:// Шаг 1: Приход импульса U (фронт) — установка счётчика в 1
IF U AND NOT FTrig THEN
FTrig := TRUE;
IF NOT Res THEN
CounterValue := 1;
END_IF;
END_IF;
// Сброс фронта U после отпускания
IF NOT U THEN
FTrig := FALSE;
END_IF;
да и эта часть масло маслено
3. После прихода сигнала сброс (RES), таймеры ТП продолжат отсчет и запустив алгоритм заново можно очень удивитьсяКод:// Фиксируем завершение TP1
FT1(I := TP1.Q);
IF FT1.Q THEN
FTriga := TRUE; // Готов к шагу 2
END_IF;
// Шаг 2: после TP1.Q и если счётчик = 1 → увеличиваем до 2
IF FTriga AND (CounterValue = 1) THEN
CounterValue := 2;
FTriga := FALSE; // Сброс флага, чтобы не повторить
END_IF;
В последнем Лоджике массивы завезли, так что можно так сделать
Код:function_block Control
var_input
StepIn : udint; //текущий шаг (нужен для реализации энергонезависимости)
Start : bool; //кнопка запуска (НО)
Stop : bool; //кнопка останова (НЗ)
arTm : array[1..40] of udint; //массив уставок таймера
StepNum : udint := 40; //задание количества шагов
end_var
var_output
StepOut : udint; //текущий шаг
Inwork : bool; //флаг работы
Done : bool; //флаг окончания работы
end_var
var
TmConst : udint := 1000; //множитель для уставки таймера (1000 - сек, 60000 - мин)
TmStep : SYS.TON; //таймер
bTm : bool; //флаг окончания отсчета таймера
bSt : SYS.RTRIG; //защита от залипания кнопки Start (можно и без неe)
end_var
//проверка корректности задания StepNum
if StepNum > 40 then StepNum := 40; end_if
//обработка нажатия кнопки Start
bSt(I := Start and (StepNum > 0));
//остановка или запуск программы
if not Stop or (StepNum = 0) then
StepIn := 0;
Done := false;
elsif bSt.Q then
StepIn := 1;
Done := false;
end_if
//определение уставки таймера
if StepIn > 0 then TmStep.T := udint_to_time(arTm[StepIn] * TmConst); end_if
//управление таймером
TmStep(I := not bTm and (StepIn > 0), Q => bTm);
//управление шагами
if bTm then
StepIn := StepIn + 1;
if StepIn > StepNum then
StepIn := 0;
Done := true;
end_if
end_if
Inwork := StepIn > 0;
StepOut := StepIn;
end_function_block
А если запихнуть и уставки таймера и состояние выходов в массив?
Код:function_block Washing
var_input
OnOff : bool; // Запуск/остановка программы
end_var
var_output
K1, K2, K3, K4, K5, K6, K7, K8 : bool; // Выхода
t1, t2 : udint; // Прошедшие минуты и секунды с момента старта
end_var
var
tb, i : udint; // Время старта и номер режима
rb : SYS.RTRIG; // Фиксатор старта
Mode : udint; // Текущий режим
// Упаковка биты 15-8 - состояние выходов Kx, 7-2 - секунда, 1-0 - минута
Modes : array [1..40] of udint :=
[256, 34600, 316, 34600, 356, 1400, 396, 160, 39080, 40136,
4316, 38913, 39977, 4157, 38993, 40037, 5241, 4237, 161, 34729,
477, 34562, 1322, 318, 82, 57434, 58490, 16546, 57526, 58590,
16407, 57387, 58451, 17511, 16507, 143, 33687, 34743, 1483, 479];
end_var
rb(I:=OnOff); // Фиксируем момента старта
if rb.Q then
tb := time_to_udint(get_time()) / 1000; // Старт программы
end_if
if OnOff then // Программа в работе
t2 := time_to_udint(get_time()) / 1000 - tb;// Прошло времени после старта
t1 := t2 / 60; t2 := t2 - (t1 * 60); // в минутах и секундах
if t1 < 4 then
for i := 1 to 40 do // Для каждой строчки
Mode := Modes[i]; // Извлекаем данные
if shr(shl(Mode, 30), 30) = t1 then // Сравним минуты
if shr(shl(Mode, 24), 26) = t2 then // Сравним секунды
// Выставим выхода в случае совпадения
K1 := Mode.8; K2 := Mode.9; K3 := Mode.10; K4 := Mode.11;
K5 := Mode.12; K6 := Mode.13; K7 := Mode.14; K8 := Mode.15;
exit;
end_if
end_if
end_for
end_if
else // Программа остановлена
K1 := false; K2 := false; K3 := false; K4 := false; K5 := false; K6 := false; K7 := false; K8 := false;
end_if
end_function_block
Добрый день! Всем большое спасибо за помощь!
Так же хотел извиниться если моё обращения показалось наглым, ей Богу не была умысла реализовать проект чужими руками, просто не мог понять с чего начать, как уже писал ранее есть только опыт написания простых проектов на основе логических функций, только только начинаю постигать азы программирования.
Вот пока за основу взял Ваш Dimensy пример https://owen.ru/forum/showthread.php...l=1#post482777 расшарил макрос до 40 шагов, задал режимы и длительности импульсов, на симуляторе вроде отрабатывает:), но я так понимаю это наверное тоже не совсем правильно будет, пока смог разобраться только с этим.
По использовать языка ST пока не разобрался, буду изучать мат часть.
По рекомендации In_Da_Cher_A привёл циклограмму в более менее божеский вид :)
Думаю логично было бы продолжать с прерванного шага
Тогда в программе отсюда https://owen.ru/forum/showthread.php...l=1#post482777 нужно у счетчика CTN1 установить параметр "Сохранять состояние" в "ДА". В этом случае программа продолжиться с прерванного шага (с начала шага). Если еще надо и время запоминать (т.е. начинать не с начала шага, а с какого-то времени), тогда нужно свой таймер писать
Я смотрю, у вас там есть кнопка "Пауза" - тоже нужно определиться: пауза - это остановить и потом начать с начала прерванного шага (это просто делается) или после паузы продолжить именно с того времени когда была остановка (тогда свой таймер с паузой писать)
Добрый день! Поделитесь макросом чтобы INT раскидать в BOOL. У меня был один но он чтото не раскрываеться на ,,холлсте,, ПР205. Спасибо
А, все, нашелся.
Доброе утро, подскажите пожалуста:
Каков алгоритм вывода ВООL переменной на экран ПР-205?
Да задачи простые : отобразить состояние переменной которая отвечает ,например, за текущий статус насоса , изминить состояние переменной которая ,например, включит или выключит механизм, и зафиксировать состояние переменной в энергонезависимой памяти для ,,n,, алгоритма.
В ПР 200 это решалось просто, а вот тут не понимаю как.
Вот самый простой вариант
Вложение 88933
Вложение 88934
Спасибо 1exan? только что догодался что тут реализована ,,графичиская ,, возможность реализации вывода статуса бита. Вот kondor3000 правильно сформулировал требование, сейчас попытаюсь ,,погрызть ,, этот орех по частям. С первым пунктом разобрался.
А нужна какая возможность? Текст?
Вложение 88935
Еще раз спасибо 1exan, ответил на все три свои вопроса и ваше дополнение тоже окажеться ,,кстати,,:rolleyes:
Здравствуйте. Хочу на ПР103 по RS485 принять запрос от Мастера. Как в OwenLogic настроить переменную? Не могу найти где указать регистр 512.
Поставьте сетевую переменную на холст, она и будет первая в слейве, адрес 16384.
Слейв с адреса 512 начинается у приборов 1 поколения, типа ПР200 и ПР102.