Страница 447 из 1044 ПерваяПервая ... 347397437445446447448449457497547947 ... ПоследняяПоследняя
Показано с 4,461 по 4,470 из 10436

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

  1. #4461

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    В моей задаче перед входом в основной цикл работы установки необходимо провести тестирование и инициализацию отдельных модулей установки. Каждая такая проверка занимает некоторое время, точно больше чем цикл ПЛК. Ну там, накачать куда-то давления, потом сбросить и проверить что все датчики это зарегистрировали, в таком духе.
    А при чем здесь цикл работы программы ПЛК ? Инициализация и тестирование будут выполнены за N циклов программы ПЛК, а далее ПЛК начнет выполнять циклическую часть программы.

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

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    В моей задаче перед входом в основной цикл работы установки необходимо провести тестирование и инициализацию отдельных модулей установки. Каждая такая проверка занимает некоторое время, точно больше чем цикл ПЛК. Ну там, накачать куда-то давления, потом сбросить и проверить что все датчики это зарегистрировали, в таком духе.

    А как в CoDeSys-ST и вообще в ПЛК мире принято делать такое? У меня получается изрядная "лапша" в коде.

    Я завел несколько POU для этого. В каждом собственно логика проверки, таймеры на "таймаут" разных проверочных действий, признак того что проверка уже пройдена, и результат проверки. Пока все длительные действия не завершаться, признак проверки говорит "не готов".

    В главном цикле ПЛК я обхожу эти инициализирующие POU. Если POU не готов с результатом, покидаю главный цикл по RETURN. Если готов, считываю результат и перехожу к следующему подобному POU.

    Внутри POU такие же макароны -- если какой-то таймер готовности аппаратуры не досчитал, выхожу с признаком "не готов", если досчитал продолжаю проверку.

    Смотрится некрасиво, на мой вкус, а ничего другого придумать не могу. Как бы вы такое сделали?
    В главной программе CASE напрашивается.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #4463

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    В главной программе CASE напрашивается.
    да, точняк. Тоже так подумал. Спасибо.

    Хотя, для описания всех этих состояний есть соблазн попробовать SFC.

  4. #4464

    По умолчанию

    Здравствуйте!
    Я пользуюсь ноутбуком и к нему подключён интернет Вложение 21074 и по умолчанию стоит Вложение 21075 это всё понятно и правильно но суть в том что когда меняешь Вложение 21076 для подключения к ПЛК то интернет уже не работает приходится менять всё обратно, как можно сделать так чтобы не менять постоянно адреса?

  5. #4465

    По умолчанию

    Кнопка "Дополнительно" и прописываете нужные адреса/шлюзы/DNS-ы

  6. #4466

    По умолчанию

    Цитата Сообщение от alexx751 Посмотреть сообщение
    Кнопка "Дополнительно" и прописываете нужные адреса/шлюзы/DNS-ы
    А можно скриншот как это правильно делается?

  7. #4467
    Пользователь Аватар для grenz
    Регистрация
    13.12.2010
    Адрес
    СПб
    Сообщений
    9

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    В моей задаче перед входом в основной цикл работы установки необходимо провести тестирование и инициализацию отдельных модулей установки. Каждая такая проверка занимает некоторое время, точно больше чем цикл ПЛК. Ну там, накачать куда-то давления, потом сбросить и проверить что все датчики это зарегистрировали, в таком духе.
    Я не специалист, но, может быть Вам мое предположение поможет...

    Я бы создал глобальную булевую переменную init := TRUE. После этого в PLC_PRG провел бы поочередную инициализацию всех модулей:

    Пишем в PLC_PRG:

    IF Init THEN Проверка1_PRG(); ELSE Rabota(); END_IF.

    Пишем в Проверка1_PRG:

    prov1: BOOL := TRUE; (* Объявили переменную *)

    Проверяем, что нужно
    IF все условия выполнены, THEN prov1 := False; END_IF.
    IF NOT prov1 THEN Проверка2(); END_IF

    Пишем в Проверка2_PRG:

    prov2: BOOL := TRUE; (* Объявили переменную *)

    Проверяем, что нужно
    IF все условия выполнены, THEN prov2 := False; END_IF.
    IF NOT prov2 THEN ПроверкаN(); END_IF

    Пишем в ПроверкаN_PRG:

    provN: BOOL := TRUE; (* Объявили переменную *)

    Проверяем, что нужно
    IF все условия выполнены, THEN provN := False; END_IF.
    IF NOT provN THEN init := FALSE; END_IF (* Когда пропадет init, в PLC_PRG условие изменится, и мы окажемся в Rabota_PRG *)

    Программа Rabota и будет основной, а при init = false, PLC_PRG уже к Проверка1(), Проверка2(), ПроверкаN() обращаться не будет. будет выполняться только Rabota.

  8. #4468

    По умолчанию

    Цитата Сообщение от grenz Посмотреть сообщение
    Я бы создал глобальную булевую переменную init := TRUE. После этого в PLC_PRG провел бы поочередную инициализацию всех модулей: IF Init THEN Проверка1_PRG(); END_IF. В PRG Проверка1 взведем локальную перем prov1 := TRUE.
    Далее IF все условия выполнены, THEN prov1 := False; Проверка2_PRG(); END_IF.
    В Проверка2() так же можно назначить локальную переменную, prov2 := TRUE; При выполнении всех условий prov2 := false; ПроверкаN().
    Ну и так далее до выполнения всех программ инициализации...
    В последней программе инициализации, когда уже все проверки проведены, provN := FALSE; init := FALSE; Rabota().

    Программа Rabota и будет основной, а при init = false, PLC_PRG уже к Проверка1(), Проверка2(), ПроверкаN() обращаться не будет. будет выполняться только Rabota.
    Да вот как раз этой плохо читаемой каши я и хотел избежать. Возможно, мне поможет общее описание в виде SFC-блока. При первом взгляде SFC выглядит как хороший, лаконичный способ упрятать многословные подробности внутрь "квадратиков".

  9. #4469
    Пользователь Аватар для grenz
    Регистрация
    13.12.2010
    Адрес
    СПб
    Сообщений
    9

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    Да вот как раз этой плохо читаемой каши я и хотел избежать. Возможно, мне поможет общее описание в виде SFC-блока. При первом взгляде SFC выглядит как хороший, лаконичный способ упрятать многословные подробности внутрь "квадратиков".
    Как хотите. Просто мое сообщение выглядит как "многа букав" на самом деле программы проверки будут отображаться в разделе POU, а длина кода внутри Ваших проверочных программ зависит от того, что вы хотите там напроверять.

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

    И потом, ... Давление, говорите накачали. А если оно во время работы пропадет, что тогда? Готовьте еще пол - экрана для SFC. Такая "простыня" получится, а всего лишь давление проверили.

    Хотя, конечно, каждый художник, как он хочет...

  10. #4470

    По умолчанию

    Скорее, я хочу в виде SFC описать весь алгоритм в целом, главный цикл крупными мазками. а уж подробности - на чем получится.

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

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

Ваши права

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