Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35

Windows 11 тормозит обмены через СОМ-порт

06.05.2024, 13:36. Показов 5979. Ответов 85
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, коллеги.

Столкнулся с проблемкой, вынесенной в название темы.

Есть приложение. написанное много лет назад на Delphi 7, и без вопросов работавшее на многих ПК с Windows XP и Windows 7. Приложение через СОМ порт (компонент BComPort) посылает запрос контроллеру, контроллер, приняв пакет, отвечает, приложение, приняв ответ, посылает новый запрос (или не приняв ответ, посылает запрос по таймеру). Все просто и отлажено в десятках приложений/устройств.

И вот эта отлаженная пара (приложение - контроллер) отказывается нормально работать по Windows 11 - существенно падает скорость обмена (со 120 до 40-50 обмен/с) и в обменах наблюдаются паузы до 0.5 с, что недопустимо. Причем сразу после запуска приложения показывает скорость 120 обмен/с, но через пару секунд скорость падает до 40, затем повышается до 60, снова падает и т.д.

Т.к. предположили, что проблема в новой (для нас) ОС, то отключили антивирусы, One Drive, пробовали режимы совместимости в разными ОС, устанавливали приоритет real_time, и пр. Существенного изменения скорости и непрерывности обмена получить не удалось.

Соответственно вопрос: как настроить Windows 11 под работу в режиме real_time?

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2024, 13:36
Ответы с готовыми решениями:

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro (СОМ-порт)? почему то не могу найти и...

управление через СОМ порт
Как сдельть сигнал на RTS,DTR по нажатию BUTTON1и2 соответственно. Причём при их отпускании сигналы должны обнульться! Кто шарит в этом?!

Обмен данными через СОМ-порт
Помогите новичку, пожалуйста) Нужно написать программу, которая ловит нажатия клавиш(стрелок) и соответственно отправляет это все через...

85
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,601
10.05.2024, 14:40
Студворк — интернет-сервис помощи студентам
Вообще насчет платы, то я не очень понимаю зачем она нужна, ладно бы она 8 портов реализовывала, это было бы удобно, видел я такое, но можно предельно простыми и общедоступными средствами сделать кучу USB-портов и воткнуть в них сколько нужно преобразователей. И эти преобразователи явно будут более массовые, чем какая-то непонятная платка на 2 порта, а значит вероятность обнаружения и исправления ошибок для их драйверов намного выше.

Цитата Сообщение от ay007 Посмотреть сообщение
Смысл перезапуска Таймера - чтобы он отсчитывал один и тот же интервал времени, условных "20 мс".
Первый вопрос тут, а вот это точно надо? Т. е. у вас есть там есть некая производная, вы считаете dx/dt, неважно, что есть x, а dt в данном случае константа, и на основании этого принимаете какие-то решения? Можно ведь и замерять фактическое время м/у 2 измерениями, но в таком случае нужно очень точно измерять время до единиц мс. Та же GetTickCount, пригодная для грубых замеров, тут непригодна, у нее дискретность 16 мс. Возможно, что подойдет TStopwatch, но надо уточнять, я ее использовал, но не буду врать, что хорошо понимаю.

Дискретность таймера в WinXP ЕМНИП 10 мс, в 9X было 55.

Вопрос нумер 2. А что значит "тормозит"? У вас, фактически, имитируется система реального времени, вы посылаете ответ, он приходит менее чем за 20 мс гарантировано. Т. е. ваша система, в принципе, не может работать быстрее 50 об/с на порт. И ни о каких 120 об/с речи не может идти, если только там не по отдельному потоку и таймеру на каждый порт. А то, что у вас плата многопортовая на это намекает. (Я бы такую ср*нь, сделал в тупую, один экземпляр программы на порт, упрощение проги радикальное, и можно одну закрыть, вторая работать будет.) И она работает достаточно быстро, если ответ менее чем через 20 мс приходит. Если время обмена вырастет больше 20 мс, и таймер на эти 20 мс действительно работает, то обмен накроется, либо начнутся дикие глюки, когда приход данных будет отрабатывать после срабатывания таймера. Либо у вас увеличился период таймера. Вот решили в MS в Win11 (я с ней не сталкивался еще), поменять, они же там радужные теперь, и за "ценности". Но тогда что мешает сделать прогу с таймером в 1 мс и померить за какое время она отсчитает, скажем, 100 циклов. Если таймер 10 мс, то за 1 сек должна, а если 50, то за 5.

