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

Циклический таймер на SCL

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

Доброго всем времени суток.Потихоньку начинаю осваивать язык SCL,что-то получается что-то нет,например никак не возьму в толк как исполнить подобное только на SCL, :ges_help: помогите примером.
Изображение

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

что я делаю не так? хочу вводить значение времени (0.01s * введенное время) ,но он ругается на преобразование..
Код:
[+]
Изображение

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 36 раз

Циклический таймер на SCL

Сообщение ZuElecRu »

А кто нибудь может по простому объяснить, зачем вообще этот SCL нужен? Мне всегда хватало контактного плана. Я не разработчик, в основном обслуживание и небольшая корректировка программ, у меня просто задач таких не было и не будет видимо. Это что язык Си для симатика?
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Циклический таймер на SCL

Сообщение megavolt86 »

alexeyyyka писал(а): ругается на преобразование..
Так вход tv должен иметь вид данных времени s5.
На вход задайте s5t#10ms если жестко надо. Если хотите регулируемое время таймера то придется еще немножко дописать код: использовать сдвиги и прибавлять маску time base. Структура переменной времени описана в справке.
А еще лучше используйте s7таймер для динамеского изменения можно использовать блок int_to_time
:ext_secret:

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

ZuElecRu писал(а): А кто нибудь может по простому объяснить, зачем вообще этот SCL нужен? Мне всегда хватало контактного плана. Я не разработчик, в основном обслуживание и небольшая корректировка программ, у меня просто задач таких не было и не будет видимо. Это что язык Си для симатика?
Мне он показался достаточно гибким и интересным,по сравнению с остальными языками (мой вопрос про таймеры это только малый кусок кода который я хочу сделать адаптивным под линейку определенных задач ),плюс я могу хранить исходники(копить свою библиотеку),да и на участке экрана помещается больше инфы как для создания ,так и отладки программы,ну и лично мне он кажется удобнее в записи функций и уравнений..и многое другое..да и на вкус и цвет..
Это что язык Си для симатика?
Да,что-то в этом роде.

Gucev
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 19 янв 2017, 13:55
Имя: Сидельников Анатолий
Страна: РФ
город/регион: Ижевск
Поблагодарили: 2 раза

Циклический таймер на SCL

Сообщение Gucev »

А такой примерчик не поможет?
Задаем целые в данном случае в секундах, получаем целые то же в секундах.

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

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 раза.
Причина: убрал код под тэг, добавил знак вопроса и исправил опечатку =)

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

megavolt86 писал(а):
alexeyyyka писал(а): ругается на преобразование..
Так вход tv должен иметь вид данных времени s5.
На вход задайте s5t#10ms если жестко надо. Если хотите регулируемое время таймера то придется еще немножко дописать код: использовать сдвиги и прибавлять маску time base. Структура переменной времени описана в справке.
А еще лучше используйте s7таймер для динамеского изменения можно использовать блок int_to_time
Ругается на преобразование мне понятно,не понятно как сделать что-бы не ругался.. :ges_hmm:
база времени( *00* т.е 0.01 сек) по умолчанию меня полностью устраивает,первый скрин на LAD полностью рабочий,моя задача сделать все это добро в SCL,но где-то ошибочка в преобразовании ,но где?

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

Gucev писал(а): А такой примерчик не поможет?
Задаем целые в данном случае в секундах, получаем целые то же в секундах.
Спасибо,ближе к теме,но все-же ,почему? ведь на вход TV моего таймера значение подается в BCD коде :ext_book: все тоже самое на LAD языке работает на ура??? :ges_hmm:

bei
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 01 фев 2017, 12:06
Имя: Бакшаев Евгений Игоревич
Поблагодарили: 1 раз

Циклический таймер на SCL

Сообщение bei »

В LAD вы все сделали через меркера, поэтому и не ругается. Если вы сделаете через переменные с типами как в SCL и включена проверка типов, то LAD тоже будет ругаться.

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

...
TV_BCD      : S5TIME;
...
TV_BCD := TIME_TO_S5TIME(DINT_TO_TIME(WORD_TO_DINT(TV_INT)));

MaximP
новенький
новенький
Сообщения: 1
Зарегистрирован: 03 фев 2017, 08:41
Имя: Павлушев Максим Сергеевич
Страна: Россия
город/регион: Екатеринбург

Циклический таймер на SCL

Сообщение MaximP »

ZuElecRu писал(а): А кто нибудь может по простому объяснить, зачем вообще этот SCL нужен? Мне всегда хватало контактного плана. Я не разработчик, в основном обслуживание и небольшая корректировка программ, у меня просто задач таких не было и не будет видимо. Это что язык Си для симатика?
Здравствуйте, мое такое мнение про язык SCL. Полтора года назад пришлось поменять работу. На прошлой работе работал со SCADA и программировал на C#. На новой пришлось быстро осваивать TIA Portal, т.к. до этого контроллеры не программировал (классический Step 7 до этого только в универе щупал, можно сказать что я его не знал), LAD и FBD, осваивать времени не было, т.к. пришел в разгар проекта. Остановился на SCL, (pasсal помню со школы). И ничего очень даже хорошо получилось. Проект очень сложный и большой, есть куча частотных приводов, есть взаимодействие с чужими станками.
Мое мнение, что на SCL надо писать уже более сложную логику, когда нужны циклы,сложные математические операции, работа с наборам данных например массивами структур (классов увы тут нет)

Автор темы
alexeyyyka
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 08 дек 2016, 10:42
Имя: Алексей
город/регион: Ставропольский край
Благодарил (а): 2 раза

Циклический таймер на SCL

Сообщение alexeyyyka »

bei писал(а): В LAD вы все сделали через меркера, поэтому и не ругается. Если вы сделаете через переменные с типами как в SCL и включена проверка типов, то LAD тоже будет ругаться.

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

...
TV_BCD      : S5TIME;
...
TV_BCD := TIME_TO_S5TIME(DINT_TO_TIME(WORD_TO_DINT(TV_INT)));
Огромное человеческое! Получилось.

danveyron
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 07 янв 2023, 17:48
Имя: Денис

Циклический таймер на SCL

Сообщение danveyron »

MaximP, на самом деле Functional block (FB) это и есть своего рода класс. Сначала создается сам функциональный блок, а потом экземпляры блока, который мы будем использовать в самой программе на SCL.
Ответить

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