Накопительный счетчик |
Здравствуйте, гость ( Вход | Регистрация )
Накопительный счетчик |
19.01.2017 - 12:34
Сообщение
#1
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Написал небольшую программку для счетчика метров.
Все вроде работает. Но не как не могу понять как сделать так чтобы при обнулении быстрого счетчика накопительный сохранялся и обновлялся когда нужно мне. Счетчик, как я понимаю, лучше наверное закольцовывать так как наверное он должен переполнятся быстро. операции MOVe дают понятный перенос 0 в искомую область памяти. Заблудился в трех соснах
Прикрепленные файлы
|
|
|
20.01.2017 - 05:36
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Написал небольшую программку для счетчика метров. Проще наверное так - находите сколько импульсов считает С248 на метр. Допустим 50. После того, как счетчик насчитает 50 имп., сбрасываем его, и делаем инкремент метров на +1. То же и в обратную сторону (так как счетчик у вас двух-фазный), то есть при проходе через 0 (ноль) декремент метров, а при проходе через 50 - инкремент. Операция DEDIV K31415926 K10000000 D20 совершенно бессмысленная, так как в D20 будет у вас всегда одно и то же число. Его можно просто константой сделать, а вы выполняете каждый цикл ненужную операцию деления. С какой точностью вам требуется вести подсчет метров (до какого знака после запятой)? Так понимаю, раз вы пользуетесь формулой, значит диаметр (длина круга) "чего-то", что там у вас крутится в качестве съемника этих метров - переменный? Сообщение отредактировал acoustik - 20.01.2017 - 05:47 -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 09:56
Сообщение
#3
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Написал небольшую программку для счетчика метров. Проще наверное так - находите сколько импульсов считает С248 на метр. Допустим 50. После того, как счетчик насчитает 50 имп., сбрасываем его, и делаем инкремент метров на +1. То же и в обратную сторону (так как счетчик у вас двух-фазный), то есть при проходе через 0 (ноль) декремент метров, а при проходе через 50 - инкремент. Операция DEDIV K31415926 K10000000 D20 совершенно бессмысленная, так как в D20 будет у вас всегда одно и то же число. Его можно просто константой сделать, а вы выполняете каждый цикл ненужную операцию деления. С какой точностью вам требуется вести подсчет метров (до какого знака после запятой)? Так понимаю, раз вы пользуетесь формулой, значит диаметр (длина круга) "чего-то", что там у вас крутится в качестве съемника этих метров - переменный? Точность не очень важна. Для учета материала перемотанного. Но там километры в день. Поэтому набегающая ошибка не приветствуется. Думаю переписать на A/B счетчик. Энкодер прикреплен к валу. Сломал голову как число ПИ прописать константой, оно же не действительное (может я чего-то не дочитал). В панели впишу параметр диаметр вала и разрешение энкодера и пусть механики сами калибруют. На PLC счетчика метров и счетчика моточасов не будет. Думаю не сильно перетрудится. Тоже вчера пришел к мнению что наверное проще применит операцию сравнения инкремента и сброса счетчика. Есть опасения что в момент сброса могут пропадать импульсы, даже пр использовании нарастающего фронта. Поэтому обратился к Гуру, может есть более изящный способ. |
|
|
20.01.2017 - 10:13
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Так у вас движение всегда в одну сторону? Если да, то зачем вы А/В фазный счетчик сюда прикручиваете? Сойдет любой однофазный...
Цитата Сломал голову как число ПИ прописать константой VAR_CONSTANT Name=Pi Type=REAL Init=3.1416 Цитата Есть опасения что в момент сброса могут пропадать импульсы, даже пр использовании нарастающего фронта. Поэтому обратился к Гуру, может есть более изящный способ. Команда DHSCR для этого есть: -|M8000|-------------------------------[DHSCR K100 C248 C248] где К100 - это натиканное число, после которого надо сбросить счетчик. ЗЫ: импульсы пропадать не будут в любом случае, так как высоскор счетчики считают в режиме прерывания и им пофигу на основной цикл (скан) программы. -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 10:19
Сообщение
#5
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Так у вас движение всегда в одну сторону? Если да, то зачем вы А/В фазный счетчик сюда прикручиваете? Сойдет любой однофазный... Цитата Сломал голову как число ПИ прописать константой VAR_CONSTANT Name=Pi Type=REAL Init=3.1416 Цитата Есть опасения что в момент сброса могут пропадать импульсы, даже пр использовании нарастающего фронта. Поэтому обратился к Гуру, может есть более изящный способ. Команда DHSCR для этого есть: -|M8000|-------------------------------[DHSCR K100 C248 C248] где К100 - это натиканное число, после которого надо сбросить счетчик. ЗЫ: импульсы пропадать не будут в любом случае, так как высоскор счетчики считают в режиме прерывания и им пофигу на основной цикл (скан) программы. Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2 Сообщение отредактировал vahidas - 20.01.2017 - 10:22 |
|
|
20.01.2017 - 10:24
Сообщение
#6
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2 Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался. И неужели в них нельзя задавать тип переменных?? -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 10:26
Сообщение
#7
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Нашел.
При создании USE LEBEL |
|
|
20.01.2017 - 10:27
Сообщение
#8
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
А у вас GX2 лицензионный (купленный) или сп... ну как обычно?
У меня тоже он есть, но пока не ставил, боюсь что не лицензионный не будет работать так как надо. -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 10:29
Сообщение
#9
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2 Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался. И неужели в них нельзя задавать тип переменных?? Нет не купленный ( Но работает нормально Сообщение отредактировал vahidas - 20.01.2017 - 10:31
Прикрепленные файлы
|
|
|
20.01.2017 - 10:32
Сообщение
#10
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2 Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался. И неужели в них нельзя задавать тип переменных?? Нет не купленный ( Но работает нормально Понятно Ну а с определением константы (на картинке) - правильно. -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 10:39
Сообщение
#11
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
И так к вопросу...
Когда то я тоже решал подобную задачу. Расклад был примерно таков: на панели вводим диаметр барабана. Прога сама расчитывает сколько имп энкодера приходится на 0,1 метр линейного перемещения. Затем количество насчитанных импульсов тупо умножается на этот коэффициент и выводится на панель в виде "пройденного расстояния". Потом один местный умный человек мне подсказал как уйти от чисел с запятой и вообще говорят по возможности их надо избегать. Все оказывается просто делается с целыми числами без значительных потерь в точности, а то и вовсе без них. Но проекта под рукой нет, чтоб подсмотреть вариант... -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 11:03
Сообщение
#12
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2 Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался. И неужели в них нельзя задавать тип переменных?? Нет не купленный ( Но работает нормально Понятно Ну а с определением константы (на картинке) - правильно. На простом Developere нельзя |
|
|
20.01.2017 - 11:04
Сообщение
#13
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Решение вижу примерно такое:
1. с панели вводится диаметр колеса (барабана или что там) в мм. Допустим = 300. 2. разрешение энкодера (имп/оборот) известно и оно не меняется. Допустим = 1024. 3. Вычисляем длину круга: 300*3,1416=942,48 мм (то есть почти метр, но немного не хватает) 4. вычисляем длину, приходящуюся на 1 импульс энкодера: 942.48/1024=0.92039 5. 1000мм - 942,48мм = 57,52мм не хватает до метра. 6. Это будет еще 57,52/0,92039 = 62,5 импульса энкодера до метра. 7. так как импульсы не могут быть НЕцелыми числами, округляем до ближайшего целого = 62 (или 63, смотря в какую сторону округлять) 8. у нас получается 1024+62 = 1086 импульсов "на метр". Все, теперь ставим сброс счетчика по достижению 1086 и инкременируем "метры" на +1. ЗЫ: надо только подсчитать сколько будет разбежка на 1 км. -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
20.01.2017 - 13:07
Сообщение
#14
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
Немного по другому сделал. На 1 км инкрементируем счетчик в HMI на 1000м Быстрый сбрасываем. в финишном все время складываем быстрый и инкрементируюмую область Думаю что должно достаточно точно считать. |
|
|
20.01.2017 - 13:10
Сообщение
#15
|
|
Читатель Группа: Пользователи Сообщений: 15 Регистрация: 8.02.2009 Пользователь №: 9045 |
|
|
|
Текстовая версия | Сейчас: 20.04.2024 - 07:14 |