Проблема с установкой значений регистра D с панели.
-
- Сообщения: 181
- Зарегистрирован: 31 авг 2019, 13:12
Проблема с установкой значений регистра D с панели.
Здравствуйте, ребята, проблема немного сложная. Купил 3 комплекта DVP28SV11R2 + DOP 110 CS. Все для конвейеров. Первые 2 уже работают, но с третьим что-то пошло не так.
Конвейер обслуживает 15 каналов и должен останавливаться автоматически на каждом из них энкодером. Я использую регистры с D301 по D315 для окончательного значения энкодера, при котором конвейер должен остановиться на заданном канале. Они задаются панелью:
Есть макрос, который запускается после нажатия кнопки:
$M1 = 60
Сначале значения D301 по D315 устанавливаются панелью в ручном режиме. Что-то вроде начального режима обучения, чтобы узнать программу затем в автоматическом режиме в ПЛК, где остановить конвейер на каждом канале. Для етого конвейер перемещается в ручном режиме в первый канал. Значение энкодера копируется в D301 при нажатии кнопки «Задай 1». Это повторяется для всех остальных каналов. Однако есть проблема.
Как видно из программы, инструкция DHSCR должна отключать выход Y2 (который управляет быстрым ходом двигателя конвейера) при достижении значения в D202 и выход Y0 при достижении D302, который управляет медленным ходом двигателя. Это все для второго канала, поэтому используется регистр D202 / D302. Для остальных каналов все аналогично (D204, D304 и D404 для четвертого канала и т. Д.)
Оказывается, установленное значение в D302 (для второго канала) не 863 (как и показания енкодера, кoгда конвейер находится на втором канале во время обучения), а намного больше:
По этой причине конвейер обходит все каналы и останавливается в конце пути по сигналу от концевого выключателя.
Почему D302 (и D202 и 402 соответственно) такие большие? Вчера в течение 3 часов пытался понять, почему это происходит, но у меня ничего не вышло ....
Спасибо!
Конвейер обслуживает 15 каналов и должен останавливаться автоматически на каждом из них энкодером. Я использую регистры с D301 по D315 для окончательного значения энкодера, при котором конвейер должен остановиться на заданном канале. Они задаются панелью:
Есть макрос, который запускается после нажатия кнопки:
$M1 = 60
Сначале значения D301 по D315 устанавливаются панелью в ручном режиме. Что-то вроде начального режима обучения, чтобы узнать программу затем в автоматическом режиме в ПЛК, где остановить конвейер на каждом канале. Для етого конвейер перемещается в ручном режиме в первый канал. Значение энкодера копируется в D301 при нажатии кнопки «Задай 1». Это повторяется для всех остальных каналов. Однако есть проблема.
Как видно из программы, инструкция DHSCR должна отключать выход Y2 (который управляет быстрым ходом двигателя конвейера) при достижении значения в D202 и выход Y0 при достижении D302, который управляет медленным ходом двигателя. Это все для второго канала, поэтому используется регистр D202 / D302. Для остальных каналов все аналогично (D204, D304 и D404 для четвертого канала и т. Д.)
Оказывается, установленное значение в D302 (для второго канала) не 863 (как и показания енкодера, кoгда конвейер находится на втором канале во время обучения), а намного больше:
По этой причине конвейер обходит все каналы и останавливается в конце пути по сигналу от концевого выключателя.
Почему D302 (и D202 и 402 соответственно) такие большие? Вчера в течение 3 часов пытался понять, почему это происходит, но у меня ничего не вышло ....
Спасибо!
-
- Сообщения: 138
- Зарегистрирован: 12 апр 2015, 10:03
Re: Проблема с установкой значений регистра D с панели.
Возможно потому, что счетчик у Вас 32-х битный, а регистры сравнения 16-ти?
-
- Сообщения: 181
- Зарегистрирован: 31 авг 2019, 13:12
Re: Проблема с установкой значений регистра D с панели.
Сделал небольшую тестовую программу, без панели, только PLC. По сигнала от X32 значение K10 копируется в D303, а значение K20 копируется в D203. В следующих строках есть те же инструкции DHSCR с тем же счетчиком C252. Как видно, вторая инструкция DHSCR правильно показывает значение D303 (K10), но первая показывает значение D203 абсолютно неверно.
Как это возможно, две одинаковые инструкции, регистры (D203 и D303) тоже а результат другой?
Что это за шутка?
Как это возможно, две одинаковые инструкции, регистры (D203 и D303) тоже а результат другой?
Что это за шутка?
Re: Проблема с установкой значений регистра D с панели.
Сбросьте ПЛК к заводским настройкам и попробуйте еще раз. Возможно в регистрах, что то сохранилось.
Re: Проблема с установкой значений регистра D с панели.
Раз инструкция класса DW, то и регистры надо использовать парами, например D300-D301, D302-D303 .... D328-D329. Ну и D200-D201...., D400-D401. Элементы NumericInput должны быть описаны в Main также как DoubleWord. Соответственно в макросе также использовать суффикс (DW). Иначе - наложение данных на соседнюю пару... Как то так.
-
- Сообщения: 181
- Зарегистрирован: 31 авг 2019, 13:12
Re: Проблема с установкой значений регистра D с панели.
Уже сделал, разница нет.....
Как я уже сказал, тестовая программа только у PLC, панель нет, но все таки ситуация такая же.....Раз инструкция класса DW, то и регистры надо использовать парами, например D300-D301, D302-D303 .... D328-D329. Ну и D200-D201...., D400-D401. Элементы NumericInput должны быть описаны в Main также как DoubleWord. Соответственно в макросе также использовать суффикс (DW). Иначе - наложение данных на соседнюю пару... Как то так.
-
- Сообщения: 955
- Зарегистрирован: 31 окт 2011, 15:18
Re: Проблема с установкой значений регистра D с панели.
Вам же человек четко и внятно пояснил разницу между W и DW. Что же тут неясного? Если вы чего-то пишете в формате DW в регистр, например, D302, то уж пожалуйста не суйтесь ни с какими записями в соседний регистр D303. Иначе результаты будут именно такими, как вы их видите. Например на первой приведенной вами картинке вы смотрите не регистр D203, а содержимое регистров D203 и D204.
П.С. Пардон, на последней, где фигурирует 203-й...
П.С. Пардон, на последней, где фигурирует 203-й...
-
- Сообщения: 181
- Зарегистрирован: 31 авг 2019, 13:12
Re: Проблема с установкой значений регистра D с панели.
Не сердитесь, я просто пытаюсь понять, что происходит. Я вижу, что человек объяснил мне про word и double word, а также как его использовать в макросе, но это связано с работой панели, которой пока здесь я не использую. Когда все будет ясно, буду делать в программе панели как он говорит.Alexander_I писал(а): ↑10 окт 2020, 17:42Вам же человек четко и внятно пояснил разницу между W и DW. Что же тут неясного? Если вы чего-то пишете в формате DW в регистр, например, D302, то уж пожалуйста не суйтесь ни с какими записями в соседний регистр D303. Иначе результаты будут именно такими, как вы их видите. Например на первой приведенной вами картинке вы смотрите не регистр D203, а содержимое регистров D203 и D204.
П.С. Пардон, на последней, где фигурирует 203-й...
Просто инструкция DHSCR требует DW, поэтому ищет 2 соседних регистра. Но кажется пары должны быть не D300-D301, а D300-D299 - остаток (или что там есть) DW при записи в D300 остается в D299, а не в D301, как видно D301=К0:
Если бы это былa инструкция HSCR, он бы искал только один регистр, но тогда его нельзя было бы использовать с C252 (который 32-битовый).
Мои слова верны?
Re: Проблема с установкой значений регистра D с панели.
Нет, нет,нет . В инструкциях вы указываете первый из двух регистров. То есть если вы в инструкции Dxxx указываете D300 регистр, то программа использует d300 и следующий D301.
Но есть момент, что если кто-то пишет dword по адресу D299, то инструкция захватывает и d300 и получается абы что из-за пересечения., И если в d299 число записывается чаще, то мы получаем перенос старшего регистрав младший от другого. А если в d299 лежит флоат, то вообще черти-то будет
Блин !!! Ну вы даёте! Я только сейчас на фото глянул в предыдущем сообщении! У вас все там к чертовой бабушке пересекается!!!!!
У вас в каждой следующей инструкции берется предыдущий кусок регистра!
В конкретно этом случае вам надо использовать регистры d298 d300 d302, тогда пересечений не будет!
Вам давно пора переходить на испсофт и использовать именованные переменные, тогда не предется постоянно самостоятельно такие вот простейшие косяки разруливать!
Тут не важно, что вы кладете в d300 16 битное число. Команда dplsr d299 всё равно будет искать 32 битное число в регистрах 299 и 300 и из их значений и соберёт то, что вы видите.
Но есть момент, что если кто-то пишет dword по адресу D299, то инструкция захватывает и d300 и получается абы что из-за пересечения., И если в d299 число записывается чаще, то мы получаем перенос старшего регистрав младший от другого. А если в d299 лежит флоат, то вообще черти-то будет
Блин !!! Ну вы даёте! Я только сейчас на фото глянул в предыдущем сообщении! У вас все там к чертовой бабушке пересекается!!!!!
У вас в каждой следующей инструкции берется предыдущий кусок регистра!
В конкретно этом случае вам надо использовать регистры d298 d300 d302, тогда пересечений не будет!
Вам давно пора переходить на испсофт и использовать именованные переменные, тогда не предется постоянно самостоятельно такие вот простейшие косяки разруливать!
Тут не важно, что вы кладете в d300 16 битное число. Команда dplsr d299 всё равно будет искать 32 битное число в регистрах 299 и 300 и из их значений и соберёт то, что вы видите.
-
- Сообщения: 181
- Зарегистрирован: 31 авг 2019, 13:12
Re: Проблема с установкой значений регистра D с панели.
Здесь следует отметить, что в начале этой программы регистры D0 - D600 сбрасываются (инструкция ZRST D0 D600), чтобы не осталось остатков от предыдущих данных. Таким образом, в D299 не может быть ничего, что было до копирования числа в D300.Но есть момент, что если кто-то пишет dword по адресу D299, то инструкция захватывает и d300 и получается абы что из-за пересечения., И если в d299 число записывается чаще, то мы получаем перенос старшего регистрав младший от другого. А если в d299 лежит флоат, то вообще черти-то будет
Это уже не имеет значения, я буду использовать четные регистры (D202, 204 .... 230), (302, 304 ..... 330) и т. Д. Таким образом, не имеет значения, что находится в нечетных регистрах (ниже или выше четных).
Не могли бы вы рассказать, как вы изучали ISP? Из руководства пользователя? Давайте проясним эту проблему .....Вам давно пора переходить на испсофт