OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 17 Июль, 2019 19:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 185 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Вторник, 26 Апрель, 2016 02:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
В проекте LPC2103, там, не помню, 16 бит, кажется, размер буфера.
Используемая скорость Modbus - 40-с-чем-то КБод. В принципе, учитывая производительность LPC-шки, даже без умножителя частоты, переполнения быть не должно.

Разумеется, не абсолютизирую режим "без прерываний" - но никто не мешает ввести обработку прерываний отдельно от основной логики, пусть по прерыванию забирается в более крупный буфер, а основная логика пишется в стиле неблокирующем.
Это позволило хорошо и надежно описать основную логику. Разрабатывалось несложное, но с запутанными режимами устройство - выносной пульт управления контроллером перекрёстка (программатор для перекрёстка, по сути).
И там сочетание конечноавтоматности с неблокирующей логикой и абстракциями типа классом контроля нажатий-отпусканий, классом, абстрагирующим целиком органы управления и т.п. помогло получить надёжный код и почти не отлаживаться.

Кстати, поскольку с дин. памятью работы нет, то С++ оказался терпим.
И однозначно рулил в сравнении с простым С, ибо хоть защита и абстракция какая-никакая )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Вторник, 26 Апрель, 2016 08:29 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Alexander Shiryaev писал(а):
Илья Ермаков писал(а):
...без прерываний...

А как часто происходит вызов Channel_Uart0::Task_Body / Channel_U1_485::Task_Body? Буфера FIFO приёмника порта UART хватает?

Илья тут уже подробненько ответил, от себя добавлю, что Модбас запрос байт5-6, Модбас ответ столько же. Работает по схеме "запрос-ответ" (пассивный протокол, потом прикрутили и активную фазу, но не взлетело). Поэтому буфер на 16 байт целиком перекроет потребность в буфере приёма. Я практически не встречал в полевых устройствах скорости выше 18 кБит (практически везде 2,4-9,6 кБит, и одно устройство на линии [хотя видел реальные решения на 4-8 устройств, но там скорость была не важна -- автомобильные и железнодорожные весы]). При пакете в 4 байта необходимо опрашивать буфер приёма примерно 600 раз в секунду. Вполне выполнимое условие. А если буфер приёма 16 байт, то всего 150 раз. При тактовой частоте процессора 7 МГц:
1. Вызвать подпрограмму -- 11 тактов.
2. Считать байт из порта ввода -- 7 тактов.
3. Закинуть в память -- 4 такта.
([2, 3] повторяем ещё три раза -- 33 такта)
4. Возврат назад 11 тактов.
Итого: 66 тактов.
При 600 опросах в секунду: 39600 тактов из 7 млн. -- 0,6% от общей вычислительной мощности.

При 150 опросах и 16 байтах буфера опрос займёт 198 тактов. 29700 тактов в секунду. Из 7 млн. примерно 0,4%
Как видно, разница всего в 1,5 раза, и служебные расходы на опрос в любом случае смешные) На обработку данных средствами полевого устройства остаётся 99% времени. Да я за 6,9 млн тактов ещё успею Эйнштейн@Хоум посчитать)))
А если опрос асинхронный, тупая молотилка по кругу, то в буфере 146% по жизни ничего не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 09:06 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Коллеги подскажите профану.
При показе окна через OpenAuxTool предварительно выставляю флаг bShow. Он нужен для того, что бы обновлять только те данные, которые отображаются через окно.
Оператор может закрыть окно в любой момент, а флаг bShow остаётся поднятым.
Я подозреваю, что у окна есть собственные средства контроля видимости ))))
Ткните пальцем где копать, плиз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 11:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Не совсем понятен вопрос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 13:46 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Илья Ермаков писал(а):
Не совсем понятен вопрос.

Оператор может закрыть окно в любой момент, за ненадобностью.
Признак "отображённости окна" остаётся.
И программа пытается обновлять данные на экране, которого уже нет. Можно, конечно, вообще отвязать этот модуль для формы через DoLater, из которого ББ берёт экспортированные данные....
Надо тут додумать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 13:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Косвенный признак присутствия окна на экране - это вызов Guard-ов.

Т.е., по идее, из какого-то Guard-а окна можно обновлять переменную времени:
lastWindowOpened := Services.Ticks().

А на обновление:
IF Services.Ticks() < lastWindowOpened + openedInterval THEN...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 14:20 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Ага. Т. е. если объявить глобальную переменную в другом модуле, и засечь, что она не обновляется, значит Guard не срабатывает?
Хм, Илья.... ))) Оригинально!
Хотя... Переменную можно объявить в том же модуле (для отображения формой).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 14:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Только Guard также может не вызываться по причине скрытости всего ББ, и т.п.