Ну и управление технологическим оборудованием принято осуществлять с PLC, а не с ПК, тем более под Windows, которая технически не является ОС реального времени.
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
10.05.2024, 16:39  [ТС]
0. Плата расширитель СОМ портов поставлена т.к. в конфигурации ПК СОМ порт не предусмотрен. Похоже, что на материнке он есть, но наши IT специалисты решили, что проще поставить расширитель.

1. Производной нет, но в программе реализован (как потом выяснилось) "конечный автомат". В Установке есть около 15-20 пневмоцилиндров, кареток, поворотных столов и пр., движение которых определено соответствующими циклограммами. Т.е. по присланной информации о состоянии пневмоцилиндров и пр. и текущего шага циклограммы принимается решение о том какие пневмораспределители и в какое положение необходимо установить для следующего шага циклограммы. Когда пневмоцилиндры и пр. займут новое положение неизвестно, но чем меньше промежуток времени между изменением состояния датчика и моментом времени, когда об этом узнает программа, тем быстрее уйдет на пневмораспределители команды о переключении для следующего шага циклограммы. Снижение скорости обмена с примерно 100 об/с до примерно 60 об/с привело к увеличению длительности сварки одно шва примерно на 10-15 %. Не критично, но неприятно.

Т.е. нужны быстрые обмены, желательно по принципу: закончился прием - началась передача, таймер - средство восстановления связи в случае пропуска приема.

2. Система при коротких пакетах (два-три байта) работает со скоростью до 950 об/с, сам видел. Про таймер я написал несколько раз, 20 мс - это время восстановления связи, а не время между посылками при нормальной прием-передаче.

По ПЛК и пр. В свое время выбрал путь построения систем: максимально простой самодельный (для каждой разработки свой) контроллер и программа на универсальном (легко заменяемом) ПК. Программы легко модернизируются под постоянно меняющиеся условия производства и вновь возникающие требования, контроллеры практически не ломаются, а компы дешевы, до последнего времени легко заменяемые, нет проблем санкциями или с тем, что производитель типа Siemens прекращает поддержку и на просьбу поставить контроллер на замену предлагает новую модель.

Ну и привык писать на Delphi и С++. Недавно сварочный полуавтомат делали, мы свой (построение, как я описал выше), а коллеги свой (на контроллерах Festo и промышленном компе). Так мы изменения в ПО вносили гораздо оперативнее и с меньшими трудозатратами на отладку. Сварщики работают на наших, им больше нравится.

Добавлено через 11 минут
П.С. А что уважаемое сообщество думает/знает про эмуляцию Win XP на установленной Win 11? Может быть это выход в моем случае?
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,601
10.05.2024, 17:47
Ну так USB-преобразователи предназначены для того же самого, добавить COM-порт, если на материнке его нет. Точнее, штыри могут быть, но подключаемой планки уже давно не идет в комплекте.

На вашем месте я бы во все точки, время работы которых нужно знать, натыкал Stopwatch'ей для начала. План стандартный, если было хорошо, а после замены стало плохо, то надо искать, что именно повлияло, винда, кривой драйвер, или что-то еще.

И поскольку у вас пром. оборудование, то я бы рекомендовал сделать эмулятор вашего оборудования, чтобы посадить его на порт, и он получив правильную команду (необязательно все, столько сколько нужно для теста) слал какой-то правильный же ответ. Разницу в скорости м/у контроллером и ПК можно сымитировать задержкой ответа.

Так у вас будет возможность сравнивать как работает при тех или иных конфигурация железа и оборудования, в кабинете на потоке данных, аналогичном тому, который идет с железа. Нужно лишь как-то связать 2 порта на одном компе, не знаю, нуль-модемный кабель у вас, или нет. Более того, в эмулятор можно и поддержку ответов по разным номерам контроллеров сделать.
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
10.05.2024, 18:43  [ТС]
0. Как я уже писал раза два - я неоднократно сталкивался с подвисанием соединения по USB, которое лечилось только снятием/подачей питания на USB преобразователь, поэтому по возможности не использую USB устройств.

1. Stopwatch не использовал, но могу выводить время между приемами пакетов от отдельных контроллеров. Я так делал, ни на что не натолкнуло, но попробую еще раз, вдруг зайдут новые мысли.

2. Эмуляторы Установки - я не понял для чего, к контроллерам и скорости их реакции вопросов нет.

