Страница 719 из 856 ПерваяПервая ... 219619669709717718719720721729769819 ... ПоследняяПоследняя
Показано с 7,181 по 7,190 из 8551

Тема: CODESYS V3.5. Вопросы и ответы

  1. #7181

    По умолчанию

    Цитата Сообщение от edvard_munch Посмотреть сообщение
    Не пойму, как грамотно возводить и сбрасывать переменную для записи/чтения по Модбас
    Вроде бы раньше получалось и так. Но не выходит сейчас

    Вот один цикл ПЛК. Переменные внутри условий не возводятся. Или они успевают перезаписаться быстро в том же цикле? И получается что не возвелись.
    Но команды модбаса по крайней мере не активируются таким образом, только если убрать две строчки, которые за пределами IF

    Если коротко, при изменении переменной в поле на hmi панели, там же выставляется бит в регистре, за которым циклически следит ПЛК.
    При появлении сигнала об изменении этого бита в 1, ПЛК забирает значение с панели.
    И ПЛК сам сбрасывет этот бит в панели.
    В другой более крупной программе это у меня работало. Простой сброс в FALSE в том же цикле ПЛК.
    Очень простой наверное вопрос для тех кто в теме ПЛК.
    Для чтения бит вообще не нужен, достаточно циклического опроса.
    Бит записи должен быть TRUE, не менее одного цикла ПЛК. Ваш код работать не будет, поставьте хотя бы строку сброса, перед началом конструкции IF, тогда сброс произойдёт в следующем цикле ПЛК.
    Последний раз редактировалось kondor3000; 07.06.2024 в 17:58.

  2. #7182

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Для чтения бит вообще не нужен, достаточно циклического опроса.
    Бит записи должен быть TRUE, не менее одного цикла ПЛК. Ваш код работать не будет, поставьте хотя бы строку сброса, перед началом конструкции IF, тогда сброс произойдёт в следующем цикле ПЛК.
    Циклически конечно проще, но а если считать нужно вообще всего один раз? Вообще только при первом старте ПЛК (даже не цикле).
    Есть смысл постоянно читать?

    Суть понял про сброс, спасибо

    Но одна переменная у меня не сбрасывается и я не пойму почему, вот она в начале цикла должна уходить в False. Но постоянно True.

    Screenshot 2024-06-07 194602.png

  3. #7183

    По умолчанию

    Потому что отображается всегда последний её статус а ниже он как раз в истине...

    Fds:= true
    Fds:= false
    Fds:= true

    В статусе у всех будет последнее присвоение, true
    Последний раз редактировалось МихаилГл; 07.06.2024 в 20:00.

  4. #7184

    По умолчанию

    Цитата Сообщение от edvard_munch Посмотреть сообщение
    Циклически конечно проще, но а если считать нужно вообще всего один раз? Вообще только при первом старте ПЛК (даже не цикле).
    Есть смысл постоянно читать?
    Но одна переменная у меня не сбрасывается и я не пойму почему, вот она в начале цикла должна уходить в False. Но постоянно True.
    Выше уже ответили, этой переменной ниже по программе присвоено TRUE. Так она никогда не сбросится.

    Если надо прочитать один раз, то то проще сравнить переменную с 0, если она =0, то выставить бит чтения, иначе сбросить бит.

  5. #7185

    По умолчанию

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

    Если надо прочитать один раз, то то проще сравнить переменную с 0, если она =0, то выставить бит чтения, иначе сбросить бит.
    Не, она сбрасывается, просто компилятор или как его, показывает переменные только после всего цикла. По идее в кодесисе вроде есть пошаговое отображение. Можно его попробовать.

    Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал. Это особенности среды, и я не встречал контроллеров с другим отображением.

  6. #7186

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Не, она сбрасывается, просто компилятор или как его, показывает переменные только после всего цикла. По идее в кодесисе вроде есть пошаговое отображение. Можно его попробовать.

    Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал. Это особенности среды, и я не встречал контроллеров с другим отображением.
    Какой толк от сброса на 2 строки кода, если ему переменную надо сбросить совсем ?

  7. #7187

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Выше уже ответили, этой переменной ниже по программе присвоено TRUE. Так она никогда не сбросится
    Почему не сбрасывается? Должна же. В каждом цикле, сброс и возведение.
    Просто по другим переменным я видел прям в живую как менялось false на true в пределах одного цикла.
    А тут и запись должна происходить, а ее не было и изменения переменной я не видел глазами.

    Возможно потому что
    Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал
    Ну ладно, это я потом еще посмотрю проверю. Пока оборудование не под рукой.
    Можно полробовать этот бит возвести только в первом цикле, дальше сбросить.
    Ибо запись этой переменной нужна один раз, из retain в плк на панель, там в макросе идет проверка по данному параметру, если 0, то показывается окно выбора, выбирается параметр и данные нужно с панели забрать на плк
    В следующих циклах уже выбор не предлагать (и при следующих включениях контроллера без сброса retain), а показывать основное окно. Ибо панель должна получать параметр отличный от 0.
    Я немножко с алгоритмом запутался получается, не во всех случаях работает адекватно (смотрю например, чтобы работало при перезагрузке контроллера отдельно от панели и наоборот). Перекидывание переменных туда-сюда, куча триггеров

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

    Спасибо за подсказки всем. Буду разбираться, докручивать.

  8. #7188

    По умолчанию

    Цитата Сообщение от edvard_munch Посмотреть сообщение
    Можно полробовать этот бит возвести только в первом цикле, дальше сбросить.
    Ибо запись этой переменной нужна один раз, из retain в плк на панель, там в макросе идет проверка по данному параметру, если 0, то показывается окно выбора, выбирается параметр и данные нужно с панели забрать на плк
    В следующих циклах уже выбор не предлагать (и при следующих включениях контроллера без сброса retain), а показывать основное окно. Ибо панель должна получать параметр отличный от 0.
    Я немножко с алгоритмом запутался получается, не во всех случаях работает адекватно (смотрю например, чтобы работало при перезагрузке контроллера отдельно от панели и наоборот). Перекидывание переменных туда-сюда, куча триггеров
    Спасибо за подсказки всем. Буду разбираться, докручивать.
    Это горе от ума))) Зачем вы всё усложняете?
    Храните уставку в панели, в PFW. При включении считываете в оперативный регистр PSW, если надо, там же и меняете пока идёт процесс.
    При нажатии кнопки Стоп, например в конце смены, записываете уставку обратно в PFW. Запись делать желательно не чаще нескольких раз в день.
    Никаких одноразовых считываний, никаких триггеров и подобной дребедени вообще не надо.

    Или вообще, можно читать уставку циклически и не париться совсем, а упор лучше сделать на групповое чтение, запись по 120 регистров за раз, например массивом.
    Последний раз редактировалось kondor3000; 07.06.2024 в 23:14.

  9. #7189

    По умолчанию

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

    Код:
    Asd:= false
    If not asd then fff:= fff+1
    Asd:= true
    Но переменная Asd в редакторе будет false, я про это писал.

  10. #7190
    Пользователь
    Регистрация
    28.04.2008
    Адрес
    Санкт-Петербург
    Сообщений
    15

    По умолчанию

    Цитата Сообщение от ShivA Посмотреть сообщение
    Добрый день. После запуска проекта на выполнение, (ALT+F8) codesys выдает сообщение об ошибке: "неверный пакет результатов". Компиляция проходит без ошибок. Кто знает, где копать? Заранее спасибо. PS: результат один и тот же, если действующий проект заменить бэкапом, который точно рабочий.
    Сегодня тоже вылезло сообщение "неверный пакет результатов".
    Как устранить эту ошибку?

Страница 719 из 856 ПерваяПервая ... 219619669709717718719720721729769819 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4000
    Последнее сообщение: 06.12.2025, 12:05
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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