- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Циклический таймер на SCL
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
Доброго всем времени суток.Потихоньку начинаю осваивать язык SCL,что-то получается что-то нет,например никак не возьму в толк как исполнить подобное только на SCL, помогите примером.
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
что я делаю не так? хочу вводить значение времени (0.01s * введенное время) ,но он ругается на преобразование..
Код:
Код:
-
- освоился
- Сообщения: 290
- Зарегистрирован: 09 авг 2016, 13:49
- Имя: Чистилин Андрей Анатольевич
- Страна: Россия
- город/регион: Малоярославец
- Благодарил (а): 31 раз
- Поблагодарили: 36 раз
Циклический таймер на SCL
А кто нибудь может по простому объяснить, зачем вообще этот SCL нужен? Мне всегда хватало контактного плана. Я не разработчик, в основном обслуживание и небольшая корректировка программ, у меня просто задач таких не было и не будет видимо. Это что язык Си для симатика?
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Циклический таймер на SCL
Так вход tv должен иметь вид данных времени s5.
На вход задайте s5t#10ms если жестко надо. Если хотите регулируемое время таймера то придется еще немножко дописать код: использовать сдвиги и прибавлять маску time base. Структура переменной времени описана в справке.
А еще лучше используйте s7таймер для динамеского изменения можно использовать блок int_to_time
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
Мне он показался достаточно гибким и интересным,по сравнению с остальными языками (мой вопрос про таймеры это только малый кусок кода который я хочу сделать адаптивным под линейку определенных задач ),плюс я могу хранить исходники(копить свою библиотеку),да и на участке экрана помещается больше инфы как для создания ,так и отладки программы,ну и лично мне он кажется удобнее в записи функций и уравнений..и многое другое..да и на вкус и цвет..
Да,что-то в этом роде.Это что язык Си для симатика?
-
- здесь недавно
- Сообщения: 19
- Зарегистрирован: 19 янв 2017, 13:55
- Имя: Сидельников Анатолий
- Страна: РФ
- город/регион: Ижевск
- Поблагодарили: 2 раза
Циклический таймер на SCL
А такой примерчик не поможет?
Задаем целые в данном случае в секундах, получаем целые то же в секундах.
Задаем целые в данном случае в секундах, получаем целые то же в секундах.
Код: Выделить всё
FUNCTION_BLOCK TestMig
VAR_TEMP
// Temporary Variables
END_VAR
VAR
tGen : TON;
iCase : INT;
// Static Variables
END_VAR
VAR_INPUT
wSet : WORD:=16#123;
END_VAR
VAR_OUTPUT
Q1 : BOOL;
Q2 : BOOL;
Q3 : BOOL;
Q4 : BOOL;
wOut : WORD;
END_VAR
tGen(In:=NOT tGen.Q, PT:=DINT_TO_TIME(WORD_TO_DINT(wSet)*1000));
wOut:=DINT_TO_WORD(TIME_TO_DINT(tGen.ET)/1000);
CASE iCase OF
0: Q1:=TRUE;
q2:=FALSE;
q3:=FALSE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
1: Q1:=FALSE;
q2:=TRUE;
q3:=FALSE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
2: Q1:=FALSE;
q2:=FALSE;
q3:=TRUE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
3: Q1:=FALSE;
q2:=FALSE;
q3:=FALSE;
q4:=TRUE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
4: Q1:=FALSE;
q2:=FALSE;
q3:=FALSE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
5: Q1:=TRUE;
q2:=TRUE;
q3:=TRUE;
q4:=TRUE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
6: Q1:=TRUE;
q2:=TRUE;
q3:=TRUE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
7: Q1:=TRUE;
q2:=TRUE;
q3:=FALSE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
8: Q1:=TRUE;
q2:=FALSE;
q3:=FALSE;
q4:=FALSE;
IF tGen.Q THEN iCase:=iCase+1;END_IF;
9: Q1:=FALSE;
q2:=FALSE;
q3:=FALSE;
q4:=FALSE;
iCase:=0;
END_CASE;
// Statement Section
END_FUNCTION_BLOCK
Последний раз редактировалось AGorskiy 26 янв 2017, 14:34, всего редактировалось 2 раза.
Причина: убрал код под тэг, добавил знак вопроса и исправил опечатку =)
Причина: убрал код под тэг, добавил знак вопроса и исправил опечатку =)
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
Ругается на преобразование мне понятно,не понятно как сделать что-бы не ругался..megavolt86 писал(а):Так вход tv должен иметь вид данных времени s5.
На вход задайте s5t#10ms если жестко надо. Если хотите регулируемое время таймера то придется еще немножко дописать код: использовать сдвиги и прибавлять маску time base. Структура переменной времени описана в справке.
А еще лучше используйте s7таймер для динамеского изменения можно использовать блок int_to_time
база времени( *00* т.е 0.01 сек) по умолчанию меня полностью устраивает,первый скрин на LAD полностью рабочий,моя задача сделать все это добро в SCL,но где-то ошибочка в преобразовании ,но где?
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
Спасибо,ближе к теме,но все-же ,почему? ведь на вход TV моего таймера значение подается в BCD коде все тоже самое на LAD языке работает на ура???
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 01 фев 2017, 12:06
- Имя: Бакшаев Евгений Игоревич
- Поблагодарили: 1 раз
Циклический таймер на SCL
В LAD вы все сделали через меркера, поэтому и не ругается. Если вы сделаете через переменные с типами как в SCL и включена проверка типов, то LAD тоже будет ругаться.
Код: Выделить всё
...
TV_BCD : S5TIME;
...
TV_BCD := TIME_TO_S5TIME(DINT_TO_TIME(WORD_TO_DINT(TV_INT)));
-
- новенький
- Сообщения: 1
- Зарегистрирован: 03 фев 2017, 08:41
- Имя: Павлушев Максим Сергеевич
- Страна: Россия
- город/регион: Екатеринбург
Циклический таймер на SCL
Здравствуйте, мое такое мнение про язык SCL. Полтора года назад пришлось поменять работу. На прошлой работе работал со SCADA и программировал на C#. На новой пришлось быстро осваивать TIA Portal, т.к. до этого контроллеры не программировал (классический Step 7 до этого только в универе щупал, можно сказать что я его не знал), LAD и FBD, осваивать времени не было, т.к. пришел в разгар проекта. Остановился на SCL, (pasсal помню со школы). И ничего очень даже хорошо получилось. Проект очень сложный и большой, есть куча частотных приводов, есть взаимодействие с чужими станками.
Мое мнение, что на SCL надо писать уже более сложную логику, когда нужны циклы,сложные математические операции, работа с наборам данных например массивами структур (классов увы тут нет)
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 08 дек 2016, 10:42
- Имя: Алексей
- город/регион: Ставропольский край
- Благодарил (а): 2 раза
Циклический таймер на SCL
Огромное человеческое! Получилось.bei писал(а): В LAD вы все сделали через меркера, поэтому и не ругается. Если вы сделаете через переменные с типами как в SCL и включена проверка типов, то LAD тоже будет ругаться.Код: Выделить всё
... TV_BCD : S5TIME; ... TV_BCD := TIME_TO_S5TIME(DINT_TO_TIME(WORD_TO_DINT(TV_INT)));
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 07 янв 2023, 17:48
- Имя: Денис
Циклический таймер на SCL
MaximP, на самом деле Functional block (FB) это и есть своего рода класс. Сначала создается сам функциональный блок, а потом экземпляры блока, который мы будем использовать в самой программе на SCL.