И тот вопрос, на который очень хотелось бы получить ответ: что и каким образом может спорадически менять скорость обмена на 50 %, кроме ОС?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
10.05.2024, 19:33
Цитата Сообщение от ay007 Посмотреть сообщение
что и каким образом может спорадически менять скорость обмена на 50 %, кроме ОС?
0. Само железо.
1. Кривой/тормознутый драйвер, причём, необязательно от этой железки.
1
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,601
10.05.2024, 19:52
Ну так если драйвера или железо кривые, то эту кривость можно выявить у себя в кабинете, не трогая комп, управляющий оборудованием.

Цитата Сообщение от ay007 Посмотреть сообщение
я неоднократно сталкивался с подвисанием соединения по USB
У меня USB<->RS-485 преобразователь работает без извлечения как бы с конца 2018-го года и за это время не было ни одной проблемы с ним. Правда, поскольку он размером с флешку, а не какой-нибудь длинный шнур, в который засунут собственно преобразователь, то и проблем с контактом у него нет. В остальном же, если речь идет о тестировании с разным оборудованием, то надежность особого значения не имеет, требуется только убедится, что проблема не в том железе, которое вы воткнули. Ну и сами разъемы USB должны быть надежными, а бывают всякие.

BTW драйвер у меня для нее стоит от Win7 на Win10, т. к. с тем, который я под Win10 нашел у меня вообще ничего не заработало. Хорошенькое было дело за день до отпуска отдавать сервак на переустановку ОС, т. к. под Win7 больше не было доступа к компу из заводской сети и проверять драйвер для нее. Малотиражная хрень она такая.
0
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
10.05.2024, 21:24
Мдя что сказать, так чтобы не забанили.... на третий день мы узнаем автор электронщик и внятное ТЗ.....

Времена CNC на винде умерли с выходом висты. то что работает на 7-10 это скорее исключение.

причина показана на картинке. обработка стека событий. утрировано но все еще намного хуже....( учет приоритетов и колец)



Время для юзера выделяется по остаточному принцыпу. Все знаем резкие фризы на пустом месте....

режим совместимости - поставь виртуалку накати ХР и что будет? совместимость тоже самое.

а на тему усб. нужно правильные микросхемы брать. да и платку самому с учетом ЭМС-а разводить. да и раземы с корпусом и питаловом тоже.

и Вам внятно сказали две программы одна на один порт вторая на другой. одна имитирует посылки прибора. вторая просто принимает. поставте на полчаса. и посмотрите скока доедет а сколько потеряется. если потерь нет тогда уже и протокол можно прикрутить. делов то на час.

правильный чип для усб.
DS_FT232R.pdf

винимельно читаем APPNOTE особенно про 485....

А то ситуация - у меня в цехе 8 метров ДЕШОВОГО кабла для связи на полу валяется. не ммогу понять чего когда варят связь падает.........
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
11.05.2024, 02:27
Цитата Сообщение от Beltar Посмотреть сообщение
Я бы при таких таймерах, скорее всего, слал не по таймеру, а по факту приема или таймаута.
+100500
Цитата Сообщение от ay007 Посмотреть сообщение
Таймер (20 или 50 мс) предназначен для инициализации посылки следующего пакета, если предыдущий пришел с ошибкой.
Это бред при работе с ОС Windows.
Цитата Сообщение от ay007 Посмотреть сообщение
Программа управляет Установкой автоматической сварки внут...
Этой установкой должен управлять микропроцессор реального времени, с которым ваш компьютер может общаться по любому протоколу. Это единственно рабочий вариант. Примите и прочь.
2
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
11.05.2024, 06:29
Цитата Сообщение от northener Посмотреть сообщение
Это единственно рабочий вариант. Примите и прочь.
Эээээээ.... Ну зачемже так сразу. А какже полет мысли, взрыв фантазии, гениальные озарения и творческие муки.... Да изысканный секс в конце концов.... правда не такой
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
11.05.2024, 09:29  [ТС]
Коллеги, первая установка разрабатывалась в 2004 году, вторая и третья на опыте первой - в 2011. Вторая без вопросов работает и сейчас, третью, которая работает в режиме 12-24/7, неоднократно модернизировали, что потребовало увеличение производительности ПК и, как следствие, его замену, что, в свою очередь, и вызвало обсуждаемую проблему с Win 11.

Поэтому предложения типа "С этой установкой должен управлять микропроцессор реального времени" и пр. на мой взгляд абсолютно верные, но абсолютно неприменимые в обсуждаемой ситуации. Никто не будет останавливать Установку на модернизацию системы управления только из-за того, что ПО не смогли адаптировать под Win 11. Да и принцип построения системы управления, на мой взгляд, себя неплохо показал. С точки зрения эксплуатанта, конечно - вопросов к Установке достаточно, но стабильность и предсказуемость управления, отсутствие ложных срабатываний и пр. сомнений не вызывает.

2 northener, Вы наверное прочитали, что в обсуждаемой программе в случае приема ответного пакета, запрос формируется и отсылается сразу по окончанию обработки принятого пакета, т.е. именно так, как написал Beltar
Я бы при таких таймерах, скорее всего, слал не по таймеру, а по факту приема или таймаута.
Таймер же используется в случае, когда ответ не принят, т.е. как счетчик таймаута.

Поэтому поясните, пожалуйста, Ваше утверждение
Это бред при работе с ОС Windows.
0
Эксперт .NET
 Аватар для Rius
13683 / 7863 / 1702
Регистрация: 25.05.2015
Сообщений: 23,874
Записей в блоге: 14
11.05.2024, 10:14
Цитата Сообщение от ay007 Посмотреть сообщение
Поэтому поясните, пожалуйста, Ваше утверждение
Это бред при работе с ОС Windows.
Винда такие маленькие интервалы точно не отсчитывает. Вы говорите ей 20, а она выдаст от 20 до 1000, например. Потому что не RTOS. Вы этого можете и не заметить, если спроектировано с учётом особенностей винды.

А ещё трындец может подкрасться с другой стороны.
Если в программе используются задержки менее 15 мс, например Sleep(1 мс), то программа может с ними работать нормально, а может и глючить. В зависимости от того, был ли запущен браузер Chrome (но не только).
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
11.05.2024, 10:44
Проще всего само управление на Arduino сделать. А с Arduino общаться стандартно через USB.
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,601
11.05.2024, 10:48
Цитата Сообщение от stalkernet Посмотреть сообщение
не ммогу понять чего когда варят связь падает.........
У меня в цеху надежность связи по RS-485 92-93% всего. :P Просто в моем случае данные только собираются, и это терпимо.

Цитата Сообщение от Rius Посмотреть сообщение
Винда такие маленькие интервалы точно не отсчитывает. Вы говорите ей 20, а она выдаст от 20 до 1000, например. Потому что не RTOS.
Игры под винду вполне могут идти на 1000 fps. Т. е. технически возможно считать с точностью до миллисекунды и больше, если по циклам CPU. И если вы бросите на форму таймер, то он вам отсчитает согласно некой минимальной дискретности времени ОС. Проблема в том, что всё это в некоем идеальном мире, в котором ничто не может помешать процессу извне. В этом плане винда не ОСРВ, а просто система достаточно быстрая, когда ничего плохого не происходит. Я жму клавиши - буквы сразу появляются, я играю в игру - реакция сразу, и кадры рендерятся, если у меня включен VSync, то рендерятся они с опред частотой. И она, более-менее, держится но если сложность кадров будет резко меняться, то некоторые отклонения от заданной частоты будут. Для бытового применения это допустимо.

Конкретно по таймеру, я попробовал сейчас 2 таймера, один 20 мс, другой 5000. Посчитать число срабатываний 1-го, в идеале д/б 250. На практике 155. Для 50 мс 77-79. В общем, дискретность 55 мс. Я думал, что будет хотя бы 10, я никогда меньше 100 мс не ставил. Если у вас надежность связи процентов 99, вы в вашей задаче этого тоже не заметите, раз у вас таймер только на перезапуск.

Стояли бы нормальные контроллеры этой проблемы бы не было. Контроллеры, они хотя бы от мира изолированы, в них не крутится миллион процессов, их не грохнет, пришедший из корпоративной сети вирус.

Вообще, в плане долговременных индустриальных проектов винда - это тот еще п**** в условиях раздолбайских реалий, потому что те же SCADA-системы могут быть мегачувствительны к версии ОС, и ситуация, когда сделали на XP или 2003 Server, а сейчас и компов-то нет, на которые можно поставить, вполне реальна, ну и надежность 4-го пенька с хранения сейчас вызывает вопросы, т. е. нужно брать проект и переделывать под новую версию SCADA и новую ОС. Ой, а исходники проекта в свое время не передали.
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
11.05.2024, 12:10  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Винда такие маленькие интервалы точно не отсчитывает. Вы говорите ей 20, а она выдаст от 20 до 1000, например. Потому что не RTOS. Вы этого можете и не заметить, если спроектировано с учётом особенностей винды.
Согласен, что в обсуждаемом случае при отсутствии ответов таймер будет срабатывать не чаще, чем раз в 20 мс (1000 мс - это ну очень уж редкий случай). Но, как уже писал выше, таймер используется только для возобновления связи (посылки инициализирующего запроса) в случае отсутствия приема ответа). Т.к. такие события (отсутствие ответа) редки, то через какое точно время произойдет возобновление обмена большого значения для меня не имеет.

И да, проверил на программе с обменом. построенным по такому принципу (Win 7, Delphi 7):

При отсутствии ответа (когда запросы посылаются по таймеру):

Timer0.Interval:=10; - 65 об/с;
Timer0.Interval:=20; - 33 об/с;
Timer0.Interval:=50; - 16 об/с;

Меня устраивает.

Добавлено через 9 минут
Цитата Сообщение от Beltar Посмотреть сообщение
У меня в цеху надежность связи по RS-485 92-93% всего. :P Просто в моем случае данные только собираются, и это терпимо.
В наших разработках надежность, пожалуй, выше. Только в случае высоковольтных испытаний заметны сбои. Может потому, что мощность помех невысока и линии не длинные. Но нагреватели печей (20 кВт) с симистоным управлением нормально работают от контроллеров с такой же системой управления.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
11.05.2024, 13:19
Цитата Сообщение от ay007 Посмотреть сообщение
Timer0.Interval:=10; - 65 об/с;
Timer0.Interval:=20; - 33 об/с;
Timer0.Interval:=50; - 16 об/с;
Дискретность таймера - 15,625 мс. Отсюда, что 10, что 15 вы задали, задержка будет 15,625 мс, и примерно 64 срабатываний в секунду. Ну и т.д. Если устраивает, тогда ладно.
1
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
11.05.2024, 17:44
Цитата Сообщение от ay007 Посмотреть сообщение
по такому принципу (Win 7, Delphi 7):
А как же вЫнь11?????

А вот таку херню что событие от таймера должно еще доехать и встать в очередь, а потом еще и дойти до обработки. забЫли или забИли??? Простой пример. в первом случае - пока процедура не закончится. события от таймера на обработку не доходят. во втором пока в таймере не закончится новой не обрабатывается. Вобщем событие не прерывание а не понятно что. вобщем .....

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, system.Diagnostics;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
  public
    SW: TStopWatch;
    SW2: TStopWatch;
    TmsCnt: uint32;
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
function LongMathFnx(n: integer): extended;
begin
if n > 1
then LongMathFnx := n + sin(0.001 * n) / sqr(cos(0.001 * n)) + LongMathFnx(n-2) + LongMathFnx(n-1) // функция вызывает сама себя
else LongMathFnx := n + sin(0.001 * n) / sqr(cos(0.001 * n));
end;
 
function DecodeStWtTime(var inrec : TStopwatch): string;
var
 clk, h, min, sec, msec : integer;
 s :string;
begin
 H := inrec.Elapsed.Hours;
 Min := inrec.Elapsed.Minutes;
 Sec := inrec.Elapsed.Seconds;
 MSec := inrec.Elapsed.Milliseconds;
 if h < 10 then s := '0' +  h.ToString
 else s := h.ToString;
 result := s + ':';
 if min < 10 then s := '0' + min.ToString
 else s := min.ToString;
 result := result + s + ':';
 if sec < 10 then s := '0' +  sec.ToString
 else s := sec.ToString;
 result := result + s + ':';
 if msec < 10 then s := '00' + msec.ToString
 else begin
  if msec < 100 then s := '0' + msec.ToString
  else s := msec.ToString;
 end;
 result := result + s;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var i: uint32;
begin
 SW := TStopWatch.Create;
 SW.Reset;
 TmsCnt := 0;
 timer1.Enabled := not Timer1.Enabled;
 for I := 1 to 37 do begin
var x := LongMathFnx(i);
  memo1.Lines.Add('N ' + i.ToString +' >> '+ x.ToString);
 end;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 SW2 := TStopWatch.Create;
 SW2.Reset;
 TmsCnt := 0;
 timer2.Enabled := not Timer2.Enabled;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 TmsCnt := TmsCnt + 1;
 if TmsCnt = 500 then begin
  Timer1.Enabled := false;
  Memo1.Lines.SaveToFile('log1');
 end;
 SW.Stop;
 memo1.lines.Add('Cnt ' + TmsCnt.ToString +' >> '+ DecodeStWtTime(SW));
 SW.Reset;
 SW.Start;
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  TmsCnt := TmsCnt + 1;
 if TmsCnt = 38 then begin
  Timer2.Enabled := false;
  Memo2.Lines.SaveToFile('log2');
 end;
var x := LongMathFnx(TmsCnt); 
 SW2.Stop;
 memo2.lines.Add('Cnt ' + TmsCnt.ToString +' >> '+ DecodeStWtTime(SW2) +' >> '+ x.ToString);
 SW2.Reset;
 SW2.Start;
end;
 
end.
Добавлено через 4 минуты
таймерами сами можете поигратся.
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
11.05.2024, 18:34  [ТС]
Перевел обмен на СОМ1, встроенный в материнку, различий с обменом через плату-расширитель не заметил.

Еще обратил внимание, что когда в Диспетчере задач обсуждаемая программа висит в топе по загрузке ЦП (типа первое или второе место) при общей загрузке ЦП около 7 %, то скорость обмена почти постоянна и почти максимальна.

Когда скорость обмена падает, то в топе оказывается какая-то левая программа (например, msedgewebview2.exe, запущенная от моего имени, хотя я ее не запускал) и загрузка ЦП возрастает до 15 %. Поэтому возвращаюсь к изначальному вопросу: как оптимизировать Win 11? Что прочитал отключил, но этого не хватает.

И да. когда убрал Idle режим процессора, загрузка возросла до 100 %, но скорость обмена наоборот упала. Пришлось возвращать обратно.

2 stalkernet Про TStopWatch почитаю, пользоваться не приходилось.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
11.05.2024, 18:44
Цитата Сообщение от ay007 Посмотреть сообщение
msedgewebview2.exe, запущенная от моего имени, хотя я ее не запускал
А если её снять, то скорость обмена остаётся низкой?
0
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 35
11.05.2024, 19:00  [ТС]
2 stalkernet Я правильно понимаю, что Вы предлагаете вместо посылки инициализирующего запроса по таймеру использовать по посылку запроса по StopWatch? При этом, как в Вашем, так и в моем случаях факт приема ответа служит основанием для посылки очередного запроса.

Разницы только в том, что я вызываю событие OnTimer, которое может долго обрабатываться, а Вы сразу посылаете запрос.

Ок, подумаю.

Добавлено через 3 минуты
Цитата Сообщение от AzAtom Посмотреть сообщение
А если её снять, то скорость обмена остаётся низкой?
Тут странно получается: когда через Диспетчер задач Завершить процесс, то с изумлением увидел, что процессов стало два (две строчки). Повторил - процессов стало три, затем четыре. Когда их стало пять, я вышел из своей программы и перезагрузил Win. Обсуждаемого процесса не стало, скорость - обычная.
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,601
11.05.2024, 19:08
Цитата Сообщение от ay007 Посмотреть сообщение
использовать по посылку запроса по StopWatch?
А как вы это сделаете без перманентного вызывания ElapsedTime, или как-там-этот-метод-называется? У вас поток будет на 100% загружен, или Sleep совать, но порт явно работает в главном потоке и вынести его не выйдет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.05.2024, 19:08

Отправка запроса на прибор через сом-порт
Имеется прибор, который пишет наклоны, т.е. наклономер. Он выдает результаты по запросу. Есть протокол обмена данными. Вот, например, ...

Не работает СОМ порт RS-232 через PCI Express
Добрый день коллеги! Возникла проблема, а именно: имею старый газоанализатор, который подключается посредством СОМ порта. Есть компьютер...

Передача пакета по протоколу ОВЕН через СОМ порт
задача такая. Я должна сделать скаду-систему контоля микроклимата. Т.е. я как пользователь, задаю параметры работы (т.е. устанавливаю мин...

Как запустить купюроприемник для теста через сом порт ?
подскажите если кто знает,некогда не сталкивался с ком портом. Не знаю его процесс активации.

Код программы на С# для управления прибором через СОМ-порт
Помогите пожалуйста найти образец программы на С# для управления прибором (например источником питания) через СОМ-порт.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru