IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в эту темуОткрыть новую тему
> Накопительный счетчик
vahidas
сообщение 19.01.2017 - 12:34
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Написал небольшую программку для счетчика метров.
Все вроде работает. Но не как не могу понять как сделать так чтобы при обнулении быстрого счетчика
накопительный сохранялся и обновлялся когда нужно мне.
Счетчик, как я понимаю, лучше наверное закольцовывать так как наверное он должен переполнятся быстро.
операции MOVe дают понятный перенос 0 в искомую область памяти.
Заблудился в трех соснах
Прикрепленные файлы
Прикрепленный файл  __________.gif ( 149.43 килобайт ) Кол-во скачиваний: 32
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 20.01.2017 - 05:36
Сообщение #2


Гигант мысли
****

Группа: Пользователи
Сообщений: 408
Регистрация: 3.08.2014
Пользователь №: 10311



Цитата(vahidas @ 19.01.2017 - 18:34) *
Написал небольшую программку для счетчика метров.

Проще наверное так - находите сколько импульсов считает С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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 09:56
Сообщение #3


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Цитата(acoustik @ 20.01.2017 - 06:36) *
Цитата(vahidas @ 19.01.2017 - 18:34) *
Написал небольшую программку для счетчика метров.

Проще наверное так - находите сколько импульсов считает С248 на метр. Допустим 50. После того, как счетчик насчитает 50 имп., сбрасываем его, и делаем инкремент метров на +1. То же и в обратную сторону (так как счетчик у вас двух-фазный), то есть при проходе через 0 (ноль) декремент метров, а при проходе через 50 - инкремент.
Операция DEDIV K31415926 K10000000 D20 совершенно бессмысленная, так как в D20 будет у вас всегда одно и то же число. Его можно просто константой сделать, а вы выполняете каждый цикл ненужную операцию деления.

С какой точностью вам требуется вести подсчет метров (до какого знака после запятой)? Так понимаю, раз вы пользуетесь формулой, значит диаметр (длина круга) "чего-то", что там у вас крутится в качестве съемника этих метров - переменный?


Точность не очень важна. Для учета материала перемотанного. Но там километры в день. Поэтому набегающая ошибка не приветствуется.
Думаю переписать на A/B счетчик.
Энкодер прикреплен к валу.
Сломал голову как число ПИ прописать константой, оно же не действительное (может я чего-то не дочитал). В панели впишу параметр диаметр вала и разрешение энкодера и пусть механики сами калибруют. На PLC счетчика метров
и счетчика моточасов не будет. Думаю не сильно перетрудится.
Тоже вчера пришел к мнению что наверное проще применит операцию сравнения инкремента и сброса счетчика.
Есть опасения что в момент сброса могут пропадать импульсы, даже пр использовании нарастающего фронта. Поэтому обратился к Гуру, может есть более изящный способ.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 10:19
Сообщение #5


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Цитата(acoustik @ 20.01.2017 - 11:13) *
Так у вас движение всегда в одну сторону? Если да, то зачем вы А/В фазный счетчик сюда прикручиваете? Сойдет любой однофазный...

Цитата
Сломал голову как число ПИ прописать константой

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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 20.01.2017 - 10:24
Сообщение #6


Гигант мысли
****

Группа: Пользователи
Сообщений: 408
Регистрация: 3.08.2014
Пользователь №: 10311



Цитата(vahidas @ 20.01.2017 - 16:19) *
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2

Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался.
И неужели в них нельзя задавать тип переменных?? blink.gif


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 10:26
Сообщение #7


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Нашел.
При создании USE LEBEL
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 20.01.2017 - 10:27
Сообщение #8


Гигант мысли
****

Группа: Пользователи
Сообщений: 408
Регистрация: 3.08.2014
Пользователь №: 10311



А у вас GX2 лицензионный (купленный) или сп... ну как обычно? smile.gif
У меня тоже он есть, но пока не ставил, боюсь что не лицензионный не будет работать так как надо.


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 10:29
Сообщение #9


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Цитата(acoustik @ 20.01.2017 - 11:24) *
Цитата(vahidas @ 20.01.2017 - 16:19) *
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2

Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался.
И неужели в них нельзя задавать тип переменных?? blink.gif

Нет не купленный sad.gif(
Но работает нормально

Сообщение отредактировал vahidas - 20.01.2017 - 10:31
Прикрепленные файлы
Прикрепленный файл  __________.gif ( 377.71 килобайт ) Кол-во скачиваний: 16
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 20.01.2017 - 10:32
Сообщение #10


Гигант мысли
****

Группа: Пользователи
Сообщений: 408
Регистрация: 3.08.2014
Пользователь №: 10311



Цитата(vahidas @ 20.01.2017 - 16:29) *
Цитата(acoustik @ 20.01.2017 - 11:24) *
Цитата(vahidas @ 20.01.2017 - 16:19) *
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2

Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался.
И неужели в них нельзя задавать тип переменных?? blink.gif

Нет не купленный sad.gif(
Но работает нормально

Понятно smile.gif
Ну а с определением константы (на картинке) - правильно.


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 11:03
Сообщение #12


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Цитата(acoustik @ 20.01.2017 - 11:32) *
Цитата(vahidas @ 20.01.2017 - 16:29) *
Цитата(acoustik @ 20.01.2017 - 11:24) *
Цитата(vahidas @ 20.01.2017 - 16:19) *
Так у меня переменные не задаются. Это наверное в версии GX IEC. У Меня простой DEVELOPER и GX2

Хы, а у меня как раз IEC... Обычным девелопером и gx works пока не пользовался.
И неужели в них нельзя задавать тип переменных?? blink.gif

Нет не купленный sad.gif(
Но работает нормально

Понятно smile.gif
Ну а с определением константы (на картинке) - правильно.

На простом Developere нельзя
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 13:07
Сообщение #14


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045





Немного по другому сделал. На 1 км инкрементируем счетчик в HMI на 1000м
Быстрый сбрасываем.
в финишном все время складываем быстрый и инкрементируюмую область
Думаю что должно достаточно точно считать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vahidas
сообщение 20.01.2017 - 13:10
Сообщение #15


Читатель
*

Группа: Пользователи
Сообщений: 15
Регистрация: 8.02.2009
Пользователь №: 9045



Примерно так
Прикрепленные файлы
Прикрепленный файл  __________.gif ( 225.5 килобайт ) Кол-во скачиваний: 21
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

2 страниц V   1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 19.04.2024 - 15:06