Т.е. нужна вторая ветка логики:
- как только вдруг Guard вызвался первый раз после долгого простоя, форсировать Update для всех данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 29 Апрель, 2016 14:32 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Илья Ермаков писал(а):
Т.е. нужна вторая ветка логики:
- как только вдруг Guard вызвался первый раз после долгого простоя, форсировать Update для всех данных.

Ну, я так и понял. Guard сработал -> метка времени обновилась -> планировщик проверил, что всё в ажуре, форма видна -> Dialog.Update
или вариант два (чуть более грамотный): всё-таки DoLater встроить в сам модуль для отображения формы: проверил метку времени, если отличается больше, чем на delta_t, значит не обновляем форму. Второй частью DoLater проверяет флаг bEndProg из modGlob, и если поднят, тогда все переменные модуля в NIL и прервали цикл (я правильно понимаю, что сборщик мусора выгрузит модуль сам?)
Сработал Guard -- Dialog.Update(NOW).
Связность тут будет ниже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Суббота, 30 Апрель, 2016 18:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Сообщения рассылаются по видимым вьюшкам.

Научите свою вьюшку реагировать на специальное сообщение.
Среагировала -- значит, видна.
Как-то так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Суббота, 30 Апрель, 2016 18:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Да, но если у человека не вьюшка, а тупо форма )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 01 Май, 2016 13:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Да, но если у человека не вьюшка, а тупо форма )

Надо, наверное, форме сделать обёртку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Вторник, 03 Май, 2016 03:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Ну, не факт, что захочется делать новый тип вьюхи...
Хотя, видимо, да, это будет гарантировано.
Именно обёртка вокруг - чтоб не было ситуации, что часть окна не видна - и всё, типа, не видно целиком...
А в случае в гвардом, наверное, так и будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Среда, 04 Май, 2016 20:23 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Ну, не факт, что захочется делать новый тип вьюхи...
Хотя, видимо, да, это будет гарантировано.

Надо один раз насобачиться -- и лепить эти обёртки как пельмени.
Удобная штука.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 14:35 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Не знаю куда запихнуть, пихаю тут -- нашёл косяк.
В System/Docu/Math (версия ББ 1.6, Красноярская сборка) в документации по описанию гиперболических и тригонометрических функций приведена формула "(1 рад = 180/pi градусов)", что имхо, слегка неправда. 1 рад = pi/180 градусов < вот так результат верный. Формулку из документации не думая переписал в код ОИК "Восход" и десятка два минут тупо смотрел на монитор, не понимая, что происходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 15:09 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 692
Откуда: Псков
Думаю, что Вам решительно возразят :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 15:14 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Эээ... Если делить пи на градусы, то получим соотношение 1 радиана на какое-то количество градусов. Если 180 градусов на пи -- то какое-то количество градусов на каждый радиан.
У меня исходные данные в градусах, которые нужно привести к радианам. Если я напишу 180/pi*grad = [хрен поймёшь чему равно]?


Последний раз редактировалось prospero78 Пятница, 06 Май, 2016 15:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 15:16 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
prospero78 писал(а):
(1 рад = 180/pi градусов)", что имхо, слегка неправда. 1 рад = pi/180 градусов < вот так результат верный.
Новая Система Ебиниц от prospero78?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 15:20 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2308
Откуда: Россия, Санкт-Петербург
1 радиан = 57.2958 градусов.
Но я признаю ваше право на иное мнение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 06 Май, 2016 15:34 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Сколько градусов в радиане, я в курсе))) И это сомнению не подлежит (по крайней мере, при существующих физических константах в нашем пространстве-времени). Я не понимаю, почему делаю 180/pi*grad -- получается ерунда. Когда делаю pi/180*grad = правильный ответ.
Размерности, будут правильные при [рад/град]*град. На выходе чистые радианы. И это правильно!
Размерность [град/рад]*град будет [град^2/рад]. Это равно радиану???
Получается, что документация содержит ошибку в приводимой формуле?

Код:
Тригонометрические и гиперболические функции

Аргументы всех тригонометрических и гиперболических функций должны задаваться в радианах, и обратные тригонометрические и гиперболические функции расчитываются в радианах (1 рад = 180/pi градусов). В конце этой секции приведена таблица преобразований для расширенных тригонометрических и гиперболических функций, которые не вошли в модуль Math, поскольку могут быть легко записаны в терминах основных функций.


Я же не придумал это?

Kemet писал(а):
prospero78 писал(а):
(1 рад = 180/pi градусов)", что имхо, слегка неправда. 1 рад = pi/180 градусов < вот так результат верный.
Новая Система Ебиниц от prospero78?

Кемет, как всегда очень остроумно). Обхохочешься.
И какой полёт инженерно-технической мысли! Ажна до пояса достаёт!


Последний раз редактировалось prospero78 Пятница, 06 Май, 2016 15:51, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 185 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB