PDA

Просмотр полной версии : Прерывание с пользовательскими FB



alexbad93
28.11.2016, 11:16
Доброе время суток форумчани, Дело вот в чём. Есть ПЛК 110-60 [м02] и энкодер (инкрементный) , есть задача снимать его значения самим ПЛК, на этом этапе проблем не возникло, работа по прерываниям замудрёна но ,не сильно. Только вот счётчик из стандартной библиотеки считает word, а нужен dword. Можно конечно переводить внутри подпрограммы которую прерываю, но это не универсальный подход. В сети нашлось то что нужно - инструкция как собрать свой счётчик dword (http://stratal.ru/progs/create_a_large_bit_counter.html) , не то что бы мне это было не под силу,просто проще учится на чужих ошибках.Так вот , вставляю я эту радость в свой проект заливаю в контроллер и понеслась, прерывание распространилось на FB и соответственно основной цикл.Лечится только физической кнопкой сброс на контроллере, так как связь с компом тоже прерывается.

Пытался впихнуть FB в пользовательскую библиотеку - эффект тот же, возможно я просто не смог корректно собрать библиотеку. Хотелось бы конечно один раз собрать и применять в разных проектах, ещё лутчше конечно целую библиотеку для энкодеров.

Мне кажется довольно актуальная проблема.Может сможем решить?

P.S.Проект пройдёт и с кастылями,дело не в этом.

Владимир Ситников
28.11.2016, 11:39
Доброе время суток форумчани, Дело вот в чём. Есть ПЛК 110-60 [м02] и енкодер (не важно какой) , есть задача снимать его значения самим ПЛК, на этом этапе проблем не возникло, работа по прерываниям замудрёна но ,не сильно
Оставьте прерывания. Ничего хорошего с ними не будет.
Они нужны для разработчиков ПЛК и для "профессионалов на закрытом треке не пытайтесь повторить дома".

Вот зачем вы за прерывания взялись?

"накопление WORD результатов в DWORD" делается в пару сложений-вычитаний: http://www.owen.ru/forum/showthread.php?t=23600&page=9&p=222948&viewfull=1#post222948

capzap
28.11.2016, 11:40
А где вложение с примером Ваших изысканий? Просто хочется понять, когда Вы пишите FB, Вы имеете ввиду работу в основном цикле или в прерываниях высокочастотного таймера или вообще через PRU

alexbad93
28.11.2016, 14:19
Захотелось иметь возможность подключать энкодеры с большими имп/об. Я имею в виду работу FB в основном цикле.Так и не понял как это иначе реализовать чтоб решить проблему.Про преобразования я знаю, но каждый раз их писать - ломает, хочется иметь под рукой готовый CTU для dword.

Владимир Ситников
28.11.2016, 14:30
Захотелось иметь возможность подключать энкодеры с большими имп/об. Я имею в виду работу FB в основном цикле.Так и не понял как это иначе реализовать чтоб решить проблему.Про преобразования я знаю, но каждый раз их писать - ломает, хочется иметь под рукой готовый CTU для dword.

Есть же "fast inputs" и выбираете там "fast encoder". Чем не устраивает?

alexbad93
28.11.2016, 14:41
Это было слишком легко. К тому же всё равно нужно было несколько счётчиков , так как объектов несколько, дабы сбрасывать.В общем то полагаю что пошёл изначально не тем путём, хотя проблему решил ( поставил перевод word в dword). Ничего лишним не будет, ранее работал только через СИ, есть у меня некий скепсис по поводу быстрых входов ПЛК. Попробую пойти человеческим путём через готовый fast encoder.

capzap
28.11.2016, 14:53
Это было слишком легко. К тому же всё равно нужно было несколько счётчиков , так как объектов несколько, дабы сбрасывать.В общем то полагаю что пошёл изначально не тем путём, хотя проблему решил ( поставил перевод word в dword). Ничего лишним не будет, ранее работал только через СИ, есть у меня некий скепсис по поводу быстрых входов ПЛК. Попробую пойти человеческим путём через готовый fast encoder.

вот интересно энкодер в отличии от счетчика может считать и в другую сторону, как с этим Вы бы боролись используя предложение по ссылке.
fast encoder в конфигураторе плк тоже имеет тип данных Word, как Вы из него простым преобразованием будете делать Dword?
К тому же даже 16-битное значение перекрывает возможности по приему без пропусков сигналов энкодера, а если у Вас значение больше одного слова, то точно не тот плк Вы выбрали

alexbad93
28.11.2016, 15:12
В моём проекте необходимо считать только в одну сторону, вот как. А на счёт значения, и пропусков.Насколько я понял механизм работы быстрых входов ,то важна только частота и длительность импульсов, а с этим всё в порядке.А пропуски могут быть и от вибрации и ничего с эти не поделать, возможно только сократить к минимуму. А на счёт того что fast encoder так же имеет тип данных word, это я только сейчас заметил, почему то думал что dword.Ну чтож в любом случае придётся с direct control делать, благо получилось.

Владимир Ситников
28.11.2016, 15:28
А на счёт того что fast encoder так же имеет тип данных word

В чём проблема добавить одну строку для общего DWORD счётчика?


С direct control море проблем:
1) При использовании <60мкс таймера может пропадать связь
2) 60мкс это частота импульсов 8кГц (или ещё меньше)
3) direct control не проверишь в симуляции
4) прочее