Показано с 1 по 10 из 10

Тема: Изменить значение выхода в момент присвоения переменной. ПЛК 160.

  1. #1

    По умолчанию Изменить значение выхода в момент присвоения переменной. ПЛК 160.

    Доброго дня.

    Подскажите, пожалуйста, можно ли изменить значение аналогового входа во время выполнения/отладки?

    Сейчас поясню...
    Есть клапан, подключённый к аналоговому входу ПЛК 160. При изменении значения переменной в программе, значение на выходе (напряжение на клапане) изменяется только по завершению цикла POU.

    Можно ли как-то изменять значение выхода в момент изменения переменной?

    Я хочу вынести логику открытия клапана в отдельную функцию, а в своём ФБлоке ждать изменения давления после открытия клапана. Но в результате, клапан открывается только по завершению блока, когда программа "перестаёт ждать".

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

    По умолчанию

    стесняюсь спросить какое время цикла у Вас , что позволяет Вам увидеть завершение работы блока?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3
    Пользователь
    Регистрация
    10.04.2010
    Адрес
    Алтайский край,г.Рубцовск
    Сообщений
    963

    По умолчанию

    Надеюсь что понял cуть вопроса, скорее всего Вы пытайтесь поменять из конфигуратора с привязанной переменной, меняйте в программе

  4. #4

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    стесняюсь спросить какое время цикла у Вас , что позволяет Вам увидеть завершение работы блока?
    Не сочтите за ехидство, но... Стесняюсь спросить, какого цикла? POU? Просто не уверен, что правильно понял. Если вы про него, то время не большое. Смотрю переменную под отладкой и при пошаговом проходе (выполнение на контроллере) её значение меняется, но клапан не открывается, пока не "прошагаешь" весь POU...

    Цитата Сообщение от жекон Посмотреть сообщение
    Надеюсь что понял cуть вопроса, скорее всего Вы пытайтесь поменять из конфигуратора с привязанной переменной, меняйте в программе
    Плохо я понимаю разницу между конфигуратором и программой... Другими словами, я слежу за изменениями переменной при отладке. Значение переменной меняется, но открытия клапана не происходит.
    Последний раз редактировалось Kamerton; 29.09.2015 в 09:28.

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

    По умолчанию

    Цитата Сообщение от Kamerton Посмотреть сообщение
    Смотрю переменную под отладкой и при пошаговом проходе (выполнение на контроллере) её значение меняется, но клапан не открывается, пока не "прошагаешь" весь POU...
    И это правильно, так и должно быть. Такова особенность работы ПЛК: Сканирование входов--Запоминание состояния физических входов-->Выполнение всей программы-->Получение значений состояния выходов-->Запись этих состояний на физические выходы. Далее все повторяется.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #6

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    И это правильно, так и должно быть. Такова особенность работы ПЛК: Сканирование входов--Запоминание состояния физических входов-->Выполнение всей программы-->Получение значений состояния выходов-->Запись этих состояний на физические выходы. Далее все повторяется.
    Спасибо огромное! Теперь яснее стало, как эта штука работает.

    После "программирования для ПК", подобное поведение вгоняет в ступор. Кажется, что есть какой-то другой способ, чтобы "оно заработало"
    Последний раз редактировалось Kamerton; 29.09.2015 в 13:38. Причина: перефразирование

  7. #7

    По умолчанию

    Цитата Сообщение от Kamerton Посмотреть сообщение
    Спасибо огромное! Теперь яснее стало, как эта штука работает.

    После "программирования для ПК", подобное поведение вгоняет в ступор. Кажется, что есть какой-то другой способ, чтобы "оно заработало"
    читать срочно: И.В. Петров "Язык ST для C программиста - CoDeSys"

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

    По умолчанию

    читать срочно: И.В. Петров "Язык ST для C программиста - CoDeSys"
    Интереса ради глянул. Там местами глупости всякие говорятся вроде этой:
    Неявное преобразование типов запрещено. Любое преобразование нужно делать явно спомощью специальных операторов. Запомнить их легко. Пишем исходный тип, далее _TO_ инужный тип. Например: iX := REAL_TO_INT(rX);
    Булшит. Оно не запрещено. Оно даже реализовано для числовых типов — их можно преобразовывать к бОльшим типам: INT -> DINT, например. Для указателей неявное преобразование тоже реализовано: POINTER TO X <-> DWORD. Другое дело, что нет возможности объявить своё неявное преобразование.

    И вообще «традиционному программисту» я бы сказал вот чего... Программа на языках 61131-3 пишется как функция моментального вычисления зависимости выходов от внешних сигналов и внутренних переменных. Контроллер постоянно как можно быстрее пересчитывает эту функцию вновь и вновь. По сути это традиционный опрос, только в режиме опроса работает целиком вся программа.

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

    Чего нет ещё в стандартной комплектации: рекурсии, указателей на функции, операции взятия указателя (указатели инициализируются только через неявное преобразование из DWORD), в принципе указателей вообще нет (но раз уж кодесис, то ладно), препроцессора, блокирующих функций, управляемой многопоточности. Да много чего нет. Главное — понять и полюбить программирование в бесконечном опросе.

  9. #9

    По умолчанию

    Цитата Сообщение от spectrum48k Посмотреть сообщение
    читать срочно: И.В. Петров "Язык ST для C программиста - CoDeSys"
    Спасибо. Да, с этого следовало бы начать

    Цитата Сообщение от Yegor Посмотреть сообщение
    В таком режиме работы очень легко выстрелить себе в ногу динамическим выделением памяти, поэтому его среди стандартных возможностей языка и функций не предусмотрено. Указатели и функции выделения памяти не являются частью стандарта, и с ними надо быть осторожным.
    Спасибо, буду обращать внимание, хотя, не замечал, чтобы использовал что-то подобное. Но, скорее всего, придётся столкнуться с проблемой, ибо после C# опыта в управлении памятью нету

  10. #10

    По умолчанию

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

    Вот еще ссылка - шах и мат: http://prolog-plc.ru/pb1

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 06.09.2015, 09:31
  2. Аналоговые выхода ПЛК 160
    от denkrauss в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 17.09.2014, 18:48
  3. Как изменить значение бита в 8 bit input module?
    от ImmortalAV в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 12.02.2013, 23:27

Ваши права

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