1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Простой код на SCL помогите

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Простой код на SCL помогите

Сообщение Sew_Eurodrive »

Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак :ges_hmm:

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3575
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 271 раз

Простой код на SCL помогите

Сообщение Михайло »

Похоже на обработку сигнала с инкрементального энкодера для определения направления вращения. Надо ловить передние фронты входных сигналов. Фактически это условия RS-триггера:
1. Если вход1=1 и фронт входа2, то включить
2. Если вход2=1 и фронт входа1, то отключить

Функция фронта (если ее нет готовой) простая:
если предыдущий вход = 0, а текущий вход = 1, то фронт, иначе нет фронта. Запомнить текущий вход.

Dmitriy1983
здесь недавно
здесь недавно
Сообщения: 73
Зарегистрирован: 29 окт 2017, 19:52
Имя: Дмитрий
Благодарил (а): 5 раз
Поблагодарили: 16 раз

Простой код на SCL помогите

Сообщение Dmitriy1983 »

Доброе утро, если это было бы на языке 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;

Автор темы
Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Простой код на SCL помогите

Сообщение Sew_Eurodrive »

Чет не совсем работает так в условии
Выход когда нажимаем с начало первый тумблер потом второй
Когда второй и превый нету выхода

Отправлено спустя 1 минуту 5 секунд:
Вот как то так,возможно я где то ошибся

Отправлено спустя 3 минуты 12 секунд:
и так
У вас нет необходимых прав для просмотра вложений в этом сообщении.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 113 раз

Простой код на SCL помогите

Сообщение SMax »

Попробуйте вот так:

Код: Выделить всё

IF (In2 AND NOT Temp) AND In1 THEN
	Out := TRUE;
END_IF;
Temp := In2;
IF NOT (In1 AND In2) THEN
	Out := FALSE;
END_IF;

Dmitriy1983
здесь недавно
здесь недавно
Сообщения: 73
Зарегистрирован: 29 окт 2017, 19:52
Имя: Дмитрий
Благодарил (а): 5 раз
Поблагодарили: 16 раз

Простой код на SCL помогите

Сообщение Dmitriy1983 »

Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".

Отправлено спустя 1 минуту 2 секунды:
Так в INPUT должно быть только 2 входа, а IN2 и IN 4 это временные переменные или меркера, они не должны быть во входах. И присвоение не надо "банить".

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Простой код на SCL помогите

Сообщение v0v »

Не понятно зачем в SCL, когда в LAD можно проще? Например
У вас нет необходимых прав для просмотра вложений в этом сообщении.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 113 раз

Простой код на SCL помогите

Сообщение SMax »

Так в 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

Sergy6661
read only
read only
Сообщения: 577
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 17 раз
Поблагодарили: 77 раз

Простой код на SCL помогите

Сообщение Sergy6661 »

Q0.0 ,будет TRUE только при I0.0= TRUE и I0.1= TRUE.
Sew_Eurodrive писал(а): 06 авг 2020, 16:41 Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак :ges_hmm:
Т.С
Не понятно :-"То есть если нажимаем первый потом второй есть выход true" нажимаем тумблер, значит фиксируем? или включили первый -включили второй=> Выход =TRUE; Выключили первый- включили первый=> выход=FALSE

Автор темы
Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Простой код на SCL помогите

Сообщение Sew_Eurodrive »

Sergy6661 писал(а): 07 авг 2020, 14:08 Q0.0 ,будет TRUE только при I0.0= TRUE и I0.1= TRUE.
Sew_Eurodrive писал(а): 06 авг 2020, 16:41 Извиняюсь парни, что то я туплю и так и этак не выходит никак.
Задача следующего плана есть 2 тумблера и выход. Но нужна последовательность.
То есть если нажимаем первый потом второй есть выход true
Если нажимаем второй ,а потом первый выход false.
При отключении последовательность не важна.
Ну как это реализовать на SCL ну никак не соображу вроде бы просто кажется ,но никак :ges_hmm:
Т.С
Не понятно :-"То есть если нажимаем первый потом второй есть выход true" нажимаем тумблер, значит фиксируем? или включили первый -включили второй=> Выход =TRUE; Выключили первый- включили первый=> выход=FALSE
Все верно,неважно как, но наверное лучше тумблерами то есть с фиксацией.

stesl
эксперт
эксперт
Сообщения: 1008
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 94 раза
Поблагодарили: 136 раз

Простой код на SCL помогите

Сообщение stesl »

SMax писал(а): 07 авг 2020, 14:06 Ниже полный код функционального блока
Не понимаю о чем еще дискутировать ) Решение SMax самодостаточно. Temp можно хранить в меркерной области.
Ответить

Вернуться в «Simatic Step7»