Владимир, что у меня не так ?
Вид для печати
Тут, скорее всего, несколько ошибок.
Как правило, если что-то краснеет, и долгое время (напечатали, например, название переменной целиком) не приходит в норму, то это наверняка ошибка.
Если не исправляется по ctrl+пробел (автодополнение), то тоже наверняка ошибка.
По картинке нашёл такое:
1) Если скопировать вызов ФБ, то невозможно заменить переменную на другую.
Т.е. если написано stepper(), то после копирования этой строки заменить stepper() на stepper2() не получится (даже, если переменная stepper2 объявлена должным образом)
2) Аналогично, аргумент out4 := stepper2.Q. Тут снова почему-то не работает переименование.
В версии 1.7.2 всё выглядит точно так же -- нужно чинить ошибку. Как обходной вариант -- стереть "stepper2.Q" и написать заново. Аналогично с вызовом stepper2()
Каким образом удалось добиться покраснения параметров в @Export -- не знаю. Если расскажете, то и это можно будет починить.
Кхм. Рассказывайте как делаете.
Сначала нужно создать переменную любым образом. Например, нажимаем enter или копируем другую (ctrl+c/v или ctrl+d -- дублирует строку)
Как вариант, можно скопировать и имеющуюся строку с @Export, у которой удалить перечисление в скобках.
Варианты:
a) Переводим курсор в начало имени переменной и нажимаем @. При этом должно появиться @Export. Возможно, тут стоит сделать, чтобы срабатывало и посреди названия переменной, а не только в начале.
b) Можно навести курсор на название переменной и нажать alt+enter (ну или на лампочку слева от переменной) Вложение 35152
И там выбрать "exchange with host": Вложение 35153
c) В Hardella 1.7.x (например, в 1.7.2) появилась дополнительная выпадающая плашка. Она появляется через несколько секунд как курсор остановится. Нажимаем "exchange with host" -- появится @Export
Вложение 35151
Вроде, в документации описано: https://hardella.com/docs/pru/data-e...%85-%D0%B2-pru
Перебил строки, краснота ушла, но компилятор выдает какие-то ошибки.
Еще вопрос: на какой картинке набито правильно, на второй или третьей ?
А это тогда что значит ?
Скорее всего, вы изменили тип переменной (например, указали другой ФБ).
enable, quantity и т.п. это не просто текст, а это прямо ссылки на соответствующие переменные соответствующего ФБ.
Получается, что тип переменной stepper1 изменён, а enable/quantity/... внутри @Export по-прежнему указывает на "переменные старого ФБ".
Можно щёлкнуть мышкой с ctrl'ом -- и посмотреть куда оно перекинет (ошибку оно, конечно, не исправит, а просто даст понять логику возникновения ошибки).
Это тоже нужно править.
Владимир, зачем у вас в ФБ PRU_STEPPER переменная min_speed объявлена как DWORD, там и WORD за глаза хватит.
С нехваткой памяти под переменные разобрался. Осталось с этим разобраться. Почему перекидывает на PRU_STEPPER2, в не на PRU_STEPPER3 ?
Пока в проблемных случаях нужно перенабирать.Цитата:
И что мне надо сделать ?
Кому хватит, а кому и нет. Но там сомневаюсь, что хватит одной замены одной переменной. Попробовать, конечно, можно, но, прохоже, стоит научить компилятор сохранять регистры в память.
Найти этот самый PRU_STEPPER (например, нажать с ctrl'ом).
Нажать на название PRU_STEPPER правой кнопкой, выбрать "show in logical view" -- этот самый PRU_STEPPER развернётся в левой части окна.
Его выделяем, нажимаем ctrl+c, переходим в "нашу часть проекта" (в левой части экрана), нажимаем ctrl+v.
Владимир, как мне это победить (первая картинка) ? Что значит перенабрать ? Перенабирал все что в скобках было и получилось это (вторая картинка).
Сделал PRU_STEPPER3 точно такой же как ваш PRU_STEPPER. С PRU_STEPPER3 компилятор пишет о нехватке памяти, а с PRU_STEPPER нехватки памяти нет.
Как это понимать ?
Просто в случае 3 ошибка возникла немного раньше.
Визуально не видно, но "stepper1.Q" указывает на "Q не того ФБ".
Если вы нажмёте на "pru" ("папка, в которой находятся ФБ") и выберете "Check Model", то оно-таки покажет ошибку вида "reference Q (...) is out of search scope".
Владимир, а на второй картинке в моем последнем посте что за ошибки и как их устранить ?
Например:
а) Последнее предолжение в предыдущем ответе.
Вложение 35169
б) Или можно нажать Ctrl+Shift+A. Появится окошко "Find Action". В открывшемся окне напечатать "check model" и нажать Enter
в) Можно нажимать правой кнопкой по проекту и выбирать "Check Project":
Вложение 35170
Нет у меня в выпадающем меню "check model".
Приветствую.
При загрузке PRU0.prg в ПЛК 110 первые 4 входа ПЛК зависают в true. Есть ли возможность получить использования этих входов в обычном режиме, с учетом что PRU0.prg будет загружен?
Спасибо.
https://hardella.com/docs/pru/featur...9A110-%D0%9C02
Цитата:
Объём регистровой памяти: около 30 DWORD регистров (около 120 байт)
Если ключевой вопрос именно в части "в обычном режиме", то тут, к сожалению, только через ОВЕН. По крайней мере, мне не известно как "передавать данные в PLC Configuration".
Сами же входы можно задействовать, если в PRU программе сделать конструкцию "@Export inputs: FAST_INPUTS"
Т.е. просто объявить переменную inputs: FAST_INPUTS, добавить @Export, и уже пользоваться этим значением в основной программе (см, например, программу быстрого счётчика)
Зря они не пропадут.
В ошибке "нехватки регистров" на самом деле есть полная распечатка того, какие переменные и в каких регистрах хранились.
Если вы скопируете в буфер обмена строку с ошибкой "RegAlloc", и вставите её, например, в блокнот, то увидите, что там довольно много текста.
Владимир, у PRU кроме регистровой памяти есть оперативная память (ОЗУ). Значит есть возможность сохранять регистровую память в ОЗУ. Это надо делать после отработки каждого ФБ, т.е. перед началом выполнения ФБ читаем ОЗУ в регистры, а после выполнения ФБ сохраняем регистры в ОЗУ. В этом случае будет возможность выполнять в программе PRU разные ФБ и не будет никакой каши в регистровой памяти. Каждый ФБ сможет использовать для своих нужд до 30 регистров. Время выполнения программы PRU увеличиться, зато можно будет писать более сложные программы.
Еще лучше вместо ОЗУ использовать стековую память, если она имеется.
В ФБ PRU_STEPPER, который встроен в Hardella, переменный accel_rapmp и decel_ramp имеют формат WORD. Считаю, что эти переменные должны иметь формат DWORD. Бывают такие задачи когда за короткое время (например за 50 миллисекунд) надо сформировать пачку импульсов приличных размеров. В таких случаях ускорения и замедления должны иметь значения в сотни и миллионы единиц.
Добрый день! есть несколько вопросов по Hardella примеру с шаговым двигателем: 1. После записи файлов PRU0 и PRU1 не работают 4 первых дискретных входа ПЛК110-30(М02). Как можно это устранить? 2. Как удалить записанные файлы (PRU0 и PRU1) из ПЛК? По форуму лазил, в ПЛК браузере они не отображаются((. 3. Только разбираюсь с программами SteppersConfig_. Какой командой можно остановить ШД, не зависимо от quantity? то есть ШД еще не прошел заданный путь, а его нужно остановить. Заранее спасибо. Данную тему читал, но ответов на мои вопросы не нашел.
Ответ был буквально на 4 сообщения выше:
Овен не предоставляет средств, чтобы при заливке PRU0.prg можно было работать со входами через конфигурацию. Только через Hardella.
plc browser, там набираем (без кавычек) "filedelete PRU0.prg", жмём enter. Как-то так
Нужно передать enable:=FALSE.
Отличная новость. Ждемс. ;)
А стековая память у PRU есть ? Вот такая: https://studfiles.net/preview/4339738/page:16/). Очень удобно прятать в ней регистры.
Спасибо за ответ! с Информацией в #1083 ознакомился, но не понял как быть с DI3 и DI4 ПЛК, они не буду работать в обычном режиме? просто не совсем понимаю как Овен в этом сможет помочь... Спасибо за Hardella, просто мне ее еще нужно проработать.
По вопросу 3. если enable:=FALSE, то шд не останавливается пока не выполнит заданное quantity или я что то не так делаю?