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

ivan bratanov
Сообщения: 181
Зарегистрирован: 31 авг 2019, 13:12

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

Сообщение ivan bratanov »

Здравствуйте, ребята, проблема немного сложная. Купил 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 часов пытался понять, почему это происходит, но у меня ничего не вышло ....


Спасибо!

Владимир Колчанов
Сообщения: 138
Зарегистрирован: 12 апр 2015, 10:03

Re: Проблема с установкой значений регистра D с панели.

Сообщение Владимир Колчанов »

Возможно потому, что счетчик у Вас 32-х битный, а регистры сравнения 16-ти?

ivan bratanov
Сообщения: 181
Зарегистрирован: 31 авг 2019, 13:12

Re: Проблема с установкой значений регистра D с панели.

Сообщение ivan bratanov »

Сделал небольшую тестовую программу, без панели, только PLC. По сигнала от X32 значение K10 копируется в D303, а значение K20 копируется в D203. В следующих строках есть те же инструкции DHSCR с тем же счетчиком C252. Как видно, вторая инструкция DHSCR правильно показывает значение D303 (K10), но первая показывает значение D203 абсолютно неверно.

Изображение

Как это возможно, две одинаковые инструкции, регистры (D203 и D303) тоже а результат другой?

Что это за шутка?

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: Проблема с установкой значений регистра D с панели.

Сообщение pkl »

Сбросьте ПЛК к заводским настройкам и попробуйте еще раз. Возможно в регистрах, что то сохранилось.

el-mech
Сообщения: 32
Зарегистрирован: 09 сен 2015, 16:53

Re: Проблема с установкой значений регистра D с панели.

Сообщение el-mech »

Раз инструкция класса DW, то и регистры надо использовать парами, например D300-D301, D302-D303 .... D328-D329. Ну и D200-D201...., D400-D401. Элементы NumericInput должны быть описаны в Main также как DoubleWord. Соответственно в макросе также использовать суффикс (DW). Иначе - наложение данных на соседнюю пару... Как то так.

ivan bratanov
Сообщения: 181
Зарегистрирован: 31 авг 2019, 13:12

Re: Проблема с установкой значений регистра D с панели.

Сообщение ivan bratanov »

pkl писал(а):
09 окт 2020, 17:41
Сбросьте ПЛК к заводским настройкам и попробуйте еще раз. Возможно в регистрах, что то сохранилось.
Уже сделал, разница нет.....
Раз инструкция класса DW, то и регистры надо использовать парами, например D300-D301, D302-D303 .... D328-D329. Ну и D200-D201...., D400-D401. Элементы NumericInput должны быть описаны в Main также как DoubleWord. Соответственно в макросе также использовать суффикс (DW). Иначе - наложение данных на соседнюю пару... Как то так.
Как я уже сказал, тестовая программа только у PLC, панель нет, но все таки ситуация такая же.....

Alexander_I
Сообщения: 955
Зарегистрирован: 31 окт 2011, 15:18

Re: Проблема с установкой значений регистра D с панели.

Сообщение Alexander_I »

Вам же человек четко и внятно пояснил разницу между W и DW. Что же тут неясного? Если вы чего-то пишете в формате DW в регистр, например, D302, то уж пожалуйста не суйтесь ни с какими записями в соседний регистр D303. Иначе результаты будут именно такими, как вы их видите. Например на первой приведенной вами картинке вы смотрите не регистр D203, а содержимое регистров D203 и D204.
П.С. Пардон, на последней, где фигурирует 203-й...

ivan bratanov
Сообщения: 181
Зарегистрирован: 31 авг 2019, 13:12

Re: Проблема с установкой значений регистра D с панели.

Сообщение ivan bratanov »

Alexander_I писал(а):
10 окт 2020, 17:42
Вам же человек четко и внятно пояснил разницу между W и DW. Что же тут неясного? Если вы чего-то пишете в формате DW в регистр, например, D302, то уж пожалуйста не суйтесь ни с какими записями в соседний регистр D303. Иначе результаты будут именно такими, как вы их видите. Например на первой приведенной вами картинке вы смотрите не регистр D203, а содержимое регистров D203 и D204.
П.С. Пардон, на последней, где фигурирует 203-й...
Не сердитесь, я просто пытаюсь понять, что происходит. Я вижу, что человек объяснил мне про word и double word, а также как его использовать в макросе, но это связано с работой панели, которой пока здесь я не использую. Когда все будет ясно, буду делать в программе панели как он говорит.

Просто инструкция DHSCR требует DW, поэтому ищет 2 соседних регистра. Но кажется пары должны быть не D300-D301, а D300-D299 - остаток (или что там есть) DW при записи в D300 остается в D299, а не в D301, как видно D301=К0:

Изображение

Если бы это былa инструкция HSCR, он бы искал только один регистр, но тогда его нельзя было бы использовать с C252 (который 32-битовый).

Мои слова верны?

bayk
Сообщения: 885
Зарегистрирован: 30 май 2015, 21:20

Re: Проблема с установкой значений регистра D с панели.

Сообщение bayk »

Нет, нет,нет . В инструкциях вы указываете первый из двух регистров. То есть если вы в инструкции Dxxx указываете D300 регистр, то программа использует d300 и следующий D301.
Но есть момент, что если кто-то пишет dword по адресу D299, то инструкция захватывает и d300 и получается абы что из-за пересечения., И если в d299 число записывается чаще, то мы получаем перенос старшего регистрав младший от другого. А если в d299 лежит флоат, то вообще черти-то будет
Блин !!! Ну вы даёте! Я только сейчас на фото глянул в предыдущем сообщении! У вас все там к чертовой бабушке пересекается!!!!!
У вас в каждой следующей инструкции берется предыдущий кусок регистра!
В конкретно этом случае вам надо использовать регистры d298 d300 d302, тогда пересечений не будет!
Вам давно пора переходить на испсофт и использовать именованные переменные, тогда не предется постоянно самостоятельно такие вот простейшие косяки разруливать!
Тут не важно, что вы кладете в d300 16 битное число. Команда dplsr d299 всё равно будет искать 32 битное число в регистрах 299 и 300 и из их значений и соберёт то, что вы видите.

ivan bratanov
Сообщения: 181
Зарегистрирован: 31 авг 2019, 13:12

Re: Проблема с установкой значений регистра D с панели.

Сообщение ivan bratanov »

Но есть момент, что если кто-то пишет dword по адресу D299, то инструкция захватывает и d300 и получается абы что из-за пересечения., И если в d299 число записывается чаще, то мы получаем перенос старшего регистрав младший от другого. А если в d299 лежит флоат, то вообще черти-то будет
Здесь следует отметить, что в начале этой программы регистры D0 - D600 сбрасываются (инструкция ZRST D0 D600), чтобы не осталось остатков от предыдущих данных. Таким образом, в D299 не может быть ничего, что было до копирования числа в D300.

Это уже не имеет значения, я буду использовать четные регистры (D202, 204 .... 230), (302, 304 ..... 330) и т. Д. Таким образом, не имеет значения, что находится в нечетных регистрах (ниже или выше четных).
Вам давно пора переходить на испсофт
Не могли бы вы рассказать, как вы изучали ISP? Из руководства пользователя? Давайте проясним эту проблему .....

Ответить