Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя
Показано с 61 по 70 из 76

Тема: Первый проект на ST

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Для себя я вывел, что писать и отлаживать удобнее в CFC, а после, уже отлаженое и отработаное - переписать на ST, и уже в виде ST отдавать "в работу".
    Т.е. по сути у меня почти для всего есть 2 проекта: "отладочный" на CFC и "рабочий" на ST.
    Для примера процедура управлени насосм.
    Изображения Изображения
    • Тип файла: jpg PUMP2.jpg (37.9 Кб, Просмотров: 38)
    • Тип файла: jpg PUMP1.jpg (67.3 Кб, Просмотров: 35)
    Последний раз редактировалось SlavikP; 09.04.2024 в 08:57.
    Работа не волк, а work.

  2. #2
    Пользователь Аватар для EVGEN_
    Регистрация
    04.07.2015
    Адрес
    Казахстан, город Петропавловск
    Сообщений
    719

    По умолчанию

    Цитата Сообщение от SlavikP Посмотреть сообщение
    Для себя я вывел, что писать и отлаживать удобнее в CFC, а после, уже отлаженое и отработаное - переписать на ST, и уже в виде ST отдавать "в работу".
    Т.е. по сути у меня почти для всего есть 2 проекта: "отладочный" на CFC и "рабочий" на ST.
    Для примера процедура управлени насосм.
    В принципе нормальное решение. Спасибо за совет

  3. #3

    По умолчанию

    Цитата Сообщение от EVGEN_ Посмотреть сообщение
    Прилагаю программу Дробильно-сортировочного комплекса и ТЗ
    Вы действительно думаете, что кто-то будет вникать в этот код без единого комментария, выискивая соответствия между обозначениями в программе и ТЗ?
    Да вы сами через месяц не вспомните что делаете в той или иной строке.
    Используйте тип перечисление с осмысленными названиями для нумерации шагов.

    Зачем сделаны присваивания выходов ФБ промежуточным переменным вроде
    TP1(IN:=TP1_IN , PT:=T#5s , Q=>TP1_Q , ET=>TP1_ET );

    чтобы потом написать
    ZOOMER:=TP1_Q; ?

    так можно сразу написать:
    ZOOMER:=TP1.Q;

    Аналогично вместо TP1_IN := FALSE; можно сразу писать TP1.IN := FALSE; , опуская потом IN при вызове ФБ TP1

  4. #4
    Пользователь Аватар для EVGEN_
    Регистрация
    04.07.2015
    Адрес
    Казахстан, город Петропавловск
    Сообщений
    719

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Вы действительно думаете, что кто-то будет вникать в этот код без единого комментария, выискивая соответствия между обозначениями в программе и ТЗ?
    Да вы сами через месяц не вспомните что делаете в той или иной строке.
    Используйте тип перечисление с осмысленными названиями для нумерации шагов.
    По поводу комментарий согласен. Как писал ранее, за комментарий знаю, просто в этой итоговой программе опустил их. Программу начинал с самого начала несколько раз и по началу все комментировал. Ну и как не странно, порой из-за нехватки времени или энергии, после трудового дня, забрасывал все на 1-1,5 недели и потом возвращаясь к ней буквально за 5-10 минут понимал, что куда и откуда без комментов.
    По поводу названий шагов можете пример привести? Просто тот же Сергей Романов так же называет шаги 0,1,10,20 и т.д.
    Цитата Сообщение от 1exan Посмотреть сообщение
    Зачем сделаны присваивания выходов ФБ промежуточным переменным вроде
    TP1(IN:=TP1_IN , PT:=T#5s , Q=>TP1_Q , ET=>TP1_ET );

    чтобы потом написать
    ZOOMER:=TP1_Q; ?

    так можно сразу написать:
    ZOOMER:=TP1.Q;

    Аналогично вместо TP1_IN := FALSE; можно сразу писать TP1.IN := FALSE; , опуская потом IN при вызове ФБ TP1
    Спасибо, попробую

  5. #5

    По умолчанию

    Цитата Сообщение от EVGEN_ Посмотреть сообщение
    ...
    По поводу названий шагов можете пример привести? Просто тот же Сергей Романов так же называет шаги 0,1,10,20 и т.д.
    ...
    Создаёте новый тип данных enStep (на вкладке типы данных) с примерно таким содержимым (имена и числа произвольно):
    Код:
    TYPE enStep : (
        gciStopped    :=    0, (*    Остановлен    *)
        gciRun        :=    1, (*    Запущен    *)
        gciPause        :=    10, (*    Пауза    *)
        gciDelay        :=    30, (*    Задержка    *)
        gciAvar        :=    31 (*    Авария    *)
    );
    END_TYPE
    В программе используете например так:
    Код:
    Step: enStep; (* Объявление *)
    ...
    
    IF ALARM THEN Step:=gciAvar; END_IF
    ...
    
    IF Step=gciPause AND ...
    ...
    
    CASE Step OF
        gciRun: RED:=TRUE; GREEN:=FALSE; YELLOW:=FALSE; ZOOMER:=FALSE;
    ...
    С типом данных "перечисление" можно работать, как с типом данных "INT"

  6. #6
    Пользователь Аватар для EVGEN_
    Регистрация
    04.07.2015
    Адрес
    Казахстан, город Петропавловск
    Сообщений
    719

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Создаёте новый тип данных enStep (на вкладке типы данных) с примерно таким содержимым (имена и числа произвольно):
    Код:
    TYPE enStep : (
        gciStopped    :=    0, (*    Остановлен    *)
        gciRun        :=    1, (*    Запущен    *)
        gciPause        :=    10, (*    Пауза    *)
        gciDelay        :=    30, (*    Задержка    *)
        gciAvar        :=    31 (*    Авария    *)
    );
    END_TYPE
    В программе используете например так:
    Код:
    Step: enStep; (* Объявление *)
    ...
    
    IF ALARM THEN Step:=gciAvar; END_IF
    ...
    
    IF Step=gciPause AND ...
    ...
    
    CASE Step OF
        gciRun: RED:=TRUE; GREEN:=FALSE; YELLOW:=FALSE; ZOOMER:=FALSE;
    ...
    С типом данных "перечисление" можно работать, как с типом данных "INT"
    1exan , спасибо! Вроде понял.

  7. #7
    Пользователь Аватар для EVGEN_
    Регистрация
    04.07.2015
    Адрес
    Казахстан, город Петропавловск
    Сообщений
    719

    По умолчанию

    Программа уже давненько написана, хотел по управлять через Скаду и продемонстрировать кое-кому. Все нарисовал, перенес с Codesys 2.3 в Codesys 3.5, но заметил проблему, что при длительном нажатии кнопки "Стоп", шаги пролетают, хотя должны отключаться по порядку с выдержкой времени. То, есть если мышкой кликнуть очень быстро, не задерживая палец на нажатии, то все ок). Не хочу вспоминать и разбираться в программе, можно поломать, то что работает. В общем как я понял, надо воткнуть R-Trig к кнопке "Стоп" и сделать это в скаде через скрипт. Но тут другое, Codesys 3.5 передает Word, а мне в скрипте надо как-то из него вытащить нужный бит, не пойму как. Например, в редакторе мнемосхем это делается просто и понятно, а как это сделать в списке активных каналов?
    Изображения Изображения

  8. #8

    По умолчанию

    Цитата Сообщение от EVGEN_ Посмотреть сообщение
    Программа уже давненько написана, хотел по управлять через Скаду и продемонстрировать кое-кому. Все нарисовал, перенес с Codesys 2.3 в Codesys 3.5, но заметил проблему, что при длительном нажатии кнопки "Стоп", шаги пролетают, хотя должны отключаться по порядку с выдержкой времени. То, есть если мышкой кликнуть очень быстро, не задерживая палец на нажатии, то все ок). Не хочу вспоминать и разбираться в программе, можно поломать, то что работает. В общем как я понял, надо воткнуть R-Trig к кнопке "Стоп" и сделать это в скаде через скрипт. Но тут другое, Codesys 3.5 передает Word, а мне в скрипте надо как-то из него вытащить нужный бит, не пойму как. Например, в редакторе мнемосхем это делается просто и понятно, а как это сделать в списке активных каналов?
    Ерунду пишите, вы из скады можете обратиться прямо к нужному биту, надо только посчитать номер бита. Типа 0х 4
    А триггер можно поставить в программе ПЛК после принятия бита.

    Мало того, у вас в соотнесении прописаны именно биты (непонятно зачем), а обращаетесь вы из скады к маске.
    Последний раз редактировалось kondor3000; 04.12.2024 в 09:10.

  9. #9

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    накой тут init?
    ну мало ли

  10. #10

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Тогда ладно.
    ТС и так не осознает автомат, а Вы его еще и запутаете кол-вом стейтов - новые, выходные, действия входные/выходные.
    Проще нужно.
    Конечно, можно повыкидывать лишнее.
    Кстати не попадалось подобных реализаций концепции SFC на ST или на Си например?

Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя

Похожие темы

  1. Первый проект для практики
    от Густаво в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 05.03.2023, 18:02
  2. Мой первый проект Мастерскада
    от Dimooon в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 29.09.2017, 13:17
  3. Первый проект
    от wunschkind в разделе Программируемые реле
    Ответов: 5
    Последнее сообщение: 20.07.2017, 18:22
  4. Ответов: 3
    Последнее сообщение: 16.04.2015, 18:40
  5. Первый пришел первый вышел...
    от kanava в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 01.12.2008, 14:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •