- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Простой код на SCL помогите
Модератор: Глоб.модераторы
-
- освоился
- Сообщения: 220
- Зарегистрирован: 04 фев 2019, 07:07
- Имя: Андрей
- Благодарил (а): 14 раз
- Поблагодарили: 3 раза
Простой код на SCL помогите
Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Простой код на SCL помогите
Похоже на обработку сигнала с инкрементального энкодера для определения направления вращения. Надо ловить передние фронты входных сигналов. Фактически это условия RS-триггера:
1. Если вход1=1 и фронт входа2, то включить
2. Если вход2=1 и фронт входа1, то отключить
Функция фронта (если ее нет готовой) простая:
если предыдущий вход = 0, а текущий вход = 1, то фронт, иначе нет фронта. Запомнить текущий вход.
1. Если вход1=1 и фронт входа2, то включить
2. Если вход2=1 и фронт входа1, то отключить
Функция фронта (если ее нет готовой) простая:
если предыдущий вход = 0, а текущий вход = 1, то фронт, иначе нет фронта. Запомнить текущий вход.
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 29 окт 2017, 19:52
- Имя: Дмитрий
- Благодарил (а): 5 раз
- Поблагодарили: 18 раз
Простой код на SCL помогите
Доброе утро, если это было бы на языке ST, то должно выглядеть так
//Фронт I0.0
m0.0:=m1.1 AND NOT m1.2;
m1.2:=m1.1;
//Фронт I0.1
m0.1:=m2.1 AND NOT m2.2;
m2.2:=m2.1;
или так
//Фронт I0.0
IF (m1.1 and not m1.2) then m0.0:=true;
else m0.0:=false;
end_IF
//Фронт I0.1
IF (m2.1 and not m2.2) then m0.1:=true;
else m0.1:=false;
end_IF
//Сам код , о чем говорил Михайло
IF (I0.0 and m0.1) then q:=true;
ElsIF (I0.1 and m0.0) then q:=false;
end_IF
Отправлено спустя 1 минуту 44 секунды:
Извиняюсь, вот так
//Фронт I0.0
IF (m1.1 and not m1.2) then m0.0:=true;
else m0.0:=false;
end_IF
m1.2:=m1.1;
//Фронт I0.1
IF (m2.1 and not m2.2) then m0.1:=true;
else m0.1:=false;
end_IF
m2.2:=m2.1;
//Фронт I0.0
m0.0:=m1.1 AND NOT m1.2;
m1.2:=m1.1;
//Фронт I0.1
m0.1:=m2.1 AND NOT m2.2;
m2.2:=m2.1;
или так
//Фронт I0.0
IF (m1.1 and not m1.2) then m0.0:=true;
else m0.0:=false;
end_IF
//Фронт I0.1
IF (m2.1 and not m2.2) then m0.1:=true;
else m0.1:=false;
end_IF
//Сам код , о чем говорил Михайло
IF (I0.0 and m0.1) then q:=true;
ElsIF (I0.1 and m0.0) then q:=false;
end_IF
Отправлено спустя 1 минуту 44 секунды:
Извиняюсь, вот так
//Фронт I0.0
IF (m1.1 and not m1.2) then m0.0:=true;
else m0.0:=false;
end_IF
m1.2:=m1.1;
//Фронт I0.1
IF (m2.1 and not m2.2) then m0.1:=true;
else m0.1:=false;
end_IF
m2.2:=m2.1;
-
- освоился
- Сообщения: 220
- Зарегистрирован: 04 фев 2019, 07:07
- Имя: Андрей
- Благодарил (а): 14 раз
- Поблагодарили: 3 раза
Простой код на SCL помогите
Чет не совсем работает так в условии
Выход когда нажимаем с начало первый тумблер потом второй
Когда второй и превый нету выхода
Отправлено спустя 1 минуту 5 секунд:
Вот как то так,возможно я где то ошибся
Отправлено спустя 3 минуты 12 секунд:
и так
Выход когда нажимаем с начало первый тумблер потом второй
Когда второй и превый нету выхода
Отправлено спустя 1 минуту 5 секунд:
Вот как то так,возможно я где то ошибся
Отправлено спустя 3 минуты 12 секунд:
и так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Простой код на SCL помогите
Попробуйте вот так:
Код: Выделить всё
IF (In2 AND NOT Temp) AND In1 THEN
Out := TRUE;
END_IF;
Temp := In2;
IF NOT (In1 AND In2) THEN
Out := FALSE;
END_IF;
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 29 окт 2017, 19:52
- Имя: Дмитрий
- Благодарил (а): 5 раз
- Поблагодарили: 18 раз
Простой код на SCL помогите
Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".
Отправлено спустя 1 минуту 2 секунды:
Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".
Отправлено спустя 1 минуту 2 секунды:
Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".
-
- не первый раз у нас
- Сообщения: 372
- Зарегистрирован: 12 дек 2018, 14:47
- Имя: Влад
- Благодарил (а): 1 раз
- Поблагодарили: 50 раз
Простой код на SCL помогите
Не понятно зачем в SCL, когда в LAD можно проще? Например
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Простой код на SCL помогите
Ничего не понял.Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".
Ниже полный код функционального блока, именно FB т.к. переменная Temp статическая и должна сохраняться между вызовами блока, в FC такой нет. Можете использовать и FC, но тогда решите где вы будете хранить значение переменной Temp, раздел переменных VAR_TEMP не подойдет.
Код: Выделить всё
FUNCTION_BLOCK FB1
VAR_INPUT
In1 : BOOL;
In2 : BOOL;
END_VAR
VAR_OUTPUT
Out : BOOL;
END_VAR
VAR
Temp : BOOL;
END_VAR
BEGIN
IF (In2 AND NOT Temp) AND In1 THEN
Out := TRUE;
END_IF;
Temp := In2;
IF NOT (In1 AND In2) THEN
Out := FALSE;
END_IF;
END_FUNCTION_BLOCK
-
- специалист
- Сообщения: 655
- Зарегистрирован: 19 фев 2019, 22:38
- Имя: Сергей
- Страна: Россия
- город/регион: Краснодар
- Благодарил (а): 20 раз
- Поблагодарили: 89 раз
Простой код на SCL помогите
Q0.0 ,будет TRUE только при I0.0= TRUE и I0.1= TRUE.
Не понятно :-"То есть если нажимаем первый потом второй есть выход true" нажимаем тумблер, значит фиксируем? или включили первый -включили второй=> Выход =TRUE; Выключили первый- включили первый=> выход=FALSE
Т.СSew_Eurodrive писал(а): ↑06 авг 2020, 16:41 Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак
Не понятно :-"То есть если нажимаем первый потом второй есть выход true" нажимаем тумблер, значит фиксируем? или включили первый -включили второй=> Выход =TRUE; Выключили первый- включили первый=> выход=FALSE
-
- освоился
- Сообщения: 220
- Зарегистрирован: 04 фев 2019, 07:07
- Имя: Андрей
- Благодарил (а): 14 раз
- Поблагодарили: 3 раза
Простой код на SCL помогите
Все верно,неважно как, но наверное лучше тумблерами то есть с фиксацией.Sergy6661 писал(а): ↑07 авг 2020, 14:08 Q0.0 ,будет TRUE только при I0.0= TRUE и I0.1= TRUE.Т.СSew_Eurodrive писал(а): ↑06 авг 2020, 16:41 Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак
Не понятно :-"То есть если нажимаем первый потом второй есть выход true" нажимаем тумблер, значит фиксируем? или включили первый -включили второй=> Выход =TRUE; Выключили первый- включили первый=> выход=FALSE
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Простой код на SCL помогите
Не понимаю о чем еще дискутировать ) Решение SMax самодостаточно. Temp можно хранить в меркерной области.