Страница 164 из 1044 ПерваяПервая ... 64114154162163164165166174214264664 ... ПоследняяПоследняя
Показано с 1,631 по 1,640 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #1631
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от amn Посмотреть сообщение
    Хорошо, пусть будет константа, но все же вопрос был: где она объявлена?

    В библиотеке ComService.lib есть функциональный блок ComService
    в этом функциональном блоке объявлена переменная Task типа COM_TSK. И это все, что мне удалось увидеть. Остальная информация скрыта.

    FUNCTION_BLOCK COM_SERVICE
    VAR_INPUT
    Enable: BOOL;
    Settings: COMSETTINGS;
    Task: COM_TSK;
    END_VAR

    Вопрос 1: каким образом можно увидеть то место, где объявлен этот тип (COM_TSK)?

    Далее в примере видим:

    ...
    (*
    Настройка и открытие порта (COM_SERVICE)
    Пока на выходе Ready не будет сигнал TRUE, стучимся в порт
    Порт открывается с настройками, указанными в com_settings,
    а на вход Task подаются следующие значения:

    0 - Открытие и настройка порта в соответствии с настройками в структуре Settings
    1 - Изменение настроек уже открытого порта на настройки указанные в Settings
    2 - Закрытие порта, номер порта берется из Settings.Port
    *)
    COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK )
    ...


    Мне пока еще непонятно, каким образом функциональный блок видит константу OPEN_TSK, если в локальных переменных она не объявлена, а в разделе глобальных переменных ее нет?

    Вопрос 2: Как мне увидеть то место, где объявлена константа OPEN_TSK?
    метод "тыка" будет жить вечно, поиграйтесь мышкой по всем вкладкам проекта и обнаружите где скрывается определение

  2. #1632
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Спасибо всем ответившим.
    Правильный ответ на мой 1-й вопрос:
    Library Manager - (ComService) - Data types
    И видим тип перечисление.


    Делаю вывод:
    Объявленный тип данных является глобальным по умолчанию.
    Если ошибаюсь пусть меня поправят.

    С уважением, Михаил.

  3. #1633
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Объявленный тип данных является глобальным по умолчанию.
    Принцип умолчаний здесь неприменим, т.к. вариант лишь один — любой тип данных в кодесисе является глобальным.

  4. #1634

    По умолчанию

    Цитата Сообщение от Евгений_Томск Посмотреть сообщение
    Добрый день. Попробуйте в свойствах нужной визуализации поставить "точку" рядом с текстом "управляющая панель".
    Спасибо за ответ. Я имею ввиду всплывающее окно. То есть на схеме несколько клапанов. Нажимая на каждый, появляется окно, их может быть одновременно несколько открытых, если нажать сразу на несколько клапанов. Именно окно поверх схемы. А с управляющей панелью места не хватит на все клапаны на экране.

  5. #1635
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Вижу ошибку в коде но не знаю как исправить, прошу помощи.
    PROGRAM PLC_PRG
    VAR
    TP1:TP;
    OUT: INT;
    END_VAR

    TP1(IN:=TRUE,PT:=T#7s);
    OUT:=0;
    IF TP1.Q=0 THEN
    OUT:=1;
    TP1(IN:=FALSE,PT:=T#0s);
    TP1(IN:=TRUE,PT:=T#10s);
    IF TP1.Q=0 THEN
    OUT:=2;
    TP1(IN:=FALSE,PT:=T#0s);
    END_IF
    END_IF
    Таймер внутри таймера. (это кусок из проекта)
    По задумке должно быть
    OUT:=0;
    через семь секунд
    OUT:=1;
    и через десять секунд
    OUT:=2;
    У Вас не таймер внутри таймера, а IF внутри другого IF. И условие для вложенного IF не будет выполняться никогда.
    Т.к. программа в ПЛК выполняется циклически, то всякий раз, через время одного цикла:
    -первой строкой программы, время задержки таймера устанавливается равным 7с.
    - второй строкой программы обнуляется переменная OUT
    И в результате
    Код:
    ...............
    IF TP1.Q=0 THEN
    OUT:=1;
    каждые 7 с, и на время одного цикла переменная OUT будет принимать значение равное 1.
    А из этой конструкции
    ..........
    Код:
    TP1(IN:=FALSE,PT:=T#0s);
    TP1(IN:=TRUE,PT:=T#10s);
    IF TP1.Q=0 THEN
    OUT:=2;
    А условие IF TP1.Q=0 THEN не будет выполняться никогда, т.к. после TP1(IN:=TRUE,PT:=T#10s) выход TP1.Q всегда будет в состоянии 1.
    А TP1(IN:=TRUE,PT:=T#10s); не имеет смысла, т.к. смотрим выше на первую строку программы.

    Не понятен контекст фрагмента кода, если нужно один раз после старта программы выполнить последовательность состояний для OUT:= 0(в начале) ,1(через 7с), 2(через 10с), то например так.
    Код:
    PROGRAM PLC_PRG
    VAR
    TP1:TP:=(PT:=T#10s);
    OUT: INT;
    END_VAR
    TP1(IN:=TRUE);
    IF TP1.ET>=T#7s THEN
    OUT:=1;
    ELSE
    OUT:=0;
    END_IF
    IF TP1.ET=T#10s THEN
    OUT:=2;
    END_IF
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #1636
    Пользователь Аватар для svanekst
    Регистрация
    21.11.2012
    Адрес
    г. Советский, ХМАО-Югра
    Сообщений
    0

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    У Вас не таймер внутри таймера, а IF внутри другого IF. И условие для вложенного IF не будет выполняться никогда.
    Спасибо.
    Хотел упростить код чтобы проще было мне помочь но похоже упростил на столько что специалисты отвечают на то что видят а не на то что я думаю.
    Я прикрепил проект, у меня не получается вот что:
    1) Должен отработать таймер в CASE 1:
    2) Должны отработать два таймера в функции
    3) И только после этого должен отработать таймер в CASE 2:

    Код я снова упростил, на самом деле в функции есть вычисления. По отдельности всё работает хорошо, функция вычисляет то что требуется, время работы таймеров динамически рассчитывается внутри функции. В самой программе CASE обходит всё как задумано и т.д. Но стоит мне функцию вставить в программу расчет в функции до конца не доходит, после первого цикла контроллера продолжает выполняться программа когда функция еще не дошла до своего логического конца.

  7. #1637
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Спасибо.
    Хотел упростить код чтобы проще было мне помочь но похоже упростил на столько что специалисты отвечают на то что видят а не на то что я думаю.
    Я прикрепил проект, у меня не получается вот что:
    1) Должен отработать таймер в CASE 1:
    2) Должны отработать два таймера в функции
    3) И только после этого должен отработать таймер в CASE 2:

    Код я снова упростил, на самом деле в функции есть вычисления. По отдельности всё работает хорошо, функция вычисляет то что требуется, время работы таймеров динамически рассчитывается внутри функции. В самой программе CASE обходит всё как задумано и т.д. Но стоит мне функцию вставить в программу расчет в функции до конца не доходит, после первого цикла контроллера продолжает выполняться программа когда функция еще не дошла до своего логического конца.
    В проекте кодесиса могут присутствовать разные POU -программы, функции и функциональные блоки. Давайте не путать термины.
    У Вас в проекте нет функций, а есть две программы. Программа Fn() вызывается из главной программы.
    Обе программы не работают параллельно.
    Строки программы Fn() выполняются тогда, когда в основной программе PLC_PRG происходит ее вызов и затем продолжает выполняться основная программа со строки следующей за вызовом программы Fn(). А не ждет, когда в вызываемой программе отработает таймер и выполнятся все CASE. Вы же ни как не обмениваетесь состоянием переменных между программами, нет ни глобальных переменных ни выходных переменных у Fn()
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #1638
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,669

    По умолчанию

    Есть аналог дешифратора 32 бит в CodeSys, как присутствует в OWEN Logic ?

    На входе целочисленное от 0 до 31 (номер бита, который необходимо установить в 1), на выходе число 32-х битное согласно установленному биту.

  9. #1639
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Есть аналог дешифратора 32 бит в CodeSys, как присутствует в OWEN Logic ?

    На входе целочисленное от 0 до 31 (номер бита, который необходимо установить в 1), на выходе число 32-х битное согласно установленному биту.
    сложнейший код, вряд ли кто решится в библиотеку его положить

  10. #1640
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,669

    По умолчанию

    capzap, блин, я тормоз, PUTBIT все тоже самое делает по аналогии с DC32 из лоджика.

    Для меня ST пока темный лес практически.

Страница 164 из 1044 ПерваяПервая ... 64114154162163164165166174214264664 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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