Последний раз редактировалось kondor3000; 07.06.2024 в 17:58.
Циклически конечно проще, но а если считать нужно вообще всего один раз? Вообще только при первом старте ПЛК (даже не цикле).
Есть смысл постоянно читать?
Суть понял про сброс, спасибо
Но одна переменная у меня не сбрасывается и я не пойму почему, вот она в начале цикла должна уходить в False. Но постоянно True.
Screenshot 2024-06-07 194602.png
Потому что отображается всегда последний её статус а ниже он как раз в истине...
Fds:= true
Fds:= false
Fds:= true
В статусе у всех будет последнее присвоение, true
Последний раз редактировалось МихаилГл; 07.06.2024 в 20:00.
Не, она сбрасывается, просто компилятор или как его, показывает переменные только после всего цикла. По идее в кодесисе вроде есть пошаговое отображение. Можно его попробовать.
Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал. Это особенности среды, и я не встречал контроллеров с другим отображением.
Почему не сбрасывается? Должна же. В каждом цикле, сброс и возведение.
Просто по другим переменным я видел прям в живую как менялось false на true в пределах одного цикла.
А тут и запись должна происходить, а ее не было и изменения переменной я не видел глазами.
Возможно потому что
Ну ладно, это я потом еще посмотрю проверю. Пока оборудование не под рукой.Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал
Можно полробовать этот бит возвести только в первом цикле, дальше сбросить.
Ибо запись этой переменной нужна один раз, из retain в плк на панель, там в макросе идет проверка по данному параметру, если 0, то показывается окно выбора, выбирается параметр и данные нужно с панели забрать на плк
В следующих циклах уже выбор не предлагать (и при следующих включениях контроллера без сброса retain), а показывать основное окно. Ибо панель должна получать параметр отличный от 0.
Я немножко с алгоритмом запутался получается, не во всех случаях работает адекватно (смотрю например, чтобы работало при перезагрузке контроллера отдельно от панели и наоборот). Перекидывание переменных туда-сюда, куча триггеров
До этого было сделано подобное, но проще. Есть retain переменная в ПЛК, ее нужно при старте записать в панель и дальше чтоб на панели можно было ее поменять и отправить обратно в retain ПЛК. При следующих запусках уже соответсвенно из ПЛК грузить в панель измененный вариант.
Это все работало отлично. В панель писал в первом цикле программы ПЛК или по флагу о перезагрузке панели, макрос на секунду выставлял флаг, читал его контроллером.
Сейчас для другого случая оставил в макросе только подъем бита, снимаю его уже командой из ПЛК по факту выполнения нужных операций.
Пока все в комплексе не совсем работает.
Спасибо за подсказки всем. Буду разбираться, докручивать.
Это горе от ума))) Зачем вы всё усложняете?
Храните уставку в панели, в PFW. При включении считываете в оперативный регистр PSW, если надо, там же и меняете пока идёт процесс.
При нажатии кнопки Стоп, например в конце смены, записываете уставку обратно в PFW. Запись делать желательно не чаще нескольких раз в день.
Никаких одноразовых считываний, никаких триггеров и подобной дребедени вообще не надо.
Или вообще, можно читать уставку циклически и не париться совсем, а упор лучше сделать на групповое чтение, запись по 120 регистров за раз, например массивом.
Последний раз редактировалось kondor3000; 07.06.2024 в 23:14.
Код между присвоениями будет работать, но вы всё равно будете видеть false...Возможно потому что
Если бы между присвоениями фальши и истины был бы код, учитывающий фальш, он бы работал
Но переменная Asd в редакторе будет false, я про это писал.Код:Asd:= false If not asd then fff:= fff+1 Asd:= true